/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/EventFilter/HltUtilities/HltAlgorithms/HltAlgorithms-01-03-01/src/EFDetectorHits.cxx

Go to the documentation of this file.
00001 #include "GaudiKernel/MsgStream.h"
00002 //#include "GaudiKernel/AlgFactory.h"
00003 #include "GaudiKernel/SmartDataPtr.h"
00004 //#include "GaudiKernel/PropertyMgr.h"
00005 //#include "GaudiKernel/Bootstrap.h"
00006 //#include "GaudiKernel/IJobOptionsSvc.h"
00007 //#include "GaudiKernel/ISvcLocator.h"
00008 #include "EventModel/Event.h"
00009 #include "EventModel/EventHeader.h"
00010 #include "Identifier/Identifier.h"
00011 #include "EmcRawEvent/EmcDigi.h"
00012 #include "Identifier/EmcID.h"
00013 #include "TofRawEvent/TofDigi.h"
00014 #include "Identifier/TofID.h"
00015 #include "MdcRawEvent/MdcDigi.h"
00016 #include "Identifier/MdcID.h"
00017 #include "MucRawEvent/MucDigi.h"
00018 #include "Identifier/MucID.h"
00019 #include "HltAlgorithms/EFDetectorHits.h"
00020 #include "CLHEP/Random/RandFlat.h"
00021 
00022 using namespace Event;
00023 
00024 EFDetectorHits::EFDetectorHits(const std::string& name, ISvcLocator* pSvcLocator) :
00025   IEFAlgorithm(name, pSvcLocator) {
00026  
00027   int output=m_output/100000;
00028 #if 1
00029   //m_propMgr.declareProperty("OutputLevel", output);
00030   //cout << "OutputLevel="<<output<<";  name="<<name<<endl;
00031   // Get a pointer to the Job Options Service
00032   //IJobOptionsSvc* jobSvc;
00033   //Gaudi::svcLocator()->service("JobOptionsSvc", jobSvc);
00034   //jobSvc->setMyProperties("EFDetector", &m_propMgr);
00035   //cout << "OutputLevel="<<output<<";  name="<<name<<endl;
00036 #endif
00037   MsgStream log(msgSvc(), name);
00038   msgSvc()->setOutputLevel(name,output);
00039 
00040   m_nmdc = new CriteriaItemValue;
00041   m_nmuc = new CriteriaItemValue;
00042   m_ntof = new CriteriaItemValue;
00043   m_nemc = new CriteriaItemValue;
00044   m_derr = new CriteriaItemValue;
00045   m_rndm = new CriteriaItemValue;
00046 }
00047 
00048 EFDetectorHits::~EFDetectorHits() {
00049   delete m_nmdc;
00050   delete m_nmuc;
00051   delete m_ntof;
00052   delete m_nemc;
00053   delete m_derr;
00054   delete m_rndm;
00055 }
00056 
00057 StatusCode EFDetectorHits::initialize(){
00058 
00059   MsgStream log(msgSvc(), name());
00060   log << MSG::INFO << "in initialize()" << endreq;
00061 
00062   IEFAlgorithm::initialize();
00063 
00064   StatusCode sc;
00065   sc = m_HltStoreSvc->put("nmdc", m_nmdc);
00066   if ( sc.isFailure() ) {
00067     log << MSG::ERROR << "m_HltStoreSvc->put(nmdc) wrong" << endreq;
00068     return sc;
00069   }
00070   sc = m_HltStoreSvc->put("nmuc", m_nmuc);
00071   if ( sc.isFailure() ) {
00072     log << MSG::ERROR << "m_HltStoreSvc->put(nmuc) wrong" << endreq;
00073     return sc;
00074   }
00075   sc = m_HltStoreSvc->put("ntof", m_ntof);
00076   if ( sc.isFailure() ) {
00077     log << MSG::ERROR << "m_HltStoreSvc->put(ntof) wrong" << endreq;
00078     return sc;
00079   }
00080   sc = m_HltStoreSvc->put("nemc", m_nemc);
00081   if ( sc.isFailure() ) {
00082     log << MSG::ERROR << "m_HltStoreSvc->put(nemc) wrong" << endreq;
00083     return sc;
00084   }
00085   sc = m_HltStoreSvc->put("derr", m_derr);
00086   if(sc.isFailure()) {
00087     log << MSG::ERROR << "m_HltStoreSvc->put(derr) wrong" << endreq;
00088     return sc;
00089   }
00090   sc = m_HltStoreSvc->put("rndm", m_rndm);
00091   if(sc.isFailure()) {
00092     log << MSG::ERROR << "m_HltStoreSvc->put(rndm) wrong" << endreq;
00093     return sc;
00094   }
00095 
00096   return StatusCode::SUCCESS;
00097 }
00098 
00099 StatusCode EFDetectorHits::execute() {
00100   
00101   //reset();
00102 
00103   MsgStream log(msgSvc(), name());
00104   
00105   // Part 1: Get the event header, print out event number
00106   SmartDataPtr<Event::EventHeader> eventHeader(eventSvc(),"/Event/EventHeader");
00107   if (!eventHeader) {
00108     log << MSG::FATAL << "Could not find Event Header" << endreq;
00109     return( StatusCode::FAILURE);
00110   }
00111   log << MSG::INFO << "eventNo-->" << eventHeader->eventNumber()<<endreq;
00112 
00113   //Part 2: Retrieve Hits Collection 
00114   SmartDataPtr<MdcDigiCol> mdcDigiCol(eventSvc(),"/Event/Digi/MdcDigiCol");
00115   if (!mdcDigiCol) {
00116     log << MSG::FATAL << "Could not find Mdc digi!!" << endreq;
00117     return( StatusCode::FAILURE);
00118   }
00119 
00120   SmartDataPtr<TofDigiCol> tofDigiCol(eventSvc(),"/Event/Digi/TofDigiCol");
00121   if (!tofDigiCol) {
00122     log << MSG::FATAL << "Could not find Tof digi!!" << endreq;
00123     return( StatusCode::FAILURE);
00124   }
00125   SmartDataPtr<EmcDigiCol> emcDigiCol(eventSvc(),"/Event/Digi/EmcDigiCol");
00126   if (!emcDigiCol) {
00127     log << MSG::FATAL << "Could not find Emc digi!!" << endreq;
00128     return( StatusCode::FAILURE);
00129   }
00130   if(m_rawDigiSvc){
00131     if(m_rawDigiSvc->isOnlineMode()){
00132       emcDigiCol=&(m_rawDigiSvc->getEmcDigiVec(EmcRawDataProvider::DropLow|EmcRawDataProvider::CutTime|EmcRawDataProvider::DropHot|EmcRawDataProvider::DropDead));
00133     }
00134   }
00135   
00136   SmartDataPtr<MucDigiCol> mucDigiCol(eventSvc(),"/Event/Digi/MucDigiCol");
00137   if (!mucDigiCol) {
00138     log << MSG::FATAL << "Could not find Muc digi!!" << endreq;
00139     return( StatusCode::FAILURE);
00140   }
00141 
00142   //Part 3: Get information of hits
00143   unsigned int nhitsMdc=mdcDigiCol->size();
00144   if(m_rawDigiSvc){
00145     if(m_rawDigiSvc->isOnlineMode()){
00146       nhitsMdc=m_rawDigiSvc->getMdcDigiVec(0x38000).size();
00147     }
00148   }
00149   unsigned int nhitsEmc=emcDigiCol->size();
00150   unsigned int nhitsMuc=mucDigiCol->size();
00151   unsigned int nhitsTof=tofDigiCol->size();
00152 
00153   double rndm=CLHEP::RandFlat::shoot();
00154   
00155   log << MSG::INFO << " Number of hits in MDC:EMC:MUC:TOF is " << nhitsMdc
00156       << ":" << nhitsEmc << ":" << nhitsMuc << ":" <<nhitsTof <<";  " 
00157       << "random number:" << rndm <<endreq;
00158 
00159   //Part 4: Put the criteria item(s) to HltStoreSvc here
00160   m_nmdc->setValue(nhitsMdc);
00161   m_nmuc->setValue(nhitsMuc);
00162   m_ntof->setValue(nhitsTof);
00163   m_nemc->setValue(nhitsEmc);
00164 
00165   m_rndm->setValue(rndm);
00166 
00167   m_ef->addToEFVec(nhitsMdc, 5);
00168   m_ef->addToEFVec(nhitsTof, 25);
00169   m_ef->addToEFVec(nhitsEmc, 30);
00170   m_ef->addToEFVec(nhitsMuc, 52);
00171  
00172   m_ef->addToEFVec(0xFFFFFFF7,37);   //nsec init                                                                          
00173  
00174   m_ef->setVecBit(true, 0, 0);
00175   m_ef->addToEFVec(1, 1);
00176   m_ef->addToEFVec(1<<8, 1);
00177   m_ef->addToEFVec(1<<16, 1);
00178   m_ef->addToEFVec(1<<24, 1);
00179 
00180   m_run=1;
00181 
00182   return StatusCode::SUCCESS;
00183 }
00184 
00185 StatusCode EFDetectorHits::finalize() {
00186   MsgStream log(msgSvc(), name());
00187   log << MSG::INFO << "in finalize()" << endmsg;
00188   return StatusCode::SUCCESS;
00189 }
00190 
00191 void EFDetectorHits::reset() {
00192   
00193   if(m_run){
00194     m_nmdc->reset();
00195     m_nmuc->reset();
00196     m_ntof->reset();
00197     m_nemc->reset();
00198     m_derr->reset();
00199     m_rndm->reset();
00200     m_run=0;
00201   }
00202   return;
00203 }

Generated on Tue Nov 29 23:12:06 2016 for BOSS_7.0.2 by  doxygen 1.4.7