00001 #include "HltMakerAlg/DstHltMaker.h"
00002
00003 #include "GaudiKernel/MsgStream.h"
00004 #include "GaudiKernel/AlgFactory.h"
00005 #include "GaudiKernel/ISvcLocator.h"
00006 #include "GaudiKernel/SmartDataPtr.h"
00007 #include "GaudiKernel/IDataProviderSvc.h"
00008 #include "GaudiKernel/PropertyMgr.h"
00009
00010 #include "EventModel/EventModel.h"
00011 #include "EventModel/Event.h"
00012 #include "EventModel/EventHeader.h"
00013
00014 #include "HltEvent/HltEvent.h"
00015 #include "HltEvent/HltInf.h"
00016 #include "HltEvent/DstHltInf.h"
00017
00018 using namespace std;
00019 using namespace Event;
00020
00022
00023 DstHltMaker::DstHltMaker(const std::string& name, ISvcLocator* pSvcLocator) :
00024 Algorithm(name, pSvcLocator)
00025 {
00026
00027
00028
00029 }
00030
00031
00032 StatusCode DstHltMaker::initialize(){
00033
00034 MsgStream log(msgSvc(), name());
00035 log << MSG::INFO << "in initialize()" << endreq;
00036
00037 m_ntot=0;
00038
00039 return StatusCode::SUCCESS;
00040 }
00041
00042
00043 StatusCode DstHltMaker::execute() {
00044
00045 MsgStream log(msgSvc(), name());
00046 log << MSG::INFO << "in execute()" << endreq;
00047
00048
00049
00050 SmartDataPtr<Event::EventHeader> eventHeader(eventSvc(),"/Event/EventHeader");
00051 if (!eventHeader) {
00052 log << MSG::FATAL << "Could not find Event Header" << endreq;
00053 return( StatusCode::FAILURE);
00054 }
00055
00056 int eventId = eventHeader->eventNumber() ;
00057 int runId = eventHeader->runNumber();
00058 log << MSG::INFO << "DstHltMaker: retrieved event: " <<" Event Number "<< eventId << " run: " <<runId << endreq;
00059
00060 StatusCode sc = StatusCode::SUCCESS ;
00061
00062
00063
00064
00065
00066
00067 DstHltInf* dstHltInf = new DstHltInf();
00068 SmartDataPtr<HltInf> recHltInf(eventSvc(),"/Event/Hlt/HltInf");
00069
00070 if (!recHltInf) {
00071 log << MSG::DEBUG << "Could not find HltInf" << endreq;
00072
00073 } else {
00074 dstHltInf->setEventType(recHltInf->getEventType());
00075 dstHltInf->setAlgProcess(recHltInf->getAlgProcess());
00076 dstHltInf->setCriteriaTable(recHltInf->getCriteriaTable());
00077 dstHltInf->setVersion(recHltInf->getVersion());
00078 dstHltInf->setTotalEnergy(recHltInf->getTotalEnergy());
00079 dstHltInf->setNumber(recHltInf->getNumber());
00080 dstHltInf->setNCON(recHltInf->getNCON());
00081 m_ntot++;
00082 }
00083 DataObject *aDstHltInfEvent;
00084 eventSvc()->findObject("/Event/Hlt/DstHltInf", aDstHltInfEvent);
00085 if(aDstHltInfEvent!=NULL) {
00086 SmartDataPtr<DstHltInf> hltInf(eventSvc(),"/Event/Hlt/DstHltInf");
00087 log<<MSG::DEBUG<<"old type="<<hltInf->getEventType()<<", alg="<<hltInf->getAlgProcess()
00088 <<", criteria="<<hltInf->getCriteriaTable()<<", version="<<hltInf->getVersion()
00089 <<", energy="<<hltInf->getTotalEnergy()<<endreq;
00090
00091 sc = eventSvc()->unregisterObject("/Event/Hlt/DstHltInf");
00092 delete aDstHltInfEvent;
00093 log << MSG::INFO << "Old DstHltInf has been unregistered" << endreq;
00094 if(sc!=StatusCode::SUCCESS) {
00095 log << MSG::FATAL << "Could not unregister DstHltInf" << endreq;
00096 return( StatusCode::FAILURE);
00097 }
00098 }
00099 sc = eventSvc()->registerObject(EventModel::Hlt::DstHltInf,dstHltInf);
00100
00101 log << MSG::DEBUG <<"Event No."<<eventId<<" = "
00102 << dstHltInf->getEventType()<<" "
00103 << dstHltInf->getAlgProcess()<<" "
00104 << dstHltInf->getCriteriaTable()<<" "
00105 << dstHltInf->getVersion()<<" "
00106 << dstHltInf->getTotalEnergy()<<endreq;
00107
00108 return sc;
00109 }
00110
00111
00112 StatusCode DstHltMaker::finalize() {
00113
00114 MsgStream log(msgSvc(), name());
00115 log << MSG::DEBUG << "==> Finalize DstHltMaker" << endreq;
00116 log << MSG::ALWAYS << m_ntot << " events are converted." <<endreq;
00117
00118 return StatusCode::SUCCESS;
00119 }