TofEnergyCalib Class Reference

#include <TofEnergyCalib.h>

List of all members.

Public Member Functions

 TofEnergyCalib (const std::string &name, ISvcLocator *pSvcLocator)
StatusCode initialize ()
StatusCode execute ()
StatusCode finalize ()

Private Attributes

NTuple::Tuple * m_tuple
NTuple::Item< long > m_npart
NTuple::Item< long > m_number
NTuple::Item< double > m_adc1
NTuple::Item< double > m_adc2
NTuple::Item< double > m_tdc1
NTuple::Item< double > m_tdc2
NTuple::Item< double > m_zpos
NTuple::Item< double > m_length
NTuple::Item< double > m_energy
NTuple::Item< double > m_length_ext
NTuple::Item< double > m_energy_ext
NTuple::Item< double > m_ztdc
NTuple::Item< double > m_q
int m_event
bool m_isData


Detailed Description

Definition at line 8 of file TofEnergyCalib.h.


Constructor & Destructor Documentation

TofEnergyCalib::TofEnergyCalib ( const std::string name,
ISvcLocator *  pSvcLocator 
)

Definition at line 48 of file TofEnergyCalib.cxx.

References m_event, m_isData, and m_tuple.

00048                                                                               :
00049   Algorithm(name, pSvcLocator) {
00050 
00051     m_tuple = 0;
00052     declareProperty("Event",          m_event = 0);
00053     declareProperty("IsData",           m_isData = true);
00054   }


Member Function Documentation

StatusCode TofEnergyCalib::execute (  ) 

Definition at line 97 of file TofEnergyCalib.cxx.

References TofData::adc(), ITofCaliSvc::BPh(), cos(), Bes_Common::DEBUG, calibUtil::ERROR, EventModel::EvtRec::EvtRecEvent, EventModel::EvtRec::EvtRecTrackCol, genRecEmupikp::i, Bes_Common::INFO, TofID::layer(), m_adc1, m_adc2, m_energy, m_energy_ext, m_event, m_length, m_length_ext, m_npart, m_number, m_q, m_tdc1, m_tdc2, m_tuple, m_zpos, m_ztdc, msgSvc(), TofID::phi_module(), tan(), TofData::tdc(), DstExtTrack::tof1Momentum(), DstExtTrack::tof1Path(), DstExtTrack::tof1Position(), DstExtTrack::tof1VolumeNumber(), DstExtTrack::tof2Momentum(), DstExtTrack::tof2Path(), DstExtTrack::tof2Position(), DstExtTrack::tof2VolumeNumber(), tofCaliSvc, IRawDataProviderSvc::tofDataVectorTof(), tofDigiSvc, tofQCorrSvc, tofQElecSvc, and ITofCaliSvc::ZTDC().

00097                                    {
00098 
00099   //if(m_event%1000==0) {
00100   //  std::cout << "TofEnergyCalib :: " << m_event <<" events executed" << std::endl;
00101   //}
00102 
00103   //StatusCode sc = StatusCode::SUCCESS;
00104 
00105   MsgStream log(msgSvc(), name());
00106   log << MSG::INFO << "in execute()" << endreq;
00107 
00108   SmartDataPtr<Event::EventHeader> eventHeader(eventSvc(),"/Event/EventHeader");
00109   int run = eventHeader->runNumber();
00110   int event = eventHeader->eventNumber();
00111   if(m_event%1000==0) {
00112     std::cout << m_event << "-------------TofEnergyCalib run,event: " << run << "," << event << std::endl;
00113   }
00114   m_event++;
00115 
00116   SmartDataPtr<EvtRecEvent> evtRecEvent(eventSvc(), EventModel::EvtRec::EvtRecEvent);
00117   SmartDataPtr<EvtRecTrackCol> evtRecTrkCol(eventSvc(),  EventModel::EvtRec::EvtRecTrackCol);
00118   //  log << MSG::INFO << "get event tag OK" << endreq;
00119   log << MSG::DEBUG <<"ncharg, nneu, tottks = "
00120     << evtRecEvent->totalCharged() << " , "
00121     << evtRecEvent->totalNeutral() << " , "
00122     << evtRecEvent->totalTracks() <<endreq;
00123 
00124   if(evtRecEvent->totalCharged() != 2) {
00125     return StatusCode::SUCCESS;
00126   }
00127 
00128   //Get TOF Raw Data Provider Service
00129   IRawDataProviderSvc* tofDigiSvc;
00130   StatusCode sc = service("RawDataProviderSvc", tofDigiSvc);
00131   if (sc !=  StatusCode::SUCCESS) { 
00132     log << MSG::ERROR << "TofRec Get Tof Raw Data Service Failed !! " << endreq;
00133     return StatusCode::SUCCESS;
00134   }
00135 
00136   //Get TOF Calibtration Service
00137   ITofCaliSvc* tofCaliSvc;
00138   StatusCode scc = service("TofCaliSvc", tofCaliSvc);       
00139   if (scc !=  StatusCode::SUCCESS) {
00140     log << MSG::ERROR << "TofRec Get Calibration Service Failed !! " << endreq;
00141     return StatusCode::SUCCESS;
00142   }
00143   //tofCaliSvc->Dump();
00144 
00145   ITofQCorrSvc* tofQCorrSvc;
00146   sc = service("TofQCorrSvc", tofQCorrSvc);       
00147   if (sc !=  StatusCode::SUCCESS) {
00148     log << MSG::ERROR << "TofRec Get QCorr Service Failed !! " << endreq;
00149     return StatusCode::SUCCESS;
00150   }
00151 
00152   ITofQElecSvc* tofQElecSvc;
00153   sc = service("TofQElecSvc", tofQElecSvc);       
00154   if (sc !=  StatusCode::SUCCESS) {
00155     log << MSG::ERROR << "TofRec Get QElec Service Failed !! " << endreq;
00156     return StatusCode::SUCCESS;
00157   }
00158 
00159   // Retrieve Tof Digi Data
00160   std::vector<TofData*> tofDataVec;
00161   tofDataVec = tofDigiSvc->tofDataVectorTof();
00162   const unsigned int ADC_MASK = 0x00001FFF;
00163 
00164   for(int i = 0; i < evtRecEvent->totalCharged(); i++) {
00165     EvtRecTrackIterator itTrk = evtRecTrkCol->begin() + i;
00166 
00167     if(!(*itTrk)->isExtTrackValid()) continue;
00168     RecExtTrack *extTrk = (*itTrk)->extTrack();   //get extTrk
00169 
00170     if(!(*itTrk)->isTofTrackValid()) continue;
00171     //RecTofTrack *tofTrk = (*itTrk)->TofTrk();   //get tofTrk
00172 
00173     int npart, tof1, tof2;           //tof1, tof2 volume number
00174     Hep3Vector pos1, pos2;    //tof1, tof2 position
00175     Hep3Vector p1, p2;        //tof1, tof2 momentum;
00176 
00177     tof1 = extTrk->tof1VolumeNumber();
00178     tof2 = extTrk->tof2VolumeNumber();
00179 
00180     //cout<<"tof1="<<tof1<<"\ttof2="<<tof2<<endl;
00181 
00182     if(tof1>=0 && tof1<88 && tof2>=88 && tof2<176) {   //barrel
00183       npart = 1;
00184     } else if(tof1>=176 && tof1<224) {   //west endcap
00185       tof1 -= 176;
00186       npart = 2;
00187     } else if(tof1>=224 && tof1<272) {   //east endcap
00188       tof1 -= 224;
00189       npart = 0;
00190     } else {
00191       continue;
00192     }
00193 
00194     pos1 = extTrk->tof1Position();
00195     pos2 = extTrk->tof2Position();
00196 
00197     p1 = extTrk->tof1Momentum();
00198     p2 = extTrk->tof2Momentum();
00199 
00200     double zpos1=0, zpos2=0, l1=0, l2=0, lext=0;
00201     double z1, xy1, z2, xy2;
00202 
00203     if(npart==1) {    //barrel
00204       //calculate tof direction
00205       const double tofDPhi = CLHEP::twopi / 88.;
00206       double tofPhi1 = tof1*tofDPhi + tofDPhi/2;
00207       double tofPhi2 = (tof2-88)*tofDPhi;
00208 
00209       //retrive ext direction
00210       double extTheta1, extTheta2, extPhi1, extPhi2;
00211       extTheta1 = pos1.theta();
00212       extTheta2 = pos2.theta();
00213       extPhi1 = pos1.phi();
00214       extPhi2 = pos2.phi();
00215 
00216       //calculate track length
00217       //double z1, xy1, z2, xy2;
00218       z1 = 5/tan(extTheta1);
00219       xy1 = 5/cos(extPhi1-tofPhi1);
00220       l1 = sqrt(z1*z1+xy1*xy1);
00221       z2 = 5/tan(extTheta2);
00222       xy2 = 5/cos(extPhi2-tofPhi2);
00223       l2 = sqrt(z2*z2+xy2*xy2);
00224       zpos1 = (pos1.z()+z1/2)/100;
00225       zpos2 = (pos2.z()+z2/2)/100;
00226 
00227       //track length in tof from extrapolation
00228       lext = extTrk->tof2Path()-extTrk->tof1Path();
00229     }
00230 
00231     else {    //endcap
00232       //retrive ext direction
00233       double extTheta1 = pos1.theta();
00234       //cout<<"extTheta1: "<<extTheta1<<"\t"<<cos(extTheta1)<<endl;
00235 
00236       //calculate track length
00237       l1 = 5./fabs(cos(extTheta1));
00238       zpos1 = (sqrt(pos1.x()*pos1.x()+pos1.y()*pos1.y())+5.*tan(extTheta1)/2)/100;
00239     }
00240 
00241     vector<TofData*>::iterator it;
00242 
00243     //if neighbors of extrapolated scintillator have hits, this event is abandoned
00244     for(it=tofDataVec.begin();
00245         it!=tofDataVec.end();
00246         it++) {
00247 
00248       Identifier idd((*it)->identify());
00249       int    layer        = TofID::layer(idd);
00250       int    im           = TofID::phi_module(idd);
00251       if(im+layer*88==tof1-1 || im+layer*88==tof1+1 ||
00252           im+layer*88==tof1-2 || im+layer*88==tof1+2) {
00253         //cout<<"return"<<endl;
00254         return StatusCode::SUCCESS;
00255       }
00256     }
00257 
00258     for(it=tofDataVec.begin();
00259         it!=tofDataVec.end();
00260         it++) {
00261 
00262       Identifier idd((*it)->identify());
00263       int    layer        = TofID::layer(idd);
00264       int    im           = TofID::phi_module(idd);
00265 
00266       double adc1,adc2,tdc1,tdc2,ztdc,tofq;
00267       if((*it)->barrel()) {
00268         TofData* bTofData = *it;
00269         tdc1 = bTofData->tdc1();
00270         tdc2 = bTofData->tdc2();
00271         adc1 = bTofData->adc1();
00272         adc2 = bTofData->adc2();
00273 
00274         ztdc = tofCaliSvc->ZTDC( tdc1, tdc2, bTofData->tofId() );
00275         tofq = tofCaliSvc->BPh( adc1, adc2, ztdc, bTofData->tofId());
00276         if(tofq<100||tofq>10000) continue;
00277 
00278         npart = 1;
00279         //cout<<"number="<<im+layer*88<<"\tq="<<m_q<<endl;
00280       } else {
00281         TofData* eTofData = *it;
00282         //m_adc0 = (int)(eTofData->adc())&ADC_MASK;
00283         adc1 = eTofData->adc();
00284         tdc1 = eTofData->tdc();
00285         npart = 2;
00286       }
00287 
00288       //if(!((*it)->barrel()) || ((*it)->barrel() && im+layer*88==tof1) ) 
00289       if(im+layer*88==tof1) {
00290         m_adc1 = adc1;
00291         m_adc2 = adc2;
00292         m_tdc1 = tdc1;
00293         m_tdc2 = tdc2;
00294         m_ztdc = ztdc;
00295         m_q = tofq;
00296         m_npart = npart;
00297         m_number = tof1;
00298         m_zpos = zpos1;
00299         m_length = l1;
00300         m_length_ext = lext;
00301         //m_energy = l1*8.9/50.;
00302         m_energy = l1*10.25/5.;
00303         m_energy_ext = lext*10.25/5.;
00304         //cout<<"zpos1="<<zpos1<<endl;
00305         m_tuple->write();
00306       } else if((*it)->barrel() && im+layer*88 == tof2) {
00307         m_adc1 = adc1;
00308         m_adc2 = adc2;
00309         m_tdc1 = tdc1;
00310         m_tdc2 = tdc2;
00311         m_ztdc = ztdc;
00312         m_q = tofq;
00313         m_npart = npart;
00314         m_number = tof2;
00315         m_zpos = zpos2;
00316         m_length = l2;
00317         m_length_ext = lext;
00318         //m_energy = l2*8.9/50.;
00319         m_energy = l2*10.25/5.;
00320         m_energy_ext = lext*10.25/5.;
00321         //cout<<"zpos2="<<zpos2<<endl;
00322         m_tuple->write();
00323       }
00324     }
00325 
00326   }
00327 
00328   return sc;
00329 }

StatusCode TofEnergyCalib::finalize (  ) 

Definition at line 333 of file TofEnergyCalib.cxx.

References Bes_Common::INFO, and msgSvc().

00333                                     {
00334 
00335   MsgStream log(msgSvc(), name());
00336   log << MSG::INFO << "in finalize()" << endmsg;
00337   return StatusCode::SUCCESS;
00338 }

StatusCode TofEnergyCalib::initialize (  ) 

Definition at line 57 of file TofEnergyCalib.cxx.

References calibUtil::ERROR, Bes_Common::INFO, m_adc1, m_adc2, m_energy, m_energy_ext, m_length, m_length_ext, m_npart, m_number, m_q, m_tdc1, m_tdc2, m_tuple, m_zpos, m_ztdc, msgSvc(), and ntupleSvc().

00057                                      {
00058   MsgStream log(msgSvc(), name());
00059 
00060   log << MSG::INFO << "in initialize()" << endmsg;
00061 
00062   StatusCode status;
00063   NTuplePtr nt(ntupleSvc(), "FILE1/dimu");
00064   if ( nt ) m_tuple = nt;
00065   else {
00066     m_tuple = ntupleSvc()->book ("FILE1/dimu", CLID_ColumnWiseTuple, "ks N-Tuple example");
00067     if ( m_tuple )    {
00068       status = m_tuple->addItem ("npart",  m_npart);
00069       status = m_tuple->addItem ("number", m_number);
00070       status = m_tuple->addItem ("adc1",   m_adc1);
00071       status = m_tuple->addItem ("adc2",   m_adc2);
00072       status = m_tuple->addItem ("tdc1",   m_tdc1);
00073       status = m_tuple->addItem ("tdc2",   m_tdc2);
00074       status = m_tuple->addItem ("zpos",   m_zpos);
00075       status = m_tuple->addItem ("length", m_length);
00076       status = m_tuple->addItem ("energy", m_energy);
00077       status = m_tuple->addItem ("lengthext", m_length_ext);
00078       status = m_tuple->addItem ("energyext", m_energy_ext);
00079       status = m_tuple->addItem ("ztdc",   m_ztdc);
00080       status = m_tuple->addItem ("q",     m_q);
00081     }
00082     else    { 
00083       log << MSG::ERROR << "    Cannot book N-tuple:" << long(m_tuple) << endmsg;
00084       return StatusCode::FAILURE;
00085     }
00086   }
00087   //
00088   //--------end of book--------
00089   //
00090 
00091   log << MSG::INFO << "successfully return from initialize()" <<endmsg;
00092   return StatusCode::SUCCESS;
00093 
00094 }


Member Data Documentation

NTuple::Item<double> TofEnergyCalib::m_adc1 [private]

Definition at line 20 of file TofEnergyCalib.h.

Referenced by execute(), and initialize().

NTuple::Item<double> TofEnergyCalib::m_adc2 [private]

Definition at line 21 of file TofEnergyCalib.h.

Referenced by execute(), and initialize().

NTuple::Item<double> TofEnergyCalib::m_energy [private]

Definition at line 26 of file TofEnergyCalib.h.

Referenced by execute(), and initialize().

NTuple::Item<double> TofEnergyCalib::m_energy_ext [private]

Definition at line 28 of file TofEnergyCalib.h.

Referenced by execute(), and initialize().

int TofEnergyCalib::m_event [private]

Definition at line 32 of file TofEnergyCalib.h.

Referenced by execute(), and TofEnergyCalib().

bool TofEnergyCalib::m_isData [private]

Definition at line 33 of file TofEnergyCalib.h.

Referenced by TofEnergyCalib().

NTuple::Item<double> TofEnergyCalib::m_length [private]

Definition at line 25 of file TofEnergyCalib.h.

Referenced by execute(), and initialize().

NTuple::Item<double> TofEnergyCalib::m_length_ext [private]

Definition at line 27 of file TofEnergyCalib.h.

Referenced by execute(), and initialize().

NTuple::Item<long> TofEnergyCalib::m_npart [private]

Definition at line 18 of file TofEnergyCalib.h.

Referenced by execute(), and initialize().

NTuple::Item<long> TofEnergyCalib::m_number [private]

Definition at line 19 of file TofEnergyCalib.h.

Referenced by execute(), and initialize().

NTuple::Item<double> TofEnergyCalib::m_q [private]

Definition at line 30 of file TofEnergyCalib.h.

Referenced by execute(), and initialize().

NTuple::Item<double> TofEnergyCalib::m_tdc1 [private]

Definition at line 22 of file TofEnergyCalib.h.

Referenced by execute(), and initialize().

NTuple::Item<double> TofEnergyCalib::m_tdc2 [private]

Definition at line 23 of file TofEnergyCalib.h.

Referenced by execute(), and initialize().

NTuple::Tuple* TofEnergyCalib::m_tuple [private]

Definition at line 17 of file TofEnergyCalib.h.

Referenced by execute(), initialize(), and TofEnergyCalib().

NTuple::Item<double> TofEnergyCalib::m_zpos [private]

Definition at line 24 of file TofEnergyCalib.h.

Referenced by execute(), and initialize().

NTuple::Item<double> TofEnergyCalib::m_ztdc [private]

Definition at line 29 of file TofEnergyCalib.h.

Referenced by execute(), and initialize().


Generated on Tue Nov 29 23:36:05 2016 for BOSS_7.0.2 by  doxygen 1.4.7