111 log =
new MsgStream(
msgSvc(), name() );
113 info() <<
"Instancing MdcConverter" << endmsg;
116 info() <<
"Instancing MucConverter" << endmsg;
119 info() <<
"Instancing TofConverter" << endmsg;
122 info() <<
"Instancing EmcConverter" << endmsg;
125 info() <<
"Instancing Done" << endmsg;
128 StatusCode status = service(
"RealizationSvc", m_RealizationSvc );
129 if ( !status.isSuccess() )
130 { ( *log ) << MSG::FATAL <<
" Could not initialize Realization Service" << endmsg; }
132 if ( m_RealizationSvc->UseDBFlag() ==
true && m_RealizationSvc->ifReadRandTrg() ==
true &&
133 m_dbUserRequest ==
true )
136 m_bgfiles = m_RealizationSvc->getBgFileName( query );
139 if ( !m_pattern.empty() )
141 for (
unsigned int k = 0; k < m_bgfiles.size(); k++ )
143 size_t pos_round = m_bgfiles[k].rfind(
"round" );
144 ( *log ) << MSG::INFO <<
"m_bgfiles: " << m_bgfiles[k] << endmsg;
145 if ( pos_round != string::npos )
147 m_bgfiles[k].replace( m_bgfiles[k].begin(), m_bgfiles[k].begin() + pos_round,
149 ( *log ) << MSG::INFO <<
"new random trigger data path: " << m_bgfiles[k] << endmsg;
153 ( *log ) << MSG::ERROR <<
"string 'round' not found in random trigger path!" << endmsg;
158 if ( !m_newdatadir.empty() )
160 for (
unsigned int k = 0; k < m_bgfiles.size(); k++ )
163 std::strcpy( tmp, m_bgfiles[k].c_str() );
164 string fname = basename( tmp );
165 m_bgfiles[k].replace( m_bgfiles[k].begin(), m_bgfiles[k].end(),
166 m_newdatadir +
'/' + fname );
167 ( *log ) << MSG::INFO <<
"new random trigger data path: " << m_bgfiles[k] << endmsg;
172 std::ifstream conff( m_rawReviseConfig.c_str() );
176 static const bool CREATEIFNOTTHERE(
true );
177 StatusCode RndmStatus = service(
"BesRndmGenSvc", p_BesRndmGenSvc, CREATEIFNOTTHERE );
178 if ( !RndmStatus.isSuccess() || 0 == p_BesRndmGenSvc )
180 ( *log ) << MSG::ERROR <<
" Could not initialize Random Number Service" << endmsg;
185 status = service(
"DataInfoSvc", m_jobInfoSvc );
186 if ( status.isSuccess() ) { ( *log ) << MSG::INFO <<
"get the DataInfoSvc" << endmsg; }
187 else { ( *log ) << MSG::WARNING <<
"could not get the DataInfoSvc." << endmsg; }
190 if ( m_RealizationSvc->UseDBFlag() ==
false || m_dbUserRequest ==
true )
192 if ( m_bgfiles.empty() )
194 ( *log ) << MSG::WARNING <<
"No background datafiles found" << endmsg;
195 return StatusCode::SUCCESS;
201 m_bgfilesIndex.clear();
202 for (
unsigned int bg_index = 0; bg_index < m_bgfiles.size(); bg_index++ )
203 { m_bgfilesIndex.push_back( m_bgfiles[bg_index] +
".idx" ); }
204 if ( m_skip ==
true && m_readBGMethod == 1 )
210 return StatusCode::FAILURE;
217 NTuplePtr nt1(
ntupleSvc(),
"FILE1/n1" );
218 if ( nt1 ) m_tuple1 = nt1;
221 m_tuple1 =
ntupleSvc()->book(
"FILE1/n1", CLID_ColumnWiseTuple,
"Field" );
224 status = m_tuple1->addItem(
"time1", m_time1 );
225 status = m_tuple1->addItem(
"time2", m_time2 );
226 status = m_tuple1->addItem(
"time3", m_time3 );
230 ( *log ) << MSG::ERROR <<
" Cannot book N-tuple:" << long( m_tuple1 ) << endmsg;
231 return StatusCode::FAILURE;
235 NTuplePtr nt2(
ntupleSvc(),
"FILE1/n2" );
236 if ( nt2 ) m_tuple2 = nt2;
239 m_tuple2 =
ntupleSvc()->book(
"FILE1/n2", CLID_ColumnWiseTuple,
"Field" );
240 if ( m_tuple2 ) { status = m_tuple2->addItem(
"tdc", m_tdc ); }
243 ( *log ) << MSG::ERROR <<
" Cannot book N-tuple:" << long( m_tuple2 ) << endmsg;
244 return StatusCode::FAILURE;
248 NTuplePtr nt3(
ntupleSvc(),
"FILE1/n3" );
249 if ( nt3 ) m_tuple3 = nt3;
252 m_tuple3 =
ntupleSvc()->book(
"FILE1/n3", CLID_ColumnWiseTuple,
"Field" );
255 status = m_tuple3->addItem(
"time4", m_time4 );
256 status = m_tuple3->addItem(
"time5", m_time5 );
260 ( *log ) << MSG::ERROR <<
" Cannot book N-tuple:" << long( m_tuple3 ) << endmsg;
261 return StatusCode::FAILURE;
265 status = service(
"BesTimerSvc", m_timersvc );
266 if ( status.isFailure() )
268 ( *log ) << MSG::ERROR << name() <<
": Unable to locate BesTimer Service" << endmsg;
269 return StatusCode::FAILURE;
271 m_timer = m_timersvc->addItem(
"Read field Time" );
272 m_timer1 = m_timersvc->addItem(
"Read raw files" );
277 CLHEP::HepRandomEngine* engine = p_BesRndmGenSvc->GetEngine(
"MIX" );
278 HepRandom::setTheEngine( engine );
280 return StatusCode::SUCCESS;
285 if ( m_ifOutPut ) { m_timer->start(); }
288 SmartDataPtr<Event::EventHeader> evt( eventSvc(),
"/Event/EventHeader" );
289 if ( !evt ) {
return StatusCode::FAILURE; }
291 if ( m_RealizationSvc->UseDBFlag() ==
true && m_RealizationSvc->ifReadRandTrg() ==
true &&
292 m_dbUserRequest ==
false )
294 int runNo = evt->runNumber();
295 if ( (
runNo != m_runNo ) ||
300 m_mdcCnv->setRunId(
runNo );
301 std::vector<std::string> bgfiles = m_RealizationSvc->getBgFileName();
302 if ( bgfiles.size() == 0 )
304 ( *log ) << MSG::ERROR <<
"No random trigger files are found in the run " << m_runNo
309 if ( !m_pattern.empty() )
311 for (
unsigned int k = 0; k < bgfiles.size(); k++ )
313 size_t pos_round = bgfiles[k].rfind(
"round" );
314 ( *log ) << MSG::INFO <<
"bgfiles: " << bgfiles[k] << endmsg;
315 if ( pos_round != string::npos )
317 bgfiles[k].replace( bgfiles[k].begin(), bgfiles[k].begin() + pos_round,
319 ( *log ) << MSG::INFO <<
"new random trigger data path: " << bgfiles[k] << endmsg;
323 ( *log ) << MSG::ERROR <<
"string 'round' not found in random trigger path!"
329 if ( !m_newdatadir.empty() )
331 for (
unsigned int k = 0; k < bgfiles.size(); k++ )
334 std::strcpy( tmp, bgfiles[k].c_str() );
335 string fname = basename( tmp );
336 bgfiles[k].replace( bgfiles[k].begin(), bgfiles[k].end(),
337 m_newdatadir +
'/' + fname );
338 ( *log ) << MSG::INFO <<
"new random trigger data path: " << bgfiles[k] << endmsg;
343 std::vector<std::string> bgfilesIndex;
344 bgfilesIndex.clear();
345 for (
unsigned int bg_index = 0; bg_index < bgfiles.size(); bg_index++ )
346 { bgfilesIndex.push_back( bgfiles[bg_index] +
".idx" ); }
349 if ( m_fr )
delete m_fr;
351 std::vector<int> ranTrgEvents = m_fr->getEventNumber( bgfilesIndex );
355 m_bgfilesIndex.clear();
356 m_ranTrgEvents.clear();
357 for (
unsigned int bg_index = 0; bg_index < bgfiles.size(); bg_index++ )
359 if ( ranTrgEvents[bg_index] > 0 )
361 m_bgfiles.push_back( bgfiles[bg_index] );
362 m_bgfilesIndex.push_back( bgfilesIndex[bg_index] );
363 m_ranTrgEvents.push_back( ranTrgEvents[bg_index] );
368 if ( m_fr )
delete m_fr;
373 bgfilesIndex.clear();
374 ranTrgEvents.clear();
377 if ( m_bgfiles.empty() || m_ranTrgEvents.empty() )
379 ( *log ) << MSG::WARNING <<
"No background datafiles found!!!" << endmsg;
380 return StatusCode::SUCCESS;
383 if ( m_skip ==
true )
385 if ( m_mixingMethod == 1 )
388 m_ranStepLenInCurrentFile.clear();
394 bool ifsucc =
file_sort( m_bgfiles, m_ranTrgEvents );
395 if ( !ifsucc )
return StatusCode::FAILURE;
398 m_bgfilesIndex.clear();
399 for (
unsigned int bg_index = 0; bg_index < m_bgfiles.size(); bg_index++ )
400 { m_bgfilesIndex.push_back( m_bgfiles[bg_index] +
".idx" ); }
403 m_vRanEvtNumInSubSet.clear();
404 m_vStreamNumInSubSet.clear();
407 int ranEvtNumInSubSet = 0;
409 for (
unsigned int i = 0; i < m_ranTrgEvents.size(); i++ )
411 if ( i == 0 ) set_no = m_numSets[i];
412 if ( ( i != 0 ) && ( set_no != m_numSets[i] ) )
414 m_vRanEvtNumInSubSet.push_back( ranEvtNumInSubSet );
415 m_vStreamNumInSubSet.push_back( nstream );
416 ranEvtNumInSubSet = 0;
418 set_no = m_numSets[i];
421 m_totRanEvtNum += m_ranTrgEvents[i];
422 ranEvtNumInSubSet += m_ranTrgEvents[i];
424 if ( i == m_ranTrgEvents.size() - 1 )
426 m_vRanEvtNumInSubSet.push_back( ranEvtNumInSubSet );
427 m_vStreamNumInSubSet.push_back( nstream );
432 int evtNumInRun = -1;
433 std::vector<int> vtotEvtNo = m_jobInfoSvc->getTotEvtNo();
434 for (
unsigned int ii = 0; ii < vtotEvtNo.size(); ii += 2 )
436 if ( std::abs(
runNo ) == std::abs( vtotEvtNo[ii] ) )
437 evtNumInRun = vtotEvtNo[ii + 1];
441 double tau = m_RealizationSvc->getTauValue();
442 double totalTime = m_RealizationSvc->getRunTotalTime();
443 if ( m_RealizationSvc->getTauValue() == 0. ||
444 m_RealizationSvc->getRunTotalTime() == 0. )
446 std::cout <<
"ERROR: In MixerAlg::execute() ---> The tau value or total run time "
447 "is 0, please check it. Exit! "
452 bool using_exp =
true;
453 if ( totalTime * 100 < tau ) using_exp =
false;
454 m_vStepLength.clear();
458 if ( using_exp ==
true ) ranNum = RandExponential::shoot( tau );
459 else ranNum = RandFlat::shoot( 0., totalTime );
460 if ( ranNum > totalTime )
continue;
461 ranNum = ranNum * m_totRanEvtNum / totalTime;
462 m_vStepLength.push_back( (
int)ranNum );
463 if ( m_vStepLength.size() == evtNumInRun * m_nevent )
break;
466 sort( m_vStepLength.begin(), m_vStepLength.end() );
471 if ( evtNumInRun <= 0 || m_totRanEvtNum <= 0 )
473 ( *log ) << MSG::ERROR
474 <<
"The event number (or random trigger event number) in run "
475 << evt->runNumber() <<
" is zero" << endmsg;
476 return StatusCode::FAILURE;
483 map_stepLength.clear();
484 for (
unsigned int i = 0; i < m_ranTrgEvents.size(); i++ )
486 std::vector<int> vstepLength;
487 typedef pair<int, std::vector<int>> vpair;
488 map_stepLength.insert( vpair( i, vstepLength ) );
491 for (
unsigned int i = 0; i < m_ranTrgEvents.size(); )
494 int pre_ranEvtNumSubSet = 0;
495 int cur_ranEvtNumSubSet = 0;
496 set_no = m_numSets[i];
497 for (
int j = 0; j < set_no; j++ )
499 if ( j != ( set_no - 1 ) ) pre_ranEvtNumSubSet += m_vRanEvtNumInSubSet[j];
500 cur_ranEvtNumSubSet += m_vRanEvtNumInSubSet[j];
503 for (
unsigned j = 0; j < m_vStepLength.size(); j++ )
506 if ( ( m_vStepLength[j] >= pre_ranEvtNumSubSet ) &&
507 ( m_vStepLength[j] < cur_ranEvtNumSubSet ) )
509 int sub_stepLength = int( ( m_vStepLength[j] - pre_ranEvtNumSubSet ) /
510 m_vStreamNumInSubSet[set_no - 1] );
512 int begin_fileId = -1, end_fileId = -1;
513 for ( std::map<
int, std::vector<int>>::iterator
iter = map_stepLength.begin();
514 iter != map_stepLength.end();
iter++ )
517 if ( set_no == m_numSets[
iter->first] )
519 if ( begin_fileId == -1 ) begin_fileId =
iter->first;
523 end_fileId = begin_fileId + file_id;
524 bool add_succ =
false;
529 int random_file = int( RandFlat::shootInt(
530 long( begin_fileId ),
long( end_fileId ) ) );
531 if ( sub_stepLength < m_ranTrgEvents[random_file] )
533 map_stepLength[random_file].push_back( sub_stepLength );
537 if ( add_succ )
break;
541 ( *log ) << MSG::ALWAYS <<
"Loop time is larger than MAX_LOOP_TIMES("
543 <<
") in MixAlg, when assigning step length for each bg file."
550 i += m_vStreamNumInSubSet[set_no - 1];
554 unsigned int ranSelectedNum = 0;
555 for ( std::map<
int, std::vector<int>>::iterator
iter = map_stepLength.begin();
556 iter != map_stepLength.end();
iter++ )
558 ranSelectedNum += (
iter->second ).size();
562 if ( ranSelectedNum != m_vStepLength.size() )
566 <<
"In MixerAlg::excute()--> selected bg events number not equal to MC events"
568 return StatusCode::FAILURE;
573 if ( m_mixingMethod == 2 )
576 if ( m_fr )
delete m_fr;
580 m_bgfilesIndex.clear();
581 for (
unsigned int bg_index = 0; bg_index < m_bgfiles.size(); bg_index++ )
582 { m_bgfilesIndex.push_back( m_bgfiles[bg_index] +
".idx" ); }
583 if ( m_skip ==
true && m_readBGMethod == 1 )
589 return StatusCode::FAILURE;
593 m_raw_event->reset();
599 m_time1 = m_timer->elapsed();
603 SmartDataPtr<MdcDigiCol> mdcMcDigits( eventSvc(),
"/Event/Digi/MdcDigiCol" );
604 if ( !mdcMcDigits ) ( *log ) << MSG::ERROR <<
"Unable to retrieve MdcDigiCol" << endmsg;
606 ( *log ) << MSG::INFO <<
"MdcDigiCol retrieved of size " << mdcMcDigits->size() << endmsg;
608 SmartDataPtr<EmcDigiCol> emcMcDigits( eventSvc(),
"/Event/Digi/EmcDigiCol" );
609 if ( !emcMcDigits ) ( *log ) << MSG::ERROR <<
"Unable to retrieve EmcDigiCol" << endmsg;
611 ( *log ) << MSG::INFO <<
"EmcDigiCol retrieved of size " << emcMcDigits->size() << endmsg;
613 SmartDataPtr<MucDigiCol> mucMcDigits( eventSvc(),
"/Event/Digi/MucDigiCol" );
614 if ( !mucMcDigits ) ( *log ) << MSG::ERROR <<
"Unable to retrieve MucDigiCol" << endmsg;
616 ( *log ) << MSG::INFO <<
"MucDigiCol retrieved of size " << mucMcDigits->size() << endmsg;
618 SmartDataPtr<TofDigiCol> tofMcDigits( eventSvc(),
"/Event/Digi/TofDigiCol" );
619 if ( !tofMcDigits ) ( *log ) << MSG::ERROR <<
"Unable to retrieve TofDigiCol" << endmsg;
621 ( *log ) << MSG::INFO <<
"TofDigiCol retrieved of size " << tofMcDigits->size() << endmsg;
623 for (
int ievent = 0; ievent < m_nevent; ievent++ )
625 ( *log ) << MSG::INFO <<
"Mixing BG Event " << ievent << endmsg;
631 if ( m_skip ==
true )
634 if ( m_mixingMethod == 1 )
636 if ( m_RealizationSvc->UseDBFlag() ==
true && m_dbUserRequest ==
false )
638 if ( m_skipCount >= m_ranStepLenInCurrentFile.size() )
640 m_ranStepLenInCurrentFile.clear();
641 for ( std::map<
int, std::vector<int>>::iterator
iter = map_stepLength.begin();
642 iter != map_stepLength.end();
iter++ )
644 if ( currentBGFile ==
"" )
646 if ( (
iter->second ).size() == 0 )
continue;
647 if ( m_fr )
delete m_fr;
650 if ( m_readBGMethod == 1 )
652 m_bgfiles[
iter->first] +
".idx" );
654 m_totEvtNumInCurFile = m_ranTrgEvents[
iter->first];
657 m_ranStepLenInCurrentFile =
iter->second;
659 currentBGFile = m_fr->currentFile();
662 if ( currentBGFile == m_bgfiles[
iter->first] )
665 if (
iter == map_stepLength.end() )
return StatusCode::FAILURE;
666 if ( (
iter->second ).size() == 0 )
671 if (
iter == map_stepLength.end() )
return StatusCode::FAILURE;
672 if ( (
iter->second ).size() > 0 )
break;
675 if ( m_fr )
delete m_fr;
678 if ( m_readBGMethod == 1 )
680 m_bgfiles[
iter->first] +
".idx" );
682 m_totEvtNumInCurFile = m_ranTrgEvents[
iter->first];
685 m_ranStepLenInCurrentFile =
iter->second;
687 currentBGFile = m_fr->currentFile();
696 if ( m_skipCount == 0 ) nskip = m_ranStepLenInCurrentFile[m_skipCount];
698 nskip = m_ranStepLenInCurrentFile[m_skipCount] -
699 m_ranStepLenInCurrentFile[m_skipCount - 1];
701 m_nEventsToEnd = ( m_totEvtNumInCurFile - 1 ) -
702 m_ranStepLenInCurrentFile[m_skipCount];
705 if ( m_skipCount == 0 && nskip == 0 ) nskip = 1;
709 if ( m_RealizationSvc->UseDBFlag() ==
false || m_dbUserRequest ==
true )
710 nskip = int( 2 * m_NSkip * ( RandFlat::shoot() ) ) + 1;
711 if ( m_totalEvent == 0 && nskip == 0 ) nskip = 1;
713 if ( m_mixingMethod == 2 ) { nskip = int( 2 * m_NSkip * ( RandFlat::shoot() ) ) + 1; }
717 m_time2 = m_timer->elapsed();
722 if ( m_readBGMethod == 0 )
725 for (
int j = 0; j < nskip; j++ )
730 ( *log ) << MSG::ERROR <<
"Cannot get next background event" << endmsg;
731 return StatusCode::FAILURE;
735 if ( m_readBGMethod == 1 )
738 next =
nextEvent( nskip, 0, m_nEventsToEnd );
741 ( *log ) << MSG::ERROR <<
"Cannot get next background event" << endmsg;
742 return StatusCode::FAILURE;
745 if ( m_readBGMethod == 2 )
751 ( *log ) << MSG::ERROR <<
"Cannot get next background event" << endmsg;
752 return StatusCode::FAILURE;
761 if ( m_mixingMethod == 1 )
763 if ( !next && m_totalEvent == 0 )
765 ( *log ) << MSG::ERROR <<
"Cannot get next background event" << endmsg;
766 return StatusCode::FAILURE;
770 if ( m_mixingMethod == 2 )
774 ( *log ) << MSG::ERROR <<
"Cannot get next background event" << endmsg;
775 return StatusCode::FAILURE;
779 mixDigi( mdcMcDigits, emcMcDigits, mucMcDigits, tofMcDigits );
787 m_time3 = m_timer->elapsed();
790 return StatusCode::SUCCESS;
803 m_raw_event->reset();
807 if ( m_ifOutPut ) { m_timer1->start(); }
809 const uint32_t* fragment;
810 if ( m_skip ==
true && m_readBGMethod == 0 ) fragment = m_fr->nextEvent();
811 if ( m_skip ==
true && m_readBGMethod == 1 )
813 if ( nskip == 0 ) fragment = m_fr->currentEvent();
814 else fragment = m_fr->nextEvent( nskip - 1 );
816 if ( m_skip ==
true && m_readBGMethod == 2 )
818 if ( nskip == 0 ) fragment = m_fr->currentEvent();
819 else fragment = m_fr->roughlyNextEvent( nskip - 1, evtbyte );
821 if ( m_skip ==
false ) fragment = m_fr->nextEvent();
826 m_time4 = m_timer1->elapsed();
837 std::cerr <<
"Found invalid event (traceback):" << std::endl;
841 uint32_t fFragmentSize =
f.fragment_size_word();
842 ( *log ) << MSG::DEBUG <<
"[Event No. #" <<
f.global_id() <<
"] " <<
f.fragment_size_word()
843 <<
" words in " <<
f.nchildren() <<
" subdetectors " << endmsg;
844 m_raw_event->setRunNo(
f.run_no() );
845 m_raw_event->setEventNo(
f.global_id() );
847 if ( m_dump ) { cout <<
"EventNo " <<
f.global_id() << endl; }
850 const uint32_t* ef = NULL;
851 f.event_filter_info( ef );
854 ( *log ) << MSG::ERROR <<
"Event Filter Data Failed!!!" << endmsg;
859 ( *log ) << MSG::DEBUG <<
"Event Filter Information*********" << std::hex << endmsg
860 << *ef <<
" " << *( ef + 1 ) <<
" " << *( ef + 2 ) <<
" " << *( ef + 3 )
861 << std::dec << endmsg;
862 m_raw_event->addReHltRaw( (uint32_t*)ef, (uint32_t)4 );
868 for (
int robi = 0; robi < nrobs; robi++ )
872 uint32_t* dataptr = NULL;
877 source_id_number <<= 8;
878 source_id_number >>= 24;
881 switch ( source_id_number )
883 case 161: m_raw_event->addReMdcDigi( dataptr, rob.
rod_ndata() );
break;
884 case 163: m_raw_event->addReEmcDigi( dataptr, rob.
rod_ndata() );
break;
885 case 162: m_raw_event->addReTofDigi( dataptr, rob.
rod_ndata() );
break;
886 case 167: m_raw_event->addReEtfDigi( dataptr, rob.
rod_ndata() );
break;
887 case 164: m_raw_event->addReMucDigi( dataptr, rob.
rod_ndata() );
break;
893 m_raw_event->addReTrigGTD( dataptr, rob.
rod_ndata() );
896 m_raw_event->addReHltRaw( dataptr, rob.
rod_ndata() );
899 m_raw_event->addMcParticle( dataptr, rob.
rod_ndata() );
909 m_time5 = m_timer1->elapsed();
913 if ( m_usingFilter ==
true )
918 if ( m_skip ==
true && m_readBGMethod == 0 )
919 {
return nextEvent( 1, evtbyte, eventsToEnd ); }
920 if ( m_skip ==
true && m_readBGMethod == 1 )
922 if ( m_RealizationSvc->UseDBFlag() ==
false || m_dbUserRequest ==
true )
923 return nextEvent( 1, evtbyte, eventsToEnd );
924 if ( eventsToEnd > 0 && m_RealizationSvc->UseDBFlag() ==
true &&
925 m_dbUserRequest ==
false )
928 return nextEvent( 1, evtbyte, eventsToEnd );
931 if ( m_skip ==
true && m_readBGMethod == 2 )
932 {
return nextEvent( 1, evtbyte, eventsToEnd ); }
933 if ( m_skip ==
false )
return nextEvent( nskip, evtbyte, eventsToEnd );
945 if ( m_skip ==
true && m_readBGMethod == 1 )
954 return nextEvent( nskip, evtbyte, eventsToEnd );
958 std::cerr << std::endl <<
"Uncaught eformat issue: " << ex.what() << std::endl;
961 std::cerr << std::endl <<
"Uncaught ERS issue: " << ex.what() << std::endl;
962 }
catch ( std::exception& ex )
964 std::cerr << std::endl <<
"Uncaught std exception: " << ex.what() << std::endl;
966 { std::cerr << std::endl <<
"Uncaught unknown exception" << std::endl; }
1083 SmartDataPtr<EmcDigiCol>& emcMcDigits,
1084 SmartDataPtr<MucDigiCol>& mucMcDigits,
1085 SmartDataPtr<TofDigiCol>& tofMcDigits ) {
1095 int tdc_min = -9, tdc_max = -9, tdc_tot = 0, tdc_num = 0;
1096 for ( MdcDigiCol::const_iterator bg = mdcCol.begin(); bg != mdcCol.end(); bg++ )
1098 if ( ( *bg )->getTimeChannel() < 0x7FFFFFFF )
1100 tdc_tot += ( *bg )->getTimeChannel();
1102 if ( tdc_min < 0 ) tdc_min = ( *bg )->getTimeChannel();
1105 if ( tdc_min > ( *bg )->getTimeChannel() ) tdc_min = ( *bg )->getTimeChannel();
1107 if ( tdc_max < 0 ) tdc_max = ( *bg )->getTimeChannel();
1110 if ( tdc_max < ( *bg )->getTimeChannel() ) tdc_max = ( *bg )->getTimeChannel();
1114 int tdc_mean = (int)( (
double)tdc_tot / (
double)tdc_num );
1120 tdc_mean - CLHEP::RandFlat::shootInt(
long( 0 ),
long( 80 * 24 / 0.09375 ) );
1121 if ( ( tdc_min - tdc_shift ) >= 0 &&
1122 ( tdc_max - tdc_shift ) <=
int( 80 * 24 / 0.09375 ) )
1125 if ( tdc_num > m_maxLoop )
break;
1129 for ( MdcDigiCol::const_iterator bg = mdcCol.begin(); bg != mdcCol.end(); bg++ )
1131 if ( ( *bg )->getTimeChannel() >= 0x7FFFFFFF )
continue;
1132 int newTDC = ( *bg )->getTimeChannel() - tdc_shift;
1133 if ( newTDC < 0 || newTDC >
int( 80 * 24 / 0.09375 ) )
1134 newTDC = int( CLHEP::RandFlat::shoot() * 80 * 24 / 0.09375 );
1135 ( *bg )->setTimeChannel( newTDC );
1265 std::vector<std::string> tmp_files = files;
1266 std::vector<int> tmp_ranEvtNums = ranEvtNums;
1271 const char* file_index[100];
1274 for (
int i = 0; i < 100; i++ )
1281 if ( tmp_files.size() >= 100 )
1283 std::cout <<
"ERROR: In MixerAlg::file_sort(), please change bigger array size"
1288 for (
unsigned int i = 0; i < tmp_files.size(); i++ )
1291 const char* file1 = tmp_files[i].c_str();
1292 const char* substr1 = strstr( file1,
"_file" );
1293 int strlen1 = strlen( substr1 );
1297 for (
int sub1 = 0; sub1 < strlen1; sub1++ )
1299 if ( substr1[sub1] ==
'e' )
1301 cset1[0] = substr1[sub1 + 1];
1302 cset1[1] = substr1[sub1 + 2];
1303 cset1[2] = substr1[sub1 + 3];
1306 else if ( substr1[sub1] ==
'-' )
1308 cnum1[0] = substr1[sub1 + 1];
1315 int set1 = atoi( cset1 );
1316 int num1 = atoi( cnum1 );
1317 int encode_set1 = set1 * 100 +
num1;
1319 for (
unsigned int j = 0; j < tmp_files.size(); j++ )
1321 if ( i == j )
continue;
1322 const char* file2 = tmp_files[j].c_str();
1323 const char* substr2 = strstr( file2,
"_file" );
1324 int strlen2 = strlen( substr2 );
1327 for (
int sub2 = 0; sub2 < strlen2; sub2++ )
1329 if ( substr2[sub2] ==
'e' )
1331 cset2[0] = substr2[sub2 + 1];
1332 cset2[1] = substr2[sub2 + 2];
1333 cset2[2] = substr2[sub2 + 3];
1336 else if ( substr2[sub2] ==
'-' )
1338 cnum2[0] = substr2[sub2 + 1];
1344 int set2 = atoi( cset2 );
1345 int num2 = atoi( cnum2 );
1346 int encode_set2 = set2 * 100 + num2;
1347 if ( encode_set1 > encode_set2 ) index++;
1349 file_index[index] = tmp_files[i].c_str();
1350 num_index[index] = tmp_ranEvtNums[i];
1351 set_index[index] = set1;
1355 for (
unsigned int i = 0; i < tmp_files.size(); i++ )
1357 files.push_back( file_index[i] );
1358 ranEvtNums.push_back( num_index[i] );
1359 if ( setNo != set_index[i] )
1361 setNo = set_index[i];
1362 int numSets_size = m_numSets.size();
1363 if ( numSets_size == 0 ) m_numSets.push_back( 1 );
1364 if ( numSets_size != 0 ) m_numSets.push_back( m_numSets[numSets_size - 1] + 1 );
1368 int numSets_size = m_numSets.size();
1369 m_numSets.push_back( m_numSets[numSets_size - 1] );