#include <EFtoTDS.h>
Public Member Functions | |
EFtoTDS (const std::string &name, ISvcLocator *pSvcLocator) | |
virtual | ~EFtoTDS () |
StatusCode | initialize () |
StatusCode | execute () |
StatusCode | finalize () |
Private Attributes | |
HltStoreSvc * | m_HltStoreSvc |
int | m_outputLevel |
Definition at line 9 of file EFtoTDS.h.
EFtoTDS::EFtoTDS | ( | const std::string & | name, | |
ISvcLocator * | pSvcLocator | |||
) |
Definition at line 22 of file EFtoTDS.cxx.
References m_outputLevel.
00022 : 00023 Algorithm(name, pSvcLocator) { 00024 declareProperty("OutputLevel", m_outputLevel); 00025 }
EFtoTDS::~EFtoTDS | ( | ) | [virtual] |
StatusCode EFtoTDS::execute | ( | ) |
Definition at line 45 of file EFtoTDS.cxx.
References HltID::convert(), Bes_Common::DEBUG, calibUtil::ERROR, EventModel::Hlt::Event, Bes_Common::FATAL, HltStoreSvc::get(), EFResult::getAnswer(), EFResult::getAnswerIndex(), EFResult::getDecNum(), EFResult::getEFVec(), EventModel::Hlt::HltRawCol, genRecEmupikp::i, Bes_Common::INFO, HltID::is_algorithm(), HltID::is_criteria(), HltID::is_energy(), HltID::is_eventtype(), HltID::is_version(), iter(), ganga-rec::j, m_HltStoreSvc, msgSvc(), num, HltRaw::setFloatChannel(), HltRaw::setIntChannel(), deljobs::string, type, and Bes_Common::WARNING.
00045 { 00046 00047 MsgStream log(msgSvc(), name()); 00048 log << MSG::DEBUG << "in execute()" << endreq; 00049 00050 SmartDataPtr<Event::EventHeader> eventHeader(eventSvc(),"/Event/EventHeader"); 00051 if (!eventHeader) { 00052 log << MSG::FATAL << "Could not find Event Header" << endreq; 00053 return StatusCode::FAILURE; 00054 } 00055 00056 int eventId = eventHeader->eventNumber() ; 00057 int runId = eventHeader->runNumber(); 00058 log << MSG::INFO << "retrieved event: " <<"Event Number "<<eventId<<" run: "<<runId<<endreq; 00059 00060 HltRawCol* aEF=new HltRawCol; 00061 00062 EFResult* efResult; 00063 string answer=""; 00064 StatusCode sc = m_HltStoreSvc->get("EventType", efResult); 00065 if ( sc.isFailure() ) { 00066 log << MSG::ERROR << "Could not find EFResult (EventType)" << endreq; 00067 answer="Error"; 00068 } 00069 else { 00070 if (efResult->getAnswerIndex() == -1) { 00071 log << MSG::DEBUG << "Unvalid EFResult(AnswerIndex=-1)" << endreq; 00072 answer="Error"; 00073 } 00074 answer = efResult->getAnswer(); 00075 } 00076 log << MSG::INFO << "The answer is " << answer << endreq; 00077 00078 uint32_t type=0; 00079 if(answer=="Junk") type=1<<0; 00080 else if(answer=="GJunk") type=(1<<1); 00081 else if(answer=="Beamgas") type=1<<2; 00082 else if(answer=="GBeamgas") type=(1<<3); 00083 else if(answer=="Cosmic") type=1<<4; 00084 else if(answer=="GCosmic") type=(1<<5); 00085 else if(answer=="EBhabha") type=1<<6; 00086 else if(answer=="GEBhabha") type=(1<<7); 00087 else if(answer=="BBhabha") type=1<<8; 00088 else if(answer=="GBBhabha") type=(1<<9); 00089 else if(answer=="Dimuon") type=1<<10; 00090 else if(answer=="GDimuon") type=(1<<11); 00091 else if(answer=="Diphoton") type=1<<12; 00092 else if(answer=="GDiphoton") type=(1<<13); 00093 else if(answer=="Hadron") type=1<<14; 00094 else if(answer=="GHadron") type=(1<<15); 00095 else if(answer=="Twophoton") type=1<<16; 00096 else if(answer=="GTwophoton") type=(1<<17); 00097 else if(answer=="RandomTrg") type=1<<31; 00098 else if(answer=="Error") type=1<<30; 00099 else if(answer=="Other") type=1<<29; 00100 else type=1<<28; 00101 00102 uint32_t id=0x50000000; 00103 HltRaw* efType=new HltRaw(id); 00104 efType->setIntChannel(type); 00105 aEF->push_back(efType); 00106 00107 sc = m_HltStoreSvc->get("EFResult", efResult) ; 00108 if ( sc.isFailure() ) { 00109 log << MSG::FATAL << "Could not find EFResult (EFResult)" << endreq; 00110 return StatusCode::FAILURE; 00111 } 00112 else { 00113 uint32_t alg= efResult->getEFVec(0); 00114 id++; 00115 HltRaw* efAlg=new HltRaw(id); 00116 uint32_t alg8=alg&0xFF; 00117 efAlg->setIntChannel(alg8); 00118 aEF->push_back(efAlg); 00119 id++; 00120 uint32_t cri=alg>>8; 00121 HltRaw* efCri=new HltRaw(id); 00122 efCri->setIntChannel(cri); 00123 aEF->push_back(efCri); 00124 id++; 00125 HltRaw* efVer=new HltRaw(id); 00126 efVer->setIntChannel(0); 00127 aEF->push_back(efVer); 00128 uint32_t etot= efResult->getEFVec(31); 00129 id++; 00130 HltRaw* efEtot=new HltRaw(id); 00131 efEtot->setFloatChannel(*((float*)&etot)); 00132 aEF->push_back(efEtot); 00133 00134 uint32_t num=efResult->getEFVec(1); 00135 int nmdc=num&0xFF; 00136 int ntof=(num>>8)&0xFF; 00137 int nemc=(num>>16)&0xFF; 00138 int nmuc=(num>>24)&0xFF; 00139 int ndata=1; 00140 00141 uint32_t ndatap = nmdc+ntof+nemc+nmuc; 00142 ndata += ndatap; 00143 int ndec=efResult->getDecNum(); 00144 if(ndec>0) ndata +=(ndec+1); 00145 00146 log << MSG::DEBUG << "ndata=" << ndata << "; nmdc=" << nmdc << ", ntof=" << ntof 00147 << ", nemc=" << nemc << ", nmuc=" << nmuc << ", ndec=" << ndec << endreq; 00148 00149 if((alg&4)&&(!(alg&2))) log << MSG::WARNING<<"sub-algorithms error!"<<endreq; 00150 00151 uint32_t* var=new uint32_t[ndata]; 00152 if(ndata==1){ 00153 var[0]=0; 00154 } 00155 else{ 00156 var[0]=num; 00157 int i=1; 00158 for(int j=5;j<5+nmdc;j++){ 00159 var[i]=efResult->getEFVec(j); 00160 ++i; 00161 } 00162 for(int j=25;j<25+ntof;j++){ 00163 var[i]=efResult->getEFVec(j); 00164 ++i; 00165 } 00166 for(int j=30;j<30+nemc;j++){ 00167 var[i]=efResult->getEFVec(j); 00168 ++i; 00169 } 00170 for(int j=52;j<52+nmuc;j++){ 00171 var[i]=efResult->getEFVec(j); 00172 ++i; 00173 } 00174 if(ndec>0) { 00175 var[i]=ndec; 00176 ++i; 00177 for(int j=54;j<54+ndec;++j){ 00178 var[i]=efResult->getEFVec(j); 00179 ++i; 00180 } 00181 } 00182 if(i!=ndata) log << MSG::FATAL << "number of datat error!" << endreq; 00183 } 00184 00185 id++; 00186 HltRaw* efTag=new HltRaw(id); 00187 efTag->setIntChannel(var[0]); 00188 aEF->push_back(efTag); 00189 00190 for(int i=1;i<ndata;i++){ 00191 id++; 00192 HltRaw* efVar=new HltRaw(HltID::convert(id,nmdc,ntof,nemc,nmuc)); 00193 efVar->setFloatChannel(*((float*)&var[i])); 00194 efVar->setIntChannel(var[i]); 00195 aEF->push_back(efVar); 00196 } 00197 delete var; 00198 } 00199 00200 uint32_t atype=0,alg=0,cri=0,ver=0; 00201 float etot=0.; 00202 00203 DataObject *aHltEvent; 00204 eventSvc()->findObject("/Event/Hlt", aHltEvent); 00205 if(aHltEvent==NULL){ 00206 log<<MSG::INFO<< "HltEvent has not existed, so register it now!" <<endreq; 00207 HltEvent* aHlt=new HltEvent(); 00208 sc = eventSvc()->registerObject(EventModel::Hlt::Event,aHlt); 00209 if(sc!=StatusCode::SUCCESS) { 00210 log<<MSG::FATAL<< "Could not register Hlt!!!" <<endreq; 00211 return( StatusCode::FAILURE); 00212 } 00213 } 00214 else{ 00215 log<<MSG::WARNING<< "HltEvent has existed!" <<endreq; 00216 } 00217 00218 DataObject *aHltRawEvent; 00219 eventSvc()->findObject("/Event/Hlt/HltRawCol", aHltRawEvent); 00220 if(aHltRawEvent!=NULL) { 00221 SmartDataPtr<HltRawCol> hltRawCol(eventSvc(),"/Event/Hlt/HltRawCol"); 00222 HltRawCol::iterator iter = hltRawCol->begin(); 00223 for (;iter != hltRawCol->end(); iter++ ) { 00224 Identifier id = (*iter)->identify(); 00225 if(HltID::is_eventtype(id)) atype=(*iter)->getIntChannel(); 00226 if(HltID::is_algorithm(id)) alg=(*iter)->getIntChannel(); 00227 if(HltID::is_criteria(id)) cri=(*iter)->getIntChannel(); 00228 if(HltID::is_version(id)) ver=(*iter)->getIntChannel(); 00229 if(HltID::is_energy(id)) etot=(*iter)->getFloatChannel(); 00230 } 00231 log<<MSG::DEBUG<<"old type="<<atype<<", alg="<<alg<<", criteria="<<cri 00232 <<", version="<<ver<<", energy="<<etot<<endreq; 00233 //then unregister HltRawCol 00234 sc = eventSvc()->unregisterObject("/Event/Hlt/HltRawCol"); 00235 delete aHltRawEvent; //it must be delete to avoid memory leakage 00236 log << MSG::INFO << "Old raw collection has been unregistered" << endreq; 00237 if(sc!=StatusCode::SUCCESS) { 00238 log << MSG::FATAL << "Could not unregister HLT raw collection" << endreq; 00239 return( StatusCode::FAILURE); 00240 } 00241 } 00242 00243 // register 00244 sc = eventSvc()->registerObject(EventModel::Hlt::HltRawCol,aEF); 00245 if(sc!=StatusCode::SUCCESS) { 00246 log<<MSG::FATAL<< "Still could not register HltRawCol" <<endreq; 00247 return StatusCode::FAILURE; 00248 } 00249 00250 SmartDataPtr<HltRawCol> hltRawCol(eventSvc(),"/Event/Hlt/HltRawCol"); 00251 if (!hltRawCol) { 00252 log << MSG::FATAL << "Could not find HltRawCol!" << endreq; 00253 return StatusCode::FAILURE; 00254 } 00255 00256 HltRawCol::iterator iter = hltRawCol->begin(); 00257 for (;iter != hltRawCol->end(); iter++ ) { 00258 Identifier id = (*iter)->identify(); 00259 if(HltID::is_eventtype(id)) atype=(*iter)->getIntChannel(); 00260 if(HltID::is_algorithm(id)) alg=(*iter)->getIntChannel(); 00261 if(HltID::is_criteria(id)) cri=(*iter)->getIntChannel(); 00262 if(HltID::is_version(id)) ver=(*iter)->getIntChannel(); 00263 if(HltID::is_energy(id)) etot=(*iter)->getFloatChannel(); 00264 } 00265 log<<MSG::DEBUG<<" type="<<atype<<", alg="<<alg<<", criteria="<<cri 00266 <<", version="<<ver<<", energy="<<etot<<endreq; 00267 00268 return StatusCode::SUCCESS; 00269 }
StatusCode EFtoTDS::finalize | ( | ) |
Definition at line 271 of file EFtoTDS.cxx.
References Bes_Common::INFO, and msgSvc().
00271 { 00272 00273 MsgStream log(msgSvc(), name()); 00274 log << MSG::INFO << "in finalize()" << endreq; 00275 00276 return StatusCode::SUCCESS; 00277 }
StatusCode EFtoTDS::initialize | ( | ) |
Definition at line 31 of file EFtoTDS.cxx.
References Bes_Common::FATAL, Bes_Common::INFO, m_HltStoreSvc, and msgSvc().
00031 { 00032 00033 MsgStream log(msgSvc(), name()); 00034 log << MSG::INFO << "in initialize()" << endreq; 00035 00036 StatusCode sc = service( "HltStoreSvc", m_HltStoreSvc); 00037 if( sc.isFailure() ) { 00038 log << MSG::FATAL << name() << ": Unable to locate Service HltStoreSvc" << endreq; 00039 return sc; 00040 } 00041 00042 return StatusCode::SUCCESS; 00043 }
HltStoreSvc* EFtoTDS::m_HltStoreSvc [private] |
int EFtoTDS::m_outputLevel [private] |