/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Reconstruction/TofRec/TofRec-00-04-46/src/TofRecTDS.cxx

Go to the documentation of this file.
00001 #include "GaudiKernel/MsgStream.h"
00002 #include "GaudiKernel/ISvcLocator.h"
00003 #include "GaudiKernel/IDataProviderSvc.h"
00004 #include "GaudiKernel/Bootstrap.h"
00005 #include "GaudiKernel/IMessageSvc.h"
00006 #include "GaudiKernel/StatusCode.h"
00007 #include "GaudiKernel/SmartDataPtr.h"
00008 #include "ReconEvent/ReconEvent.h"
00009 #include "TofRecEvent/RecTofTrack.h"
00010 #include "TofRecEvent/RecBTofCalHit.h"
00011 #include "TofRecEvent/RecETofCalHit.h"
00012 #include "TofRec/TofTrack.h"
00013 #include "TofRec/TofRecTDS.h"
00014 
00015 StatusCode TofRecTDS::InitializeTDS() {
00016   if( RegisterReconEvent() == StatusCode::FAILURE ) return StatusCode::FAILURE;
00017   if( RegisterNullRecTofTrackCol() == StatusCode::FAILURE ) return StatusCode::FAILURE;
00018   return StatusCode::SUCCESS;
00019 }
00020 
00021 
00022 StatusCode TofRecTDS::RegisterNullRecTofTrackCol() {
00023   IMessageSvc* msgSvc;
00024   Gaudi::svcLocator()->service("MessageSvc", msgSvc);
00025   MsgStream log(msgSvc, "TofRecTDS");
00026   log << MSG::INFO << "Initialize: TofRecTDS::RegisterNullRecTofTrack()" << endreq;
00027 
00028   IDataProviderSvc* eventSvc;
00029   Gaudi::svcLocator()->service("EventDataSvc", eventSvc);
00030 
00031   RecTofTrackCol* recTofTrackCol = new RecTofTrackCol;
00032 
00033 // Check whether the RecTofTrackCol has been registered.
00034   StatusCode sc;
00035   DataObject *aRecTofTrackCol;
00036   eventSvc->findObject( "/Event/Recon/RecTofTrackCol", aRecTofTrackCol );
00037   if( aRecTofTrackCol != NULL ) {
00038     sc = eventSvc->unregisterObject( "/Event/Recon/RecTofTrackCol" );
00039     if( sc != StatusCode::SUCCESS ) {
00040       log << MSG::FATAL << "Initialize: Could not unregister RecTofTrack collection!" << endreq;
00041       delete recTofTrackCol;
00042       return StatusCode::FAILURE;
00043     }
00044   }
00045   delete aRecTofTrackCol;
00046 
00047   sc = eventSvc->registerObject("/Event/Recon/RecTofTrackCol", recTofTrackCol);
00048   if( sc != StatusCode::SUCCESS ) {
00049     log << MSG::FATAL << "Initialize: TofRec could not register Null Rec TOF track collection!" << endreq;
00050     delete recTofTrackCol;
00051     return StatusCode::FAILURE;
00052   }
00053 
00054   return StatusCode::SUCCESS;
00055 }
00056 
00057 
00058 StatusCode TofRecTDS::RegisterTDS( int runNumber, int eventNumber, std::vector<TofTrack*>*& tofTrackVec, bool forCalibration, std::string calibData ) {
00059   //  if( RegisterReconEvent() == StatusCode::FAILURE ) return StatusCode::FAILURE;
00060   if( RegisterRecTofTrackCol( tofTrackVec ) == StatusCode::FAILURE ) return StatusCode::FAILURE;
00061   if( forCalibration ) {
00062     if( RegisterRecBTofCalHitCol( runNumber, eventNumber, tofTrackVec, calibData ) == StatusCode::FAILURE ) return StatusCode::FAILURE;
00063     if( RegisterRecETofCalHitCol( runNumber, eventNumber, tofTrackVec, calibData ) == StatusCode::FAILURE ) return StatusCode::FAILURE;
00064   }
00065   return StatusCode::SUCCESS;
00066 }
00067 
00068 
00069 StatusCode TofRecTDS::RegisterReconEvent() {
00070   IMessageSvc* msgSvc;
00071   Gaudi::svcLocator()->service("MessageSvc", msgSvc);
00072   MsgStream log(msgSvc, "TofRecTDS");
00073 
00074   IDataProviderSvc* eventSvc;
00075   Gaudi::svcLocator()->service("EventDataSvc", eventSvc);
00076 
00077 // Register Reconstructed Track To TDS
00078   DataObject *aReconEvent ;
00079   eventSvc->findObject("/Event/Recon",aReconEvent);
00080   if(aReconEvent==NULL) {
00081     log << MSG::INFO << "TofRecTDS::RegisterReconEvent()" << endreq;
00082     aReconEvent = new ReconEvent();
00083     StatusCode sc = eventSvc->registerObject("/Event/Recon",aReconEvent);
00084     if(sc!=StatusCode::SUCCESS) {
00085       log << MSG::FATAL << "TofRec could not register ReconEvent!" <<endreq;
00086       return StatusCode::FAILURE;
00087     }
00088   } 
00089   return StatusCode::SUCCESS;
00090 }
00091 
00092 
00093 StatusCode TofRecTDS::RegisterRecTofTrackCol( std::vector<TofTrack*>*& tofTrackVec ) {
00094   IMessageSvc* msgSvc;
00095   Gaudi::svcLocator()->service("MessageSvc", msgSvc);
00096   MsgStream log(msgSvc, "TofRecTDS");
00097   log << MSG::INFO << "TofRecTDS::RegisterRecTofTrack()" << endreq;
00098 
00099   IDataProviderSvc* eventSvc;
00100   Gaudi::svcLocator()->service("EventDataSvc", eventSvc);
00101 
00102   RecTofTrackCol* recTofTrackCol = new RecTofTrackCol;
00103 
00104   std::vector<TofTrack*>::iterator iter = tofTrackVec->begin();
00105   for( ; iter < tofTrackVec->end(); iter++ ) {
00106     (*iter)->convert2RecTofTrackCol( recTofTrackCol );
00107   }
00108 
00109 // Check whether the RecTofTrackCol has been registered.
00110   StatusCode sc;
00111   DataObject *aRecTofTrackCol;
00112   eventSvc->findObject( "/Event/Recon/RecTofTrackCol", aRecTofTrackCol );
00113   if( aRecTofTrackCol != NULL ) {
00114 
00115     sc = eventSvc->unregisterObject( "/Event/Recon/RecTofTrackCol" );
00116 
00117     delete aRecTofTrackCol;
00118 
00119     if( sc != StatusCode::SUCCESS ) {
00120       log << MSG::FATAL << "Could not unregister RecTofTrack collection!" << endreq;
00121 
00122       RecTofTrackCol::iterator iter_tof = recTofTrackCol->begin();
00123       for( ; iter_tof!=recTofTrackCol->end(); iter_tof++ ) {
00124         delete (*iter_tof);
00125       }
00126       recTofTrackCol->clear();
00127       delete recTofTrackCol;
00128 
00129       std::vector<TofTrack*>::iterator iter_data = tofTrackVec->begin();
00130       for( ; iter_data!=tofTrackVec->end(); iter_data++ ) {
00131         delete (*iter_data);
00132       }
00133       tofTrackVec->clear();
00134       delete tofTrackVec;
00135 
00136       return StatusCode::FAILURE;
00137     }
00138   }
00139 
00140   sc = eventSvc->registerObject("/Event/Recon/RecTofTrackCol", recTofTrackCol);
00141   if( sc != StatusCode::SUCCESS ) {
00142     log << MSG::FATAL << "TofRec could not register Rec TOF track collection!" << endreq;
00143     RecTofTrackCol::iterator iter_tof = recTofTrackCol->begin();
00144     for( ; iter_tof!=recTofTrackCol->end(); iter_tof++ ) {
00145       delete (*iter_tof);
00146     }
00147     recTofTrackCol->clear();
00148     delete recTofTrackCol;
00149     return StatusCode::FAILURE;
00150   }
00151 
00152   return StatusCode::SUCCESS;
00153 }
00154 
00155 
00156 StatusCode TofRecTDS::RegisterRecBTofCalHitCol( int runNumber, int eventNumber, std::vector<TofTrack*>*& tofTrackVec, std::string m_calibData ) {
00157   IMessageSvc* msgSvc;
00158   Gaudi::svcLocator()->service("MessageSvc", msgSvc);
00159   MsgStream log(msgSvc, "TofRecTDS");
00160   log << MSG::INFO << "TofRecTDS::RegisterRecBTofCalHitCol()" << endreq;
00161 
00162   IDataProviderSvc* eventSvc;
00163   Gaudi::svcLocator()->service("EventDataSvc", eventSvc);
00164 
00165   RecBTofCalHitCol* recBTofCalHitCol = new RecBTofCalHitCol;
00166 
00167   std::vector<TofTrack*>::iterator iter = tofTrackVec->begin();
00168   for( ; iter < tofTrackVec->end(); iter++ ) {
00169     ExtTrackCase hitcase = (*iter)->hitCase();
00170     //    if( ( hitcase == InnerLayer ) || ( hitcase == OuterLayer ) || ( hitcase == DoubleLayer ) ) {
00171     if( ( hitcase == InnerLayer ) || ( hitcase == DoubleLayer ) ) {
00172       (*iter)->convert2RecBTofCalHitColBarrel( runNumber, eventNumber, recBTofCalHitCol, m_calibData );
00173     }
00174     if( ( hitcase == EastEndcapMRPC ) || ( hitcase == WestEndcapMRPC ) ) {
00175       (*iter)->convert2RecBTofCalHitColETF( runNumber, eventNumber, recBTofCalHitCol, m_calibData );
00176     }
00177   }
00178 
00179 // Check whether the RecBTofCalHitCol has been registered.
00180   StatusCode scb;
00181   DataObject *aRecBTofCalHitCol;
00182   eventSvc->findObject( "/Event/Recon/RecBTofCalhitCol", aRecBTofCalHitCol );
00183   if( aRecBTofCalHitCol != NULL ) {
00184     scb = eventSvc->unregisterObject( "/Event/Recon/RecBTofCalHitCol" );
00185     if( scb != StatusCode::SUCCESS ) {
00186       log << MSG::FATAL << "Could not unregister RecBTofCalHit collection!" << endreq;
00187 
00188       RecBTofCalHitCol::iterator iter_btof = recBTofCalHitCol->begin();
00189       for( ; iter_btof!=recBTofCalHitCol->end(); iter_btof++ ) {
00190         delete (*iter_btof);
00191       }
00192       recBTofCalHitCol->clear();
00193       delete recBTofCalHitCol;
00194 
00195       std::vector<TofTrack*>::iterator iter_data = tofTrackVec->begin();
00196       for( ; iter_data!=tofTrackVec->end(); iter_data++ ) {
00197         delete (*iter_data);
00198       }
00199       tofTrackVec->clear();
00200       delete tofTrackVec;
00201 
00202       return StatusCode::FAILURE;
00203     }
00204   }
00205 
00206   StatusCode sh1 = eventSvc->registerObject("/Event/Recon/RecBTofCalHitCol", recBTofCalHitCol);
00207   if(sh1!=StatusCode::SUCCESS) {
00208     log << MSG::FATAL << "TofRec could not register BTOF CalHit collection!!" << endreq;
00209     RecBTofCalHitCol::iterator iter_btof = recBTofCalHitCol->begin();
00210     for( ; iter_btof!=recBTofCalHitCol->end(); iter_btof++ ) {
00211       delete (*iter_btof);
00212     }
00213     recBTofCalHitCol->clear();
00214     delete recBTofCalHitCol;
00215     return StatusCode::FAILURE;
00216   }
00217 
00218   return StatusCode::SUCCESS;
00219 }
00220 
00221   
00222 StatusCode TofRecTDS::RegisterRecETofCalHitCol( int runNumber, int eventNumber, std::vector<TofTrack*>*& tofTrackVec, std::string m_calibData ) {
00223   IMessageSvc* msgSvc;
00224   Gaudi::svcLocator()->service("MessageSvc", msgSvc);
00225   MsgStream log(msgSvc, "TofRecTDS");
00226   log << MSG::INFO << "TofRecTDS::RegisterRecETofCalHitCol()" << endreq;
00227 
00228   IDataProviderSvc* eventSvc;
00229   Gaudi::svcLocator()->service("EventDataSvc", eventSvc);
00230 
00231   //sunss add 08/10/16
00232 
00233   if( tofTrackVec->size() != 2 ) return StatusCode::SUCCESS;
00234   std::vector<TofTrack*>::iterator iter1 = tofTrackVec->begin();
00235   std::vector<TofTrack*>::iterator iter2 = iter1+1;
00236   if( (*iter1)->tdc1() < 0.0 || (*iter2)->tdc1() < 0.0 ) return StatusCode::SUCCESS;
00237   if( abs( (*iter1)->tdc1() - (*iter2)->tdc1() ) > 2.0 ) return StatusCode::SUCCESS;
00238 
00239   //sunss add 08/10/16
00240 
00241   RecETofCalHitCol* recETofCalHitCol = new RecETofCalHitCol;
00242 
00243   std::vector<TofTrack*>::iterator iter = tofTrackVec->begin();
00244   for( ; iter < tofTrackVec->end(); iter++ ) {
00245     ExtTrackCase hitcase = (*iter)->hitCase();
00246     if( ( hitcase == EastEndcap ) || ( hitcase == WestEndcap ) ) {
00247       (*iter)->convert2RecETofCalHitCol( runNumber, eventNumber, recETofCalHitCol, m_calibData );
00248     }
00249   }
00250 
00251 // Check whether the RecETofCalHitCol has been registered.
00252   StatusCode sce;
00253 
00254   DataObject *aRecETofCalHitCol;
00255   eventSvc->findObject( "/Event/Recon/RecETofCalhitCol", aRecETofCalHitCol );
00256   if( aRecETofCalHitCol != NULL ) {
00257     sce = eventSvc->unregisterObject( "/Event/Recon/RecETofCalHitCol" );
00258     if( sce != StatusCode::SUCCESS ) {
00259       log << MSG::FATAL << "Could not unregister RecETofCalHit collection!" << endreq;
00260 
00261       RecETofCalHitCol::iterator iter_etof = recETofCalHitCol->begin();
00262       for( ; iter_etof!=recETofCalHitCol->end(); iter_etof++ ) {
00263         delete (*iter_etof);
00264       }
00265       recETofCalHitCol->clear();
00266       delete recETofCalHitCol;
00267 
00268       std::vector<TofTrack*>::iterator iter_data = tofTrackVec->begin();
00269       for( ; iter_data!=tofTrackVec->end(); iter_data++ ) {
00270         delete (*iter_data);
00271       }
00272       tofTrackVec->clear();
00273       delete tofTrackVec;
00274 
00275       return StatusCode::FAILURE;
00276     }
00277   }
00278 
00279   StatusCode sh2 = eventSvc->registerObject("/Event/Recon/RecETofCalHitCol",recETofCalHitCol);
00280   if(sh2!=StatusCode::SUCCESS) {
00281     log << MSG::FATAL << "TofRec could not register ETOF CalHit collection!!" << endreq;
00282     RecETofCalHitCol::iterator iter_etof = recETofCalHitCol->begin();
00283     for( ; iter_etof!=recETofCalHitCol->end(); iter_etof++ ) {
00284       delete (*iter_etof);
00285     }
00286     recETofCalHitCol->clear();
00287     delete recETofCalHitCol;
00288     return StatusCode::FAILURE;
00289   }
00290 
00291   return StatusCode::SUCCESS;
00292 }

Generated on Tue Nov 29 23:14:11 2016 for BOSS_7.0.2 by  doxygen 1.4.7