#include <RecEmcShowerCnv.h>
Inheritance diagram for RecEmcShowerCnv:
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 () |
destination * | operator (const source &) const |
destination * | operator (const source &) const |
virtual long | repSvcType () const |
virtual long | repSvcType () const |
virtual | ~RecEmcShowerCnv () |
virtual | ~RecEmcShowerCnv () |
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 destination * | convert (const source &) const =0 |
virtual destination * | convert (const source &) const =0 |
virtual StatusCode | DataObjectToTObject (DataObject *obj, RootAddress *addr) |
transformation to root | |
virtual StatusCode | DataObjectToTObject (DataObject *obj, RootAddress *addr) |
transformation to root | |
RecEmcShowerCnv (ISvcLocator *svc) | |
RecEmcShowerCnv (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 | |
RootCnvSvc * | m_cnvSvc |
RootCnvSvc * | m_cnvSvc |
std::string | m_currentFileName |
IDataProviderSvc * | m_eds |
pointer to eventdataservice | |
IDataProviderSvc * | m_eds |
pointer to eventdataservice | |
RootEvtSelector * | m_evtsel |
RootEvtSelector * | m_evtsel |
std::vector< RootCnvSvc::Leaf > | m_leaves |
std::vector< RootCnvSvc::Leaf > | m_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) | |
RootInterface * | m_rootInterface |
pointer to the RootInterface | |
RootInterface * | m_rootInterface |
pointer to the RootInterface | |
std::string | m_rootTreename |
each converter knows it's treename | |
Private Attributes | |
commonData | m_common |
relational maps | |
TObjArray * | m_recEmcShowerCol |
root object to be read | |
TObjArray * | m_recEmcShowerCol |
root object to be read | |
Friends | |
class | CnvFactory<RecEmcShowerCnv> |
|
|
|
|
|
|
|
|
|
00025 { };
|
|
00035 : RootEventBaseCnv(classID(), svc) 00036 { 00037 00038 RecEmcShower *aShower = new RecEmcShower(); 00039 //cout<<"in RecEmcShowerCnv::constructor:: showid= "<<aShower->clID()<<endl; 00040 delete aShower; 00041 00042 // Here we associate this converter with the /Event path on the TDS. 00043 MsgStream log(msgSvc(), "RecEmcShowerCnv"); 00044 //log << MSG::DEBUG << "Constructor called for " << objType() << endreq; 00045 //m_rootTreename ="Rec"; 00046 m_rootBranchname ="m_recEmcShowerCol"; 00047 //declareObject(EventModel::Recon::RecEmcShowerCol, objType(), m_rootTreename, m_rootBranchname); 00048 m_adresses.push_back(&m_recEmcShowerCol); 00049 m_recEmcShowerCol=0; 00050 }
|
|
00025 { };
|
|
|
|
00021 {
00022 return CLID_RecEmcShowerCol;
00023 }
|
|
00021 {
00022 return CLID_RecEmcShowerCol;
00023 }
|
|
|
|
|
|
Convert the persistent object to transient.
|
|
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 }
|
|
Convert the transient object to the requested representation.
|
|
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 }
|
|
transformation to root
Implements RootEventBaseCnv. |
|
transformation to root
Implements RootEventBaseCnv. 00224 { 00225 MsgStream log(msgSvc(), "RecEmcShowerCnv"); 00226 log << MSG::DEBUG << "RecEmcShowerCnv::DataObjectToTObject" << endreq; 00227 //cout << "RecEmcShowerCnv::DataObjectToTObject" << endl; 00228 StatusCode sc=StatusCode::SUCCESS; 00229 00230 RecEmcShowerCol * emcShowerColTds=dynamic_cast<RecEmcShowerCol *> (obj); 00231 if (!emcShowerColTds) { 00232 log << MSG::ERROR << "Could not downcast to RecEmcShowerCol" << endreq; 00233 return StatusCode::FAILURE; 00234 } 00235 00236 DataObject *evt; 00237 m_eds->findObject(EventModel::Recon::Event,evt); 00238 if (evt==NULL) { 00239 log << MSG::ERROR << "Could not get RecEvent in TDS " << endreq; 00240 return StatusCode::FAILURE; 00241 } 00242 ReconEvent * devtTds=dynamic_cast<ReconEvent *> (evt); 00243 if (!devtTds) { 00244 log << MSG::ERROR << "RecEmcShowerCnv:Could not downcast to TDS DstEvent" << endreq; 00245 } 00246 IOpaqueAddress *addr; 00247 00248 m_cnvSvc->getRecTrackCnv()->createRep(evt,addr); 00249 TRecTrackEvent *recEvt=m_cnvSvc->getRecTrackCnv()->getWriteObject(); 00250 00251 const TObjArray *m_emcShowerCol = recEvt->getEmcShowerCol(); 00252 if (!m_emcShowerCol) return sc; 00253 recEvt->clearEmcShowerCol(); //necessary in case there is I/O at the same time since array is static 00254 RecEmcShowerCol::const_iterator emcShowerTds; 00255 00256 for (emcShowerTds = emcShowerColTds->begin(); emcShowerTds != emcShowerColTds->end(); emcShowerTds++) { 00257 Int_t trackId = (*emcShowerTds)->trackId(); 00258 Int_t numHits = (*emcShowerTds)->numHits(); 00259 Int_t status =(*emcShowerTds)->status(); 00260 Int_t cellId =(*emcShowerTds)->getShowerId(); 00261 Int_t clusterId = (*emcShowerTds)->getClusterId(); 00262 Int_t module =(*emcShowerTds)->module(); 00263 Double_t x = (*emcShowerTds)->x(); 00264 Double_t y = (*emcShowerTds)->y(); 00265 Double_t z = (*emcShowerTds)->z(); 00266 Double_t theta = (*emcShowerTds)->theta(); 00267 Double_t dtheta =(*emcShowerTds)->dtheta(); 00268 Double_t phi =(*emcShowerTds)->phi(); 00269 Double_t dphi =(*emcShowerTds)->dphi(); 00270 Double_t energy = (*emcShowerTds)->energy(); 00271 Double_t dE = (*emcShowerTds)->dE(); 00272 Double_t eSeed = (*emcShowerTds)->eSeed(); 00273 Double_t e3x3 = (*emcShowerTds)->e3x3(); 00274 Double_t e5x5 = (*emcShowerTds)->e5x5(); 00275 Double_t eall = (*emcShowerTds)->getEAll(); 00276 Double_t elepton = (*emcShowerTds)->getELepton(); 00277 Double_t time = (Int_t)(*emcShowerTds)->time(); 00278 Double_t secondMoment = (*emcShowerTds)->secondMoment(); 00279 Double_t latMoment = (*emcShowerTds)->latMoment(); 00280 Double_t a20Moment = (*emcShowerTds)->a20Moment(); 00281 Double_t a42Moment = (*emcShowerTds)->a42Moment(); 00282 00283 HepSymMatrix matrix = (*emcShowerTds)->errorMatrix(); 00284 //cout<<"matrix: \n"<<matrix<<endl; 00285 Double_t err[6]; 00286 err[0] = matrix[0][0]; 00287 err[1] = matrix[1][1]; 00288 err[2] = matrix[2][2]; 00289 err[3] = matrix[0][1]; 00290 err[4] = matrix[0][2]; 00291 err[5] = matrix[1][2]; 00292 00293 map<Int_t, Double_t> cellIdMap; 00294 RecEmcFractionMap::const_iterator pFractionMap; 00295 00296 for(pFractionMap=(*emcShowerTds)->Begin(); 00297 pFractionMap!=(*emcShowerTds)->End(); 00298 pFractionMap++) { 00299 Int_t id = pFractionMap->first; 00300 Double_t frac = pFractionMap->second.getFraction(); 00301 cellIdMap[id]=frac; 00302 } 00303 00304 vector<Int_t> cellId3x3; 00305 RecEmcIDVector id3x3 = (*emcShowerTds)->getCellId3x3(); 00306 ci_RecEmcIDVector ciCellId; 00307 for(ciCellId=id3x3.begin(); 00308 ciCellId!=id3x3.end(); 00309 ciCellId++) { 00310 Int_t id = *ciCellId; 00311 cellId3x3.push_back(id); 00312 } 00313 00314 vector<Int_t> cellId5x5; 00315 RecEmcIDVector id5x5 = (*emcShowerTds)->getCellId5x5(); 00316 for(ciCellId=id5x5.begin(); 00317 ciCellId!=id5x5.end(); 00318 ciCellId++) { 00319 Int_t id = *ciCellId; 00320 cellId5x5.push_back(id); 00321 } 00322 00323 TRecEmcShower *emcShowerRoot = new TRecEmcShower(); 00324 //m_common.m_recEmcShowerMap[(*emcShowerTds)] = emcShowerRoot; 00325 00326 //emcShowerRoot->initialize(numHits ,status ,cellId ,module ,x ,dx,y ,dy,z ,dz,theta ,dtheta ,phi,dphi ,energy ,dE,cosx ,cosy ,cosz); 00327 emcShowerRoot->setTrackId(trackId ); 00328 emcShowerRoot->setNumHits(numHits ); 00329 emcShowerRoot->setStatus(status ); 00330 emcShowerRoot->setCellId( cellId ); 00331 emcShowerRoot->setClusterId( clusterId ); 00332 emcShowerRoot->setModule( module); 00333 emcShowerRoot->setX( x ); 00334 emcShowerRoot->setY( y ); 00335 emcShowerRoot->setZ( z ); 00336 emcShowerRoot->setEnergy( energy ); 00337 emcShowerRoot->setDE( dE ); 00338 emcShowerRoot->setTheta( theta ); 00339 emcShowerRoot->setDtheta( dtheta ); 00340 emcShowerRoot->setPhi( phi ); 00341 emcShowerRoot->setDphi( dphi ); 00342 emcShowerRoot->setESeed( eSeed ); 00343 emcShowerRoot->setE3x3( e3x3 ); 00344 emcShowerRoot->setE5x5( e5x5 ); 00345 emcShowerRoot->setEAll( eall ); 00346 emcShowerRoot->setELepton( elepton ); 00347 emcShowerRoot->setTime( time ); 00348 emcShowerRoot->setSecondMoment(secondMoment); 00349 emcShowerRoot->setLatMoment(latMoment); 00350 emcShowerRoot->setA20Moment(a20Moment); 00351 emcShowerRoot->setA42Moment(a42Moment); 00352 emcShowerRoot->setErr( err ); 00353 //emcShowerRoot->setVecHits(vecHits); 00354 00355 emcShowerRoot->setCellIdMap(cellIdMap); 00356 emcShowerRoot->setCellId3x3(cellId3x3); 00357 emcShowerRoot->setCellId5x5(cellId5x5); 00358 00359 recEvt->addEmcShower(emcShowerRoot); 00360 } 00361 return StatusCode::SUCCESS; 00362 } 00363 #endif
|
|
Store TDS path to link a particular converter to an object on the TDS.
|
|
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 }
|
|
Resolve the references of the converted object.
|
|
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 }
|
|
Resolve the references of the converted object.
|
|
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 }
|
|
|
|
00141 { 00142 if ( m_cnvSvc ) { 00143 m_cnvSvc->release(); 00144 m_cnvSvc=0; 00145 } 00146 return Converter::finalize(); 00147 }
|
|
get the object to be read
00124 { return m_objRead;}
|
|
get the object to be read
00124 { return m_objRead;}
|
|
Reimplemented in DigiCnv, DstCnv, EvtHeaderCnv, EvtRecCnv, HltCnv, McCnv, RecTrackCnv, TrigCnv, DigiCnv, DstCnv, EvtHeaderCnv, EvtRecCnv, HltCnv, McCnv, RecTrackCnv, and TrigCnv. |
|
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 }
|
|
|
|
|
|
00087 {
00088 return ROOT_StorageType;
00089 }
|
|
00087 {
00088 return ROOT_StorageType;
00089 }
|
|
Storage type and class ID.
00083 {
00084 return ROOT_StorageType;
00085 }
|
|
Storage type and class ID.
00083 {
00084 return ROOT_StorageType;
00085 }
|
|
transformation from root
Implements RootEventBaseCnv. |
|
transformation from root
Implements RootEventBaseCnv. 00052 { 00053 // creation of TDS object from root object 00054 00055 MsgStream log(msgSvc(), "RecEmcShowerCnv"); 00056 log << MSG::DEBUG << "RecEmcShowerCnv::TObjectToDataObject" << endreq; 00057 //cout << "RecEmcShowerCnv::TObjectToDataObject" << endl; 00058 StatusCode sc=StatusCode::SUCCESS; 00059 00060 IDataProviderSvc* eventSvc; 00061 Gaudi::svcLocator()->service("EventDataSvc", eventSvc); 00062 00063 SmartDataPtr<RecEmcHitCol> emcRecHitCol(eventSvc, 00064 EventModel::Recon::RecEmcHitCol); 00065 if(!emcRecHitCol) log << MSG::INFO << "can't retrieve RecEmcHitCol" << endreq; 00066 00067 SmartDataPtr<RecEmcClusterCol> emcRecClusterCol(eventSvc, 00068 EventModel::Recon::RecEmcClusterCol); 00069 if(!emcRecClusterCol) log << MSG::INFO << "can't retrieve RecEmcClusterCol" << endreq; 00070 00071 // create the TDS location for the RecEmcShower Collection 00072 RecEmcShowerCol* emcShowerTdsCol = new RecEmcShowerCol; 00073 refpObject=emcShowerTdsCol; 00074 00075 // now convert 00076 if (!m_recEmcShowerCol) return sc; 00077 TIter emcShowerIter(m_recEmcShowerCol); 00078 TRecEmcShower *emcShowerRoot = 0; 00079 while ((emcShowerRoot = (TRecEmcShower*)emcShowerIter.Next())) { 00080 int trackId = emcShowerRoot->trackId(); 00081 int numHits = emcShowerRoot->numHits(); 00082 int status = emcShowerRoot->status(); 00083 int cellId = emcShowerRoot->cellId(); 00084 int module = emcShowerRoot->module(); 00085 double x = emcShowerRoot->x(); 00086 double y = emcShowerRoot->y(); 00087 double z = emcShowerRoot->z(); 00088 double theta = emcShowerRoot->theta(); 00089 double dtheta = emcShowerRoot->dtheta(); 00090 double phi = emcShowerRoot->phi(); 00091 double dphi = emcShowerRoot->dphi(); 00092 double energy = emcShowerRoot->energy(); 00093 double dE = emcShowerRoot->dE(); 00094 double eSeed = emcShowerRoot->eSeed(); 00095 double e3x3 = emcShowerRoot->e3x3(); 00096 double e5x5 = emcShowerRoot->e5x5(); 00097 double eall = emcShowerRoot->eAll(); 00098 double elepton = emcShowerRoot->eLepton(); 00099 double time = emcShowerRoot->time(); 00100 double secondMoment = emcShowerRoot->secondMoment(); 00101 double latMoment = emcShowerRoot->latMoment(); 00102 double a20Moment = emcShowerRoot->a20Moment(); 00103 double a42Moment = emcShowerRoot->a42Moment(); 00104 00105 HepSymMatrix matrix(3); 00106 matrix[0][0]=emcShowerRoot->err(0); 00107 matrix[1][1]=emcShowerRoot->err(1); 00108 matrix[2][2]=emcShowerRoot->err(2); 00109 matrix[0][1]=emcShowerRoot->err(3); 00110 matrix[0][2]=emcShowerRoot->err(4); 00111 matrix[1][2]=emcShowerRoot->err(5); 00112 00113 RecEmcID showerId(cellId); 00114 RecEmcID clusterId(emcShowerRoot->clusterId()); 00115 00116 RecEmcIDVector id3x3; 00117 vector<Int_t> cellId3x3 = emcShowerRoot->cellId3x3(); 00118 vector<Int_t>::iterator iCellId; 00119 //cout<<"id3x3"<<endl; 00120 for(iCellId=cellId3x3.begin(); 00121 iCellId!=cellId3x3.end(); 00122 iCellId++) { 00123 RecEmcID id(*iCellId); 00124 //cout<<"id="<<id<<endl; 00125 id3x3.push_back(id); 00126 } 00127 00128 RecEmcIDVector id5x5; 00129 vector<Int_t> cellId5x5 = emcShowerRoot->cellId5x5(); 00130 //cout<<"id5x5"<<endl; 00131 for(iCellId=cellId5x5.begin(); 00132 iCellId!=cellId5x5.end(); 00133 iCellId++) { 00134 RecEmcID id(*iCellId); 00135 //cout<<"id="<<id<<endl; 00136 id5x5.push_back(id); 00137 } 00138 00139 RecEmcShower *emcShowerTds = new RecEmcShower(); 00140 m_common.m_rootRecEmcShowerMap[emcShowerRoot] = emcShowerTds; 00141 00142 emcShowerTds->setTrackId(trackId ); 00143 emcShowerTds->setNumHits(numHits ); 00144 emcShowerTds->setStatus(status ); 00145 emcShowerTds->setCellId( cellId ); 00146 emcShowerTds->setModule( module); 00147 00148 HepPoint3D pos(x,y,z); 00149 emcShowerTds->setPosition(pos); 00150 emcShowerTds->setEnergy( energy ); 00151 emcShowerTds->setDE( dE ); 00152 emcShowerTds->setDtheta( dtheta ); 00153 emcShowerTds->setDphi( dphi ); 00154 emcShowerTds->setESeed(eSeed); 00155 emcShowerTds->setE3x3(e3x3); 00156 emcShowerTds->setE5x5(e5x5); 00157 emcShowerTds->EAll(eall); 00158 emcShowerTds->ELepton(elepton); 00159 emcShowerTds->setTime(time); 00160 emcShowerTds->setSecondMoment(secondMoment); 00161 emcShowerTds->setLatMoment(latMoment); 00162 emcShowerTds->setA20Moment(a20Moment); 00163 emcShowerTds->setA42Moment(a42Moment); 00164 emcShowerTds->setErrorMatrix( matrix ); 00165 00166 emcShowerTds->ShowerId(showerId); 00167 emcShowerTds->ClusterId(clusterId); 00168 emcShowerTds->CellId3x3(id3x3); 00169 emcShowerTds->CellId5x5(id5x5); 00170 00171 //put fraction map into shower 00172 if(emcRecHitCol) { 00173 map<Int_t, Double_t> cellIdMap=emcShowerRoot->cellIdMap(); 00174 map<Int_t, Double_t>::iterator iCellIdMap; 00175 for(iCellIdMap=cellIdMap.begin(); 00176 iCellIdMap!=cellIdMap.end(); 00177 iCellIdMap++) { 00178 00179 RecEmcID id(iCellIdMap->first); 00180 00181 RecEmcHitCol::iterator iHit; 00182 for(iHit=emcRecHitCol->begin(); 00183 iHit!=emcRecHitCol->end(); 00184 iHit++) { 00185 00186 RecEmcID idHit((*iHit)->getCellId()); 00187 00188 if(id==idHit) { 00189 RecEmcFraction frac(*(*iHit)); 00190 frac.Fraction(iCellIdMap->second); 00191 emcShowerTds->Insert(frac); 00192 break; 00193 } 00194 } //RecEmcHitCol 00195 } //CellIdMap 00196 } 00197 00198 if(emcRecClusterCol) { 00199 RecEmcClusterCol::iterator iCluster; 00200 for(iCluster=emcRecClusterCol->begin(); 00201 iCluster!=emcRecClusterCol->end(); 00202 iCluster++) { 00203 if(clusterId==(*iCluster)->getClusterId()) { 00204 emcShowerTds->Cluster(*iCluster); 00205 break; 00206 //emcRecClusterCol->InsertShower(*iCluster); 00207 } 00208 } 00209 } 00210 00211 emcShowerTdsCol->push_back(emcShowerTds); 00212 // delete emcShowerTds; 00213 // emcShowerTds = NULL; 00214 } 00215 00216 //m_recEmcShowerCol->Delete(); // wensp add 2005/12/30 00217 delete m_recEmcShowerCol; 00218 m_recEmcShowerCol = 0; 00219 00220 return StatusCode::SUCCESS; 00221 }
|
|
|
|
the CLID of the upper converter if any
|
|
each converter knows the corresponding adresses
|
|
each converter knows the corresponding adresses
|
|
the branchNr of this converter for writing
|
|
|
|
|
|
|
|
|
|
|
|
array with number of branches for reading
|
|
array with number of branches for reading
|
|
|
|
|
|
relational maps
|
|
|
|
pointer to eventdataservice
|
|
pointer to eventdataservice
|
|
|
|
|
|
|
|
|
|
the object that was read
|
|
the object that was read
|
|
root object to be read
|
|
root object to be read
|
|
root branchname (may be concatenated of severals)
|
|
pointer to the RootInterface
|
|
pointer to the RootInterface
|
|
each converter knows it's treename
|