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
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
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
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
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
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 }