/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Mdc/MdcCalibAlg/MdcCalibAlg-00-09-02/src/MdcCalEvent.cxx

Go to the documentation of this file.
00001 #include "MdcCalibAlg/MdcCalEvent.h"
00002 
00003 #include "GaudiKernel/MsgStream.h"
00004 #include "GaudiKernel/IMessageSvc.h"
00005 #include "GaudiKernel/StatusCode.h"
00006 #include "GaudiKernel/ISvcLocator.h"
00007 #include "GaudiKernel/Bootstrap.h"
00008 #include "GaudiKernel/SmartDataPtr.h"
00009 #include "GaudiKernel/IDataProviderSvc.h"
00010 #include "GaudiKernel/PropertyMgr.h"
00011 
00012 #include "BesTimerSvc/IBesTimerSvc.h"
00013 #include "BesTimerSvc/BesTimerSvc.h"
00014 
00015 #include "EventModel/Event.h"
00016 #include "RawEvent/RawDataUtil.h"
00017 #include "EventModel/Event.h"
00018 
00019 #include "MdcCalibFunSvc/IMdcCalibFunSvc.h"
00020 #include "MdcCalibFunSvc/MdcCalibFunSvc.h"
00021 
00022 #include "EvTimeEvent/RecEsTime.h"
00023 #include "MdcRecEvent/RecMdcTrack.h"
00024 #include "MdcRecEvent/RecMdcKalTrack.h"
00025 #include "MdcRecEvent/RecMdcHit.h"
00026 #include "ReconEvent/ReconEvent.h"
00027 #include "Identifier/Identifier.h"
00028 #include "Identifier/MdcID.h"
00029 #include "MdcRawEvent/MdcDigi.h"
00030 
00031 #include <iostream>
00032 #include <math.h>
00033 
00034 using namespace Event;
00035 
00036 MdcCalEvent::MdcCalEvent(){
00037 }
00038 
00039 MdcCalEvent::~MdcCalEvent(){
00040 }
00041 
00042 StatusCode MdcCalEvent::setRecEvent(){
00043      IMessageSvc *msgSvc;
00044      Gaudi::svcLocator()->service("MessageSvc", msgSvc);
00045      MsgStream log(msgSvc, "MdcCalEvent");
00046      log << MSG::INFO << "MdcCalEvent::setRecEvent" << endreq;
00047 
00048      IDataProviderSvc* eventSvc = NULL;
00049      Gaudi::svcLocator()->service("EventDataSvc", eventSvc);
00050 
00051      // retrieve Mdc digi
00052      SmartDataPtr<MdcDigiCol> mdcDigiCol(eventSvc,"/Event/Digi/MdcDigiCol");
00053      if (!mdcDigiCol) {
00054           log << MSG::FATAL << "Could not find event" << endreq;
00055      }
00056 
00057      MdcDigiCol::iterator iter = mdcDigiCol->begin();
00058      m_nhitTQ = 0;
00059      for(; iter != mdcDigiCol->end(); iter++) {
00060           MdcDigi *aDigi = (*iter);
00061           unsigned fgOverFlow = (aDigi) -> getOverflow();
00062           if ( ((fgOverFlow & 3) !=0 ) || ((fgOverFlow & 12) != 0) ||
00063                (aDigi->getTimeChannel() == 0x7FFFFFFF) ||
00064                (aDigi->getChargeChannel() == 0x7FFFFFFF) ) continue;
00065           m_nhitTQ++;
00066      }
00067 
00068      // get EsTimeCol
00069      SmartDataPtr<RecEsTimeCol> aevtimeCol(eventSvc,"/Event/Recon/RecEsTimeCol");
00070      if( (!aevtimeCol) || (aevtimeCol->size()==0) ){
00071           m_tes = -9999.0;
00072           m_esFlag = -1;
00073      }else{
00074           RecEsTimeCol::iterator iter_evt = aevtimeCol->begin();
00075           for(; iter_evt!=aevtimeCol->end(); iter_evt++){
00076                m_tes = (*iter_evt)->getTest();
00077                m_esFlag = (*iter_evt)->getStat();
00078           }
00079      }
00080      m_esCutFg = false;
00081      m_nEsCutFg = -1;
00082      bool flagTes = false;
00083      for(int iEs=0; iEs<m_param.nEsFlag; iEs++){
00084           if(m_esFlag == m_param.esFlag[iEs]){
00085                flagTes = true;
00086                m_nEsCutFg = iEs;
00087                break;
00088           }
00089      }
00090      if( flagTes && (m_tes > m_param.tesMin) && (m_tes < m_param.tesMax) ) m_esCutFg = true;
00091 
00092      SmartDataPtr<RecMdcTrackCol> newtrkCol(eventSvc, "/Event/Recon/RecMdcTrackCol");
00093      if(!newtrkCol){
00094           log << MSG::ERROR << "Could not find RecMdcTrackCol" << endreq;
00095           return ( StatusCode::FAILURE );
00096      }
00097 
00098      int i = 0;
00099      MdcCalRecTrk* rectrk;
00100      RecMdcTrackCol::iterator it_trk = newtrkCol->begin();
00101      for(; it_trk != newtrkCol->end(); it_trk++){
00102           rectrk = new MdcCalRecTrk(m_param.particle);
00103           rectrk -> setGeomSvc(m_mdcGeomSvc);
00104           rectrk -> setUtilSvc(m_mdcUtilitySvc);
00105           rectrk -> setRecTrk(it_trk);
00106           m_rectrk.push_back(rectrk);
00107 
00108           i++;
00109      }
00110 //      log << MSG::WARNING << "RecTrack ntrk = " << i << endreq;
00111 
00112      return StatusCode::SUCCESS;
00113 }
00114 
00115 StatusCode MdcCalEvent::setKalEvent(){
00116      IMessageSvc *msgSvc;
00117      Gaudi::svcLocator()->service("MessageSvc", msgSvc);
00118      MsgStream log(msgSvc, "MdcCalEvent");
00119      log << MSG::INFO << "MdcCalEvent::setKalEvent" << endreq;
00120 
00121      IDataProviderSvc* eventSvc = NULL;
00122      Gaudi::svcLocator()->service("EventDataSvc", eventSvc);
00123 
00124      // retrieve Mdc digi
00125      SmartDataPtr<MdcDigiCol> mdcDigiCol(eventSvc,"/Event/Digi/MdcDigiCol");
00126      if (!mdcDigiCol) {
00127           log << MSG::FATAL << "Could not find event" << endreq;
00128      }
00129 
00130      MdcDigiCol::iterator iter = mdcDigiCol->begin();
00131      m_nhitTQ = 0;
00132      for(; iter != mdcDigiCol->end(); iter++) {
00133           MdcDigi *aDigi = (*iter);
00134           unsigned fgOverFlow = (aDigi) -> getOverflow();
00135           if ( ((fgOverFlow & 3) !=0 ) || ((fgOverFlow & 12) != 0) ||
00136                (aDigi->getTimeChannel() == 0x7FFFFFFF) ||
00137                (aDigi->getChargeChannel() == 0x7FFFFFFF) ) continue;
00138           m_nhitTQ++;
00139      }
00140 
00141      // get EsTimeCol
00142      SmartDataPtr<RecEsTimeCol> aevtimeCol(eventSvc,"/Event/Recon/RecEsTimeCol");
00143      if( (!aevtimeCol) || (aevtimeCol->size()==0) ){
00144           m_tes = -9999.0;
00145           m_esFlag = -1;
00146      }else{
00147           RecEsTimeCol::iterator iter_evt = aevtimeCol->begin();
00148           for(; iter_evt!=aevtimeCol->end(); iter_evt++){
00149                m_tes = (*iter_evt)->getTest();
00150                m_esFlag = (*iter_evt)->getStat();
00151           }
00152      }
00153      m_esCutFg = false;
00154      m_nEsCutFg = -1;
00155      bool flagTes = false;
00156      for(int iEs=0; iEs<m_param.nEsFlag; iEs++){
00157           if(m_esFlag == m_param.esFlag[iEs]){
00158                flagTes = true;
00159                m_nEsCutFg = iEs;
00160                break;
00161           }
00162      }
00163      if( flagTes && (m_tes > m_param.tesMin) && (m_tes < m_param.tesMax) ) m_esCutFg = true;
00164 
00165      SmartDataPtr<RecMdcKalTrackCol> kaltrkCol(eventSvc,"/Event/Recon/RecMdcKalTrackCol");
00166      if (!kaltrkCol) {
00167           log << MSG::FATAL << "Could not find RecMdcKalTrackCol" << endreq;
00168           return StatusCode::FAILURE;
00169      }
00170 
00171      int i = 0;
00172      MdcCalRecTrk* rectrk;
00173      RecMdcKalTrackCol::iterator iter_trk = kaltrkCol->begin();
00174      for(; iter_trk != kaltrkCol->end(); iter_trk++) {
00175           rectrk = new MdcCalRecTrk(m_param.particle);
00176           rectrk -> setGeomSvc(m_mdcGeomSvc);
00177           rectrk -> setUtilSvc(m_mdcUtilitySvc);
00178           rectrk -> setKalTrk(iter_trk);
00179           m_rectrk.push_back(rectrk);
00180 
00181           i++;
00182      }
00183      log << MSG::INFO << "KalTrack ntrk = " << i << endreq;
00184 
00185      return StatusCode::SUCCESS;
00186 }
00187 
00188 void MdcCalEvent::clear(){
00189      unsigned int i;
00190      for(i=0; i<m_rectrk.size(); i++){
00191           delete m_rectrk[i];
00192      }
00193      m_rectrk.clear();
00194 }

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