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

Go to the documentation of this file.
00001 #ifndef DedxCnv_CXX
00002 #define DedxCnv_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 #include "DstEvent/DstEvent.h"   //TDS object
00012 #include "DstEvent/DstMdcDedx.h"   //TDS object
00013 #include "RootEventData/TMdcDedx.h" // standard root object
00014 #include "RootEventData/TDstEvent.h"
00015 
00016 #include "RootCnvSvc/Dst/DstCnv.h"
00017 #include "RootCnvSvc/Dst/MdcDedxCnv.h"
00018 #include "RootCnvSvc/RootAddress.h"
00019 
00020 
00021 // Instantiation of a static factory class used by clients to create
00022 // instances of this service
00023 //static CnvFactory<DedxCnv> s_factory;
00024 //const ICnvFactory& DedxCnvFactory = s_factory;
00025 
00026 MdcDedxCnv::MdcDedxCnv(ISvcLocator* svc)
00027 : RootEventBaseCnv(classID(), svc)
00028 {
00029     // Here we associate this converter with the /Event path on the TDS.
00030     MsgStream log(msgSvc(), "MdcDedxCnv");
00031     //log << MSG::DEBUG << "Constructor called for " << objType() << endreq;
00032     m_rootBranchname ="m_mdcDedxCol";
00033     //declareObject(EventModel::Dst::DstDedxCol, objType(), m_rootTreename, m_rootBranchname);
00034     m_adresses.push_back(&m_mdcDedxCol);
00035     m_mdcDedxCol=0;
00036 }
00037 
00038 StatusCode MdcDedxCnv::TObjectToDataObject(DataObject*& refpObject) {
00039   // creation of TDS object from root object
00040 
00041     MsgStream log(msgSvc(), "MdcDedxCnv");
00042     log << MSG::DEBUG << "MdcDedxCnv::TObjectToDataObject" << endreq;
00043     StatusCode sc=StatusCode::SUCCESS;
00044 
00045     // create the TDS location for the Dedx Collection
00046     DstMdcDedxCol* mdcDedxTdsCol = new DstMdcDedxCol;
00047     refpObject=mdcDedxTdsCol;
00048 
00049 
00050     // now convert
00051     if (!m_mdcDedxCol) return sc;
00052     TIter mdcDedxIter(m_mdcDedxCol);
00053     TMdcDedx *mdcDedxRoot = 0;
00054     while ((mdcDedxRoot = (TMdcDedx*)mdcDedxIter.Next())) {
00055      
00056      int trackId =  mdcDedxRoot->trackId();         
00057      int particleId = mdcDedxRoot->particleId(); 
00058      int status = mdcDedxRoot->status();     
00059      int truncAlg = mdcDedxRoot->truncAlg();
00060      /*
00061      double pb[5];
00062      for ( int i = 0; i < 5; i++) 
00063           pb[i] = dedxRoot->prob(i);
00064      
00065      double numSigmaE  = dedxRoot->numSigmaE();   
00066      double numSigmaMu = dedxRoot->numSigmaMu();  
00067      double numSigmaPi = dedxRoot->numSigmaPi();  
00068      double numSigmaK = dedxRoot->numSigmaK();   
00069      double numSigmaP = dedxRoot->numSigmaP();   
00070      */
00071      double chi[5];
00072      chi[0] = mdcDedxRoot->chiE();
00073      chi[1] = mdcDedxRoot->chiMu();
00074      chi[2] = mdcDedxRoot->chiPi();
00075      chi[3] = mdcDedxRoot->chiK();
00076      chi[4] = mdcDedxRoot->chiP();
00077      int numGoodHits = mdcDedxRoot->numGoodHits(); 
00078      int numTotalHits = mdcDedxRoot->numTotalHits();
00079 
00080      double probPH = mdcDedxRoot->probPH();      
00081      double normPH = mdcDedxRoot->normPH();
00082      double errorPH = mdcDedxRoot->errorPH();
00083      double twentyPH = mdcDedxRoot->twentyPH();        
00084      //double fracErrPH = dedxRoot-> fracErrPH();  
00085      //double minIronPH = dedxRoot->minIronPH();   
00086      //double corrPH = dedxRoot->corrPH();   
00087         
00088      DstMdcDedx *mdcDedxTds = new DstMdcDedx();
00089      m_common.m_rootMdcDedxMap[mdcDedxRoot] = mdcDedxTds;
00090 
00091      mdcDedxTds->setTrackId(trackId);
00092      mdcDedxTds->setParticleId(particleId);
00093      mdcDedxTds->setStatus (status);
00094      mdcDedxTds->setTruncAlg(truncAlg);
00095     /*
00096      dedxTds->setProb(pb); 
00097      dedxTds->setNumSigmaE(numSigmaE);       
00098      dedxTds->setNumSigmaMu(numSigmaMu);     
00099      dedxTds->setNumSigmaPi(numSigmaPi);     
00100      dedxTds->setNumSigmaK(numSigmaK);       
00101      dedxTds->setNumSigmaP(numSigmaP);       
00102      */
00103      mdcDedxTds->setChi(chi);
00104      
00105      mdcDedxTds->setNumGoodHits( numGoodHits);     
00106      mdcDedxTds->setNumTotalHits( numTotalHits); 
00107 
00108      mdcDedxTds->setProbPH(probPH);             
00109      mdcDedxTds->setNormPH(normPH);
00110      mdcDedxTds->setErrorPH(errorPH);
00111      mdcDedxTds->setTwentyPH(twentyPH);  
00112      //dedxTds->setFracErrPH(fracErrPH);       
00113      //dedxTds->setMinIronPH(minIronPH);       
00114      //dedxTds->setCorrPH(corrPH); 
00115      
00116      mdcDedxTdsCol->push_back(mdcDedxTds); 
00117      //delete dedxTds;
00118      // dedxTds = NULL;
00119      }
00120     //m_dedxCol->Delete();
00121     delete m_mdcDedxCol;
00122     m_mdcDedxCol = 0;
00123    return StatusCode::SUCCESS;
00124 }
00125 
00126 StatusCode MdcDedxCnv::DataObjectToTObject(DataObject* obj,RootAddress* rootaddr) {
00127 
00128   MsgStream log(msgSvc(), "MdcDedxCnv");
00129   log << MSG::DEBUG << "MdcDedxCnv::DataObjectToTObject" << endreq;
00130   StatusCode sc=StatusCode::SUCCESS;
00131  
00132   DstMdcDedxCol * mdcDedxColTds=dynamic_cast<DstMdcDedxCol *> (obj);
00133   if (!mdcDedxColTds) {
00134     log << MSG::ERROR << "Could not downcast to MdcDedxCol" << endreq;
00135     return StatusCode::FAILURE;
00136   }
00137  
00138   DataObject *evt;
00139   m_eds->findObject(EventModel::Dst::Event,evt);
00140   if (evt==NULL) {
00141     log << MSG::ERROR << "Could not get DstEvent in TDS "  << endreq;
00142     return StatusCode::FAILURE;
00143   }
00144   DstEvent * devtTds=dynamic_cast<DstEvent *> (evt);
00145   if (!devtTds) {
00146     log << MSG::ERROR << "MdcDedxCnv:Could not downcast to TDS DstEvent" << endreq;
00147   }
00148   IOpaqueAddress *addr;
00149 
00150   m_cnvSvc->getDstCnv()->createRep(evt,addr); 
00151   TDstEvent *recEvt=m_cnvSvc->getDstCnv()->getWriteObject();
00152 
00153   const TObjArray *m_mdcDedxCol = recEvt->getMdcDedxCol();
00154   if (!m_mdcDedxCol) return sc;
00155   recEvt->clearMdcDedxCol(); //necessary in case there is I/O at the same time since array is static
00156   DstMdcDedxCol::const_iterator mdcDedxTds;
00157 
00158   for (mdcDedxTds = mdcDedxColTds->begin(); mdcDedxTds != mdcDedxColTds->end(); mdcDedxTds++) {
00159     Int_t trackId = (*mdcDedxTds)->trackId();
00160     Int_t particleId = (*mdcDedxTds)->particleId(); 
00161     Int_t status = (*mdcDedxTds)->status();     
00162     Int_t truncAlg =(*mdcDedxTds)->truncAlg();  
00163     /*
00164     Double_t pb[5];
00165     for (Int_t i = 0; i < 5; i++) 
00166          pb[i] = (*dedxTds)->prob(i);
00167     */
00168     Double_t chiE  = (*mdcDedxTds)->chi(0);   
00169     Double_t chiMu = (*mdcDedxTds)->chi(1);  
00170     Double_t chiPi = (*mdcDedxTds)->chi(2);  
00171     Double_t chiK = (*mdcDedxTds)->chi(3);   
00172     Double_t chiP = (*mdcDedxTds)->chi(4);   
00173   
00174     Int_t numGoodHits = (*mdcDedxTds)->numGoodHits(); 
00175     Int_t numTotalHits = (*mdcDedxTds)->numTotalHits();
00176 
00177     Double_t probPH = (*mdcDedxTds)->probPH();      
00178     Double_t normPH = (*mdcDedxTds)->normPH();
00179     Double_t errorPH = (*mdcDedxTds)->errorPH();
00180     Double_t twentyPH =(*mdcDedxTds)->twentyPH();
00181     //Double_t fracErrPH = (*dedxTds)-> fracErrPH();  
00182     //Double_t minIronPH = (*dedxTds)->minIronPH();   
00183     //Double_t corrPH = (*dedxTds)->corrPH();      
00184     log << MSG::INFO <<"check Reconstrunction root"<<" particle Id is : "<<particleId
00185          <<"track id is : "<<trackId
00186          <<" and status is : "<<status<<endreq;
00187 
00188        
00189     TMdcDedx *mdcDedxRoot = new TMdcDedx();
00190     //m_common.m_mdcDedxMap[(*mdcDedxTds)] = mdcDedxRoot;
00191   
00192     mdcDedxRoot->setTrackId(trackId);
00193     mdcDedxRoot->setParticleId(particleId);  
00194     mdcDedxRoot->setStatus (status); 
00195     mdcDedxRoot->setTruncAlg(truncAlg);
00196     //dedxRoot->setProb(pb); 
00197     mdcDedxRoot->setChiE(chiE);       
00198     mdcDedxRoot->setChiMu(chiMu);     
00199     mdcDedxRoot->setChiPi(chiPi);     
00200     mdcDedxRoot->setChiK(chiK);       
00201     mdcDedxRoot->setChiP(chiP);       
00202 
00203     mdcDedxRoot->setNumGoodHits( numGoodHits);     
00204     mdcDedxRoot->setNumTotalHits( numTotalHits); 
00205 
00206     mdcDedxRoot->setProbPH(probPH);             
00207     mdcDedxRoot->setNormPH(normPH);
00208     mdcDedxRoot->setErrorPH(errorPH);
00209     mdcDedxRoot->setTwentyPH(twentyPH);  
00210     // dedxRoot->setFracErrPH(fracErrPH);       
00211     //dedxRoot->setMinIronPH(minIronPH);       
00212     //dedxRoot->setCorrPH(corrPH);             
00213     log << MSG::INFO << "check Reconstrunction root"<<" particle Id is : "<<particleId
00214         <<"track id is : "<<trackId
00215         <<" and status is : "<<status<<endreq;
00216     
00217     
00218     
00219     recEvt->addMdcDedx(mdcDedxRoot);
00220   }
00221 
00222   return StatusCode::SUCCESS;
00223 }
00224 #endif

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