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