/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Mdc/MdcCheckUtil/MdcPrintSvc/MdcPrintSvc-00-00-01/src/MdcPrintSvc.cxx

Go to the documentation of this file.
00001 #include "MdcPrintSvc/MdcPrintSvc.h"
00002 #include "GaudiKernel/Kernel.h"
00003 #include "GaudiKernel/IInterface.h"
00004 #include "GaudiKernel/StatusCode.h"
00005 #include "GaudiKernel/SvcFactory.h"
00006 #include "GaudiKernel/MsgStream.h"
00007 #include "GaudiKernel/ISvcLocator.h"
00008 #include "GaudiKernel/Bootstrap.h"
00009 #include "GaudiKernel/IDataProviderSvc.h"
00010 #include "GaudiKernel/DataSvc.h"
00011 #include "EventModel/EventHeader.h"
00012 #include "GaudiKernel/SmartDataPtr.h"
00013 
00014 #include "Identifier/MdcID.h"
00015 #include "RawEvent/RawDataUtil.h"
00016 #include "MdcRawEvent/MdcDigi.h"
00017 #include "EvTimeEvent/RecEsTime.h"
00018 #include "MdcRecEvent/RecMdcTrack.h"
00019 #include "MdcRecEvent/RecMdcHit.h"
00020 #include "McTruth/McParticle.h"
00021 #include "McTruth/MdcMcHit.h"
00022 #include "EventModel/EventModel.h"
00023 
00024 #include <iomanip>
00025 #include <iostream>
00026 
00027 using namespace std;
00028 using namespace Event;
00029 
00030 MdcPrintSvc::MdcPrintSvc( const string& name, ISvcLocator* svcloc) :
00031   Service (name, svcloc) {
00032 
00033     // declare properties
00034     declareProperty("printHit",         m_printHit=1);
00035     declareProperty("printTrackDetail", m_printTrackDetail=1);
00036     declareProperty("printErrMat",      m_printErrMat=0);
00037     declareProperty("printTdcAdc",      m_printTdcAdc=0);
00038     declareProperty("printMcTk",        m_printMcTk=0);
00039   }
00040 
00041 MdcPrintSvc::~MdcPrintSvc(){
00042 }
00043 
00044 StatusCode MdcPrintSvc::initialize(){
00045   MsgStream log(messageService(), name());
00046   log << MSG::INFO << "MdcPrintSvc::initialize()" << endreq;
00047 
00048   StatusCode sc = Service::initialize();
00049   if( sc.isFailure() ) return sc;
00050 
00051   ISvcLocator* svcLocator = Gaudi::svcLocator();
00052   svcLocator->service("EventDataSvc",eventSvc,true);
00053   if (NULL == eventSvc){
00054     std::cout << "ERROR Could not load service DataSvc" << std::endl;
00055     return StatusCode::FAILURE;
00056   }
00057 
00058   IRawDataProviderSvc* irawDataProviderSvc;
00059   sc = service ("RawDataProviderSvc", irawDataProviderSvc);
00060   m_rawDataProviderSvc = dynamic_cast<RawDataProviderSvc*> (irawDataProviderSvc);
00061   if ( sc.isFailure() ){
00062     log << MSG::FATAL << "Could not load RawDataProviderSvc!" << endreq;
00063     return StatusCode::FAILURE;
00064   }
00065 
00066 
00067   return StatusCode::SUCCESS;
00068 }
00069 
00070 StatusCode MdcPrintSvc::finalize(){
00071   MsgStream log(messageService(), name());
00072   log << MSG::INFO << "MdcPrintSvc::finalize()" << endreq;
00073 
00074   return StatusCode::SUCCESS;
00075 }
00076 
00077 StatusCode MdcPrintSvc::queryInterface(const InterfaceID& riid, void** ppvInterface){
00078   if( IID_IMdcPrintSvc.versionMatch(riid) ){
00079     *ppvInterface = static_cast<IMdcPrintSvc*> (this);
00080   } else{
00081     return Service::queryInterface(riid, ppvInterface);
00082   }
00083   return StatusCode::SUCCESS;
00084 }
00085 
00086 void MdcPrintSvc::printDigi(uint32_t getDigiFlag)const{
00087   MdcDigiVec mdcDigiVec = m_rawDataProviderSvc->getMdcDigiVec(getDigiFlag);
00088   MdcDigiCol::iterator iter = mdcDigiVec.begin();
00089   std::cout<<"//==== "<<name()<<" print MdcDigiVec, nDigi="<<mdcDigiVec.size()<<" :"<<std::endl;
00090   for (int iDigi=0;iter!= mdcDigiVec.end(); iter++,iDigi++ ) {
00091     long l = MdcID::layer((*iter)->identify());
00092     long w = MdcID::wire((*iter)->identify());
00093     cout<<"("<<l<<","<<w;
00094     if(m_printMcTk) {
00095       int tkTruth = (*iter)->getTrackIndex();
00096       cout<<";"<<tkTruth;
00097     }
00098     if(m_printTdcAdc) {
00099       double tdc = RawDataUtil::MdcTime((*iter)->getTimeChannel());
00100       double adc = RawDataUtil::MdcCharge((*iter)->getChargeChannel());
00101       cout<<",t "<<tdc<<",c "<<adc;
00102     }
00103     cout<<")";
00104     if(iDigi%4==0) std::cout<<std::endl;
00105   }
00106   std::cout<<std::endl;
00107 }
00108 
00109 void MdcPrintSvc::printRecMdcTrackCol()const{
00110   MsgStream log(messageService(), name());
00111 
00112   SmartDataPtr<RecMdcTrackCol> recMdcTrackCol(eventSvc,"/Event/Recon/RecMdcTrackCol");
00113   if (!recMdcTrackCol) {
00114     log << MSG::WARNING << "Could not find RecMdcTrackCol" << endreq;
00115     return;
00116   }    
00117 
00118   std::cout<< "//======= "<<name()<<" RecMdcTrackCol size = "<<recMdcTrackCol->size() << std::endl;
00119   RecMdcTrackCol::iterator it = recMdcTrackCol->begin();
00120   for (;it!= recMdcTrackCol->end();it++){
00121     printRecMdcTrack(*it);
00122   }
00123 
00124 }
00125 
00126 void MdcPrintSvc::printRecMdcTrack(const RecMdcTrack* tk)const{
00127   std::cout<< "//==== "<<name()<<" print RecMdcTrack No."<<tk->trackId()<<" :"<< std::endl;
00128   cout <<" dr "<<tk->helix(0)
00129     <<" phi0 "<<tk->helix(1)
00130     <<" cpa "<<tk->helix(2)
00131     <<" z0 "<<tk->helix(3)
00132     <<" tanl "<<tk->helix(4)
00133     <<endl;
00134   if(m_printTrackDetail){
00135     std::cout<<" q "<<tk->charge() 
00136       <<" theta "<<tk->theta()
00137       <<" phi "<<tk->phi()
00138       <<" x0 "<<tk->x()
00139       <<" y0 "<<tk->y()
00140       <<" z0 "<<tk->z()
00141       <<" r0 "<<tk->r()
00142       <<endl;
00143     std::cout <<" p "<<tk->p()
00144       <<" pt "<<tk->pxy()
00145       <<" pxyz("<<tk->px()
00146       <<","<<tk->py()
00147       <<","<<tk->pz()
00148       <<")"<<endl;
00149     std::cout<<" tkStat "<<tk->stat()
00150       <<" chi2 "<<tk->chi2()
00151       <<" ndof "<<tk->ndof()
00152       <<" nhit "<<tk->getNhits()
00153       <<" nst "<<tk->nster()
00154       <<endl;
00155     if(m_printErrMat){
00156       std::cout<< "errmat   " << std::endl;
00157       for (int i=0; i<15; i++){ std::cout<< " "<<tk->err(i); }
00158       std::cout<< "   " << std::endl;
00159     }
00160   }
00161 
00162   if(m_printHit){
00163     int haveDigi[43][288];
00164     if(m_printMcTk) {
00165       for(int ii=0;ii<43;ii++){
00166         for(int jj=0;jj<43;jj++){
00167           haveDigi[ii][jj]=-9999;
00168         }
00169       }
00170       MdcDigiVec mdcDigiVec = m_rawDataProviderSvc->getMdcDigiVec();
00171       MdcDigiCol::iterator iter = mdcDigiVec.begin();
00172       std::cout<<name()<<"//==== "<<name()<<" print MdcDigiVec, nDigi="<<mdcDigiVec.size()<<" :"<<std::endl;
00173       for (int iDigi=0;iter!= mdcDigiVec.end(); iter++,iDigi++ ) {
00174         long l = MdcID::layer((*iter)->identify());
00175         long w = MdcID::wire((*iter)->identify());
00176         haveDigi[l][w]=(*iter)->getTrackIndex();
00177       }
00178     }
00179 
00180     int nhits = tk->getVecHits().size();
00181     std::cout<<"nHits=" <<nhits<< std::endl;
00182     cout<<"No. ";
00183     if(m_printMcTk) cout<<"mcTkId ";
00184     cout<<"(layer,wire,lr) stat z"<<endl;
00185     for(int ii=0; ii <nhits ; ii++){
00186       Identifier id(tk->getVecHits()[ii]->getMdcId());
00187       int layer = MdcID::layer(id);
00188       int wire = MdcID::wire(id);
00189       cout<<ii<<":";
00190       if(m_printMcTk) { cout<<haveDigi[layer][wire]; }
00191       cout<<" ("<<layer<<","<<wire
00192         <<","<<tk->getVecHits()[ii]->getFlagLR()
00193         <<")  "<<tk->getVecHits()[ii]->getStat()
00194         <<"  "<<tk->getVecHits()[ii]->getZhit()<< " "<<std::endl;
00195     }//end of hit list
00196     std::cout << "  "<< std::endl;
00197   }
00198 }
00199 
00200 void MdcPrintSvc::printMdcMcHitCol()const{
00201   MsgStream log(messageService(), name());
00202 
00203   SmartDataPtr<MdcMcHitCol> mdcMcHitCol(eventSvc,"/Event/MC/MdcMcHitCol");
00204   if (!mdcMcHitCol) {
00205     log << MSG::WARNING << "Could not find MdcMcHitCol" << endreq;
00206     return;
00207   }
00208 
00209   int ihit= 0;
00210   cout<<  "//==== "<<name()<<" print MdcMcHitCol nMcHit="<<mdcMcHitCol->size()<< endl;
00211   if (mdcMcHitCol->size()>0){
00212     cout<<"No. (layer,wire) mcTk  (x,y,z)   lr  driftdist(cm)  energy"<<endl;
00213   }
00214   MdcMcHitCol::iterator iter_mchit = mdcMcHitCol->begin();
00215   for (;iter_mchit != mdcMcHitCol->end(); iter_mchit++,ihit++ ) {
00216     const Identifier id= (*iter_mchit)->identify();
00217     int layer = MdcID::layer(id);
00218     int wire = MdcID::wire(id);
00219     int iMcTk =  (*iter_mchit)->getTrackIndex();
00220     double mcX = (*iter_mchit)->getPositionX()/10.;
00221     double mcY = (*iter_mchit)->getPositionY()/10.;
00222     double mcZ = (*iter_mchit)->getPositionZ()/10.;
00223     double mcLR = (*iter_mchit)->getPositionFlag();
00224     double mcDrift = (*iter_mchit)->getDriftDistance()/10.;
00225     double mcEnergy = (*iter_mchit)->getDepositEnergy()/10.;
00226     if (mcLR == 0) mcLR = -1;
00227     cout<<ihit <<" ("<<layer<<","<<wire<<") "<< iMcTk
00228       <<" ("<< mcX<<"," <<mcY<<","<< mcZ
00229       <<")  " <<mcLR
00230       <<"  " <<mcDrift
00231       <<"  " <<mcEnergy
00232       <<endl;
00233   }
00234 }

Generated on Tue Nov 29 23:12:52 2016 for BOSS_7.0.2 by  doxygen 1.4.7