27 MsgStream log(
msgSvc(), name() );
28 log << MSG::DEBUG <<
"TrigEventMaker: in execute()" << endmsg;
32 SmartDataPtr<Event::EventHeader> eventHeader( eventSvc(),
"/Event/EventHeader" );
35 log << MSG::FATAL <<
"Could not find Event Header" << endmsg;
36 return StatusCode::FAILURE;
39 int eventId = eventHeader->eventNumber();
40 int runId = eventHeader->runNumber();
41 log << MSG::INFO <<
"TrigEventMaker: retrieved event: "
42 <<
" Event Number " << eventId <<
" run: " << runId << endmsg;
49 bool preScale =
false;
52 for (
int i = 0; i < 48; i++ )
54 if ( i < 16 ) trgChan[i] = 0;
59 SmartDataPtr<TrigGTDCol> trigGTDCol( eventSvc(),
"/Event/Trig/TrigGTDCol" );
62 log << MSG::FATAL <<
"Could not find TrigGTDCol!" << endmsg;
63 return StatusCode::FAILURE;
66 TrigGTDCol::iterator
iter = trigGTDCol->begin();
67 for ( ;
iter != trigGTDCol->end();
iter++ )
69 const uint32_t boardId =
71 const uint32_t timeWindow =
72 ( *iter )->getTimeWindow();
75 ( *iter )->getDataSize();
76 const uint32_t* trigData = ( *iter )->getDataPtr();
81 if ( boardId == 0xd3 )
83 if ( size % timeWindow != 0 )
85 log << MSG::FATAL <<
"GTL data is NOT completed" << endmsg;
86 return StatusCode::FAILURE;
88 for ( uint32_t j = 0; j < size; j++ )
90 uint32_t dataId = ( ( trigData[j] >> 24 ) & 0x7 );
91 if ( dataId != 5 )
continue;
92 for ( uint32_t i = 1, loop = 0; loop < 24; i <<= 1, loop++ )
96 if ( trigData[j] & i ) trgChan[loop] = 1;
98 if ( ( loop == 16 ) && ( trigData[j] & i ) ) timing = 1;
99 if ( ( loop == 17 ) && ( trigData[j] & i ) && ( timing != 1 ) ) timing = 2;
100 if ( ( loop == 18 ) && ( trigData[j] & i ) && ( timing == 0 ) ) timing = 3;
101 if ( ( loop == 21 ) && ( trigData[j] & i ) ) preScale =
true;
106 if ( boardId == 0xd2 || boardId == 0xd4 || boardId == 0xd6 )
108 for ( uint32_t j = 0; j < size; j++ )
110 uint32_t dataId = ( ( trigData[j] >> 16 ) & 0xFF );
111 if ( dataId != 4 )
continue;
112 for ( uint32_t i = 1, loop = 0; loop < 16; i <<= 1, loop++ )
114 if ( ( boardId == 0xd2 ) && ( trigData[j] & i ) ) trgCond[32 + loop] = 1;
115 if ( ( boardId == 0xd4 ) && ( trigData[j] & i ) ) trgCond[16 + loop] = 1;
116 if ( ( boardId == 0xd6 ) && ( trigData[j] & i ) ) trgCond[loop] = 1;
123 TrigData* aTrigData =
new TrigData( window, timing, trgCond, trgChan, preScale );
125 StatusCode sc = StatusCode::SUCCESS;
127 if ( sc != StatusCode::SUCCESS )
129 log << MSG::DEBUG <<
"Could not register TrigData" << endmsg;
130 return StatusCode::FAILURE;
133 return StatusCode::SUCCESS;