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

Go to the documentation of this file.
00001 #ifndef MucTrackCnv_CXX
00002 #define MucTrackCnv_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/DstMucTrack.h"   //TDS object
00014 #include "RootEventData/TMucTrack.h" // standard root object
00015 #include "RootEventData/TDstEvent.h"
00016 
00017 #include "RootCnvSvc/Dst/DstCnv.h"
00018 #include "RootCnvSvc/Dst/MucTrackCnv.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<MucTrackCnv> s_factory;
00028 //const ICnvFactory& MucTrackCnvFactory = s_factory;
00029 
00030 MucTrackCnv::MucTrackCnv(ISvcLocator* svc)
00031 : RootEventBaseCnv(classID(), svc)
00032 {
00033     // Here we associate this converter with the /Event path on the TDS.
00034     MsgStream log(msgSvc(), "MucTrackCnv");
00035     //log << MSG::DEBUG << "Constructor called for " << objType() << endreq;
00036     m_rootBranchname ="m_mucTrackCol";
00037     //declareObject(EventModel::Dst::DstMucTrackCol, objType(), m_rootTreename, m_rootBranchname);
00038     m_adresses.push_back(&m_mucTrackCol);
00039     m_mucTrackCol=0;
00040 }
00041 
00042 StatusCode MucTrackCnv::TObjectToDataObject(DataObject*& refpObject) {
00043   // creation of TDS object from root object
00044 
00045     MsgStream log(msgSvc(), "MucTrackCnv");
00046     log << MSG::DEBUG << "MucTrackCnv::TObjectToDataObject" << endreq;
00047     StatusCode sc=StatusCode::SUCCESS;
00048 
00049     // create the TDS location for the MucTrack Collection
00050     DstMucTrackCol* mucTrackTdsCol = new DstMucTrackCol;
00051     refpObject=mucTrackTdsCol;
00052 
00053 
00054     // now convert
00055     if (!m_mucTrackCol) return sc;
00056     TIter mucTrackIter(m_mucTrackCol);
00057     TMucTrack *mucTrackRoot = 0;
00058     while ((mucTrackRoot = (TMucTrack*)mucTrackIter.Next())) {
00059 
00060       int trackId = mucTrackRoot->trackId();        
00061       int id = mucTrackRoot-> id();    
00062       int st = mucTrackRoot->status();    
00063       int type = mucTrackRoot->type();      
00064       
00065       int startPart = mucTrackRoot->startPart();
00066       int endPart   = mucTrackRoot->endPart();
00067       int brLastLayer = mucTrackRoot->brLastLayer();
00068       int ecLastLayer = mucTrackRoot->ecLastLayer();
00069       int numHits = mucTrackRoot->numHits();     
00070       int numLayers = mucTrackRoot->numLayers(); 
00071       int maxHitsInLayer = mucTrackRoot->maxHitsInLayer();
00072 
00073       double depth = mucTrackRoot->depth();    
00074       double chi2  = mucTrackRoot->chi2();      
00075       int    dof   = mucTrackRoot->dof();       
00076       double rms   = mucTrackRoot->rms();       
00077 
00078       double xPos =  mucTrackRoot->xPos() ;
00079       double yPos =  mucTrackRoot->yPos() ;
00080       double zPos =  mucTrackRoot->zPos() ;
00081 
00082       double xPosSigma =  mucTrackRoot->xPosSigma() ;
00083       double yPosSigma =  mucTrackRoot->yPosSigma() ;
00084       double zPosSigma =  mucTrackRoot->zPosSigma() ;
00085       
00086       double px =  mucTrackRoot->px() ;
00087       double py =  mucTrackRoot->py() ;
00088       double pz =  mucTrackRoot->pz() ;
00089 
00090       double distance = mucTrackRoot->distance();
00091       double deltaphi = mucTrackRoot->deltaPhi();
00092       //vector<int> vecHits = mucTrackRoot->vecHits();
00093       //added by LI Chunhua
00094       double krechi2 = mucTrackRoot->kalRechi2();
00095       int  kdof = mucTrackRoot->kaldof();
00096       double kdepth = mucTrackRoot->kaldepth();
00097       int   kbrlay = mucTrackRoot->kalbrLastLayer();
00098       int   keclay = mucTrackRoot->kalecLastLayer();
00099       //*********************
00100 
00101       DstMucTrack *mucTrackTds = new DstMucTrack();
00102       m_common.m_rootMucTrackMap[mucTrackRoot] = mucTrackTds;
00103       
00104       mucTrackTds->setTrackId( trackId );
00105       mucTrackTds->setId( id );      
00106       mucTrackTds->setStatus( st ); 
00107       mucTrackTds->setType( type );
00108 
00109       mucTrackTds->setStartPart( startPart );
00110       mucTrackTds->setEndPart( endPart );
00111       mucTrackTds->setBrLastLayer( brLastLayer );
00112       mucTrackTds->setEcLastLayer( ecLastLayer );
00113       mucTrackTds->setNumHits( numHits );         
00114       mucTrackTds->setNumLayers( numLayers );   
00115       mucTrackTds->setMaxHitsInLayer( maxHitsInLayer );
00116 
00117       mucTrackTds->setDepth( depth ); 
00118       mucTrackTds->setChi2( chi2 );   
00119       mucTrackTds->setDof( dof );    
00120       mucTrackTds->setRms( rms ); 
00121 
00122       mucTrackTds->setXPos( xPos ); 
00123       mucTrackTds->setYPos( yPos ); 
00124       mucTrackTds->setZPos( zPos ); 
00125 
00126       mucTrackTds->setXPosSigma( xPosSigma );
00127       mucTrackTds->setYPosSigma( yPosSigma );
00128       mucTrackTds->setZPosSigma( zPosSigma );
00129 
00130       mucTrackTds->setPx( px ); 
00131       mucTrackTds->setPy( py ); 
00132       mucTrackTds->setPz( pz ); 
00133      
00134       mucTrackTds->setDistance(distance);
00135       mucTrackTds->setDeltaPhi(deltaphi);
00136       
00137       //mucTrackTds->setVecHits(vecHits);   
00138       //added by LI Chunhua 2013/02/01
00139       mucTrackTds->setkalRechi2(krechi2);
00140       mucTrackTds->setkalDof(kdof);
00141       mucTrackTds->setkalDepth(kdepth);
00142       mucTrackTds->setkalbrLastLayer(kbrlay);
00143       mucTrackTds->setkalecLastLayer(keclay);
00144       //******************
00145       mucTrackTdsCol->push_back(mucTrackTds); 
00146       //delete mucTrackTds; // wensp add 2005/12/31
00147      // mucTrackTds = NULL;      
00148     }
00149 
00150     // m_mucTrackCol->Delete();  // wensp add 2005/12/30
00151     delete m_mucTrackCol;
00152     m_mucTrackCol = 0;    
00153     return StatusCode::SUCCESS;
00154 }
00155 
00156 StatusCode MucTrackCnv::DataObjectToTObject(DataObject* obj,RootAddress* rootaddr) {
00157 
00158   MsgStream log(msgSvc(), "MucTrackCnv");
00159   log << MSG::DEBUG << "MucTrackCnv::DataObjectToTObject" << endreq;
00160   StatusCode sc=StatusCode::SUCCESS;
00161  
00162   DstMucTrackCol * mucTrackColTds=dynamic_cast<DstMucTrackCol *> (obj);
00163   if (!mucTrackColTds) {
00164     log << MSG::ERROR << "Could not downcast to MucTrackCol" << endreq;
00165     return StatusCode::FAILURE;
00166   }
00167  
00168   DataObject *evt;
00169   m_eds->findObject(EventModel::Dst::Event,evt);
00170   if (evt==NULL) {
00171     log << MSG::ERROR << "Could not get DstEvent in TDS "  << endreq;
00172     return StatusCode::FAILURE;
00173   }
00174   DstEvent * devtTds=dynamic_cast<DstEvent *> (evt);
00175   if (!devtTds) {
00176     log << MSG::ERROR << "MucTrackCnv:Could not downcast to TDS DigiEvent" << endreq;
00177   }
00178   IOpaqueAddress *addr;
00179 
00180   m_cnvSvc->getDstCnv()->createRep(evt,addr); 
00181   TDstEvent *recEvt=m_cnvSvc->getDstCnv()->getWriteObject();
00182 
00183   const TObjArray *m_mucTrackCol = recEvt->getMucTrackCol();
00184   if (!m_mucTrackCol) return sc;
00185   recEvt->clearMucTrackCol(); //necessary in case there is I/O at the same time since array is static
00186   DstMucTrackCol::const_iterator mucTrackTds;
00187 
00188   for (mucTrackTds = mucTrackColTds->begin(); mucTrackTds != mucTrackColTds->end(); mucTrackTds++) {
00189     Int_t trackId = (*mucTrackTds)->trackId();
00190     Int_t id = (*mucTrackTds)-> id();    
00191     Int_t st = (*mucTrackTds)->status();    
00192     Int_t type = (*mucTrackTds)->type();      
00193     
00194     Int_t startPart = (*mucTrackTds)->startPart();
00195     Int_t endPart   = (*mucTrackTds)->endPart();
00196     Int_t brLastLayer = (*mucTrackTds)->brLastLayer();
00197     Int_t ecLastLayer = (*mucTrackTds)->ecLastLayer();
00198     Int_t numHits = (*mucTrackTds)->numHits();     
00199     Int_t numLayers = (*mucTrackTds)->numLayers(); 
00200     Int_t maxHitsInLayer = (*mucTrackTds)->maxHitsInLayer();
00201     
00202     Double_t depth = (*mucTrackTds)->depth();    
00203     Double_t chi2  = (*mucTrackTds)->chi2();      
00204     Int_t    dof   = (*mucTrackTds)->dof();       
00205     Double_t rms   = (*mucTrackTds)->rms();       
00206     
00207     Double_t xPos =  (*mucTrackTds)->xPos() ;
00208     Double_t yPos =  (*mucTrackTds)->yPos() ;
00209     Double_t zPos =  (*mucTrackTds)->zPos() ;
00210   
00211     Double_t xPosSigma =  (*mucTrackTds)->xPosSigma() ;
00212     Double_t yPosSigma =  (*mucTrackTds)->yPosSigma() ;
00213     Double_t zPosSigma =  (*mucTrackTds)->zPosSigma() ;
00214 
00215     Double_t px =  (*mucTrackTds)->px() ;
00216     Double_t py =  (*mucTrackTds)->py() ;
00217     Double_t pz =  (*mucTrackTds)->pz() ;
00218     
00219     Double_t distance = (*mucTrackTds)->distance();
00220     Double_t deltaphi = (*mucTrackTds)->deltaPhi();
00221     //added by LI Chunhua
00222     Double_t krechi2 = (*mucTrackTds)->kalRechi2();
00223     Int_t  kdof = (*mucTrackTds)->kaldof();
00224     Double_t kdepth = (*mucTrackTds)->kaldepth();
00225     Int_t   kbrlay = (*mucTrackTds)->kalbrLastLayer();
00226     Int_t   keclay = (*mucTrackTds)->kalecLastLayer();
00227     //*********************
00228 
00229     //vector<Int_t> vecHits = (*mucTrackTds)->vecHits();
00230            
00231     TMucTrack *mucTrackRoot = new TMucTrack();
00232     //m_common.m_mucTrackMap[(*mucTrackTds)] = mucTrackRoot;
00233 
00234     mucTrackRoot->setTrackId( trackId );
00235     mucTrackRoot->setId( id );      
00236     mucTrackRoot->setStatus( st ); 
00237     mucTrackRoot->setType( type );
00238     
00239     mucTrackRoot->setStartPart( startPart );
00240     mucTrackRoot->setEndPart( endPart );
00241     mucTrackRoot->setBrLastLayer( brLastLayer );
00242     mucTrackRoot->setEcLastLayer( ecLastLayer );
00243     mucTrackRoot->setNumHits( numHits );         
00244     mucTrackRoot->setNumLayers( numLayers );   
00245     mucTrackRoot->setMaxHitsInLayer( maxHitsInLayer );
00246     
00247     mucTrackRoot->setDepth( depth ); 
00248     mucTrackRoot->setChi2( chi2 );   
00249     mucTrackRoot->setDof( dof );    
00250     mucTrackRoot->setRms( rms ); 
00251     
00252     mucTrackRoot->setXPos( xPos ); 
00253     mucTrackRoot->setYPos( yPos ); 
00254     mucTrackRoot->setZPos( zPos ); 
00255     
00256     mucTrackRoot->setXPosSigma( xPosSigma );
00257     mucTrackRoot->setYPosSigma( yPosSigma );
00258     mucTrackRoot->setZPosSigma( zPosSigma );
00259 
00260     mucTrackRoot->setPx( px ); 
00261     mucTrackRoot->setPy( py ); 
00262     mucTrackRoot->setPz( pz ); 
00263     
00264     mucTrackRoot->setDistance(distance);
00265     mucTrackRoot->setDeltaPhi(deltaphi);
00266     //added by LI Chunhua 2013/02/01
00267     mucTrackRoot->setkalRechi2(krechi2);
00268     mucTrackRoot->setkalDof(kdof);
00269     mucTrackRoot->setkalDepth(kdepth);
00270     mucTrackRoot->setkalbrLastLayer(kbrlay);
00271     mucTrackRoot->setkalecLastLayer(keclay);
00272     //******************
00273     //mucTrackRoot->setVecHits(vecHits);   
00274 
00275     recEvt->addMucTrack(mucTrackRoot);
00276   }
00277 
00278   return StatusCode::SUCCESS;
00279 }
00280 #endif

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