/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Event/RootCnvSvc/RootCnvSvc-02-01-12/src/Rec/RecMucTrackCnv.cxx

Go to the documentation of this file.
00001 #ifndef RecMucTrackCnv_CXX
00002 #define RecMucTrackCnv_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 "ReconEvent/ReconEvent.h"
00013 #include "MucRecEvent/RecMucTrack.h"
00014 
00015 //#include "RootEventData/TMucTrack.h" // standard root object
00016 #include "RootEventData/TRecMucTrack.h" // standard root object
00017 //#include "RootEventData/TDstEvent.h"
00018 #include "RootEventData/TRecTrackEvent.h"
00019 
00020 #include "RootCnvSvc/Rec/RecTrackCnv.h"
00021 #include "RootCnvSvc/Rec/RecMucTrackCnv.h"
00022 #include "RootCnvSvc/RootAddress.h"
00023 
00024 #include <vector>
00025 
00026 using namespace std;
00027 
00028 // Instantiation of a static factory class used by clients to create
00029 // instances of this service
00030 //static CnvFactory<RecMucTrackCnv> s_factory;
00031 //const ICnvFactory& RecMucTrackCnvFactory = s_factory;
00032 
00033 
00034 RecMucTrackCnv::RecMucTrackCnv(ISvcLocator* svc)
00035 : RootEventBaseCnv(classID(), svc)
00036 {
00037 
00038     // Here we associate this converter with the /Event path on the TDS.
00039     MsgStream log(msgSvc(), "RecMucTrackCnv");
00040     //log << MSG::DEBUG << "Constructor called for " << objType() << endreq;
00041     //m_rootTreename ="Rec";
00042     //RecMucTrack *atrack = new RecMucTrack();
00043     //RecMucTrackCol *atrackCol = new RecMucTrackCol;
00044     //cout<<"in RecMucTrackCnv "<<atrack->clID()<<"  "<<atrackCol->clID()<<"  "<<CLID_ObjectVector<<endl; 
00045     m_rootBranchname ="m_recMucTrackCol";
00046     //declareObject(EventModel::Recon::RecMucTrackCol, objType(), m_rootTreename, m_rootBranchname);
00047     m_adresses.push_back(&m_recMucTrackCol);
00048     m_recMucTrackCol=0;
00049 }
00050 
00051 StatusCode RecMucTrackCnv::TObjectToDataObject(DataObject*& refpObject) {
00052   // creation of TDS object from root object
00053 
00054     MsgStream log(msgSvc(), "RecMucTrackCnv");
00055     log << MSG::DEBUG << "RecMucTrackCnv::TObjectToDataObject" << endreq;
00056     StatusCode sc=StatusCode::SUCCESS;
00057 
00058     // create the TDS location for the MucTrack Collection
00059     RecMucTrackCol* mucTrackTdsCol = new RecMucTrackCol;
00060     refpObject=mucTrackTdsCol;
00061 
00062 
00063     // now convert
00064     if (!m_recMucTrackCol) return sc;
00065     TIter mucTrackIter(m_recMucTrackCol);
00066     TRecMucTrack *mucTrackRoot = 0;
00067     while ((mucTrackRoot = (TRecMucTrack*)mucTrackIter.Next())) {
00068 
00069       int trackId = mucTrackRoot->trackId();        
00070       int id = mucTrackRoot-> id();    
00071       int st = mucTrackRoot->status();    
00072       int type = mucTrackRoot->type();      
00073       
00074       int startPart = mucTrackRoot->startPart();
00075       int endPart   = mucTrackRoot->endPart();
00076       int brLastLayer = mucTrackRoot->brLastLayer();
00077       int ecLastLayer = mucTrackRoot->ecLastLayer();
00078       int numHits = mucTrackRoot->numHits();     
00079       int numLayers = mucTrackRoot->numLayers(); 
00080       int maxHitsInLayer = mucTrackRoot->maxHitsInLayer();
00081 
00082       double depth = mucTrackRoot->depth();    
00083       double chi2  = mucTrackRoot->chi2();      
00084       int    dof   = mucTrackRoot->dof();       
00085       double rms   = mucTrackRoot->rms();       
00086 
00087         
00088       
00089       double xPos =  mucTrackRoot->xPos() ;
00090       double yPos =  mucTrackRoot->yPos() ;
00091       double zPos =  mucTrackRoot->zPos() ;
00092 
00093       double xPosSigma =  mucTrackRoot->xPosSigma() ;
00094       double yPosSigma =  mucTrackRoot->yPosSigma() ;
00095       double zPosSigma =  mucTrackRoot->zPosSigma() ;
00096       
00097       double px =  mucTrackRoot->px() ;
00098       double py =  mucTrackRoot->py() ;
00099       double pz =  mucTrackRoot->pz() ;
00100 
00101       double distance = mucTrackRoot->distance();
00102       double deltaphi = mucTrackRoot->deltaPhi();
00103       //cout<<"in RecMucTrackCnv  distance = "<<distance<<" xpos= "<<xPos<<endl;
00104 
00105       vector<int> vecHits = mucTrackRoot->vecHits();
00106             vector<int> expHits = mucTrackRoot->expHits();
00107       vector<float> distHits = mucTrackRoot->distHits();
00108       
00109       //added by LI Chunhua
00110       double krechi2 = mucTrackRoot->kalRechi2();
00111       int    kdof = mucTrackRoot->kaldof();
00112       double kdepth = mucTrackRoot->kaldepth();
00113       int   kbrlay = mucTrackRoot->kalbrLastLayer();
00114       int   keclay = mucTrackRoot->kalecLastLayer();
00115       //*********************
00116       //cout<<"in RecMucTrackCnv  size = "<<vecHits.size()<<"    "<<expHits.size()<<"   "<<distHits.size()<<endl;
00117       
00118       RecMucTrack *mucTrackTds = new RecMucTrack();
00119       m_common.m_rootRecMucTrackMap[mucTrackRoot] = mucTrackTds;
00120       
00121       mucTrackTds->setTrackId( trackId );
00122       mucTrackTds->setId( id );      
00123       mucTrackTds->setStatus( st ); 
00124       mucTrackTds->setType( type );
00125 
00126       mucTrackTds->setStartPart( startPart );
00127       mucTrackTds->setEndPart( endPart );
00128       mucTrackTds->setBrLastLayer( brLastLayer );
00129       mucTrackTds->setEcLastLayer( ecLastLayer );
00130       mucTrackTds->setNumHits( numHits );         
00131       mucTrackTds->setNumLayers( numLayers );   
00132       mucTrackTds->setMaxHitsInLayer( maxHitsInLayer );
00133 
00134       mucTrackTds->setDepth( depth ); 
00135       mucTrackTds->setChi2( chi2 );   
00136       mucTrackTds->setDof( dof );    
00137       mucTrackTds->setRms( rms ); 
00138 
00139       mucTrackTds->setXPos( xPos ); 
00140       mucTrackTds->setYPos( yPos ); 
00141       mucTrackTds->setZPos( zPos ); 
00142 
00143       mucTrackTds->setXPosSigma( xPosSigma );
00144       mucTrackTds->setYPosSigma( yPosSigma );
00145       mucTrackTds->setZPosSigma( zPosSigma );
00146       
00147       mucTrackTds->setPx( px ); 
00148       mucTrackTds->setPy( py ); 
00149       mucTrackTds->setPz( pz ); 
00150   
00151       mucTrackTds->setDistance(distance);
00152       mucTrackTds->setDeltaPhi(deltaphi);
00153       mucTrackTds->setVecHits(vecHits);     //need fix
00154       mucTrackTds->setExpHits(expHits);
00155       mucTrackTds->setDistHits(distHits);
00156       
00157       //added by LI Chunhua 2013/02/01
00158       mucTrackTds->setkalRechi2(krechi2);
00159       mucTrackTds->setkalDof(kdof);
00160       mucTrackTds->setkalDepth(kdepth);
00161       mucTrackTds->setkalbrLastLayer(kbrlay);
00162       mucTrackTds->setkalecLastLayer(keclay);
00163       //******************
00164 
00165       //cout<<"in RecMucTrackCnv::T->D  set mucpos"<<endl;
00166 
00167       mucTrackTdsCol->push_back(mucTrackTds); 
00168       //delete mucTrackTds; // wensp add 2005/12/31
00169      // mucTrackTds = NULL;      
00170     }
00171 
00172     // m_mucTrackCol->Delete();  // wensp add 2005/12/30
00173     delete m_recMucTrackCol;
00174     m_recMucTrackCol = 0;    
00175     return StatusCode::SUCCESS;
00176 }
00177 
00178 StatusCode RecMucTrackCnv::DataObjectToTObject(DataObject* obj,RootAddress* rootaddr) {
00179 
00180   MsgStream log(msgSvc(), "RecMucTrackCnv");
00181   log << MSG::DEBUG << "RecMucTrackCnv::DataObjectToTObject" << endreq;
00182   StatusCode sc=StatusCode::SUCCESS;
00183  
00184   RecMucTrackCol * mucTrackColTds=dynamic_cast<RecMucTrackCol *> (obj);
00185   if (!mucTrackColTds) {
00186     log << MSG::ERROR << "Could not downcast to RecMucTrackCol" << endreq;
00187     return StatusCode::FAILURE;
00188   }
00189  
00190   DataObject *evt;
00191   m_eds->findObject(EventModel::Recon::Event,evt);
00192   if (evt==NULL) {
00193     log << MSG::ERROR << "Could not get RecEvent in TDS "  << endreq;
00194     return StatusCode::FAILURE;
00195   }
00196   ReconEvent * devtTds=dynamic_cast<ReconEvent *> (evt);
00197   if (!devtTds) {
00198     log << MSG::ERROR << "RecMucTrackCnv:Could not downcast to TDS DigiEvent" << endreq;
00199   }
00200   IOpaqueAddress *addr;
00201 
00202   m_cnvSvc->getRecTrackCnv()->createRep(evt,addr); 
00203   TRecTrackEvent *recEvt=m_cnvSvc->getRecTrackCnv()->getWriteObject();
00204 
00205   const TObjArray *m_recMucTrackCol = recEvt->getMucTrackCol();
00206   if (!m_recMucTrackCol) return sc;
00207   recEvt->clearMucTrackCol(); //necessary in case there is I/O at the same time since array is static
00208   RecMucTrackCol::const_iterator mucTrackTds;
00209 
00210   for (mucTrackTds = mucTrackColTds->begin(); mucTrackTds != mucTrackColTds->end(); mucTrackTds++) {
00211     Int_t trackId = (*mucTrackTds)->trackId();
00212     Int_t id = (*mucTrackTds)-> id();    
00213     Int_t st = (*mucTrackTds)->status();    
00214     Int_t type = (*mucTrackTds)->type();      
00215     
00216     Int_t startPart = (*mucTrackTds)->startPart();
00217     Int_t endPart   = (*mucTrackTds)->endPart();
00218     Int_t brLastLayer = (*mucTrackTds)->brLastLayer();
00219     Int_t ecLastLayer = (*mucTrackTds)->ecLastLayer();
00220     Int_t numHits = (*mucTrackTds)->numHits();     
00221     Int_t numLayers = (*mucTrackTds)->numLayers(); 
00222     Int_t maxHitsInLayer = (*mucTrackTds)->maxHitsInLayer();
00223     
00224     Double_t depth = (*mucTrackTds)->depth();    
00225     Double_t chi2  = (*mucTrackTds)->chi2();      
00226     Int_t    dof   = (*mucTrackTds)->dof();       
00227     Double_t rms   = (*mucTrackTds)->rms();       
00228     
00229     Double_t xPos =  (*mucTrackTds)->xPos() ;
00230     Double_t yPos =  (*mucTrackTds)->yPos() ;
00231     Double_t zPos =  (*mucTrackTds)->zPos() ;
00232     
00233     Double_t xPosSigma =  (*mucTrackTds)->xPosSigma() ;
00234     Double_t yPosSigma =  (*mucTrackTds)->yPosSigma() ;
00235     Double_t zPosSigma =  (*mucTrackTds)->zPosSigma() ;
00236     
00237     Double_t distance = (*mucTrackTds)->distance();
00238     Double_t deltaphi = (*mucTrackTds)->deltaPhi();
00239     
00240     Double_t px =  (*mucTrackTds)->px() ;
00241     Double_t py =  (*mucTrackTds)->py() ;
00242     Double_t pz =  (*mucTrackTds)->pz() ;
00243 
00244 
00245     vector<Int_t> vecHits = (*mucTrackTds)->getVecHits();
00246     vector<Int_t> expHits = (*mucTrackTds)->getExpHits();
00247     vector<Float_t> distHits = (*mucTrackTds)->getDistHits();
00248     //added by LI Chunhua
00249     Double_t krechi2 = (*mucTrackTds)->kalRechi2();
00250     Int_t  kdof = (*mucTrackTds)->kaldof();
00251     Double_t kdepth = (*mucTrackTds)->kaldepth();
00252     Int_t   kbrlay = (*mucTrackTds)->kalbrLastLayer();
00253     Int_t   keclay = (*mucTrackTds)->kalecLastLayer();
00254     //*********************
00255 
00256     /*
00257     cout<<"in RecMucTrackCnv  "<<vecHits.size()<<endl;
00258     for(int i = 0; i < vecHits.size(); i++){
00259       cout<<"  vec i = "<<i<<"   "<<vecHits[i]<<endl;
00260     }
00261 
00262     for(int i = 0; i < expHits.size(); i++){
00263       cout<<"  exp i = "<<i<<"   "<<expHits[i]<<endl;
00264     }
00265 
00266     for(int i = 0; i < distHits.size(); i++){
00267       cout<<"  dist i = "<<i<<"   "<<distHits[i]<<endl;
00268     }
00269     */
00270     
00271     TRecMucTrack *mucTrackRoot = new TRecMucTrack();  //liangyt
00272     //m_common.m_RecMucTrackMap[(*mucTrackTds)] = mucTrackRoot;
00273 
00274     mucTrackRoot->setTrackId( trackId );
00275     mucTrackRoot->setId( id );      
00276     mucTrackRoot->setStatus( st ); 
00277     mucTrackRoot->setType( type );
00278     
00279     mucTrackRoot->setStartPart( startPart );
00280     mucTrackRoot->setEndPart( endPart );
00281     mucTrackRoot->setBrLastLayer( brLastLayer );
00282     mucTrackRoot->setEcLastLayer( ecLastLayer );
00283     mucTrackRoot->setNumHits( numHits );         
00284     mucTrackRoot->setNumLayers( numLayers );   
00285     mucTrackRoot->setMaxHitsInLayer( maxHitsInLayer );
00286     
00287     mucTrackRoot->setDepth( depth ); 
00288     mucTrackRoot->setChi2( chi2 );   
00289     mucTrackRoot->setDof( dof );    
00290     mucTrackRoot->setRms( rms ); 
00291     
00292     mucTrackRoot->setXPos( xPos ); 
00293     mucTrackRoot->setYPos( yPos ); 
00294     mucTrackRoot->setZPos( zPos );
00295 
00296     mucTrackRoot->setXPosSigma( xPosSigma );
00297     mucTrackRoot->setYPosSigma( yPosSigma );
00298     mucTrackRoot->setZPosSigma( zPosSigma );
00299         
00300     mucTrackRoot->setDistance(distance);
00301     mucTrackRoot->setDeltaPhi(deltaphi);
00302     
00303     //cout<<"in RecMucTrackCnv  xyz = "<<xPos<<"  "<<yPos<<"  "<<zPos<<" depth= "<<depth<<" "<<maxHitsInLayer<<"  "<<deltaphi<<endl;
00304 
00305     mucTrackRoot->setPx( px ); 
00306     mucTrackRoot->setPy( py ); 
00307     mucTrackRoot->setPz( pz ); 
00308     
00309     mucTrackRoot->setVecHits(vecHits);   
00310     mucTrackRoot->setExpHits(expHits);
00311     mucTrackRoot->setDistHits(distHits);
00312     
00313     //added by LI Chunhua 2013/02/01
00314     mucTrackRoot->setkalRechi2(krechi2);
00315     mucTrackRoot->setkalDof(kdof);
00316     mucTrackRoot->setkalDepth(kdepth);
00317     mucTrackRoot->setkalbrLastLayer(kbrlay);
00318     mucTrackRoot->setkalecLastLayer(keclay);
00319     //******************
00320     recEvt->addMucTrack(mucTrackRoot);
00321   }
00322 
00323   return StatusCode::SUCCESS;
00324 }
00325 #endif

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