#include <MixerAlg.h>
Public Member Functions | |
StatusCode | execute () |
StatusCode | execute () |
StatusCode | finalize () |
StatusCode | finalize () |
StatusCode | initialize () |
StatusCode | initialize () |
MixerAlg (const std::string &name, ISvcLocator *pSvcLocator) | |
MixerAlg (const std::string &name, ISvcLocator *pSvcLocator) | |
~MixerAlg () | |
~MixerAlg () | |
Protected Member Functions | |
void | decodeEmc (EmcDigiCol *digiCol) |
void | decodeEmc (EmcDigiCol *digiCol) |
void | decodeMdc (MdcDigiCol *digiCol) |
void | decodeMdc (MdcDigiCol *digiCol) |
void | decodeMuc (MucDigiCol *digiCol) |
void | decodeMuc (MucDigiCol *digiCol) |
void | decodeTof (TofDigiCol *digiCol) |
void | decodeTof (TofDigiCol *digiCol) |
std::string | eventType () |
std::string | eventType () |
bool | file_sort (std::vector< std::string > &files, std::vector< int > &ranEvtNums) |
bool | file_sort (std::vector< std::string > &files, std::vector< int > &ranEvtNums) |
int | getTiming () |
int | getTiming () |
void | mixDigi (SmartDataPtr< MdcDigiCol > &mdcMcDigits, SmartDataPtr< EmcDigiCol > &emcMcDigits, SmartDataPtr< MucDigiCol > &mucMcDigits, SmartDataPtr< TofDigiCol > &tofMcDigits) |
void | mixDigi (SmartDataPtr< MdcDigiCol > &mdcMcDigits, SmartDataPtr< EmcDigiCol > &emcMcDigits, SmartDataPtr< MucDigiCol > &mucMcDigits, SmartDataPtr< TofDigiCol > &tofMcDigits) |
bool | nextEvent (int nskip=0, int evtbyte=0, int eventsToEnd=0) |
bool | nextEvent (int nskip=0, int evtbyte=0, int eventsToEnd=0) |
std::string | prepareDbQuery () |
std::string | prepareDbQuery () |
Private Attributes | |
bool | b_emc |
bool | b_mdc |
bool | b_muc |
bool | b_tof |
std::string | currentBGFile |
std::string | currentMCFile |
MsgStream * | log |
MsgStream * | log |
std::vector< std::string > | m_bgfiles |
std::vector< std::string > | m_bgfiles |
std::vector< std::string > | m_bgfilesIndex |
std::vector< std::string > | m_bgfilesIndex |
std::vector< std::string > | m_dates |
std::vector< std::string > | m_dates |
bool | m_dbUserRequest |
EmcConverter * | m_emcCnv |
EmcConverter * | m_emcCnv |
int | m_exRunFrom |
int | m_exRunTo |
RawFileReader * | m_fr |
RawFileReader * | m_fr |
bool | m_ifOutPut |
bool | m_ifSmearT0 |
DataInfoSvc * | m_jobInfoSvc |
DataInfoSvc * | m_jobInfoSvc |
int | m_maxLoop |
MdcConverter * | m_mdcCnv |
MdcConverter * | m_mdcCnv |
int | m_mixingMethod |
MucConverter * | m_mucCnv |
MucConverter * | m_mucCnv |
int | m_nevent |
int | m_nEventsToEnd |
int | m_NSkip |
std::vector< int > | m_numSets |
std::vector< int > | m_numSets |
std::vector< int > | m_ranStepLenInCurrentFile |
std::vector< int > | m_ranStepLenInCurrentFile |
std::vector< int > | m_ranTrgEvents |
std::vector< int > | m_ranTrgEvents |
RAWEVENT * | m_raw_event |
RAWEVENT * | m_raw_event |
int | m_readBGMethod |
RealizationSvc * | m_RealizationSvc |
RealizationSvc * | m_RealizationSvc |
std::string | m_run |
int | m_runNo |
std::vector< std::string > | m_runs |
std::vector< std::string > | m_runs |
bool | m_skip |
int | m_skipCount |
NTuple::Item< long > | m_tdc |
NTuple::Item< long > | m_tdc |
NTuple::Item< float > | m_time1 |
NTuple::Item< float > | m_time1 |
NTuple::Item< float > | m_time2 |
NTuple::Item< float > | m_time2 |
NTuple::Item< float > | m_time3 |
NTuple::Item< float > | m_time3 |
NTuple::Item< float > | m_time4 |
NTuple::Item< float > | m_time4 |
NTuple::Item< float > | m_time5 |
NTuple::Item< float > | m_time5 |
BesTimer * | m_timer |
BesTimer * | m_timer |
BesTimer * | m_timer1 |
BesTimer * | m_timer1 |
IBesTimerSvc * | m_timersvc |
IBesTimerSvc * | m_timersvc |
TofConverter * | m_tofCnv |
TofConverter * | m_tofCnv |
int | m_totalEvent |
int | m_totEvtNumInCurFile |
int | m_totRanEvtNum |
NTuple::Tuple * | m_tuple1 |
NTuple::Tuple * | m_tuple1 |
NTuple::Tuple * | m_tuple2 |
NTuple::Tuple * | m_tuple2 |
NTuple::Tuple * | m_tuple3 |
NTuple::Tuple * | m_tuple3 |
bool | m_usingFilter |
std::vector< int > | m_vRanEvtNumInSubSet |
std::vector< int > | m_vRanEvtNumInSubSet |
std::vector< int > | m_vStepLength |
std::vector< int > | m_vStepLength |
std::vector< int > | m_vStreamNumInSubSet |
std::vector< int > | m_vStreamNumInSubSet |
std::map< int, std::vector< int > > | map_stepLength |
std::map< int, std::vector< int > > | map_stepLength |
int | nskipped |
IBesRndmGenSvc * | p_BesRndmGenSvc |
IBesRndmGenSvc * | p_BesRndmGenSvc |
|
00035 : Algorithm(name, pSvcLocator){ 00036 declareProperty("MixMdcDigi", b_mdc=true); 00037 declareProperty("MixEmcDigi", b_emc=true); 00038 declareProperty("MixMucDigi", b_muc=true); 00039 declareProperty("MixTofDigi", b_tof=true); 00040 00041 declareProperty("DBUserRequest", m_dbUserRequest=false); 00042 declareProperty("RandomTrgRun", m_run); 00043 declareProperty("RandomTrgRunRange", m_runs); 00044 declareProperty("RandomTrgTimeRange", m_dates); 00045 00046 declareProperty("BackgroundDataFiles", m_bgfiles); 00047 declareProperty("NumRanTrgEvents", m_ranTrgEvents); 00048 declareProperty("NBgEventsToSignal", m_nevent=1); 00049 // declareProperty("LoopBgData", b_loop=true); 00050 declareProperty("IfSkip", m_skip=true); 00051 declareProperty("NSkip", m_NSkip=150); 00052 declareProperty("OutPut", m_ifOutPut=false); 00053 declareProperty("MixingMethod", m_mixingMethod=1); 00054 declareProperty("MaxLoop", m_maxLoop=10); 00055 declareProperty("SmearT0", m_ifSmearT0=true); 00056 declareProperty("ReadBGMethod", m_readBGMethod=1); 00057 00058 declareProperty("ExWireFromRun", m_exRunFrom = 0 ); 00059 declareProperty("ExWireToRun", m_exRunTo = 999999); 00060 00061 declareProperty("UsingFilter", m_usingFilter = true); 00062 00063 m_raw_event = 0; 00064 m_fr = 0; 00065 m_runNo = 0; 00066 m_skipCount = 0; 00067 currentBGFile = ""; 00068 currentMCFile = ""; 00069 m_totalEvent = 0; 00070 m_totEvtNumInCurFile = 0; 00071 m_nEventsToEnd = 0; 00072 m_ranStepLenInCurrentFile.clear(); 00073 00074 m_mdcCnv = MdcConverter::instance(); 00075 m_mucCnv = MucConverter::instance(); 00076 m_tofCnv = TofConverter::instance(); 00077 m_emcCnv = EmcConverter::instance(); 00078 }
|
|
00052 {}
|
|
|
|
00052 {}
|
|
|
|
01019 { 01020 const BufferHolder& emcBuf = m_raw_event->getEmcBuf(); 01021 m_emcCnv->convert(emcBuf, digiCol); 01022 }
|
|
|
|
01007 { 01008 const BufferHolder& mdcBuf = m_raw_event->getMdcBuf(); 01009 m_mdcCnv->convert(mdcBuf, digiCol); 01010 }
|
|
|
|
01013 { 01014 const BufferHolder& mucBuf = m_raw_event->getMucBuf(); 01015 m_mucCnv->convert(mucBuf, digiCol); 01016 }
|
|
|
|
01025 { 01026 const BufferHolder& tofBuf = m_raw_event->getTofBuf(); 01027 m_tofCnv->convert(tofBuf, digiCol); 01028 }
|
|
|
|
01031 { 01032 const BufferHolder& hltBuf = m_raw_event->getHltBuf(); 01033 DstHltInf* hlt = new DstHltInf(); 01034 hlt->setEventType(hltBuf(0)[0]); 01035 01036 std::string evtType = hlt->getEventName(); 01037 01038 if(hlt) delete hlt; 01039 01040 return evtType; 01041 }
|
|
|
|
00236 { 00237 //calculate time 00238 if(m_ifOutPut) { 00239 m_timer->start(); 00240 } 00241 00242 //caogf add 00243 SmartDataPtr<Event::EventHeader> evt(eventSvc(),"/Event/EventHeader"); 00244 if( !evt ){ 00245 return StatusCode::FAILURE; 00246 } 00247 00248 if(m_RealizationSvc->UseDBFlag() == true && m_RealizationSvc->ifReadRandTrg() == true && m_dbUserRequest == false) { 00249 int runNo = evt -> runNumber(); 00250 if((runNo != m_runNo) || (RootInterface::Instance(*log)->getCurrentFileName() != currentMCFile)) { 00251 m_runNo = runNo; 00252 currentMCFile = RootInterface::Instance(*log)->getCurrentFileName(); 00253 m_mdcCnv->setRunId(runNo); 00254 std::vector<std::string> bgfiles = m_RealizationSvc->getBgFileName(); 00255 //m_ranTrgEvents = m_RealizationSvc->getRanTrgEvtNum(); 00256 00257 // achieve bg index files 00258 std::vector<std::string> bgfilesIndex; 00259 bgfilesIndex.clear(); 00260 for(unsigned int bg_index = 0; bg_index < bgfiles.size(); bg_index++) { 00261 bgfilesIndex.push_back(bgfiles[bg_index] + ".idx"); 00262 } 00263 00264 // get event number of each bg file 00265 if(m_fr) delete m_fr; 00266 m_fr = new RawFileReader(bgfiles); 00267 std::vector<int> ranTrgEvents = m_fr->getEventNumber(bgfilesIndex); 00268 00269 // remove bg files with 0 event 00270 m_bgfiles.clear(); 00271 m_bgfilesIndex.clear(); 00272 m_ranTrgEvents.clear(); 00273 for(unsigned int bg_index = 0; bg_index < bgfiles.size(); bg_index++) { 00274 if(ranTrgEvents[bg_index] > 0) { 00275 m_bgfiles.push_back(bgfiles[bg_index]); 00276 m_bgfilesIndex.push_back(bgfilesIndex[bg_index]); 00277 m_ranTrgEvents.push_back(ranTrgEvents[bg_index]); 00278 } 00279 } 00280 00281 // get event number of each bg file 00282 if(m_fr) delete m_fr; 00283 m_fr = new RawFileReader(m_bgfiles); 00284 00285 // clear temp vector 00286 bgfiles.clear(); 00287 bgfilesIndex.clear(); 00288 ranTrgEvents.clear(); 00289 00290 // bg files exist? 00291 if(m_bgfiles.empty() || m_ranTrgEvents.empty()) { 00292 (*log) << MSG::WARNING << "No background datafiles found!!!" << endreq; 00293 return StatusCode::SUCCESS; 00294 } 00295 00296 if(m_skip == true) { 00297 if(m_mixingMethod == 1) { 00298 // Initialize 00299 m_ranStepLenInCurrentFile.clear(); 00300 currentBGFile = ""; 00301 m_skipCount = 0; 00302 m_totalEvent = 0; 00303 00304 // sort random trigger files by time increasing 00305 bool ifsucc = file_sort(m_bgfiles,m_ranTrgEvents); 00306 if( !ifsucc ) return StatusCode::FAILURE; 00307 00308 // achieve bg index files 00309 m_bgfilesIndex.clear(); 00310 for(unsigned int bg_index = 0; bg_index < m_bgfiles.size(); bg_index++) { 00311 m_bgfilesIndex.push_back(m_bgfiles[bg_index] + ".idx"); 00312 } 00313 00314 //count number of sets, total bg events in each set and total bg events in this run 00315 m_vRanEvtNumInSubSet.clear(); 00316 m_vStreamNumInSubSet.clear(); 00317 m_totRanEvtNum = 0; 00318 int set_no = -1; 00319 int ranEvtNumInSubSet = 0; 00320 int nstream = 0; 00321 for(unsigned int i = 0; i < m_ranTrgEvents.size(); i++) { 00322 if(i == 0) set_no = m_numSets[i]; 00323 if((i != 0) && (set_no != m_numSets[i])) { 00324 m_vRanEvtNumInSubSet.push_back(ranEvtNumInSubSet); 00325 m_vStreamNumInSubSet.push_back(nstream); 00326 ranEvtNumInSubSet = 0; 00327 nstream = 0; 00328 set_no = m_numSets[i]; 00329 } 00330 00331 m_totRanEvtNum += m_ranTrgEvents[i]; 00332 ranEvtNumInSubSet += m_ranTrgEvents[i]; 00333 nstream++; 00334 if(i == m_ranTrgEvents.size() - 1) { 00335 m_vRanEvtNumInSubSet.push_back(ranEvtNumInSubSet); 00336 m_vStreamNumInSubSet.push_back(nstream); 00337 } 00338 } 00339 00340 //get total event number in this run 00341 int evtNumInRun = -1; 00342 std::vector<int> vtotEvtNo = m_jobInfoSvc->getTotEvtNo(); 00343 for(unsigned int ii = 0; ii < vtotEvtNo.size(); ii+=2) { 00344 if(std::abs(runNo) == std::abs(vtotEvtNo[ii])) 00345 evtNumInRun = vtotEvtNo[ii+1]; 00346 } 00347 00348 //generate step length(event number) for each MC event to select background event 00349 double tau = m_RealizationSvc->getTauValue(); 00350 double totalTime = m_RealizationSvc->getRunTotalTime(); 00351 if(m_RealizationSvc->getTauValue() == 0. || m_RealizationSvc->getRunTotalTime() == 0.) { 00352 std::cout << "ERROR: In MixerAlg::execute() ---> The tau value or total run time is 0, please check it. Exit! " << std::endl; 00353 exit(1); 00354 } 00355 00356 bool using_exp = true; 00357 if(totalTime*100 < tau) using_exp = false; 00358 m_vStepLength.clear(); 00359 while(1) { 00360 double ranNum; 00361 if(using_exp == true) ranNum = RandExponential::shoot(tau); 00362 else ranNum = RandFlat::shoot(0., totalTime); 00363 if(ranNum > totalTime) continue; 00364 ranNum = ranNum*m_totRanEvtNum/totalTime; 00365 m_vStepLength.push_back((int)ranNum); 00366 if(m_vStepLength.size() == evtNumInRun) break; 00367 } 00368 00369 sort(m_vStepLength.begin(), m_vStepLength.end()); 00370 00371 // 00372 //Add a protect here 00373 // 00374 if(evtNumInRun <= 0 || m_totRanEvtNum <= 0) { 00375 (*log) << MSG::ERROR << "The event number (or random trigger event number) in run " << evt->runNumber() << " is zero" << endreq; 00376 return StatusCode::FAILURE; 00377 } 00378 00379 // 00380 //assigned step length and the number of selected bg events for each bg file 00381 // 00382 //1. define a map to store step length selected from each bg file 00383 map_stepLength.clear(); 00384 for(unsigned int i = 0; i < m_ranTrgEvents.size(); i++) { 00385 std::vector<int> vstepLength; 00386 typedef pair<int, std::vector<int> > vpair; 00387 map_stepLength.insert(vpair(i,vstepLength)); 00388 } 00389 //2. assign step length for each bg file 00390 for(unsigned int i = 0; i < m_ranTrgEvents.size(); ) { 00391 //2.1 calculate total bg event number in this set and previous sets 00392 int pre_ranEvtNumSubSet = 0; 00393 int cur_ranEvtNumSubSet = 0; 00394 set_no = m_numSets[i]; 00395 for(int j = 0; j < set_no; j++) { 00396 if(j != (set_no - 1)) pre_ranEvtNumSubSet += m_vRanEvtNumInSubSet[j]; 00397 cur_ranEvtNumSubSet += m_vRanEvtNumInSubSet[j]; 00398 } 00399 //2.2 assign step length 00400 for(unsigned j = 0; j < m_vStepLength.size(); j++) { 00401 //if current step length is in current set 00402 if((m_vStepLength[j] >= pre_ranEvtNumSubSet) && (m_vStepLength[j] < cur_ranEvtNumSubSet)) { 00403 int sub_stepLength = int((m_vStepLength[j]-pre_ranEvtNumSubSet)/m_vStreamNumInSubSet[set_no - 1]); 00404 int file_id = 0; 00405 int begin_fileId = -1, end_fileId = -1; 00406 for(std::map<int,std::vector<int> >::iterator iter = map_stepLength.begin(); iter != map_stepLength.end(); iter++) { 00407 //check current set number 00408 if(set_no == m_numSets[iter->first]) { 00409 if(begin_fileId == -1) begin_fileId = iter->first; 00410 file_id++; 00411 } 00412 } 00413 end_fileId = begin_fileId + file_id; 00414 bool add_succ = false; 00415 long loop_count = 0; 00416 00417 while(1) { 00418 int random_file = int(RandFlat::shootInt(long(begin_fileId), long(end_fileId))); //exclude end_fileId 00419 if(sub_stepLength < m_ranTrgEvents[random_file]) { 00420 map_stepLength[random_file].push_back(sub_stepLength); 00421 add_succ = true; 00422 loop_count = 0; 00423 } 00424 if(add_succ) break; 00425 loop_count++; 00426 if(loop_count >= MAX_LOOP_TIMES) { 00427 (*log) << MSG::ALWAYS << "Loop time is larger than MAX_LOOP_TIMES(" << MAX_LOOP_TIMES << ") in MixAlg, when assigning step length for each bg file." << endreq; 00428 exit(1); 00429 } 00430 } 00431 } //endif current step length is in current set 00432 } //end assign step length 00433 i += m_vStreamNumInSubSet[set_no - 1]; 00434 } 00435 00436 // check selected bg events number, equal to MC events? 00437 unsigned int ranSelectedNum = 0; 00438 for(std::map<int,std::vector<int> >::iterator iter = map_stepLength.begin(); iter != map_stepLength.end(); iter++) { 00439 ranSelectedNum += (iter->second).size(); 00440 //std::cout << "file_id: " << iter->first << " ranEvtNumSelected: " << (iter->second).size() << std::endl; 00441 } 00442 if(ranSelectedNum != m_vStepLength.size()) { 00443 (*log) << MSG::ERROR << "In MixerAlg::excute()--> selected bg events number not equal to MC events" << endreq; 00444 return StatusCode::FAILURE; 00445 } 00446 } 00447 } 00448 00449 if(m_mixingMethod == 2) { 00450 // open background stream 00451 if (m_fr) delete m_fr; 00452 m_fr = NULL; 00453 try { 00454 m_bgfilesIndex.clear(); 00455 for(unsigned int bg_index = 0; bg_index < m_bgfiles.size(); bg_index++) { 00456 m_bgfilesIndex.push_back(m_bgfiles[bg_index] + ".idx"); 00457 } 00458 if(m_skip == true && m_readBGMethod == 1) m_fr = new RawFileReader(m_bgfiles, m_bgfilesIndex) ; 00459 else m_fr = new RawFileReader(m_bgfiles) ; 00460 } 00461 catch (RawFileException& ex) { 00462 ex.print(); 00463 return StatusCode::FAILURE; 00464 } 00465 } 00466 00467 m_raw_event->reset(); 00468 } 00469 } 00470 if(m_ifOutPut) { 00471 m_timer->stop(); 00472 m_time1 = m_timer->elapsed(); 00473 m_timer->start(); 00474 } 00475 //end caogf add 00476 SmartDataPtr<MdcDigiCol> mdcMcDigits(eventSvc(),"/Event/Digi/MdcDigiCol"); 00477 if( ! mdcMcDigits ) 00478 (*log) << MSG::ERROR << "Unable to retrieve MdcDigiCol" << endreq; 00479 else 00480 (*log) << MSG::INFO << "MdcDigiCol retrieved of size "<< mdcMcDigits->size() << endreq; 00481 00482 SmartDataPtr<EmcDigiCol> emcMcDigits(eventSvc(),"/Event/Digi/EmcDigiCol"); 00483 if( ! emcMcDigits ) 00484 (*log) << MSG::ERROR << "Unable to retrieve EmcDigiCol" << endreq; 00485 else 00486 (*log) << MSG::INFO << "EmcDigiCol retrieved of size "<< emcMcDigits->size() << endreq; 00487 00488 SmartDataPtr<MucDigiCol> mucMcDigits(eventSvc(),"/Event/Digi/MucDigiCol"); 00489 if( ! mucMcDigits ) 00490 (*log) << MSG::ERROR << "Unable to retrieve MucDigiCol" << endreq; 00491 else 00492 (*log) << MSG::INFO << "MucDigiCol retrieved of size "<< mucMcDigits->size() << endreq; 00493 00494 SmartDataPtr<TofDigiCol> tofMcDigits(eventSvc(),"/Event/Digi/TofDigiCol"); 00495 if( ! tofMcDigits ) 00496 (*log) << MSG::ERROR << "Unable to retrieve TofDigiCol" << endreq; 00497 else 00498 (*log) << MSG::INFO << "TofDigiCol retrieved of size "<< tofMcDigits->size() << endreq; 00499 00500 for(int ievent = 0; ievent<m_nevent; ievent++) 00501 { 00502 (*log) << MSG::INFO << "Mixing BG Event " << ievent << endreq; 00503 //if(m_skip == true) { 00504 // nskipped = 0; 00505 // m_skipCount = (int(m_NSkip*(RandFlat::shoot())) + 1); 00506 //} 00507 bool next = false; 00508 if(m_skip == true) { 00509 int nskip = 0; 00510 if(m_mixingMethod == 1) { 00511 if(m_RealizationSvc->UseDBFlag() == true && m_dbUserRequest == false) { 00512 if(m_skipCount >= m_ranStepLenInCurrentFile.size()) { 00513 m_ranStepLenInCurrentFile.clear(); 00514 for(std::map<int,std::vector<int> >::iterator iter = map_stepLength.begin(); iter != map_stepLength.end(); iter++) { 00515 if(currentBGFile == "") { 00516 if((iter->second).size() == 0) continue; 00517 if(m_fr) delete m_fr; 00518 try { 00519 if(m_readBGMethod == 1) m_fr = new RawFileReader(m_bgfiles[iter->first], m_bgfiles[iter->first]+".idx") ; 00520 else m_fr = new RawFileReader(m_bgfiles[iter->first]) ; 00521 m_totEvtNumInCurFile = m_ranTrgEvents[iter->first]; 00522 } 00523 catch (RawFileException& ex) { 00524 ex.print(); 00525 } 00526 m_ranStepLenInCurrentFile = iter->second; 00527 m_skipCount = 0; 00528 currentBGFile = m_fr->currentFile(); 00529 break; 00530 } 00531 if(currentBGFile == m_bgfiles[iter->first]) { 00532 iter++; 00533 if(iter == map_stepLength.end()) return StatusCode::FAILURE; 00534 if((iter->second).size() == 0) { 00535 while(1) { 00536 iter++; 00537 if(iter == map_stepLength.end()) return StatusCode::FAILURE; 00538 if((iter->second).size() > 0) break; 00539 } 00540 } 00541 if(m_fr) delete m_fr; 00542 try { 00543 if(m_readBGMethod == 1) m_fr = new RawFileReader(m_bgfiles[iter->first], m_bgfiles[iter->first]+".idx") ; 00544 else m_fr = new RawFileReader(m_bgfiles[iter->first]) ; 00545 m_totEvtNumInCurFile = m_ranTrgEvents[iter->first]; 00546 } 00547 catch (RawFileException& ex) { 00548 ex.print(); 00549 } 00550 m_ranStepLenInCurrentFile = iter->second; 00551 m_skipCount = 0; 00552 currentBGFile = m_fr->currentFile(); 00553 break; 00554 } 00555 } 00556 } 00557 //std::cout << "skipcount: " << m_skipCount << " stepLength: " << m_ranStepLenInCurrentFile[m_skipCount] <<" total event number: " << m_totEvtNumInCurFile << std::endl; 00558 00559 if(m_skipCount == 0) nskip = m_ranStepLenInCurrentFile[m_skipCount]; 00560 else nskip = m_ranStepLenInCurrentFile[m_skipCount] - m_ranStepLenInCurrentFile[m_skipCount - 1]; 00561 00562 m_nEventsToEnd = (m_totEvtNumInCurFile - 1) - m_ranStepLenInCurrentFile[m_skipCount]; //number of events to the end of current file 00563 00564 if(m_skipCount == 0 && nskip == 0) nskip = 1; 00565 //std::cout << "nskip: " << nskip << std::endl; 00566 m_skipCount++; 00567 } 00568 if(m_RealizationSvc->UseDBFlag() == false || m_dbUserRequest == true) nskip = int (2*m_NSkip*(RandFlat::shoot())) + 1; 00569 if(m_totalEvent == 0 && nskip == 0) nskip = 1; 00570 } 00571 if(m_mixingMethod == 2) { 00572 nskip = int (2*m_NSkip*(RandFlat::shoot())) + 1; 00573 } 00574 if(m_ifOutPut) { 00575 m_timer->stop(); 00576 m_time2 = m_timer->elapsed(); 00577 m_timer->start(); 00578 } 00579 00580 // get that bg event 00581 if(m_readBGMethod == 0) { 00582 // same with previous versions 00583 for(int j = 0; j < nskip; j++) { 00584 next = nextEvent(); 00585 if ( ! next ) 00586 { 00587 (*log) << MSG::ERROR << "Cannot get next background event" << endreq; 00588 return StatusCode::FAILURE; 00589 } 00590 } 00591 } 00592 if(m_readBGMethod == 1) { 00593 // new method to read bg events, using index file. 00594 next = nextEvent(nskip,0,m_nEventsToEnd); 00595 if ( ! next ) 00596 { 00597 (*log) << MSG::ERROR << "Cannot get next background event" << endreq; 00598 return StatusCode::FAILURE; 00599 } 00600 } 00601 if(m_readBGMethod == 2) { 00602 // new method to read bg events, using rude localizer. 00603 next = nextEvent(nskip, 14*1024); 00604 if ( ! next ) 00605 { 00606 (*log) << MSG::ERROR << "Cannot get next background event" << endreq; 00607 return StatusCode::FAILURE; 00608 } 00609 } 00610 } 00611 else { // if skip = false 00612 next = nextEvent(); 00613 } 00614 00615 if(m_mixingMethod == 1) { 00616 if ( !next && m_totalEvent == 0) { 00617 (*log) << MSG::ERROR << "Cannot get next background event" << endreq; 00618 return StatusCode::FAILURE; 00619 } 00620 } 00621 00622 if(m_mixingMethod == 2) { 00623 if ( !next ) { 00624 (*log) << MSG::ERROR << "Cannot get next background event" << endreq; 00625 return StatusCode::FAILURE; 00626 } 00627 } 00628 00629 mixDigi(mdcMcDigits, emcMcDigits, mucMcDigits, tofMcDigits); 00630 } 00631 00632 m_totalEvent++; 00633 00634 if(m_ifOutPut) { 00635 m_timer->stop(); 00636 m_time3 = m_timer->elapsed(); 00637 m_tuple1->write(); 00638 } 00639 00640 00641 return StatusCode::SUCCESS; 00642 }
|
|
|
|
01097 { 01098 std::vector<std::string> tmp_files = files; 01099 std::vector<int> tmp_ranEvtNums = ranEvtNums; 01100 files.clear(); 01101 ranEvtNums.clear(); 01102 m_numSets.clear(); 01103 01104 char* file_index[100]; 01105 int num_index[100]; 01106 int set_index[100]; 01107 for(int i = 0; i < 100; i++) { 01108 file_index[i] = ""; 01109 num_index[i] = 0; 01110 set_index[i] = 0; 01111 } 01112 01113 if(tmp_files.size() >= 100) { 01114 std::cout << "ERROR: In MixerAlg::file_sort(), please change bigger array size" << std::endl; 01115 return false; 01116 } 01117 01118 for(unsigned int i = 0; i < tmp_files.size(); i++) { 01119 int index = 0; 01120 const char* file1 = tmp_files[i].c_str(); 01121 char* substr1 = strstr(file1,"_file"); 01122 int strlen1 = strlen(substr1); 01123 char cset1[4]; 01124 char cnum1[2]; 01125 01126 for(int sub1 = 0; sub1 < strlen1; sub1++) { 01127 if(substr1[sub1] == 'e') { 01128 cset1[0] = substr1[sub1+1]; 01129 cset1[1] = substr1[sub1+2]; 01130 cset1[2] = substr1[sub1+3]; 01131 cset1[3] = '\0'; 01132 } 01133 else if(substr1[sub1] == '-') { 01134 cnum1[0] = substr1[sub1+1]; 01135 cnum1[1] = '\0'; 01136 break; 01137 } 01138 else { 01139 continue; 01140 } 01141 } 01142 01143 int set1 = atoi(cset1); 01144 int num1 = atoi(cnum1); 01145 int encode_set1 = set1*100 + num1; 01146 01147 for(unsigned int j = 0; j < tmp_files.size(); j++) { 01148 if(i == j) continue; 01149 const char* file2 = tmp_files[j].c_str(); 01150 char* substr2 = strstr(file2,"_file"); 01151 int strlen2 = strlen(substr2); 01152 char cset2[4]; 01153 char cnum2[2]; 01154 for(int sub2 = 0; sub2 < strlen2; sub2++) { 01155 if(substr2[sub2] == 'e') { 01156 cset2[0] = substr2[sub2+1]; 01157 cset2[1] = substr2[sub2+2]; 01158 cset2[2] = substr2[sub2+3]; 01159 cset2[3] = '\0'; 01160 } 01161 else if(substr2[sub2] == '-') { 01162 cnum2[0] = substr2[sub2+1]; 01163 cnum2[1] = '\0'; 01164 break; 01165 } 01166 else { 01167 continue; 01168 } 01169 } 01170 int set2 = atoi(cset2); 01171 int num2 = atoi(cnum2); 01172 int encode_set2 = set2*100 + num2; 01173 if(encode_set1 > encode_set2) index++; 01174 } 01175 file_index[index] = tmp_files[i].c_str(); 01176 num_index[index] = tmp_ranEvtNums[i]; 01177 set_index[index] = set1; 01178 } 01179 01180 int setNo = -10; 01181 for(unsigned int i = 0; i < tmp_files.size(); i++) { 01182 files.push_back(file_index[i]); 01183 ranEvtNums.push_back(num_index[i]); 01184 if(setNo != set_index[i]) { 01185 setNo = set_index[i]; 01186 int numSets_size = m_numSets.size(); 01187 if(numSets_size == 0) m_numSets.push_back(1); 01188 if(numSets_size != 0) m_numSets.push_back(m_numSets[numSets_size - 1] + 1); 01189 } 01190 else { 01191 int numSets_size = m_numSets.size(); 01192 m_numSets.push_back(m_numSets[numSets_size - 1]); 01193 } 01194 } 01195 01196 return true; 01197 }
|
|
|
|
00644 { 00645 if( m_raw_event ) delete m_raw_event; 00646 if( log ) delete log; 00647 if( m_fr) delete m_fr; 00648 return StatusCode::SUCCESS; 00649 }
|
|
|
|
01044 { 01045 int timing = 0; 01046 01047 TrigGTD* trigGTD = NULL; 01048 TrigGTDCol* gtdCol = new TrigGTDCol; 01049 01050 const BufferHolder& gtdBuf = m_raw_event->getGTDBuf(); 01051 uint32_t nbuf = gtdBuf.nBuf(); 01052 01053 for (uint32_t i = 0; i < nbuf; i++) { 01054 uint32_t* buf = gtdBuf(i); 01055 uint32_t bufSize = gtdBuf.bufSize(i); 01056 uint32_t index = 0; 01057 while (bufSize - index > 1) { 01058 uint32_t blockSize = ( ((*(buf+index))>>14) & 0x3FF); 01059 uint32_t id = ((*(buf+index))>>24); 01060 if (blockSize == 0 || (index+blockSize) > bufSize) break; 01061 if ((id> 0xD1 && id < 0xD8 && id != 0xD5) || id == 0xDA || (id > 0xE1 && id < 0xED)) { 01062 trigGTD = new TrigGTD(buf+index); 01063 gtdCol->push_back(trigGTD); 01064 } 01065 index += blockSize; 01066 } 01067 } 01068 01069 TrigGTDCol::iterator iter = gtdCol->begin(); 01070 for (;iter != gtdCol->end(); iter++ ) { 01071 const uint32_t boardId = (*iter)->getId(); //The board Id 0xd3: GTL, 0xD2: SAF1, 0xD4: SAF2, 0xD6: SAF3 01072 const uint32_t timeWindow = (*iter)->getTimeWindow(); //Time window, bit8 to bit13, total: 0--31 01073 const uint32_t size = (*iter)->getDataSize(); //The size of trigger data, not include head 01074 const uint32_t* trigData = (*iter)->getDataPtr(); //Trigger data 01075 01076 //Get data group 5 in GTL, including trigger channel, timing and prescale. 01077 if(boardId == 0xd3) { 01078 if(size%timeWindow != 0) { 01079 std::cout << "GTL data is NOT completed, exit." << std::endl; 01080 exit(0); 01081 } 01082 for(uint32_t j = 0; j < size; j++) { 01083 uint32_t dataId = ((trigData[j] >> 24) & 0x7); 01084 if(dataId != 5) continue; //find data group 5 01085 for(uint32_t i = 1, loop = 0; loop < 24; i <<= 1, loop++) { 01086 if((loop == 16) && (trigData[j] & i)) timing = 1; 01087 if((loop == 17) && (trigData[j] & i) && (timing != 1)) timing = 2; 01088 if((loop == 18) && (trigData[j] & i) && (timing == 0)) timing = 3; 01089 } 01090 } 01091 } 01092 } 01093 01094 return timing; 01095 }
|
|
|
|
00112 { 00113 log = new MsgStream(messageService(), name() ); 00114 //Caogf add 00115 IRealizationSvc *tmpReal; 00116 StatusCode status = service("RealizationSvc",tmpReal); 00117 if (!status.isSuccess()) 00118 { 00119 (*log) << MSG::FATAL << " Could not initialize Realization Service" << endreq; 00120 } else { 00121 m_RealizationSvc=dynamic_cast<RealizationSvc*>(tmpReal); 00122 } 00123 00124 if(m_RealizationSvc->UseDBFlag() == true && m_RealizationSvc->ifReadRandTrg() == true && m_dbUserRequest == true) { 00125 std::string query = prepareDbQuery(); 00126 m_bgfiles = m_RealizationSvc->getBgFileName(query); 00127 } 00128 00129 // initialize MDC converter 00130 m_mdcCnv->init(m_exRunFrom,m_exRunTo); 00131 00132 //caogf for random seed 00133 static const bool CREATEIFNOTTHERE(true); 00134 StatusCode RndmStatus = service("BesRndmGenSvc", p_BesRndmGenSvc, CREATEIFNOTTHERE); 00135 if (!RndmStatus.isSuccess() || 0 == p_BesRndmGenSvc) 00136 { 00137 (*log) << MSG::ERROR << " Could not initialize Random Number Service" << endreq; 00138 return RndmStatus; 00139 } 00140 00141 //get jobSvc 00142 IDataInfoSvc *tmpInfoSvc; 00143 status = service("DataInfoSvc",tmpInfoSvc); 00144 if (status.isSuccess()) { 00145 (*log) << MSG::INFO << "get the DataInfoSvc" << endreq; 00146 m_jobInfoSvc=dynamic_cast<DataInfoSvc *>(tmpInfoSvc); 00147 }else { 00148 (*log) << MSG::WARNING << "could not get the DataInfoSvc." << endreq; 00149 } 00150 //end caogf add 00151 00152 if(m_RealizationSvc->UseDBFlag() == false || m_dbUserRequest == true) { 00153 if(m_bgfiles.empty()) { 00154 (*log) << MSG::WARNING << "No background datafiles found" << endreq; 00155 return StatusCode::SUCCESS; 00156 } 00157 00158 // open background stream 00159 try { 00160 m_bgfilesIndex.clear(); 00161 for(unsigned int bg_index = 0; bg_index < m_bgfiles.size(); bg_index++) { 00162 m_bgfilesIndex.push_back(m_bgfiles[bg_index] + ".idx"); 00163 } 00164 if(m_skip == true && m_readBGMethod == 1) m_fr = new RawFileReader(m_bgfiles, m_bgfilesIndex) ; 00165 else m_fr = new RawFileReader(m_bgfiles) ; 00166 } 00167 catch (RawFileException& ex) { 00168 ex.print(); 00169 return StatusCode::FAILURE; 00170 } 00171 00172 } 00173 m_raw_event = new RAWEVENT; 00174 00175 if(m_ifOutPut) { 00176 NTuplePtr nt1(ntupleSvc(), "FILE1/n1"); 00177 if(nt1) m_tuple1 = nt1; 00178 else { 00179 m_tuple1 = ntupleSvc()->book("FILE1/n1",CLID_ColumnWiseTuple,"Field"); 00180 if( m_tuple1 ) { 00181 status = m_tuple1->addItem("time1", m_time1 ); 00182 status = m_tuple1->addItem("time2", m_time2 ); 00183 status = m_tuple1->addItem("time3", m_time3 ); 00184 } 00185 else { 00186 (*log) << MSG::ERROR << " Cannot book N-tuple:" <<long(m_tuple1)<< endreq; 00187 return StatusCode::FAILURE; 00188 } 00189 } 00190 00191 NTuplePtr nt2(ntupleSvc(), "FILE1/n2"); 00192 if(nt2) m_tuple2 = nt2; 00193 else { 00194 m_tuple2 = ntupleSvc()->book("FILE1/n2",CLID_ColumnWiseTuple,"Field"); 00195 if( m_tuple2 ) { 00196 status = m_tuple2->addItem("tdc", m_tdc ); 00197 } 00198 else { 00199 (*log) << MSG::ERROR << " Cannot book N-tuple:" <<long(m_tuple2)<< endreq; 00200 return StatusCode::FAILURE; 00201 } 00202 } 00203 00204 NTuplePtr nt3(ntupleSvc(), "FILE1/n3"); 00205 if(nt3) m_tuple3 = nt3; 00206 else { 00207 m_tuple3 = ntupleSvc()->book("FILE1/n3",CLID_ColumnWiseTuple,"Field"); 00208 if( m_tuple3 ) { 00209 status = m_tuple3->addItem("time4", m_time4 ); 00210 status = m_tuple3->addItem("time5", m_time5 ); 00211 } 00212 else { 00213 (*log) << MSG::ERROR << " Cannot book N-tuple:" <<long(m_tuple3)<< endreq; 00214 return StatusCode::FAILURE; 00215 } 00216 } 00217 00218 status = service("BesTimerSvc", m_timersvc); 00219 if (status.isFailure()) { 00220 (*log) << MSG::ERROR << name() << ": Unable to locate BesTimer Service" << endreq; 00221 return StatusCode::FAILURE; 00222 } 00223 m_timer = m_timersvc->addItem("Read field Time"); 00224 m_timer1 = m_timersvc->addItem("Read raw files"); 00225 } 00226 00227 //For random seed added by caogf. Note the position of the code, otherwise it is not available. 00228 CLHEP::HepRandomEngine* engine = p_BesRndmGenSvc->GetEngine("MIX"); 00229 HepRandom::setTheEngine(engine); 00230 HepRandom::showEngineStatus(); 00231 00232 return StatusCode::SUCCESS; 00233 }
|
|
|
|
00935 { 00936 if( b_mdc )// MDC 00937 { 00938 MdcDigiCol mdcCol; 00939 decodeMdc(&mdcCol); 00940 //combineDigits<MdcDigiCol, MdcDigi>(mdcMcDigits, mdcCol, log->level()); 00941 00942 // Find minimal tdc and maximum tdc and calculate mean tdc. 00943 if(m_ifSmearT0 && getTiming() > 0) { 00944 int tdc_min = -9, tdc_max = -9, tdc_tot = 0, tdc_num = 0; 00945 for(MdcDigiCol::const_iterator bg = mdcCol.begin(); bg != mdcCol.end(); bg++ ) 00946 { 00947 if((*bg)->getTimeChannel() < 0x7FFFFFFF) { 00948 tdc_tot += (*bg)->getTimeChannel(); 00949 tdc_num++; 00950 if(tdc_min < 0) tdc_min = (*bg)->getTimeChannel(); 00951 else { 00952 if(tdc_min > (*bg)->getTimeChannel()) tdc_min = (*bg)->getTimeChannel(); 00953 } 00954 if(tdc_max < 0) tdc_max = (*bg)->getTimeChannel(); 00955 else { 00956 if(tdc_max < (*bg)->getTimeChannel()) tdc_max = (*bg)->getTimeChannel(); 00957 } 00958 } 00959 } 00960 int tdc_mean = (int) ((double)tdc_tot/(double)tdc_num); 00961 tdc_num = 0; 00962 int tdc_shift; 00963 while(1) { 00964 tdc_shift = tdc_mean - CLHEP::RandFlat::shootInt(long(0), long(80*24/0.09375)); 00965 if((tdc_min - tdc_shift)>=0 && (tdc_max - tdc_shift) <= int(80*24/0.09375)) break; 00966 tdc_num++; 00967 if(tdc_num > m_maxLoop) break; 00968 } 00969 00970 // Set new tdc 00971 for(MdcDigiCol::const_iterator bg = mdcCol.begin(); bg != mdcCol.end(); bg++ ) 00972 { 00973 if((*bg)->getTimeChannel() >= 0x7FFFFFFF) continue; 00974 int newTDC = (*bg)->getTimeChannel() - tdc_shift; 00975 if(newTDC < 0 || newTDC > int(80*24/0.09375)) newTDC = int(CLHEP::RandFlat::shoot()*80*24/0.09375); 00976 (*bg)->setTimeChannel(newTDC); 00977 00978 //m_tdc = (*bg)->getTimeChannel(); 00979 //m_tuple2->write(); 00980 } 00981 } 00982 //combineDigits<MdcDigiCol, MdcDigi>(mdcMcDigits, mdcCol, log->level()); 00983 combineMdcDigits(mdcMcDigits, mdcCol, log->level()); 00984 } 00985 if( b_emc )//EMC 00986 { 00987 EmcDigiCol emcCol; 00988 decodeEmc(&emcCol); 00989 combineDigits<EmcDigiCol, EmcDigi>(emcMcDigits, emcCol, log->level()); 00990 } 00991 if( b_muc )// MUC 00992 { 00993 MucDigiCol mucCol; 00994 decodeMuc(&mucCol); 00995 combineDigits<MucDigiCol, MucDigi>(mucMcDigits, mucCol, log->level()); 00996 } 00997 if( b_tof )// TOF 00998 { 00999 TofDigiCol tofCol; 01000 decodeTof(&tofCol); 01001 //combineDigits<TofDigiCol, TofDigi>(tofMcDigits, tofCol, log->level()); 01002 combineTofDigits(tofMcDigits, tofCol, log->level()); 01003 } 01004 }
|
|
|
|
00653 { 00654 00655 m_raw_event->reset(); 00656 00657 try { 00658 if(m_ifOutPut) { 00659 m_timer1->start(); 00660 } 00661 00662 const uint32_t* fragment; 00663 if(m_skip == true && m_readBGMethod == 0) fragment = m_fr->nextEvent(); 00664 if(m_skip == true && m_readBGMethod == 1) { 00665 if(nskip == 0) fragment = m_fr->currentEvent(); 00666 else fragment = m_fr->nextEvent(nskip - 1); 00667 } 00668 if(m_skip == true && m_readBGMethod == 2) { 00669 if(nskip == 0) fragment = m_fr->currentEvent(); 00670 else fragment = m_fr->roughlyNextEvent(nskip - 1, evtbyte); 00671 } 00672 if(m_skip == false) fragment = m_fr->nextEvent(); 00673 00674 if(m_ifOutPut) { 00675 m_timer1->stop(); 00676 m_time4 = m_timer1->elapsed(); 00677 m_timer1->start(); 00678 } 00679 //if (fragment == NULL) { 00680 // (*log) << MSG::ERROR << "RawFileReader::nextEvent() Failed!!!" << endreq; 00681 // exit(1); 00682 // } 00683 00684 RawEvent f(fragment); 00685 if (!f.check()) { 00686 std::cerr << "Found invalid event (traceback):" << std::endl; 00687 std::exit(1); 00688 } 00689 //1.print basic event information 00690 uint32_t fFragmentSize = f.fragment_size_word(); 00691 (*log) << MSG::DEBUG << "[Event No. #" << f.global_id() 00692 << "] " << f.fragment_size_word() << " words in " 00693 << f.nchildren() << " subdetectors " 00694 << endreq; 00695 m_raw_event->setRunNo(f.run_no()); 00696 m_raw_event->setEventNo(f.global_id()); 00697 00698 //fucd: get event filter information 00699 const uint32_t* ef=NULL; 00700 f.event_filter_info(ef); 00701 if(!ef){ 00702 (*log) << MSG::ERROR << "Event Filter Data Failed!!!" << endreq; 00703 exit(1); 00704 } 00705 else{ 00706 (*log) << MSG::DEBUG<< "Event Filter Information*********" <<std::hex<<endreq 00707 <<*ef<< " "<<*(ef+1)<<" "<<*(ef+2)<<" "<<*(ef+3)<<std::dec<<endreq; 00708 m_raw_event->addReHltRaw((uint32_t*)ef, (uint32_t)4); 00709 } 00710 00711 uint32_t *robs[64]; 00712 int nrobs = eformat::get_robs(fragment, (const uint32_t **)robs, 64); 00713 00714 for (int robi = 0; robi < nrobs; robi++) { 00715 eformat::ROBFragment<uint32_t*> rob(robs[robi]); 00716 if ((rob.rod_detev_type() & 0x2) != 0) continue; //bad data caogf add 00717 uint32_t* dataptr = NULL; 00718 rob.rod_data(dataptr); 00719 00720 uint32_t source_id_number = rob.rod_source_id(); 00721 //std::cout<<"#####source_id_number#####"<<source_id_number<<std::endl; 00722 source_id_number <<= 8; 00723 source_id_number >>= 24; 00724 //std::cout<<"#####(source_id_number<<24)>>29#####"<<source_id_number<<std::endl; 00725 //be careful here!!! 00726 switch(source_id_number) { 00727 case 161: 00728 m_raw_event->addReMdcDigi(dataptr, rob.rod_ndata()); 00729 break; 00730 case 163: 00731 m_raw_event->addReEmcDigi(dataptr, rob.rod_ndata()); 00732 break; 00733 case 162: 00734 m_raw_event->addReTofDigi(dataptr, rob.rod_ndata()); 00735 break; 00736 case 164: 00737 m_raw_event->addReMucDigi(dataptr, rob.rod_ndata()); 00738 break; 00739 case 165: // trigger !!! 00740 //std::cout << "Get Trigger Data -" << std::endl; 00741 //for (int i = 0; i < rob.rod_ndata(); i++) { 00742 // std::cout << "\t0x" << std::hex << dataptr[i] << std::dec << std::endl; 00743 //} 00744 m_raw_event->addReTrigGTD(dataptr, rob.rod_ndata()); 00745 break; 00746 case 124: // EventFilter 00747 m_raw_event->addReHltRaw(dataptr, rob.rod_ndata()); 00748 break; 00749 case 241: // McParticle 00750 m_raw_event->addMcParticle(dataptr, rob.rod_ndata()); 00751 break; 00752 default: 00753 std::cerr << "no such subdetector type: " << source_id_number << std::endl; 00754 break; 00755 } 00756 } 00757 if(m_ifOutPut) { 00758 m_timer1->stop(); 00759 m_time5 = m_timer1->elapsed(); 00760 m_tuple3->write(); 00761 } 00762 00763 if(m_usingFilter == true) { 00764 if(eventType() == "GHadron" || eventType() == "GEBhabha" || eventType() == "GBBhabha" || eventType() == "GCosmic" || eventType() == "GDimuon") { 00765 if(m_skip == true && m_readBGMethod == 0) { 00766 return nextEvent(1, evtbyte, eventsToEnd); 00767 } 00768 if(m_skip == true && m_readBGMethod == 1) { 00769 if(m_RealizationSvc->UseDBFlag() == false || m_dbUserRequest == true) return nextEvent(1, evtbyte, eventsToEnd); 00770 if(eventsToEnd > 0 && m_RealizationSvc->UseDBFlag() == true && m_dbUserRequest == false ) { 00771 eventsToEnd--; 00772 return nextEvent(1, evtbyte, eventsToEnd); 00773 } 00774 } 00775 if(m_skip == true && m_readBGMethod == 2) { 00776 return nextEvent(1, evtbyte, eventsToEnd); 00777 } 00778 if(m_skip == false) return nextEvent(nskip, evtbyte, eventsToEnd); 00779 } 00780 } 00781 00782 return true; 00783 } 00784 catch (ReachEndOfFileList& ex){ 00785 ex.print(); 00786 00787 delete m_fr; 00788 try { 00789 if(m_skip == true && m_readBGMethod == 1) m_fr = new RawFileReader(m_bgfiles, m_bgfilesIndex) ; 00790 else m_fr = new RawFileReader(m_bgfiles); 00791 } 00792 catch (RawFileException& ex) { 00793 ex.print(); 00794 return false; 00795 } 00796 00797 return nextEvent(nskip, evtbyte, eventsToEnd); 00798 } 00799 catch (RawFileException& ex) { 00800 ex.print(); 00801 } 00802 catch (eformat::Issue& ex) { 00803 std::cerr << std::endl << "Uncaught eformat issue: " << ex.what() << std::endl; 00804 } 00805 catch (ers::Issue& ex) { 00806 std::cerr << std::endl << "Uncaught ERS issue: " << ex.what() << std::endl; 00807 } 00808 catch (std::exception& ex) { 00809 std::cerr << std::endl << "Uncaught std exception: " << ex.what() << std::endl; 00810 } 00811 catch (...) { 00812 std::cerr << std::endl << "Uncaught unknown exception" << std::endl; 00813 } 00814 00815 return false; 00816 }
|
|
|
|
00081 { 00082 std::string query = "SELECT FilePath,FileName,NumEvent FROM RanTrgData"; 00083 00084 if (! m_run.empty() || m_runs.size()==2 || m_dates.size()==2) 00085 { // use additional parameters for query 00086 query = query + " WHERE "; 00087 bool use_and = false; 00088 if(! m_run.empty() ) 00089 { 00090 query = query + " RunNo=" + m_run; 00091 use_and = true; 00092 } 00093 if( m_runs.size()==2 ) 00094 { 00095 if(use_and) query = query + " AND "; 00096 query = query + " RunNo>=" + m_runs[0] + " AND RunNo<=" + m_runs[1]; 00097 use_and = true; 00098 } 00099 if( m_dates.size()==2 ) 00100 { 00101 if(use_and) query = query + " AND "; 00102 query = query + " TimeSOR>='" + m_dates[0] + "' AND TimeEOR<='" + m_dates[1] + "'"; 00103 } 00104 } 00105 00106 query = query + ";"; 00107 return query; 00108 }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|