BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
GenRdmTrgIdxAlg.cxx
Go to the documentation of this file.
1#include "GenRdmTrgIdxAlg.h"
2#include "EventModel/EventHeader.h"
3#include "EventModel/EventModel.h"
4#include "GaudiKernel/SmartDataPtr.h"
5
6// #include "GaudiKernel/AlgFactory.h"
7#include "TrigEvent/TrigData.h"
8
10
11GenRdmTrgIdxAlg::GenRdmTrgIdxAlg( const std::string& name, ISvcLocator* pSvcLocator )
12 : Algorithm( name, pSvcLocator ), m_fcount( 0 ) {
13 declareProperty( "RandomTriggerFiles", m_rdmFiles );
14}
15
17
19 // StatusCode sc = GaudiAlgorithm::initialize(); // must be executed first
20 // StatusCode sc;
21
22 if ( m_rdmFiles.empty() )
23 {
24 error() << "RandomTriggerFiles is empty" << endmsg;
25 return StatusCode::FAILURE;
26 }
27
28 m_idxhandler = new EvtIdxHandler;
29 m_freader = new SimpleRawReader( m_rdmFiles[0] );
30
31 return StatusCode::SUCCESS;
32}
33
35 SmartDataPtr<TrigData> trigData( eventSvc(), EventModel::Trig::TrigData );
36 if ( trigData->getTrigChannel( 9 ) != 1 )
37 {
38 // this is not a random trigger event, pass it
39 return StatusCode::SUCCESS;
40 }
41
42 SmartDataPtr<Event::EventHeader> eventHeader( eventSvc(), "/Event/EventHeader" );
43 uint32_t evtNo = eventHeader->eventNumber();
44 uint32_t runNo = eventHeader->runNumber();
45
46 uint32_t thePos = 0;
47 const uint32_t* data = NULL;
48 uint32_t rdmEvtNo = 0xFFFFFFFF;
49
50 // std::cout << "BEGIN " << evtNo << std::endl;
51 do {
52 thePos = m_freader->raw_stream()->tellg();
53 try
54 { data = m_freader->nextEvent(); } catch ( ReachEndOfFile& e )
55 {
56 m_idxhandler->write(
57 RawFileTools::fname2idxname( m_freader->raw_stream()->currentFile() ) );
58 delete m_freader;
59 m_freader = NULL;
60 ++m_fcount;
61 if ( m_fcount < m_rdmFiles.size() )
62 {
63 m_freader = new SimpleRawReader( m_rdmFiles[m_fcount] );
64 rdmEvtNo = 0xFFFFFFFF;
65 continue;
66 }
67 else
68 {
69 fatal() << "can not find event " << evtNo << " in random trigger data files" << endmsg;
70 return StatusCode::FAILURE;
71 }
72 } catch ( RawFileException& e )
73 {
74 e.print();
75 throw e;
76 }
77
78 // std::cout << "run " << data[9+data[5]] << ", event " << data[8+data[5]] << std::endl;
79
80 if ( data[9 + data[5]] != runNo )
81 {
82 fatal() << "bad runNo in random trigger data" << endmsg;
83 return StatusCode::FAILURE;
84 }
85 rdmEvtNo = data[8 + data[5]];
86 } while ( rdmEvtNo != evtNo );
87
88 m_idxhandler->addPos( data[8 + data[5]], thePos );
89
90 return StatusCode::SUCCESS;
91}
92
94 if ( m_freader != NULL )
95 {
96 m_idxhandler->write(
97 RawFileTools::fname2idxname( m_freader->raw_stream()->currentFile() ) );
98 delete m_freader;
99 }
100 delete m_idxhandler;
101
102 return StatusCode::SUCCESS;
103}
DECLARE_COMPONENT(BesBdkRc)
int runNo
Definition DQA_TO_DB.cxx:13
TTree * data
GenRdmTrgIdxAlg(const std::string &name, ISvcLocator *pSvcLocator)
virtual ~GenRdmTrgIdxAlg()
virtual StatusCode initialize()
Algorithm initialization.
virtual StatusCode execute()
Algorithm execution.
virtual StatusCode finalize()
Algorithm finalization.
virtual void print() const
std::string fname2idxname(const std::string &fname)