/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Event/RootCnvSvc/RootCnvSvc-02-01-12/src/Dst/EmcTrackCnv.cxx

Go to the documentation of this file.
00001 #ifndef EmcTrackCnv_CXX
00002 #define EmcTrackCnv_CXX  1
00003 
00004 #include "GaudiKernel/MsgStream.h"
00005 #include "GaudiKernel/DataObject.h"
00006 #include "GaudiKernel/ObjectVector.h"
00007 
00008 #include "TClonesArray.h"
00009 
00010 #include "EventModel/EventModel.h"
00011 
00012 #include "DstEvent/DstEvent.h"   //TDS object
00013 #include "DstEvent/DstEmcShower.h"   //TDS object
00014 #include "RootEventData/TEmcTrack.h" // standard root object
00015 #include "RootEventData/TDstEvent.h"
00016 
00017 #include "RootCnvSvc/Dst/DstCnv.h"
00018 #include "RootCnvSvc/Dst/EmcTrackCnv.h"
00019 #include "RootCnvSvc/RootAddress.h"
00020 
00021 #include <vector>
00022 
00023 using namespace std;
00024 
00025 // Instantiation of a static factory class used by clients to create
00026 // instances of this service
00027 //static CnvFactory<EmcTrackCnv> s_factory;
00028 //const ICnvFactory& EmcTrackCnvFactory = s_factory;
00029 
00030 EmcTrackCnv::EmcTrackCnv(ISvcLocator* svc)
00031 : RootEventBaseCnv(classID(), svc)
00032 {
00033   // Here we associate this converter with the /Event path on the TDS.
00034   MsgStream log(msgSvc(), "EmcTrackCnv");
00035   // log << MSG::DEBUG << "Constructor called for " << objType() << endreq;
00036   m_rootTreename ="Rec";
00037   m_rootBranchname ="m_emcTrackCol";
00038   //declareObject(EventModel::Dst::DstEmcShowerCol, objType(), m_rootTreename, m_rootBranchname);
00039   m_adresses.push_back(&m_emcTrackCol);
00040   m_emcTrackCol=0;
00041 
00042 }
00043 
00044 StatusCode EmcTrackCnv::TObjectToDataObject(DataObject*& refpObject) {
00045   // creation of TDS object from root object
00046 
00047   MsgStream log(msgSvc(), "EmcTrackCnv");
00048   log << MSG::DEBUG << "EmcTrackCnv::TObjectToDataObject" << endreq;
00049   StatusCode sc=StatusCode::SUCCESS;
00050 
00051   // create the TDS location for the EmcTrack Collection
00052   DstEmcShowerCol* emcTrackTdsCol = new DstEmcShowerCol;
00053   refpObject=emcTrackTdsCol;
00054 
00055 
00056   // now convert
00057   if (!m_emcTrackCol) return sc;
00058   TIter emcTrackIter(m_emcTrackCol);
00059   TEmcTrack *emcTrackRoot = 0;
00060   while ((emcTrackRoot = (TEmcTrack*)emcTrackIter.Next())) {
00061     int       trackId = emcTrackRoot->trackId();
00062     int       numHits = emcTrackRoot->numHits(); 
00063     int       status =  emcTrackRoot->status(); 
00064     int       cellId =  emcTrackRoot->cellId(); 
00065     int       module =  emcTrackRoot->module(); 
00066     double    x =       emcTrackRoot->x();      
00067     double    y =       emcTrackRoot->y();      
00068     double    z =       emcTrackRoot->z();      
00069     double    dtheta =  emcTrackRoot->dtheta(); 
00070     double    dphi   =  emcTrackRoot->dphi();   
00071     double    energy =  emcTrackRoot->energy();  
00072     double    dE    =   emcTrackRoot->dE();     
00073     double  eSeed =  emcTrackRoot->eSeed();
00074     double  e3x3 =  emcTrackRoot->e3x3();
00075     double  e5x5 =  emcTrackRoot->e5x5();
00076     double  time =  emcTrackRoot->time();
00077     double  secondMoment = emcTrackRoot->secondMoment();
00078     double  latMoment = emcTrackRoot->latMoment();
00079     double  a20Moment = emcTrackRoot->a20Moment();
00080     double  a42Moment = emcTrackRoot->a42Moment();
00081 
00082     HepSymMatrix matrix(3);
00083     matrix[0][0]=emcTrackRoot->err(0);
00084     matrix[1][1]=emcTrackRoot->err(1);
00085     matrix[2][2]=emcTrackRoot->err(2);
00086     matrix[0][1]=emcTrackRoot->err(3);
00087     matrix[0][2]=emcTrackRoot->err(4);
00088     matrix[1][2]=emcTrackRoot->err(5);
00089 
00090     DstEmcShower *emcTrackTds = new DstEmcShower();
00091     m_common.m_rootEmcShowerMap[emcTrackRoot] = emcTrackTds;
00092 
00093     emcTrackTds->setTrackId(trackId );
00094     emcTrackTds->setNumHits(numHits );    
00095     emcTrackTds->setStatus(status );     
00096     emcTrackTds->setCellId( cellId );     
00097     emcTrackTds->setModule( module);     
00098     HepPoint3D pos(x,y,z);
00099     emcTrackTds->setPosition(pos);
00100     emcTrackTds->setEnergy( energy  );    
00101     emcTrackTds->setDE( dE  );     
00102     emcTrackTds->setDtheta( dtheta     );  
00103     emcTrackTds->setDphi( dphi     );  
00104     emcTrackTds->setESeed(eSeed);
00105     emcTrackTds->setE3x3(e3x3);
00106     emcTrackTds->setE5x5(e5x5);
00107     emcTrackTds->setTime(time);
00108     emcTrackTds->setSecondMoment(secondMoment); 
00109     emcTrackTds->setLatMoment(latMoment); 
00110     emcTrackTds->setA20Moment(a20Moment); 
00111     emcTrackTds->setA42Moment(a42Moment); 
00112     emcTrackTds->setErrorMatrix( matrix );   
00113 
00114     emcTrackTdsCol->push_back(emcTrackTds);
00115     //     delete emcTrackTds;
00116     // emcTrackTds = NULL;
00117   }
00118 
00119   //m_emcTrackCol->Delete();  // wensp add 2005/12/30
00120   delete m_emcTrackCol;
00121   m_emcTrackCol = 0;  
00122   return StatusCode::SUCCESS;
00123 }
00124 
00125 StatusCode EmcTrackCnv::DataObjectToTObject(DataObject* obj,RootAddress* rootaddr) {
00126 
00127   MsgStream log(msgSvc(), "EmcTrackCnv");
00128   log << MSG::DEBUG << "EmcTrackCnv::DataObjectToTObject" << endreq;
00129   StatusCode sc=StatusCode::SUCCESS;
00130 
00131   DstEmcShowerCol * emcTrackColTds=dynamic_cast<DstEmcShowerCol *> (obj);
00132   if (!emcTrackColTds) {
00133     log << MSG::ERROR << "Could not downcast to EmcTrackCol" << endreq;
00134     return StatusCode::FAILURE;
00135   }
00136 
00137   DataObject *evt;
00138   m_eds->findObject(EventModel::Dst::Event,evt);
00139   if (evt==NULL) {
00140     log << MSG::ERROR << "Could not get DstEvent in TDS "  << endreq;
00141     return StatusCode::FAILURE;
00142   }
00143   DstEvent * devtTds=dynamic_cast<DstEvent *> (evt);
00144   if (!devtTds) {
00145     log << MSG::ERROR << "EmcTrackCnv:Could not downcast to TDS DstEvent" << endreq;
00146   }
00147   IOpaqueAddress *addr;
00148 
00149   m_cnvSvc->getDstCnv()->createRep(evt,addr); 
00150   TDstEvent *recEvt=m_cnvSvc->getDstCnv()->getWriteObject();
00151 
00152   const TObjArray *m_emcTrackCol = recEvt->getEmcTrackCol();
00153   if (!m_emcTrackCol) return sc;
00154   recEvt->clearEmcTrackCol(); //necessary in case there is I/O at the same time since array is static
00155   DstEmcShowerCol::const_iterator emcTrackTds;
00156 
00157   for (emcTrackTds = emcTrackColTds->begin(); emcTrackTds != emcTrackColTds->end(); emcTrackTds++) {
00158     Int_t       trackId = (*emcTrackTds)->trackId();
00159     Int_t       numHits = (*emcTrackTds)->numHits(); 
00160     Int_t       status =(*emcTrackTds)->status(); 
00161     Int_t       cellId =(*emcTrackTds)->cellId(); 
00162     Int_t       module =(*emcTrackTds)->module(); 
00163     Double_t    x =     (*emcTrackTds)->x();      
00164     Double_t    y =     (*emcTrackTds)->y();      
00165     Double_t    z =     (*emcTrackTds)->z();      
00166     Double_t    dtheta =(*emcTrackTds)->dtheta(); 
00167     Double_t    dphi   =(*emcTrackTds)->dphi();   
00168     Double_t    energy =  (*emcTrackTds)->energy();  
00169     Double_t    dE    = (*emcTrackTds)->dE();     
00170     Double_t    eSeed  = (*emcTrackTds)->eSeed();
00171     Double_t    e3x3  = (*emcTrackTds)->e3x3();
00172     Double_t    e5x5  = (*emcTrackTds)->e5x5();
00173     Double_t    time  = (*emcTrackTds)->time();
00174     Double_t    secondMoment = (*emcTrackTds)->secondMoment();
00175     Double_t    latMoment = (*emcTrackTds)->latMoment();
00176     Double_t    a20Moment = (*emcTrackTds)->a20Moment();
00177     Double_t    a42Moment = (*emcTrackTds)->a42Moment();
00178 
00179     HepSymMatrix matrix   = (*emcTrackTds)->errorMatrix();
00180     Double_t    err[6];
00181     err[0] = matrix[0][0];
00182     err[1] = matrix[1][1];
00183     err[2] = matrix[2][2];
00184     err[3] = matrix[0][1];
00185     err[4] = matrix[0][2];
00186     err[5] = matrix[1][2];
00187 
00188     TEmcTrack *emcTrackRoot = new TEmcTrack();
00189     //m_common.m_emcShowerMap[(*emcTrackTds)] = emcTrackRoot;
00190 
00191     //emcTrackRoot->initialize(numHits ,status ,cellId ,module ,x ,dx,y ,dy,z ,dz,theta ,dtheta ,phi,dphi ,energy ,dE,cosx ,cosy ,cosz);
00192     emcTrackRoot->setTrackId(trackId );
00193     emcTrackRoot->setNumHits(numHits );    
00194     emcTrackRoot->setStatus(status );     
00195     emcTrackRoot->setCellId( cellId );     
00196     emcTrackRoot->setModule( module);     
00197     emcTrackRoot->setX( x    );     
00198     emcTrackRoot->setY( y    );     
00199     emcTrackRoot->setZ( z    );     
00200     emcTrackRoot->setEnergy( energy  );    
00201     emcTrackRoot->setDE( dE  );     
00202     emcTrackRoot->setDtheta( dtheta     );  
00203     emcTrackRoot->setDphi( dphi     );  
00204     emcTrackRoot->setESeed( eSeed     );
00205     emcTrackRoot->setE3x3( e3x3    );
00206     emcTrackRoot->setE5x5( e5x5     );  
00207     emcTrackRoot->setTime( time     );  
00208     emcTrackRoot->setSecondMoment(secondMoment); 
00209     emcTrackRoot->setLatMoment(latMoment); 
00210     emcTrackRoot->setA20Moment(a20Moment); 
00211     emcTrackRoot->setA42Moment(a42Moment); 
00212     emcTrackRoot->setErr( err );   
00213 
00214     recEvt->addEmcTrack(emcTrackRoot);
00215   }
00216 
00217   return StatusCode::SUCCESS;
00218 }
00219 #endif

Generated on Tue Nov 29 22:58:39 2016 for BOSS_7.0.2 by  doxygen 1.4.7