Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

MixerAlg Class Reference

#include <MixerAlg.h>

List of all members.

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
EmcConverterm_emcCnv
EmcConverterm_emcCnv
int m_exRunFrom
int m_exRunTo
RawFileReaderm_fr
RawFileReaderm_fr
bool m_ifOutPut
bool m_ifSmearT0
DataInfoSvcm_jobInfoSvc
DataInfoSvcm_jobInfoSvc
int m_maxLoop
MdcConverterm_mdcCnv
MdcConverterm_mdcCnv
int m_mixingMethod
MucConverterm_mucCnv
MucConverterm_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
RAWEVENTm_raw_event
RAWEVENTm_raw_event
int m_readBGMethod
RealizationSvcm_RealizationSvc
RealizationSvcm_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
BesTimerm_timer
BesTimerm_timer
BesTimerm_timer1
BesTimerm_timer1
IBesTimerSvcm_timersvc
IBesTimerSvcm_timersvc
TofConverterm_tofCnv
TofConverterm_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
IBesRndmGenSvcp_BesRndmGenSvc
IBesRndmGenSvcp_BesRndmGenSvc


Constructor & Destructor Documentation

MixerAlg::MixerAlg const std::string &  name,
ISvcLocator *  pSvcLocator
 

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 }

MixerAlg::~MixerAlg  )  [inline]
 

00052 {}

MixerAlg::MixerAlg const std::string &  name,
ISvcLocator *  pSvcLocator
 

MixerAlg::~MixerAlg  )  [inline]
 

00052 {}


Member Function Documentation

void MixerAlg::decodeEmc EmcDigiCol digiCol  )  [protected]
 

void MixerAlg::decodeEmc EmcDigiCol digiCol  )  [protected]
 

01019 {
01020   const BufferHolder& emcBuf = m_raw_event->getEmcBuf();
01021   m_emcCnv->convert(emcBuf, digiCol);
01022 }

void MixerAlg::decodeMdc MdcDigiCol digiCol  )  [protected]
 

void MixerAlg::decodeMdc MdcDigiCol digiCol  )  [protected]
 

01007 {
01008   const BufferHolder& mdcBuf = m_raw_event->getMdcBuf();
01009   m_mdcCnv->convert(mdcBuf, digiCol);
01010 }

void MixerAlg::decodeMuc MucDigiCol digiCol  )  [protected]
 

void MixerAlg::decodeMuc MucDigiCol digiCol  )  [protected]
 

01013 { 
01014   const BufferHolder& mucBuf = m_raw_event->getMucBuf();
01015   m_mucCnv->convert(mucBuf, digiCol);
01016 }

void MixerAlg::decodeTof TofDigiCol digiCol  )  [protected]
 

void MixerAlg::decodeTof TofDigiCol digiCol  )  [protected]
 

01025 {
01026   const BufferHolder& tofBuf = m_raw_event->getTofBuf();
01027   m_tofCnv->convert(tofBuf, digiCol);
01028 }

std::string MixerAlg::eventType  )  [protected]
 

std::string MixerAlg::eventType  )  [protected]
 

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 }

StatusCode MixerAlg::execute  ) 
 

StatusCode MixerAlg::execute  ) 
 

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 }

bool MixerAlg::file_sort std::vector< std::string > &  files,
std::vector< int > &  ranEvtNums
[protected]
 

bool MixerAlg::file_sort std::vector< std::string > &  files,
std::vector< int > &  ranEvtNums
[protected]
 

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 }

StatusCode MixerAlg::finalize  ) 
 

StatusCode MixerAlg::finalize  ) 
 

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 }

int MixerAlg::getTiming  )  [protected]
 

int MixerAlg::getTiming  )  [protected]
 

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 }

StatusCode MixerAlg::initialize  ) 
 

StatusCode MixerAlg::initialize  ) 
 

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 }

void MixerAlg::mixDigi SmartDataPtr< MdcDigiCol > &  mdcMcDigits,
SmartDataPtr< EmcDigiCol > &  emcMcDigits,
SmartDataPtr< MucDigiCol > &  mucMcDigits,
SmartDataPtr< TofDigiCol > &  tofMcDigits
[protected]
 

void MixerAlg::mixDigi SmartDataPtr< MdcDigiCol > &  mdcMcDigits,
SmartDataPtr< EmcDigiCol > &  emcMcDigits,
SmartDataPtr< MucDigiCol > &  mucMcDigits,
SmartDataPtr< TofDigiCol > &  tofMcDigits
[protected]
 

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 }

bool MixerAlg::nextEvent int  nskip = 0,
int  evtbyte = 0,
int  eventsToEnd = 0
[protected]
 

bool MixerAlg::nextEvent int  nskip = 0,
int  evtbyte = 0,
int  eventsToEnd = 0
[protected]
 

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 }

std::string MixerAlg::prepareDbQuery  )  [protected]
 

std::string MixerAlg::prepareDbQuery  )  [protected]
 

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 }


Member Data Documentation

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]
 

MsgStream* MixerAlg::log [private]
 

std::vector<std::string> MixerAlg::m_bgfiles [private]
 

std::vector<std::string> MixerAlg::m_bgfiles [private]
 

std::vector<std::string> MixerAlg::m_bgfilesIndex [private]
 

std::vector<std::string> MixerAlg::m_bgfilesIndex [private]
 

std::vector<std::string> MixerAlg::m_dates [private]
 

std::vector<std::string> MixerAlg::m_dates [private]
 

bool MixerAlg::m_dbUserRequest [private]
 

EmcConverter* MixerAlg::m_emcCnv [private]
 

EmcConverter* MixerAlg::m_emcCnv [private]
 

int MixerAlg::m_exRunFrom [private]
 

int MixerAlg::m_exRunTo [private]
 

RawFileReader* MixerAlg::m_fr [private]
 

RawFileReader* MixerAlg::m_fr [private]
 

bool MixerAlg::m_ifOutPut [private]
 

bool MixerAlg::m_ifSmearT0 [private]
 

DataInfoSvc* MixerAlg::m_jobInfoSvc [private]
 

DataInfoSvc* MixerAlg::m_jobInfoSvc [private]
 

int MixerAlg::m_maxLoop [private]
 

MdcConverter* MixerAlg::m_mdcCnv [private]
 

MdcConverter* MixerAlg::m_mdcCnv [private]
 

int MixerAlg::m_mixingMethod [private]
 

MucConverter* MixerAlg::m_mucCnv [private]
 

MucConverter* MixerAlg::m_mucCnv [private]
 

int MixerAlg::m_nevent [private]
 

int MixerAlg::m_nEventsToEnd [private]
 

int MixerAlg::m_NSkip [private]
 

std::vector<int> MixerAlg::m_numSets [private]
 

std::vector<int> MixerAlg::m_numSets [private]
 

std::vector<int> MixerAlg::m_ranStepLenInCurrentFile [private]
 

std::vector<int> MixerAlg::m_ranStepLenInCurrentFile [private]
 

std::vector<int> MixerAlg::m_ranTrgEvents [private]
 

std::vector<int> MixerAlg::m_ranTrgEvents [private]
 

RAWEVENT* MixerAlg::m_raw_event [private]
 

RAWEVENT* MixerAlg::m_raw_event [private]
 

int MixerAlg::m_readBGMethod [private]
 

RealizationSvc* MixerAlg::m_RealizationSvc [private]
 

RealizationSvc* MixerAlg::m_RealizationSvc [private]
 

std::string MixerAlg::m_run [private]
 

int MixerAlg::m_runNo [private]
 

std::vector<std::string> MixerAlg::m_runs [private]
 

std::vector<std::string> MixerAlg::m_runs [private]
 

bool MixerAlg::m_skip [private]
 

int MixerAlg::m_skipCount [private]
 

NTuple::Item<long> MixerAlg::m_tdc [private]
 

NTuple::Item<long> MixerAlg::m_tdc [private]
 

NTuple::Item<float> MixerAlg::m_time1 [private]
 

NTuple::Item<float> MixerAlg::m_time1 [private]
 

NTuple::Item<float> MixerAlg::m_time2 [private]
 

NTuple::Item<float> MixerAlg::m_time2 [private]
 

NTuple::Item<float> MixerAlg::m_time3 [private]
 

NTuple::Item<float> MixerAlg::m_time3 [private]
 

NTuple::Item<float> MixerAlg::m_time4 [private]
 

NTuple::Item<float> MixerAlg::m_time4 [private]
 

NTuple::Item<float> MixerAlg::m_time5 [private]
 

NTuple::Item<float> MixerAlg::m_time5 [private]
 

BesTimer* MixerAlg::m_timer [private]
 

BesTimer* MixerAlg::m_timer [private]
 

BesTimer* MixerAlg::m_timer1 [private]
 

BesTimer* MixerAlg::m_timer1 [private]
 

IBesTimerSvc* MixerAlg::m_timersvc [private]
 

IBesTimerSvc* MixerAlg::m_timersvc [private]
 

TofConverter* MixerAlg::m_tofCnv [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_tuple1 [private]
 

NTuple::Tuple* MixerAlg::m_tuple2 [private]
 

NTuple::Tuple* MixerAlg::m_tuple2 [private]
 

NTuple::Tuple* MixerAlg::m_tuple3 [private]
 

NTuple::Tuple* MixerAlg::m_tuple3 [private]
 

bool MixerAlg::m_usingFilter [private]
 

std::vector<int> MixerAlg::m_vRanEvtNumInSubSet [private]
 

std::vector<int> MixerAlg::m_vRanEvtNumInSubSet [private]
 

std::vector<int> MixerAlg::m_vStepLength [private]
 

std::vector<int> MixerAlg::m_vStepLength [private]
 

std::vector<int> MixerAlg::m_vStreamNumInSubSet [private]
 

std::vector<int> MixerAlg::m_vStreamNumInSubSet [private]
 

std::map<int,std::vector<int> > MixerAlg::map_stepLength [private]
 

std::map<int,std::vector<int> > MixerAlg::map_stepLength [private]
 

int MixerAlg::nskipped [private]
 

IBesRndmGenSvc* MixerAlg::p_BesRndmGenSvc [private]
 

IBesRndmGenSvc* MixerAlg::p_BesRndmGenSvc [private]
 


The documentation for this class was generated from the following files:
Generated on Wed Feb 2 16:32:21 2011 for BOSS6.5.5 by  doxygen 1.3.9.1