EFtoTDS Class Reference

#include <EFtoTDS.h>

List of all members.

Public Member Functions

 EFtoTDS (const std::string &name, ISvcLocator *pSvcLocator)
virtual ~EFtoTDS ()
StatusCode initialize ()
StatusCode execute ()
StatusCode finalize ()

Private Attributes

HltStoreSvcm_HltStoreSvc
int m_outputLevel


Detailed Description

Definition at line 9 of file EFtoTDS.h.


Constructor & Destructor Documentation

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]

Definition at line 27 of file EFtoTDS.cxx.

00028 {
00029 }


Member Function Documentation

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 }


Member Data Documentation

HltStoreSvc* EFtoTDS::m_HltStoreSvc [private]

Definition at line 19 of file EFtoTDS.h.

Referenced by execute(), and initialize().

int EFtoTDS::m_outputLevel [private]

Definition at line 20 of file EFtoTDS.h.

Referenced by EFtoTDS().


Generated on Tue Nov 29 23:18:37 2016 for BOSS_7.0.2 by  doxygen 1.4.7