84 MsgStream log(
msgSvc(), name() );
86 StatusCode sc = Service::initialize();
87 if ( sc.isFailure() )
return sc;
92 status = service(
"IncidentSvc", incsvc );
94 if ( status.isSuccess() ) { incsvc->addListener(
this,
"NewRun", priority ); }
97 status = service(
"RealizationSvc", tmpReal );
98 if ( !status.isSuccess() )
99 { log << MSG::FATAL <<
" Could not initialize Realization Service" << endmsg; }
100 else { m_RealizationSvc =
dynamic_cast<RealizationSvc*
>( tmpReal ); }
108 if ( !m_MdcTrig ) log << MSG::FATAL <<
"can not get BesMdcTrig pointer " << endmsg;
109 if ( !m_TofTrig ) log << MSG::FATAL <<
"can not get BesTofTrig pointer " << endmsg;
110 if ( !m_EmcTrig ) log << MSG::FATAL <<
"can not get BesEmcTrig pointer " << endmsg;
111 if ( !m_MucTrig ) log << MSG::FATAL <<
"can not get BesMucTrig pointer " << endmsg;
112 if ( !m_TMTrig ) log << MSG::FATAL <<
"can not get BesTMTrig pointer " << endmsg;
115 trigCondName.clear();
119 if ( m_RealizationSvc->UseDBFlag() ==
false )
122 infile.open( trigTableFile.c_str(), ios_base::in );
124 log << MSG::FATAL <<
"can not open Trigger Table file: " << trigTableFile << endmsg;
128 infile.getline( line, 255 );
129 }
while ( line[0] !=
'C' );
133 char* token = strtok( line,
" " );
138 token = strtok( NULL,
" " );
139 if ( chan !=
"CHANNEL" ) trigChannel.push_back( chan );
142 }
while ( token != NULL );
144 infile.getline( line, 255 );
145 token = strtok( line,
" " );
150 token = strtok( NULL,
" " );
151 num = atoi( chan.c_str() );
152 channelNo.push_back(
num );
155 }
while ( token != NULL );
159 infile.getline( line, 255 );
160 if ( line[0] ==
' ' )
continue;
161 if ( line[0] ==
'#' )
break;
162 token = strtok( line,
" " );
167 token = strtok( NULL,
" " );
168 if ( chan ==
"1" || chan ==
"0" || chan ==
"-" ) { trigTable.push_back( chan ); }
169 else { trigCondName.push_back( chan ); }
172 }
while ( token != NULL );
175 for (
unsigned int i = 0; i < trigChannel.size(); i++ )
176 { cout <<
" " << trigChannel[i] <<
" "; }
178 for (
unsigned int i = 0; i < channelNo.size(); i++ )
179 { cout <<
" " << channelNo[i] <<
" "; }
181 for (
unsigned int j = 0; j < trigCondName.size(); j++ )
183 cout << trigCondName[j] <<
" ";
184 for (
unsigned int i = 0 + j * trigChannel.size();
185 i < trigChannel.size() + j * trigChannel.size(); i++ )
186 { cout << trigTable[i] <<
" "; }
192 return StatusCode::SUCCESS;
213 MsgStream log(
msgSvc(), name() );
214 log << MSG::DEBUG <<
"handle: " << inc.type() << endmsg;
215 if ( inc.type() !=
"NewRun" ) {
return; }
216 log << MSG::DEBUG <<
"Begin New Run" << endmsg;
217 if ( m_RealizationSvc->UseDBFlag() ==
true && m_RealizationSvc->ifReadTrg() ==
true )
220 std::vector<uint32_t> trgTable_DB = m_RealizationSvc->getTrgTable();
223 trigCondName.clear();
227 for (
unsigned int i = 0, mask = 1; i < 16; i++, mask <<= 1 )
229 if ( trgTable_DB[0] & mask )
231 if ( i == 9 ) channelNo.push_back( 0 );
232 else channelNo.push_back( 1 );
234 else channelNo.push_back( 0 );
235 std::ostringstream osname;
236 osname <<
"Channel_" << i;
237 std::string name = osname.str();
238 trigChannel.push_back( name );
241 string table_tmp[16][64];
242 for (
unsigned int i = 1; i < 65; i++ )
244 for (
unsigned int j = 0; j < 16; j++ )
246 int bit2 = ( trgTable_DB[i] >> 2 * j ) & 0x3;
247 int row = (int)( i - 1 ) / 4;
248 int column = ( ( i - 1 ) % 4 ) * 16 + j;
249 if ( bit2 == 0 ) table_tmp[row][column] =
"1";
250 else if ( bit2 == 1 ) table_tmp[row][column] =
"0";
251 else table_tmp[row][column] =
"-";
255 for (
int j = 0; j < 48; j++ )
257 trigCondName.push_back( COND_NAME[j] );
258 for (
int i = 0; i < 16; i++ ) { trigTable.push_back( table_tmp[i][j] ); }
261 for (
unsigned int i = 0; i < trigChannel.size(); i++ )
262 { cout <<
" " << trigChannel[i] <<
" "; }
264 for (
unsigned int i = 0; i < channelNo.size(); i++ )
265 { cout <<
" " << channelNo[i] <<
" "; }
267 for (
unsigned int j = 0; j < trigCondName.size(); j++ )
269 cout << setw( 15 ) << trigCondName[j] <<
" ";
270 for (
unsigned int i = 0 + j * trigChannel.size();
271 i < trigChannel.size() + j * trigChannel.size(); i++ )
272 { cout << trigTable[i] <<
" "; }
349 for (
int i = 0; i < 16; i++ )
351 if ( i < 16 ) m_trigChannel[i] = 0;
354 MsgStream log(
msgSvc(), name() );
357 muc_vlayerSeg = m_MucTrig->getNlayerSeg();
359 muc_nlayerEE = m_MucTrig->getNlayerPart( 0 );
360 muc_nlayerBR = m_MucTrig->getNlayerPart( 1 );
361 muc_nlayerWE = m_MucTrig->getNlayerPart( 2 );
362 muc_vhitLayer = m_MucTrig->getNhitLayer();
363 muc_vhitSeg = m_MucTrig->getNhitSeg();
364 muc_nhitEE = m_MucTrig->getNhitPart( 0 );
365 muc_nhitBR = m_MucTrig->getNhitPart( 1 );
366 muc_nhitWE = m_MucTrig->getNhitPart( 2 );
367 muc_nhitTotal = m_MucTrig->getNhitTotal();
374 for (
unsigned int i = 0; i < 48; i++ )
376 for (
unsigned int j = 0; j < trigChannel.size(); j++ )
378 if ( trigCond[i] ) trigOut.push_back( 1 );
379 else trigOut.push_back( 0 );
385 for (
unsigned int i = 0; i < channelNo.size(); i++ )
387 if ( channelNo.size() > 16 )
389 log << MSG::FATAL <<
"Trigger Channel is greater than 16!!!!!" << endmsg;
390 return StatusCode::FAILURE;
394 if ( channelNo[i] == 0 )
396 m_trigChannel[i] = 0;
401 log << MSG::INFO << trigChannel[i] <<
": ";
402 for (
unsigned int j = 0; j < trigCondName.size(); j++ )
404 if ( trigTable[i + j * channelNo.size()] ==
"1" &&
405 trigOut[i + j * channelNo.size()] == 1 )
407 if ( trigTable[i + j * channelNo.size()] ==
"0" &&
408 trigOut[i + j * channelNo.size()] == 0 )
410 if ( trigTable[i + j * channelNo.size()] ==
"1" )
411 log << MSG::INFO << trigCondName[j] <<
" ";
412 if ( trigTable[i + j * channelNo.size()] ==
"0" )
413 log << MSG::INFO <<
"anti_" << trigCondName[j] <<
" ";
415 for (
unsigned int k = 0; k < trigCondName.size(); k++ )
417 if ( trigTable[i + k * channelNo.size()] ==
"1" ||
418 trigTable[i + k * channelNo.size()] ==
"0" )
420 log << MSG::INFO << trigOut[i + k * channelNo.size()] <<
" ";
424 log << MSG::INFO << endmsg;
425 if ( ( condition == conditionNo ) && conditionNo != 0 )
428 m_trigChannel[i] = 1;
432 m_trigChannel[i] = 0;
441 for (
int i = 0; i < 48; i++ )
444 m_trigCondition[i] = 0;
447 trigCond[0] = emc_NClus1;
448 trigCond[1] = emc_NClus2;
449 trigCond[2] = emc_BClusBB;
450 trigCond[3] = emc_EClusBB;
451 trigCond[4] = emc_Clus_Z;
452 trigCond[5] = emc_BClus_PHI;
453 trigCond[6] = emc_EClus_PHI;
454 trigCond[7] = emc_BEtot_H;
455 trigCond[8] = emc_EEtot_H;
456 trigCond[9] = emc_Etot_L;
457 trigCond[10] = emc_Etot_M;
458 trigCond[11] = emc_BL_Z;
459 trigCond[12] = emc_NBClus1;
460 trigCond[13] = emc_NEClus1;
461 trigCond[14] = emc_BL_BBLK;
462 trigCond[15] = emc_BL_EBLK;
463 trigCond[16] = tof_ETofBB;
464 trigCond[17] = tof_BTofBB;
465 trigCond[18] = tof_NETof2;
466 trigCond[19] = tof_NETof1;
467 trigCond[20] = tof_NBTof2;
468 trigCond[21] = tof_NBTof1;
469 trigCond[22] = tof_NTof1;
470 trigCond[23] = tm_CTrk_BB;
471 trigCond[24] = tm_NCTrk2;
472 trigCond[25] = tm_NCTrk1;
473 trigCond[26] = tm_BTrk_BB;
474 trigCond[27] = tm_NBTrk2;
475 trigCond[28] = tm_NBTrk1;
476 trigCond[29] = tm_ATrk_BB;
477 trigCond[30] = tm_NATrk2;
478 trigCond[31] = tm_NATrk1;
479 trigCond[32] = muc_BB3478;
480 trigCond[33] = muc_BB37;
481 trigCond[34] =
false;
482 trigCond[35] =
false;
483 trigCond[36] =
false;
484 trigCond[37] =
false;
485 trigCond[38] = mdc_STrk_BB;
486 trigCond[39] = mdc_NStrkN;
487 trigCond[40] = mdc_NStrk2;
488 trigCond[41] = mdc_NStrk1;
489 trigCond[42] = mdc_LTrk_BB;
490 trigCond[43] = mdc_NLtrkN;
491 trigCond[44] = mdc_NLtrk2;
492 trigCond[45] = mdc_NLtrk1;
493 trigCond[46] = mdc_NItrk2;
494 trigCond[47] = mdc_NItrk1;
496 MsgStream log(
msgSvc(), name() );
497 if ( trigCondName.size() != 48 )
499 log << MSG::FATAL <<
"The trigger condition CAN NOT be successfully read!!!" << endmsg;
500 return StatusCode::FAILURE;
503 for (
unsigned int i = 0; i < 48; i++ )
505 if ( trigCond[i] ) m_trigCondition[i] = 1;
508 return StatusCode::SUCCESS;