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

EvtRecTrackCnv Class Reference

#include <EvtRecTrackCnv.h>

Inheritance diagram for EvtRecTrackCnv:

RootEventBaseCnv RootEventBaseCnv Converter< Ty1, Ty2 > Converter< Ty1, Ty2 > Converter< Ty1, Ty2 > Converter< Ty1, Ty2 > List of all members.

Public Types

typedef Ty2 destination
typedef Ty2 destination
typedef Ty1 source
typedef Ty1 source

Public Member Functions

virtual StatusCode createObj (IOpaqueAddress *addr, DataObject *&dat)
 Convert the persistent object to transient.
virtual StatusCode createObj (IOpaqueAddress *addr, DataObject *&dat)
 Convert the persistent object to transient.
virtual StatusCode createRep (DataObject *pObject, IOpaqueAddress *&refpAddress)
 Convert the transient object to the requested representation.
virtual StatusCode createRep (DataObject *pObject, IOpaqueAddress *&refpAddress)
 Convert the transient object to the requested representation.
void declareObject (const std::string &fullPath, const CLID &clid, const std::string &treename, const std::string &branchname)
 Store TDS path to link a particular converter to an object on the TDS.
void declareObject (const std::string &fullPath, const CLID &clid, const std::string &treename, const std::string &branchname)
 Store TDS path to link a particular converter to an object on the TDS.
virtual StatusCode fillObjRefs (IOpaqueAddress *pAddress, DataObject *pObject)
 Resolve the references of the converted object.
virtual StatusCode fillObjRefs (IOpaqueAddress *pAddress, DataObject *pObject)
 Resolve the references of the converted object.
virtual StatusCode fillRepRefs (IOpaqueAddress *pAddress, DataObject *pObject)
 Resolve the references of the converted object.
virtual StatusCode fillRepRefs (IOpaqueAddress *pAddress, DataObject *pObject)
 Resolve the references of the converted object.
virtual StatusCode finalize ()
virtual StatusCode finalize ()
TObject * getReadObject () const
 get the object to be read
TObject * getReadObject () const
 get the object to be read
virtual StatusCode initialize ()
virtual StatusCode initialize ()
destinationoperator (const source &) const
destinationoperator (const source &) const
virtual long repSvcType () const
virtual long repSvcType () const
virtual ~EvtRecTrackCnv ()
virtual ~EvtRecTrackCnv ()

Static Public Member Functions

const CLID & classID ()
const CLID & classID ()
const unsigned char storageType ()
 Storage type and class ID.
const unsigned char storageType ()
 Storage type and class ID.

Protected Member Functions

virtual destinationconvert (const source &) const =0
virtual destinationconvert (const source &) const =0
virtual StatusCode DataObjectToTObject (DataObject *obj, RootAddress *addr)
 transformation to root
virtual StatusCode DataObjectToTObject (DataObject *obj, RootAddress *addr)
 transformation to root
 EvtRecTrackCnv (ISvcLocator *svc)
 EvtRecTrackCnv (ISvcLocator *svc)
virtual StatusCode TObjectToDataObject (DataObject *&obj)
 transformation from root
virtual StatusCode TObjectToDataObject (DataObject *&obj)
 transformation from root

Protected Attributes

CLID CLID_top
 the CLID of the upper converter if any
std::vector< void * > m_adresses
 each converter knows the corresponding adresses
std::vector< void * > m_adresses
 each converter knows the corresponding adresses
int m_branchNr
 the branchNr of this converter for writing
int m_branchNrDst
int m_branchNrEvtHeader
int m_branchNrEvtRec
int m_branchNrMc
int m_branchNrRecon
TArrayS * m_branchNumbers
 array with number of branches for reading
TArrayS * m_branchNumbers
 array with number of branches for reading
RootCnvSvcm_cnvSvc
RootCnvSvcm_cnvSvc
std::string m_currentFileName
IDataProviderSvc * m_eds
 pointer to eventdataservice
IDataProviderSvc * m_eds
 pointer to eventdataservice
RootEvtSelectorm_evtsel
RootEvtSelectorm_evtsel
std::vector< RootCnvSvc::Leafm_leaves
std::vector< RootCnvSvc::Leafm_leaves
TObject * m_objRead
 the object that was read
TObject * m_objRead
 the object that was read
std::string m_rootBranchname
 root branchname (may be concatenated of severals)
RootInterfacem_rootInterface
 pointer to the RootInterface
RootInterfacem_rootInterface
 pointer to the RootInterface
std::string m_rootTreename
 each converter knows it's treename

Private Attributes

commonData m_common
 relational maps
TObjArray * m_evtRecTrackCol
TObjArray * m_evtRecTrackCol

Friends

class CnvFactory<EvtRecTrackCnv>

Member Typedef Documentation

template<class Ty1, class Ty2>
typedef Ty2 Converter< Ty1, Ty2 >::destination [inherited]
 

template<class Ty1, class Ty2>
typedef Ty2 Converter< Ty1, Ty2 >::destination [inherited]
 

template<class Ty1, class Ty2>
typedef Ty1 Converter< Ty1, Ty2 >::source [inherited]
 

template<class Ty1, class Ty2>
typedef Ty1 Converter< Ty1, Ty2 >::source [inherited]
 


Constructor & Destructor Documentation

virtual EvtRecTrackCnv::~EvtRecTrackCnv  )  [inline, virtual]
 

00021 {}

EvtRecTrackCnv::EvtRecTrackCnv ISvcLocator *  svc  )  [protected]
 

00016    : RootEventBaseCnv(classID(), svc)
00017 {
00018    m_rootBranchname = "m_evtRecTrackCol";
00019    m_adresses.push_back(&m_evtRecTrackCol);
00020    m_evtRecTrackCol = 0;
00021 }

virtual EvtRecTrackCnv::~EvtRecTrackCnv  )  [inline, virtual]
 

00021 {}

EvtRecTrackCnv::EvtRecTrackCnv ISvcLocator *  svc  )  [protected]
 


Member Function Documentation

const CLID& EvtRecTrackCnv::classID  )  [inline, static]
 

00019 { return CLID_EvtRecTrackCol; }

const CLID& EvtRecTrackCnv::classID  )  [inline, static]
 

00019 { return CLID_EvtRecTrackCol; }

template<class Ty1, class Ty2>
virtual destination* Converter< Ty1, Ty2 >::convert const source  )  const [protected, pure virtual, inherited]
 

template<class Ty1, class Ty2>
virtual destination* Converter< Ty1, Ty2 >::convert const source  )  const [protected, pure virtual, inherited]
 

virtual StatusCode RootEventBaseCnv::createObj IOpaqueAddress *  addr,
DataObject *&  dat
[virtual, inherited]
 

Convert the persistent object to transient.

Reimplemented in EventCnv, and EventCnv.

StatusCode RootEventBaseCnv::createObj IOpaqueAddress *  addr,
DataObject *&  dat
[virtual, inherited]
 

Convert the persistent object to transient.

Reimplemented in EventCnv, and EventCnv.

00157                                                            {
00158   // transform ROOT object to TDS object
00159   MsgStream log(msgSvc(), "RootEventBaseCnv");
00160   log << MSG::DEBUG << "RootEventBaseCnv::createObj with clid " <<addr->clID()<< endreq;
00161   StatusCode sc;
00162 
00163   // add 2005-11-29
00164   // log<<MSG::INFO<<"######### RootEventBaseCnv ::createObj begin of createObj:  m_branchNumbers "<<m_branchNumbers->GetSize()<<"###############"<<endreq;
00165 
00166   RootAddress *raddr=dynamic_cast<RootAddress *>(addr);
00167   if (!raddr) {
00168     log << MSG::ERROR << "Could not downcast to Root address" << endreq;
00169     return StatusCode::FAILURE;
00170   }
00171  
00172   static int temp =0;   //control the begin of each files 2005-12-01
00173   static int entryN =0; //control the event number of each files 2005-21-01
00174   static int brN =0; //control munber of branch of the tree;
00175   int lastBrn = brN;
00176   //lastBrn = brN; 
00177   static int branchN=0;
00178   static bool isSet=true;
00179 
00180   static int entryBefore = 0;
00181   static bool addEntryEachFile = true;
00182  
00183  
00184    if(m_rootInterface->getENDFILE() || (temp >0 && temp < branchN)){ // if the file has get the end:y the go to next file to create a new tree
00185     
00186     if(m_rootInterface->getENDFILE() ) {
00187       entryN = 0;
00188     }
00189     
00190     temp++;
00191     
00192     delete m_branchNumbers;
00193     m_branchNumbers = new TArrayS(0);
00194    
00195     if(temp == branchN) {
00196       temp =0;
00197     }
00198    }
00199 
00200    if(m_rootInterface->getENDFILE()) addEntryEachFile = true;
00201    // the 2nd method 
00202    if(m_evtsel->getRecId() - entryBefore == 0) { // first event in this file
00203      delete m_branchNumbers;
00204      m_branchNumbers = new TArrayS(0);
00205    }
00206 
00207    //new method to initialize the branchNumber 
00208    if(m_currentFileName=="") m_currentFileName = m_rootInterface->getCurrentFileName();
00209    if(!(m_currentFileName == m_rootInterface->getCurrentFileName())){ 
00210            m_currentFileName = m_rootInterface->getCurrentFileName();
00211            delete m_branchNumbers;
00212            m_branchNumbers = new TArrayS(0);
00213    }   
00214    //---------------------------------------- 
00215 
00216    
00217   if (m_branchNumbers->GetSize()<=0) {
00218     if(isSet) brN++;
00219     int branchNumber;
00220     for (int nb=0;nb<raddr->getNrBranches();nb++) {
00221       sc=m_rootInterface->setBranchAddress(raddr->getTreename().c_str(),raddr->getBranchname(nb).c_str(),m_adresses[nb],branchNumber);
00222       if (!sc.isSuccess()) 
00223       {
00224         if(isSet) brN--;    //liangyt: if fail to retrieve this branch, this will be not a effective branch.
00225         //entryN++;   //liangyt: this is the second method
00226         if(temp>0) temp--;  //temp > 0 means recording effective branch number.
00227         return sc;
00228       }
00229       m_branchNumbers->Set(nb+1);
00230       m_branchNumbers->AddAt(branchNumber,nb);
00231      
00232     }
00233   }
00234 
00236   if(addEntryEachFile&&(m_evtsel->getRecId()>entryBefore)){   // for a new file, add entry for ONLY one time.
00237     entryBefore += m_rootInterface->getEntries();
00238     addEntryEachFile = false;
00239   }
00240 
00241   if(lastBrn == brN && isSet ){
00242     branchN = brN;
00243     isSet=false;    
00244   }
00245 
00246   if(isSet==false) log << MSG::INFO <<" 1st method set event as : "<<int(entryN/branchN)<<endreq;
00247   if(isSet==false) raddr->setEntryNr(int(entryN/branchN));//former method, keep it to be backup.
00248   if(m_evtsel) log << MSG::INFO <<" event id = "<<m_evtsel->getRecId()<<endreq;
00249 
00250   int eventID = 0;
00251   if(entryBefore > m_evtsel->getRecId())
00252     eventID = m_evtsel->getRecId() + m_rootInterface->getEntries() - entryBefore;
00253   else if(entryBefore == m_evtsel->getRecId()) eventID = 0;
00254   else log << MSG::ERROR <<"eventId error!!!"<<endreq;
00255   
00256   log << MSG::INFO <<" 2nd  method set event as : "<<eventID<<endreq;
00257   if(m_evtsel) raddr->setEntryNr(eventID);
00258   // read branch
00259   
00260   if (m_branchNumbers->GetSize()>0) {
00261     int nbtot=0,nb;
00262     for (int ib=0;ib<m_branchNumbers->GetSize();ib++) {
00263       //sc=m_rootInterface->getBranchEntry(m_branchNumbers->At(ib),raddr->getEntryNr(),nb);
00264       //change to get branch entry with addr(set address for each entry) liangyt
00265       sc=m_rootInterface->getBranchEntry(m_branchNumbers->At(ib),raddr->getEntryNr(),m_adresses[ib],nb);      
00266       if (sc.isFailure()) {
00267         log << MSG::ERROR << "Could not read branch " << raddr->getBranchname(nb) << endreq;
00268         return sc;
00269       }
00270       nbtot+=nb;
00271     }
00272   }
00273      
00274   else {   // get ROOT object
00275     if (CLID_top) {
00276       IConverter *p=conversionSvc()->converter(CLID_top);
00277       RootEventBaseCnv *cnv=dynamic_cast<RootEventBaseCnv *>(p);
00278       if (!cnv) {
00279         log << MSG::ERROR << "Could not downcast to RootEventBaseCnv "  << endreq;
00280         return StatusCode::FAILURE;
00281       }
00282       m_objRead=cnv->getReadObject();
00283     }
00284   }
00285 
00286   //do concrete transformation in derived converter
00287   sc = TObjectToDataObject(refpObject);
00288   if (sc.isFailure()) {
00289     log << MSG::ERROR << "Could not transform object" << endreq;
00290     return sc;
00291   }
00292 
00293   // verify if we have to register
00294   IRegistry* ent = addr->registry();
00295   if ( ent == 0)   {
00296        sc=m_eds->registerObject(raddr->getPath(),refpObject);
00297        if (sc.isFailure()) {
00298          log << MSG::ERROR << "Could not register object " << raddr->getPath()<<" status "<<sc.getCode()<<endreq;
00299        }
00300        //    }
00301   }
00302 
00303   entryN++;
00304   return StatusCode::SUCCESS;
00305 }

virtual StatusCode RootEventBaseCnv::createRep DataObject *  pObject,
IOpaqueAddress *&  refpAddress
[virtual, inherited]
 

Convert the transient object to the requested representation.

StatusCode RootEventBaseCnv::createRep DataObject *  pObject,
IOpaqueAddress *&  refpAddress
[virtual, inherited]
 

Convert the transient object to the requested representation.

00078                                                            {
00079   // Purpose and Method: Convert the transient object to ROOT
00080 
00081   MsgStream log(msgSvc(), "RootEventBaseCnv");
00082  
00083   StatusCode sc= StatusCode::SUCCESS;
00084   // get the corresponding address 
00085   RootAddress *rootaddr;
00086   sc=m_cnvSvc->createAddress(obj,addr);
00087 
00088   rootaddr = dynamic_cast<RootAddress *>(addr);
00089 
00090   if (sc.isFailure() || !rootaddr  ) { 
00091     log << MSG::ERROR << "Could not create address for clid " <<obj->clID()<<", objname "<<obj->name()<<endreq;
00092     return StatusCode::FAILURE;
00093   }
00094 
00095   //  do the real conversion in the derived converter
00096   sc = DataObjectToTObject(obj,rootaddr);
00097 
00098   delete addr;
00099   addr = NULL;
00100 
00101   if (sc.isFailure()) {
00102     log << MSG::ERROR << "Could not transform object" << endreq;
00103     return sc;
00104   }
00105 
00106   return StatusCode::SUCCESS;
00107 }

virtual StatusCode EvtRecTrackCnv::DataObjectToTObject DataObject *  obj,
RootAddress addr
[protected, virtual]
 

transformation to root

Implements RootEventBaseCnv.

StatusCode EvtRecTrackCnv::DataObjectToTObject DataObject *  obj,
RootAddress addr
[protected, virtual]
 

transformation to root

Implements RootEventBaseCnv.

00324                                                                                      {
00325   MsgStream log(msgSvc(), "EvtRecTrackCnv");
00326   log << MSG::DEBUG << "EvtRecTrackCnv::DataObjectToTObject" << endreq;
00327 
00328   EvtRecTrackCol* evtRecTrackCol = dynamic_cast<EvtRecTrackCol*> (obj);
00329   if ( ! evtRecTrackCol ) {
00330     log << MSG::ERROR << "Could not downcast to EvtRecTrackCol" << endreq;
00331     return StatusCode::FAILURE;
00332   }
00333 
00334   DataObject* evt = NULL;
00335   StatusCode sc = m_eds->findObject(EventModel::EvtRec::Event, evt);
00336   if ( sc.isFailure() ) {
00337      log << MSG::ERROR << "Could not get EvtRecObject in TDS" << endreq;
00338      return StatusCode::FAILURE;
00339   }
00340   EvtRecObject* devtTds = dynamic_cast<EvtRecObject*> (evt);
00341   if ( ! devtTds ) {
00342     log << MSG::ERROR << "EvtRecTrackCnv: Could not downcast to TDS EvtRecObject" << endreq;
00343   }
00344 
00345   IOpaqueAddress *addr;
00346   m_cnvSvc->getEvtRecCnv()->createRep(evt, addr);
00347   TEvtRecObject* recEvt = m_cnvSvc->getEvtRecCnv()->getWriteObject();
00348 
00349   const TObjArray* m_evtRecTrackCol = recEvt->getEvtRecTrackCol();
00350   if ( ! m_evtRecTrackCol ) return StatusCode::SUCCESS;
00351 
00352   IDataProviderSvc* dataSvc = 0;
00353   sc = serviceLocator()->getService("EventDataSvc",
00354         IID_IDataProviderSvc, (IInterface*&)dataSvc);
00355   if ( sc.isFailure() ) {
00356      log << MSG::FATAL << "Could not get EventDataSvc in EvtRecTrackCnv" << endreq;
00357      return sc;
00358   }
00359 
00360   RecMdcTrackCol::iterator    mdcTrackColbegin,    mdcTrackColend;
00361   RecMdcKalTrackCol::iterator mdcKalTrackColbegin, mdcKalTrackColend;
00362   RecMdcDedxCol::iterator     mdcDedxColbegin,     mdcDedxColend;
00363   RecExtTrackCol::iterator    extTrackColbegin,    extTrackColend;
00364   RecTofTrackCol::iterator    tofTrackColbegin,    tofTrackColend;
00365   RecEmcShowerCol::iterator   emcShowerColbegin,   emcShowerColend;
00366   RecMucTrackCol::iterator    mucTrackColbegin,    mucTrackColend;
00367 
00368   SmartDataPtr<RecMdcTrackCol> mdcTrackCol(dataSvc, EventModel::Recon::RecMdcTrackCol);
00369   if ( ! mdcTrackCol ) {
00370      log << MSG::INFO << "Could not find RecMdcTrackCol" << endreq;
00371   }
00372   else {
00373      mdcTrackColbegin = mdcTrackCol->begin();
00374      mdcTrackColend   = mdcTrackCol->end();
00375   }
00376 
00377   SmartDataPtr<RecMdcKalTrackCol> mdcKalTrackCol(dataSvc, EventModel::Recon::RecMdcKalTrackCol);
00378   if ( ! mdcKalTrackCol ) {
00379      log << MSG::INFO << "Could not find RecMdcKalTrackCol" << endreq;
00380   }
00381   else {
00382      mdcKalTrackColbegin = mdcKalTrackCol->begin();
00383      mdcKalTrackColend   = mdcKalTrackCol->end();
00384   }
00385 
00386   SmartDataPtr<RecMdcDedxCol> mdcDedxCol(dataSvc, EventModel::Recon::RecMdcDedxCol);
00387   if ( ! mdcDedxCol ) {
00388      log << MSG::INFO << "Could not find RecMdcDedxCol" << endreq;
00389   }
00390   else {
00391      mdcDedxColbegin = mdcDedxCol->begin();
00392      mdcDedxColend   = mdcDedxCol->end();
00393   }
00394 
00395   SmartDataPtr<RecExtTrackCol> extTrackCol(dataSvc, EventModel::Recon::RecExtTrackCol);
00396   if ( ! extTrackCol ) {
00397      log << MSG::INFO << "Could not find RecExtTrackCol" << endreq;
00398   }
00399   else {
00400      extTrackColbegin = extTrackCol->begin();
00401      extTrackColend   = extTrackCol->end();
00402   }
00403 
00404   SmartDataPtr<RecTofTrackCol> tofTrackCol(dataSvc, EventModel::Recon::RecTofTrackCol);
00405   if ( ! tofTrackCol ) {
00406      log << MSG::INFO << "Could not find RecTofTrackCol" << endreq;
00407   }
00408   else {
00409      tofTrackColbegin = tofTrackCol->begin();
00410      tofTrackColend   = tofTrackCol->end();
00411   }
00412 
00413   SmartDataPtr<RecEmcShowerCol> emcShowerCol(dataSvc, EventModel::Recon::RecEmcShowerCol);
00414   if ( ! emcShowerCol ) {
00415      log << MSG::INFO << "Could not find RecEmcShowerCol" << endreq;
00416   }
00417   else {
00418      emcShowerColbegin = emcShowerCol->begin();
00419      emcShowerColend   = emcShowerCol->end();
00420   }
00421 
00422   SmartDataPtr<RecMucTrackCol> mucTrackCol(dataSvc, EventModel::Recon::RecMucTrackCol);
00423   if ( ! mucTrackCol ) {
00424      log << MSG::INFO << "Could not find RecMucTrackCol" << endreq;
00425   }
00426   else {
00427      mucTrackColbegin = mucTrackCol->begin();
00428      mucTrackColend   = mucTrackCol->end();
00429   }
00430 
00431   // convert
00432   recEvt->clearEvtRecTrackCol();
00433   EvtRecTrackCol::const_iterator evtRecTrack = evtRecTrackCol->begin();
00434 
00435   for ( ; evtRecTrack != evtRecTrackCol->end(); evtRecTrack++) {
00436      EvtRecTrack* ptr = *evtRecTrack;
00437      TEvtRecTrack* evtRecTrackRoot = new TEvtRecTrack();
00438      // set ...
00439      evtRecTrackRoot->setTrackId( ptr->trackId() );
00440      evtRecTrackRoot->setPartId( ptr->partId() );
00441      evtRecTrackRoot->setQuality( ptr->quality() );
00442 
00443      if ( ptr->isMdcTrackValid() ) {
00444         RecMdcTrackCol::iterator it = find(mdcTrackColbegin, mdcTrackColend, ptr->mdcTrack());
00445         evtRecTrackRoot->setMdcTrackId( it - mdcTrackColbegin );
00446      }
00447      if ( ptr->isMdcKalTrackValid() ) {
00448         RecMdcKalTrackCol::iterator it = find(mdcKalTrackColbegin, mdcKalTrackColend, ptr->mdcKalTrack());
00449         evtRecTrackRoot->setMdcKalTrackId( it - mdcKalTrackColbegin );
00450      }
00451      if ( ptr->isMdcDedxValid() ) {
00452         RecMdcDedxCol::iterator it = find(mdcDedxColbegin, mdcDedxColend, ptr->mdcDedx());
00453         evtRecTrackRoot->setMdcDedxId( it - mdcDedxColbegin );
00454      }
00455      if ( ptr->isExtTrackValid() ) {
00456         RecExtTrackCol::iterator it = find(extTrackColbegin, extTrackColend, ptr->extTrack());
00457         evtRecTrackRoot->setExtTrackId( it - extTrackColbegin );
00458      }
00459      if ( ptr->isTofTrackValid() ) {
00460         SmartRefVector<RecTofTrack> tofTrackVec = ptr->tofTrack();
00461         for ( unsigned int i = 0; i < tofTrackVec.size(); i++ ) {
00462            RecTofTrackCol::iterator it = find(tofTrackColbegin, tofTrackColend, tofTrackVec[i]);
00463            evtRecTrackRoot->addTofTrackId( it - tofTrackColbegin );
00464         }
00465      }
00466      if ( ptr->isEmcShowerValid() ) {
00467         RecEmcShowerCol::iterator it = find(emcShowerColbegin, emcShowerColend, ptr->emcShower());
00468         evtRecTrackRoot->setEmcShowerId( it - emcShowerColbegin );
00469      }
00470      if ( ptr->isMucTrackValid() ) {
00471         RecMucTrackCol::iterator it = find(mucTrackColbegin, mucTrackColend, ptr->mucTrack());
00472         evtRecTrackRoot->setMucTrackId( it - mucTrackColbegin );
00473      }
00474 
00475      recEvt->addEvtRecTrack(evtRecTrackRoot);
00476   }
00477 
00478   return StatusCode::SUCCESS;
00479 }

void RootEventBaseCnv::declareObject const std::string &  fullPath,
const CLID &  clid,
const std::string &  treename,
const std::string &  branchname
[inherited]
 

Store TDS path to link a particular converter to an object on the TDS.

void RootEventBaseCnv::declareObject const std::string &  fullPath,
const CLID &  clid,
const std::string &  treename,
const std::string &  branchname
[inherited]
 

Store TDS path to link a particular converter to an object on the TDS.

00150                                                                                       {
00151     // Purpose and Method:  Save the path on the TDS, treename, pathname in the m_leaves vector, 
00152     //   corresponding to the DataObject that the converter handles.
00153    m_leaves.push_back(RootCnvSvc::Leaf(path, cl,treename,branchname));
00154 }

virtual StatusCode RootEventBaseCnv::fillObjRefs IOpaqueAddress *  pAddress,
DataObject *  pObject
[virtual, inherited]
 

Resolve the references of the converted object.

StatusCode RootEventBaseCnv::fillObjRefs IOpaqueAddress *  pAddress,
DataObject *  pObject
[virtual, inherited]
 

Resolve the references of the converted object.

00117                                                  {
00118     // Purpose and Method:  Resolve the references of the converted object.
00119     //     It is expected that derived classes will override this method.
00120     MsgStream log(msgSvc(), "RootEventBaseCnv");
00121     return StatusCode::SUCCESS;
00122 }

virtual StatusCode RootEventBaseCnv::fillRepRefs IOpaqueAddress *  pAddress,
DataObject *  pObject
[virtual, inherited]
 

Resolve the references of the converted object.

StatusCode RootEventBaseCnv::fillRepRefs IOpaqueAddress *  pAddress,
DataObject *  pObject
[virtual, inherited]
 

Resolve the references of the converted object.

00109                                                  {
00110     // Purpose and Method:  Resolve the references of the converted object.
00111     //     It is expected that derived classes will override this method.
00112     MsgStream log(msgSvc(), "RootEventBaseCnv");
00113     return StatusCode::SUCCESS;
00114 }

virtual StatusCode RootEventBaseCnv::finalize  )  [virtual, inherited]
 

StatusCode RootEventBaseCnv::finalize  )  [virtual, inherited]
 

00141                                         {
00142     if ( m_cnvSvc )     {
00143         m_cnvSvc->release();
00144         m_cnvSvc=0;
00145     }
00146     return Converter::finalize();
00147 }

TObject* RootEventBaseCnv::getReadObject  )  const [inline, inherited]
 

get the object to be read

00124 { return m_objRead;} 

TObject* RootEventBaseCnv::getReadObject  )  const [inline, inherited]
 

get the object to be read

00124 { return m_objRead;} 

virtual StatusCode RootEventBaseCnv::initialize  )  [virtual, inherited]
 

Reimplemented in DigiCnv, DstCnv, EvtHeaderCnv, EvtRecCnv, HltCnv, McCnv, RecTrackCnv, TrigCnv, DigiCnv, DstCnv, EvtHeaderCnv, EvtRecCnv, HltCnv, McCnv, RecTrackCnv, and TrigCnv.

StatusCode RootEventBaseCnv::initialize  )  [virtual, inherited]
 

Reimplemented in DigiCnv, DstCnv, EvtHeaderCnv, EvtRecCnv, HltCnv, McCnv, RecTrackCnv, TrigCnv, DigiCnv, DstCnv, EvtHeaderCnv, EvtRecCnv, HltCnv, McCnv, RecTrackCnv, and TrigCnv.

00125                                           {
00126  
00127   StatusCode status = Converter::initialize();
00128 
00129   if ( status.isSuccess() )   {
00130     IService* isvc = 0;
00131     status = serviceLocator()->service("RootCnvSvc", isvc, false);
00132     if ( !status.isSuccess() )   status = serviceLocator()->service("EventCnvSvc", isvc, true);
00133     if ( status.isSuccess() )   {
00134       status = isvc->queryInterface(IID_IRootCnvSvc, (void**)&m_cnvSvc);
00135     }
00136   }
00137   
00138   return status;
00139 }

template<class Ty1, class Ty2>
destination* Converter< Ty1, Ty2 >::operator const source  )  const [inline, inherited]
 

template<class Ty1, class Ty2>
destination* Converter< Ty1, Ty2 >::operator const source  )  const [inline, inherited]
 

virtual long RootEventBaseCnv::repSvcType  )  const [inline, virtual, inherited]
 

00087                                     { 
00088       return ROOT_StorageType; 
00089     } 

virtual long RootEventBaseCnv::repSvcType  )  const [inline, virtual, inherited]
 

00087                                     { 
00088       return ROOT_StorageType; 
00089     } 

const unsigned char RootEventBaseCnv::storageType  )  [inline, static, inherited]
 

Storage type and class ID.

00083                                                   {
00084       return ROOT_StorageType;
00085     }

const unsigned char RootEventBaseCnv::storageType  )  [inline, static, inherited]
 

Storage type and class ID.

00083                                                   {
00084       return ROOT_StorageType;
00085     }

virtual StatusCode EvtRecTrackCnv::TObjectToDataObject DataObject *&  obj  )  [protected, virtual]
 

transformation from root

Implements RootEventBaseCnv.

StatusCode EvtRecTrackCnv::TObjectToDataObject DataObject *&  obj  )  [protected, virtual]
 

transformation from root

Implements RootEventBaseCnv.

00023                                                                       {
00024   // creation of TDS object from root object
00025   MsgStream log(msgSvc(), "EvtRecTrackCnv");
00026   log << MSG::DEBUG << "EvtRecTrackCnv::TObjectToDataObject" << endreq;
00027 
00028   // create the TDS location for the EvtRecTrack Collection
00029   EvtRecTrackCol* evtRecTrackCol = new EvtRecTrackCol;
00030   refpObject = evtRecTrackCol;
00031 
00032   if ( ! m_evtRecTrackCol ) return StatusCode::SUCCESS;
00033 
00034   IDataProviderSvc* dataSvc = 0;
00035   StatusCode sc = serviceLocator()->getService("EventDataSvc",
00036         IID_IDataProviderSvc, (IInterface*&)dataSvc);
00037   if ( sc.isFailure() ) {
00038      log << MSG::FATAL << "Could not get EventDataSvc in EvtRecTrackCnv" << endreq;
00039      return sc;
00040   }
00041 
00042   /*SmartDataPtr<RecMdcTrackCol> mdcTrackCol(dataSvc, EventModel::Recon::RecMdcTrackCol);
00043   if ( ! mdcTrackCol ) {
00044      log << MSG::INFO << "Could not find RecMdcTrackCol" << endreq;
00045   }
00046 
00047   SmartDataPtr<RecMdcKalTrackCol> mdcKalTrackCol(dataSvc, EventModel::Recon::RecMdcKalTrackCol);
00048   if ( ! mdcKalTrackCol ) {
00049      log << MSG::INFO << "Could not find RecMdcKalTrackCol" << endreq;
00050   }
00051 
00052   SmartDataPtr<RecMdcDedxCol> mdcDedxCol(dataSvc, EventModel::Recon::RecMdcDedxCol);
00053   if ( ! mdcDedxCol ) {
00054      log << MSG::INFO << "Could not find RecMdcDedxCol" << endreq;
00055   }
00056 
00057   SmartDataPtr<RecExtTrackCol> extTrackCol(dataSvc, EventModel::Recon::RecExtTrackCol);
00058   if ( ! extTrackCol ) {
00059      log << MSG::INFO << "Could not find RecExtTrackCol" << endreq;
00060   }
00061 
00062   SmartDataPtr<RecTofTrackCol> tofTrackCol(dataSvc, EventModel::Recon::RecTofTrackCol);
00063   if ( ! tofTrackCol ) {
00064      log << MSG::INFO << "Could not find RecTofTrackCol" << endreq;
00065   }
00066 
00067   SmartDataPtr<RecEmcShowerCol> emcShowerCol(dataSvc, EventModel::Recon::RecEmcShowerCol);
00068   if ( ! emcShowerCol ) {
00069      log << MSG::INFO << "Could not find RecEmcShowerCol" << endreq;
00070   }
00071 
00072   SmartDataPtr<RecMucTrackCol> mucTrackCol(dataSvc, EventModel::Recon::RecMucTrackCol);
00073   if ( ! mucTrackCol ) {
00074      log << MSG::INFO << "Could not find RecMucTrackCol" << endreq;
00075   }*/
00076 
00077   //-----------------Dst to Rec convert in case of no Rec data in TDS
00078   int trackID;
00079 
00080   // Retrieve Mdc Track 
00081   SmartDataPtr<RecMdcTrackCol> mdcTrackCol(dataSvc, EventModel::Recon::RecMdcTrackCol);
00082   if(!mdcTrackCol)
00083   {
00084     log << MSG::INFO << "Could not find RecMdcTrackCol" << endreq;
00085     SmartDataPtr<DstMdcTrackCol> dstMdcTrackCol(dataSvc,"/Event/Dst/DstMdcTrackCol");
00086     if (!dstMdcTrackCol) {
00087       log << MSG::INFO << "Could not find DstMdcTrackCol" << endreq;
00088     } 
00089     else {
00090       RecMdcTrackCol* mdcTrackCol = new RecMdcTrackCol();
00091       DstMdcTrackCol::iterator iter_mdc = dstMdcTrackCol->begin();
00092       trackID = 0;
00093       for (;iter_mdc != dstMdcTrackCol->end(); iter_mdc++, trackID++) {
00094         RecMdcTrack* recMdcTrack = new RecMdcTrack(); 
00095         *recMdcTrack = **iter_mdc;
00096         (*mdcTrackCol).push_back(recMdcTrack);
00097         log << MSG::INFO 
00098                 << " Mdc Track ID = " << trackID
00099                   << " Mdc Track Nster = " << (*iter_mdc)->nster()
00100                   << endreq; 
00101       } 
00102       sc = dataSvc->registerObject(EventModel::Recon::RecMdcTrackCol,mdcTrackCol);
00103     }
00104   }
00105 
00106   // Retrieve MdcKal track 
00107   SmartDataPtr<RecMdcKalTrackCol> mdcKalTrackCol(dataSvc, EventModel::Recon::RecMdcKalTrackCol);
00108   if (!mdcKalTrackCol) {
00109     log << MSG::INFO << "Could not find RecMdcKalTrackCol" << endreq;
00110     SmartDataPtr<DstMdcKalTrackCol> dstMdcKalTrackCol(dataSvc,"/Event/Dst/DstMdcKalTrackCol");
00111     if(!dstMdcKalTrackCol) {
00112       log << MSG::INFO << "Could not find DstMdcKalTrackCol" << endreq;
00113     }
00114     else {
00115       RecMdcKalTrackCol* mdcKalTrackCol = new RecMdcKalTrackCol();
00116       DstMdcKalTrackCol::iterator iter_mdc = dstMdcKalTrackCol->begin();
00117       trackID = 0;
00118       for (;iter_mdc != dstMdcKalTrackCol->end(); iter_mdc++, trackID++) {
00119         RecMdcKalTrack* recMdcKalTrack = new RecMdcKalTrack();
00120         *recMdcKalTrack = **iter_mdc;
00121         (*mdcKalTrackCol).push_back(recMdcKalTrack);
00122         log << MSG::INFO
00123             << " MdcKalTrack ID = " << trackID
00124             << " MdcKalTrack Nster = " << (*iter_mdc)->nster()
00125             << " MdcKalTrack poca = " << (*iter_mdc)->poca()
00126             << endreq;
00127       }
00128       sc = dataSvc->registerObject(EventModel::Recon::RecMdcKalTrackCol, mdcKalTrackCol);       
00129     }
00130   }
00131 
00132   // Retrieve MdcDedx 
00133   SmartDataPtr<RecMdcDedxCol> mdcDedxCol(dataSvc, EventModel::Recon::RecMdcDedxCol);
00134   if (!mdcDedxCol) {
00135     log <<MSG::INFO << "Could not find RecMdcDedxCol" << endreq;
00136     SmartDataPtr<DstMdcDedxCol> dstMdcDedxCol(dataSvc,"/Event/Dst/DstMdcDedxCol");
00137     if(!dstMdcDedxCol) {
00138       log <<MSG::INFO << "Could not find DstMdcDedxCol" << endreq;
00139     }
00140     else {
00141       RecMdcDedxCol* mdcDedxCol = new RecMdcDedxCol();
00142       DstMdcDedxCol::iterator iter_mdc = dstMdcDedxCol->begin();
00143       trackID=0;
00144       for (;iter_mdc != dstMdcDedxCol->end(); iter_mdc++, trackID++) {
00145         RecMdcDedx* recMdcDedx = new RecMdcDedx();
00146         *recMdcDedx= **iter_mdc;
00147         (*mdcDedxCol).push_back(recMdcDedx);
00148         log << MSG::INFO
00149             << " MdcDedx ID = " << trackID
00150             << " MdcDedx " 
00151             << endreq;
00152       }
00153       sc = dataSvc->registerObject(EventModel::Recon::RecMdcDedxCol, mdcDedxCol);
00154     }
00155   } 
00156   
00157   // Retrieve Ext track 
00158   SmartDataPtr<RecExtTrackCol> extTrackCol(dataSvc, EventModel::Recon::RecExtTrackCol);
00159   if (!extTrackCol) {
00160     log <<MSG::INFO << "Could not find RecExtTrackCol" << endreq;
00161     SmartDataPtr<DstExtTrackCol> dstExtTrackCol(dataSvc,"/Event/Dst/DstExtTrackCol");
00162     if(!dstExtTrackCol) {
00163       log <<MSG::INFO << "Could not find DstExtTrackCol" << endreq;
00164     }
00165     else {
00166       RecExtTrackCol* extTrackCol = new RecExtTrackCol();
00167       DstExtTrackCol::iterator iter_ext = dstExtTrackCol->begin();
00168       trackID=0;
00169       for (;iter_ext != dstExtTrackCol->end(); iter_ext++, trackID++) {
00170         RecExtTrack* recExtTrack = new RecExtTrack();
00171         *recExtTrack = **iter_ext;
00172         (*extTrackCol).push_back(recExtTrack);
00173         log << MSG::INFO
00174             << " ExtTrack ID = " << trackID
00175             << endreq;
00176       }
00177       sc = dataSvc->registerObject(EventModel::Recon::RecExtTrackCol, extTrackCol);
00178     }
00179   }
00180       
00181   // Retrieve Tof Track 
00182   SmartDataPtr<RecTofTrackCol> tofTrackCol(dataSvc, EventModel::Recon::RecTofTrackCol);
00183   if ( !tofTrackCol ) {
00184     log << MSG::INFO << "Could not find TofTrackCol" << endreq;
00185     SmartDataPtr<DstTofTrackCol> dstTofTrackCol(dataSvc,"/Event/Dst/DstTofTrackCol");
00186     if(!dstTofTrackCol) {
00187       log << MSG::INFO << "Could not find DstTofTrackCol" << endreq;
00188     }
00189     else {
00190       RecTofTrackCol* tofTrackCol = new RecTofTrackCol();
00191       DstTofTrackCol::iterator iter_tof = dstTofTrackCol->begin();
00192       for (;iter_tof != dstTofTrackCol->end(); iter_tof++) {
00193         RecTofTrack* recTofTrack = new RecTofTrack();
00194         *recTofTrack = **iter_tof;
00195         (*tofTrackCol).push_back(recTofTrack);
00196         log << MSG::INFO
00197             << "Tof Track ID = " << (*iter_tof)->tofTrackID()
00198             << " Track ID = " << (*iter_tof)->trackID()
00199             << " Tof Counter ID = "<<(*iter_tof)->tofID()
00200             << " Quality = "<< (*iter_tof)->quality()
00201             << endreq;
00202       }
00203       sc = dataSvc->registerObject(EventModel::Recon::RecTofTrackCol, tofTrackCol);
00204     }
00205   }
00206 
00207 
00208   // Retrieve Emc shower 
00209   SmartDataPtr<RecEmcShowerCol> emcShowerCol(dataSvc, EventModel::Recon::RecEmcShowerCol);
00210   if (!emcShowerCol) {
00211     log << MSG::INFO << "Could not find RecEmcShowerCol" << endreq;
00212     SmartDataPtr<DstEmcShowerCol> dstEmcShowerCol(dataSvc,"/Event/Dst/DstEmcShowerCol");
00213     if(!dstEmcShowerCol) {
00214       log << MSG::INFO << "Could not find DstEmcShowerCol" << endreq;
00215     }
00216     else {
00217       RecEmcShowerCol* emcShowerCol = new RecEmcShowerCol();
00218       DstEmcShowerCol::iterator iter_emc = dstEmcShowerCol->begin();
00219       trackID=0;
00220       for (;iter_emc != dstEmcShowerCol->end(); iter_emc++, trackID++) {
00221         RecEmcShower* recEmcShower = new RecEmcShower();
00222         *recEmcShower = **iter_emc;
00223         (*emcShowerCol).push_back(recEmcShower);
00224         log << MSG::INFO
00225             << " EmcShower ID = " << trackID
00226             << " EmcShower energy = " << (*iter_emc)->energy()
00227             << endreq;
00228       }
00229       sc = dataSvc->registerObject(EventModel::Recon::RecEmcShowerCol, emcShowerCol);
00230     }
00231   }
00232 
00233   // Retrieve Muc Track 
00234   SmartDataPtr<RecMucTrackCol> mucTrackCol(dataSvc, EventModel::Recon::RecMucTrackCol);
00235   if (!mucTrackCol) {
00236     log <<MSG::INFO << "Could not find RecMucTrackCol" << endreq;
00237     SmartDataPtr<DstMucTrackCol> dstMucTrackCol(dataSvc,"/Event/Dst/DstMucTrackCol");
00238     if(!dstMucTrackCol) {
00239       log <<MSG::INFO << "Could not find DstMucTrackCol" << endreq;
00240     }
00241     else {
00242       RecMucTrackCol* mucTrackCol = new RecMucTrackCol();
00243       DstMucTrackCol::iterator iter_muc = dstMucTrackCol->begin();
00244       trackID=0;
00245       for (;iter_muc != dstMucTrackCol->end(); iter_muc++, trackID++) {
00246         RecMucTrack* recMucTrack = new RecMucTrack();
00247         *recMucTrack = **iter_muc;
00248         (*mucTrackCol).push_back(recMucTrack);
00249         log << MSG::INFO
00250             << " MucTrack ID = "<< trackID
00251             <<endreq;
00252       }
00253       sc = dataSvc->registerObject(EventModel::Recon::RecMucTrackCol, mucTrackCol);
00254     }
00255   }
00256 
00257   // convert
00258   TIter evtRecTrackIter(m_evtRecTrackCol);
00259   TEvtRecTrack* evtRecTrackRoot = 0;
00260   while ( (evtRecTrackRoot = (TEvtRecTrack*)evtRecTrackIter.Next() ) ) {
00261      EvtRecTrack* evtRecTrack = new EvtRecTrack();
00262      m_common.m_rootEvtRecTrackMap[evtRecTrackRoot] = evtRecTrack;
00263      // set ....
00264      evtRecTrack->setTrackId( evtRecTrackRoot->trackId() );
00265      evtRecTrack->setPartId( evtRecTrackRoot->partId() );
00266      evtRecTrack->setQuality( evtRecTrackRoot->quality() );
00267 
00268      int mdcTrackId = evtRecTrackRoot->mdcTrackId();
00269      if ( mdcTrackId >= 0 ) {
00270         evtRecTrack->setMdcTrack(
00271               dynamic_cast<RecMdcTrack*>(mdcTrackCol->containedObject(mdcTrackId))
00272               );
00273      }
00274 
00275      int mdcKalTrackId = evtRecTrackRoot->mdcKalTrackId();
00276      if ( mdcKalTrackId >= 0 ) {
00277         evtRecTrack->setMdcKalTrack(
00278               dynamic_cast<RecMdcKalTrack*>(mdcKalTrackCol->containedObject(mdcKalTrackId))
00279               );
00280      }
00281 
00282      int mdcDedxId = evtRecTrackRoot->mdcDedxId();
00283      if ( mdcDedxId >= 0 ) {
00284         evtRecTrack->setMdcDedx(
00285               dynamic_cast<RecMdcDedx*>(mdcDedxCol->containedObject(mdcDedxId))
00286               );
00287      }
00288 
00289      int extTrackId = evtRecTrackRoot->extTrackId();
00290      if ( extTrackId >= 0 ) {
00291         evtRecTrack->setExtTrack(
00292               dynamic_cast<RecExtTrack*>(extTrackCol->containedObject(extTrackId))
00293               );
00294      }
00295 
00296      const std::vector<int>& tofTrackIds = evtRecTrackRoot->tofTrackIds();
00297      for ( unsigned int i = 0; i < tofTrackIds.size(); i++) {
00298         RecTofTrack* tofTrack = dynamic_cast<RecTofTrack*>(tofTrackCol->containedObject(tofTrackIds[i]));
00299         evtRecTrack->addTofTrack(tofTrack);
00300      }
00301 
00302      int emcShowerId = evtRecTrackRoot->emcShowerId();
00303      if ( emcShowerId >= 0 ) {
00304         evtRecTrack->setEmcShower(
00305               dynamic_cast<RecEmcShower*>(emcShowerCol->containedObject(emcShowerId))
00306               );
00307      }
00308 
00309      int mucTrackId = evtRecTrackRoot->mucTrackId();
00310      if ( mucTrackId >= 0 ) {
00311         evtRecTrack->setMucTrack(
00312               dynamic_cast<RecMucTrack*>(mucTrackCol->containedObject(mucTrackId))
00313               );
00314      }
00315 
00316      evtRecTrackCol->push_back(evtRecTrack);
00317   }
00318 
00319   delete m_evtRecTrackCol;
00320   m_evtRecTrackCol = 0;
00321   return StatusCode::SUCCESS;
00322 }


Friends And Related Function Documentation

CnvFactory<EvtRecTrackCnv> [friend]
 


Member Data Documentation

CLID RootEventBaseCnv::CLID_top [protected, inherited]
 

the CLID of the upper converter if any

std::vector<void *> RootEventBaseCnv::m_adresses [protected, inherited]
 

each converter knows the corresponding adresses

std::vector<void *> RootEventBaseCnv::m_adresses [protected, inherited]
 

each converter knows the corresponding adresses

int RootEventBaseCnv::m_branchNr [protected, inherited]
 

the branchNr of this converter for writing

int RootEventBaseCnv::m_branchNrDst [protected, inherited]
 

int RootEventBaseCnv::m_branchNrEvtHeader [protected, inherited]
 

int RootEventBaseCnv::m_branchNrEvtRec [protected, inherited]
 

int RootEventBaseCnv::m_branchNrMc [protected, inherited]
 

int RootEventBaseCnv::m_branchNrRecon [protected, inherited]
 

TArrayS* RootEventBaseCnv::m_branchNumbers [protected, inherited]
 

array with number of branches for reading

TArrayS* RootEventBaseCnv::m_branchNumbers [protected, inherited]
 

array with number of branches for reading

RootCnvSvc* RootEventBaseCnv::m_cnvSvc [protected, inherited]
 

RootCnvSvc* RootEventBaseCnv::m_cnvSvc [protected, inherited]
 

commonData EvtRecTrackCnv::m_common [private]
 

relational maps

std::string RootEventBaseCnv::m_currentFileName [protected, inherited]
 

IDataProviderSvc* RootEventBaseCnv::m_eds [protected, inherited]
 

pointer to eventdataservice

IDataProviderSvc* RootEventBaseCnv::m_eds [protected, inherited]
 

pointer to eventdataservice

TObjArray* EvtRecTrackCnv::m_evtRecTrackCol [private]
 

TObjArray* EvtRecTrackCnv::m_evtRecTrackCol [private]
 

RootEvtSelector* RootEventBaseCnv::m_evtsel [protected, inherited]
 

RootEvtSelector* RootEventBaseCnv::m_evtsel [protected, inherited]
 

std::vector<RootCnvSvc::Leaf> RootEventBaseCnv::m_leaves [protected, inherited]
 

std::vector<RootCnvSvc::Leaf> RootEventBaseCnv::m_leaves [protected, inherited]
 

TObject* RootEventBaseCnv::m_objRead [protected, inherited]
 

the object that was read

TObject* RootEventBaseCnv::m_objRead [protected, inherited]
 

the object that was read

std::string RootEventBaseCnv::m_rootBranchname [protected, inherited]
 

root branchname (may be concatenated of severals)

RootInterface* RootEventBaseCnv::m_rootInterface [protected, inherited]
 

pointer to the RootInterface

RootInterface* RootEventBaseCnv::m_rootInterface [protected, inherited]
 

pointer to the RootInterface

std::string RootEventBaseCnv::m_rootTreename [protected, inherited]
 

each converter knows it's treename


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