00001 #include "MdcAlignAlg/MdcAliEvent.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
00028 #include "Identifier/Identifier.h"
00029 #include "Identifier/MdcID.h"
00030
00031 #include <iostream>
00032 #include <math.h>
00033
00034 using namespace Event;
00035
00036 StatusCode MdcAliEvent::setRecEvent(){
00037 IMessageSvc *msgSvc;
00038 Gaudi::svcLocator()->service("MessageSvc", msgSvc);
00039 MsgStream log(msgSvc, "MdcAliEvent");
00040 log << MSG::INFO << "MdcAliEvent::setRecEvent" << endreq;
00041
00042 IDataProviderSvc* eventSvc = NULL;
00043 Gaudi::svcLocator()->service("EventDataSvc", eventSvc);
00044
00045
00046 SmartDataPtr<RecEsTimeCol> aevtimeCol(eventSvc,"/Event/Recon/RecEsTimeCol");
00047 if( ! aevtimeCol || (aevtimeCol->size()==0) ){
00048 m_tes = -9999.0;
00049 m_esFlag = -1;
00050 }else{
00051 RecEsTimeCol::iterator iter_evt = aevtimeCol->begin();
00052 for(; iter_evt!=aevtimeCol->end(); iter_evt++){
00053 m_tes = (*iter_evt)->getTest();
00054 m_esFlag = (*iter_evt)->getStat();
00055 }
00056 }
00057
00058 m_esCutFg = false;
00059 bool flagTes = false;
00060 for(int iEs=0; iEs<m_param.nEsFlag; iEs++){
00061 if(m_esFlag == m_param.esFlag[iEs]){
00062 flagTes = true;
00063 break;
00064 }
00065 }
00066 if( flagTes && (m_tes > m_param.tesMin) && (m_tes < m_param.tesMax) ) m_esCutFg = true;
00067
00068 SmartDataPtr<RecMdcTrackCol> newtrkCol(eventSvc, "/Event/Recon/RecMdcTrackCol");
00069 if(!newtrkCol){
00070 log << MSG::ERROR << "Could not find RecMdcTrackCol" << endreq;
00071 return ( StatusCode::FAILURE );
00072 }
00073
00074 int i = 0;
00075 MdcAliRecTrk* rectrk;
00076 RecMdcTrackCol::iterator it_trk = newtrkCol->begin();
00077 for(; it_trk != newtrkCol->end(); it_trk++){
00078 rectrk = new MdcAliRecTrk();
00079 rectrk -> setRecTrk(it_trk);
00080 m_rectrk.push_back(rectrk);
00081
00082 i++;
00083 }
00084 log << MSG::WARNING << "RecTrack ntrk = " << i << endreq;
00085
00086 return StatusCode::SUCCESS;
00087 }
00088
00089 StatusCode MdcAliEvent::setKalEvent(){
00090 IMessageSvc *msgSvc;
00091 Gaudi::svcLocator()->service("MessageSvc", msgSvc);
00092 MsgStream log(msgSvc, "MdcAliEvent");
00093 log << MSG::INFO << "MdcAliEvent::setKalEvent" << endreq;
00094
00095 IDataProviderSvc* eventSvc = NULL;
00096 Gaudi::svcLocator()->service("EventDataSvc", eventSvc);
00097
00098
00099 SmartDataPtr<RecEsTimeCol> aevtimeCol(eventSvc,"/Event/Recon/RecEsTimeCol");
00100 if( ! aevtimeCol || (aevtimeCol->size()==0) ){
00101 m_tes = -9999.0;
00102 m_esFlag = -1;
00103 }else{
00104 RecEsTimeCol::iterator iter_evt = aevtimeCol->begin();
00105 for(; iter_evt!=aevtimeCol->end(); iter_evt++){
00106 m_tes = (*iter_evt)->getTest();
00107 m_esFlag = (*iter_evt)->getStat();
00108 }
00109 }
00110
00111 m_esCutFg = false;
00112 bool flagTes = false;
00113 for(int iEs=0; iEs<m_param.nEsFlag; iEs++){
00114 if(m_esFlag == m_param.esFlag[iEs]){
00115 flagTes = true;
00116 break;
00117 }
00118 }
00119 if( flagTes && (m_tes > m_param.tesMin) && (m_tes < m_param.tesMax) ) m_esCutFg = true;
00120
00121 SmartDataPtr<RecMdcKalTrackCol> kaltrkCol(eventSvc,"/Event/Recon/RecMdcKalTrackCol");
00122 if (!kaltrkCol) {
00123 log << MSG::FATAL << "Could not find RecMdcKalTrackCol" << endreq;
00124 return StatusCode::FAILURE;
00125 }
00126
00127 int i = 0;
00128 MdcAliRecTrk* rectrk;
00129 RecMdcKalTrackCol::iterator iter_trk = kaltrkCol->begin();
00130 for(; iter_trk != kaltrkCol->end(); iter_trk++) {
00131 rectrk = new MdcAliRecTrk();
00132 rectrk -> setKalTrk(iter_trk);
00133 m_rectrk.push_back(rectrk);
00134
00135 i++;
00136 }
00137 log << MSG::INFO << "KalTrack ntrk = " << i << endreq;
00138
00139 return StatusCode::SUCCESS;
00140 }
00141
00142 void MdcAliEvent::clear(){
00143 unsigned int i;
00144 for(i=0; i<m_rectrk.size(); i++){
00145 delete m_rectrk[i];
00146 }
00147 m_rectrk.clear();
00148 }