BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
HltEventMaker.cxx
Go to the documentation of this file.
1#include "GaudiKernel/IDataProviderSvc.h"
2#include "GaudiKernel/ISvcLocator.h"
3#include "GaudiKernel/MsgStream.h"
4#include "GaudiKernel/PropertyMgr.h"
5#include "GaudiKernel/SmartDataPtr.h"
6
7#include "EventModel/Event.h"
8#include "EventModel/EventHeader.h"
9#include "EventModel/EventModel.h"
10#include "HltEvent/HltInf.h"
11#include "HltEvent/HltRaw.h"
12#include "HltEventMaker.h"
13#include "Identifier/HltID.h"
14#include "Identifier/Identifier.h"
15#include "TofRawEvent/TofDigi.h"
16
17using namespace Event;
19HltEventMaker::HltEventMaker( const std::string& name, ISvcLocator* pSvcLocator )
20 : Algorithm( name, pSvcLocator ) {
21 // Declare the properties
22}
23
25 MsgStream log( msgSvc(), name() );
26 log << MSG::DEBUG << "HltEventMaker: in initialize()" << endmsg;
27 m_ntot = 0;
28
29 return StatusCode::SUCCESS;
30}
31
33 MsgStream log( msgSvc(), name() );
34 log << MSG::DEBUG << "HltEventMaker: in execute()" << endmsg;
35
36 // Get the event header, print out event and run number
37 SmartDataPtr<Event::EventHeader> eventHeader( eventSvc(), "/Event/EventHeader" );
38 if ( !eventHeader )
39 {
40 log << MSG::FATAL << "Could not find Event Header" << endmsg;
41 return StatusCode::FAILURE;
42 }
43
44 int eventId = eventHeader->eventNumber();
45 int runId = eventHeader->runNumber();
46 log << MSG::INFO << "HltEventMaker: retrieved event: "
47 << " Event Number " << eventId << " run: " << runId << endmsg;
48
49 HltInf* aHlt = new HltInf();
50 // Get EventFilter information from TDS
51 SmartDataPtr<HltRawCol> hltRawCol( eventSvc(), "/Event/Hlt/HltRawCol" );
52 if ( !hltRawCol )
53 {
54 log << MSG::DEBUG << "Could not find HltRawCol!" << endmsg;
55 // return StatusCode::SUCCESS;
56 }
57 else
58 {
59 uint32_t type = 0, alg = 0, cri = 0, ver = 0;
60 float etot = 0;
61 uint32_t nmdc = 0xFF, ntof = 0xFF, nemc = 0xFF, nmuc = 0xFF;
62
63 HltRawCol::iterator iter = hltRawCol->begin();
64 for ( ; iter != hltRawCol->end(); iter++ )
65 {
66 Identifier id = ( *iter )->identify();
67 log << MSG::VERBOSE << "EventFilter info id: " << hex << id << ": "
68 << ( *iter )->getIntChannel() << "," << dec << ( *iter )->getFloatChannel()
69 << endmsg;
70 if ( HltID::is_eventtype( id ) ) aHlt->setEventType( type = ( *iter )->getIntChannel() );
71 if ( HltID::is_algorithm( id ) ) aHlt->setAlgProcess( alg = ( *iter )->getIntChannel() );
72 if ( HltID::is_criteria( id ) )
73 aHlt->setCriteriaTable( cri = ( *iter )->getIntChannel() );
74 if ( HltID::is_version( id ) ) aHlt->setVersion( ver = ( *iter )->getIntChannel() );
75 if ( HltID::is_energy( id ) )
76 aHlt->setTotalEnergy( etot = ( *iter )->getFloatChannel() );
77
78 uint32_t pureid = id & 0xFF;
79 if ( HltID::is_number( id ) )
80 {
81 uint32_t datanum = ( *iter )->getIntChannel();
82 aHlt->setNumber( datanum );
83 nmdc = datanum & 0xFF;
84 ntof = ( datanum & 0xFF00 ) >> 8;
85 nemc = ( datanum & 0xFF0000 ) >> 16;
86 nmuc = ( datanum & 0xFF000000 ) >> 24;
87 log << MSG::VERBOSE << nmdc << ", " << ntof << ", " << nemc << ", " << nmuc << endmsg;
88 }
89 else if ( HltID::is_mdc_inf( id ) ) { aHlt->push_mdc( ( *iter )->getIntChannel() ); }
90 else if ( HltID::is_tof_inf( id ) ) { aHlt->push_tof( ( *iter )->getIntChannel() ); }
91 else if ( HltID::is_emc_inf( id ) ) { aHlt->push_emc( ( *iter )->getIntChannel() ); }
92 else if ( HltID::is_muc_inf( id ) ) { aHlt->push_muc( ( *iter )->getIntChannel() ); }
93 else if ( HltID::is_con_inf( id ) )
94 {
95 if ( HltID::is_ncon( id ) ) aHlt->setNCON( ( *iter )->getIntChannel() );
96 else aHlt->push_con( ( *iter )->getIntChannel() );
97 }
98 }
99 log << MSG::DEBUG << "type=" << type << ", alg=" << alg << ", criteria=" << cri
100 << ", version=" << ver << ", energy=" << etot << endmsg;
101
102 m_ntot++;
103 }
104 // Register related event filter information to TDS for physics analysis
105 StatusCode sc;
106 DataObject* aHltInfEvent;
107 eventSvc()->findObject( "/Event/Hlt/HltInf", aHltInfEvent );
108 if ( aHltInfEvent != NULL )
109 {
110 SmartDataPtr<HltInf> hltInf( eventSvc(), "/Event/Hlt/HltInf" );
111 log << MSG::DEBUG << "old type=" << hltInf->getEventType()
112 << ", alg=" << hltInf->getAlgProcess() << ", criteria=" << hltInf->getCriteriaTable()
113 << ", version=" << hltInf->getVersion() << ", energy=" << hltInf->getTotalEnergy()
114 << endmsg;
115 // then unregister HltInf
116 sc = eventSvc()->unregisterObject( "/Event/Hlt/HltInf" );
117 delete aHltInfEvent; // it must be delete to avoid memory leakage
118 log << MSG::INFO << "Old HltInf has been unregistered" << endmsg;
119 if ( sc != StatusCode::SUCCESS )
120 {
121 log << MSG::FATAL << "Could not unregister HltInf" << endmsg;
122 return ( StatusCode::FAILURE );
123 }
124 }
125 sc = eventSvc()->registerObject( EventModel::Hlt::HltInf, aHlt );
126 if ( sc != StatusCode::SUCCESS )
127 {
128 log << MSG::FATAL << "Could not register HltInf" << endmsg;
129 return StatusCode::FAILURE;
130 }
131
132 return StatusCode::SUCCESS;
133}
134
136 MsgStream log( msgSvc(), name() );
137 log << MSG::DEBUG << "==> Finalize HltEventMaker" << endmsg;
138 log << MSG::ALWAYS << m_ntot << " events are converted." << endmsg;
139 return StatusCode::SUCCESS;
140}
DECLARE_COMPONENT(BesBdkRc)
Double_t etot
EvtStreamInputIterator< typename Generator::result_type > iter(Generator gen, int N=0)
IMessageSvc * msgSvc()
void setAlgProcess(const unsigned int i)
void setCriteriaTable(const unsigned int i)
void setNumber(const unsigned int i)
void setNCON(const unsigned int i)
void setEventType(const unsigned int i)
void setTotalEnergy(const float etot)
void setVersion(const unsigned int i)
StatusCode execute()
HltEventMaker(const std::string &name, ISvcLocator *pSvcLocator)
StatusCode finalize()
StatusCode initialize()
static bool is_ncon(const Identifier &id)
Definition HltID.cxx:103
static bool is_tof_inf(const Identifier &id)
Definition HltID.cxx:114
static bool is_version(const Identifier &id)
Definition HltID.cxx:85
static bool is_con_inf(const Identifier &id)
Definition HltID.cxx:129
static bool is_eventtype(const Identifier &id)
Definition HltID.cxx:67
static bool is_algorithm(const Identifier &id)
Definition HltID.cxx:73
static bool is_muc_inf(const Identifier &id)
Definition HltID.cxx:124
static bool is_criteria(const Identifier &id)
Definition HltID.cxx:79
static bool is_emc_inf(const Identifier &id)
Definition HltID.cxx:119
static bool is_number(const Identifier &id)
Definition HltID.cxx:97
static bool is_mdc_inf(const Identifier &id)
Definition HltID.cxx:109
static bool is_energy(const Identifier &id)
Definition HltID.cxx:91
virtual void push_muc(uint32_t data)
virtual void push_mdc(uint32_t data)
virtual void push_tof(uint32_t data)
virtual void push_con(uint32_t data)
virtual void push_emc(uint32_t data)