BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
MdcCalEvent.cxx
Go to the documentation of this file.
2
3#include "GaudiKernel/Bootstrap.h"
4#include "GaudiKernel/IDataProviderSvc.h"
5#include "GaudiKernel/IMessageSvc.h"
6#include "GaudiKernel/ISvcLocator.h"
7#include "GaudiKernel/MsgStream.h"
8#include "GaudiKernel/PropertyMgr.h"
9#include "GaudiKernel/SmartDataPtr.h"
10#include "GaudiKernel/StatusCode.h"
11
12#include "BesTimerSvc/BesTimerSvc.h"
13#include "BesTimerSvc/IBesTimerSvc.h"
14
15#include "EventModel/Event.h"
16#include "RawEvent/RawDataUtil.h"
17
18#include "MdcCalibFunSvc/IMdcCalibFunSvc.h"
19#include "MdcCalibFunSvc/MdcCalibFunSvc.h"
20
21#include "EvTimeEvent/RecEsTime.h"
22#include "Identifier/Identifier.h"
23#include "Identifier/MdcID.h"
24#include "MdcRawEvent/MdcDigi.h"
25#include "MdcRecEvent/RecMdcHit.h"
26#include "MdcRecEvent/RecMdcKalTrack.h"
27#include "MdcRecEvent/RecMdcTrack.h"
28#include "ReconEvent/ReconEvent.h"
29
30#include <iostream>
31#include <math.h>
32
33using namespace Event;
34
36
38
40 IMessageSvc* msgSvc;
41 Gaudi::svcLocator()->service( "MessageSvc", msgSvc );
42 MsgStream log( msgSvc, "MdcCalEvent" );
43 log << MSG::INFO << "MdcCalEvent::setRecEvent" << endmsg;
44
45 IDataProviderSvc* eventSvc = NULL;
46 Gaudi::svcLocator()->service( "EventDataSvc", eventSvc );
47
48 // retrieve Mdc digi
49 SmartDataPtr<MdcDigiCol> mdcDigiCol( eventSvc, "/Event/Digi/MdcDigiCol" );
50 if ( !mdcDigiCol ) { log << MSG::FATAL << "Could not find event" << endmsg; }
51
52 MdcDigiCol::iterator iter = mdcDigiCol->begin();
53 m_nhitTQ = 0;
54 for ( ; iter != mdcDigiCol->end(); iter++ )
55 {
56 MdcDigi* aDigi = ( *iter );
57 unsigned fgOverFlow = ( aDigi )->getOverflow();
58 if ( ( ( fgOverFlow & 3 ) != 0 ) || ( ( fgOverFlow & 12 ) != 0 ) ||
59 ( aDigi->getTimeChannel() == 0x7FFFFFFF ) ||
60 ( aDigi->getChargeChannel() == 0x7FFFFFFF ) )
61 continue;
62 m_nhitTQ++;
63 }
64
65 // get EsTimeCol
66 SmartDataPtr<RecEsTimeCol> aevtimeCol( eventSvc, "/Event/Recon/RecEsTimeCol" );
67 if ( ( !aevtimeCol ) || ( aevtimeCol->size() == 0 ) )
68 {
69 m_tes = -9999.0;
70 m_esFlag = -1;
71 }
72 else
73 {
74 RecEsTimeCol::iterator iter_evt = aevtimeCol->begin();
75 for ( ; iter_evt != aevtimeCol->end(); iter_evt++ )
76 {
77 m_tes = ( *iter_evt )->getTest();
78 m_esFlag = ( *iter_evt )->getStat();
79 }
80 }
81 m_esCutFg = false;
82 m_nEsCutFg = -1;
83 bool flagTes = false;
84 for ( int iEs = 0; iEs < m_param.nEsFlag; iEs++ )
85 {
86 if ( m_esFlag == m_param.esFlag[iEs] )
87 {
88 flagTes = true;
89 m_nEsCutFg = iEs;
90 break;
91 }
92 }
93 if ( -1 == m_esFlag ) { m_esCutFg = false; }
94 else
95 {
96 if ( !m_param.esCut ) m_esCutFg = true;
97 else if ( flagTes && ( m_tes > m_param.tesMin ) && ( m_tes < m_param.tesMax ) )
98 m_esCutFg = true;
99 }
100
101 SmartDataPtr<RecMdcTrackCol> newtrkCol( eventSvc, "/Event/Recon/RecMdcTrackCol" );
102 if ( !newtrkCol )
103 {
104 log << MSG::ERROR << "Could not find RecMdcTrackCol" << endmsg;
105 return ( StatusCode::FAILURE );
106 }
107
108 int i = 0;
109 MdcCalRecTrk* rectrk;
110 RecMdcTrackCol::iterator it_trk = newtrkCol->begin();
111 for ( ; it_trk != newtrkCol->end(); it_trk++ )
112 {
113 rectrk = new MdcCalRecTrk( m_param.particle );
114 rectrk->setGeomSvc( m_mdcGeomSvc );
115 rectrk->setUtilSvc( m_mdcUtilitySvc );
116 rectrk->setRecTrk( it_trk );
117 m_rectrk.push_back( rectrk );
118
119 i++;
120 }
121 // log << MSG::WARNING << "RecTrack ntrk = " << i << endmsg;
122
123 return StatusCode::SUCCESS;
124}
125
127 IMessageSvc* msgSvc;
128 Gaudi::svcLocator()->service( "MessageSvc", msgSvc );
129 MsgStream log( msgSvc, "MdcCalEvent" );
130 log << MSG::INFO << "MdcCalEvent::setKalEvent" << endmsg;
131
132 IDataProviderSvc* eventSvc = NULL;
133 Gaudi::svcLocator()->service( "EventDataSvc", eventSvc );
134
135 // retrieve Mdc digi
136 SmartDataPtr<MdcDigiCol> mdcDigiCol( eventSvc, "/Event/Digi/MdcDigiCol" );
137 if ( !mdcDigiCol ) { log << MSG::FATAL << "Could not find event" << endmsg; }
138
139 MdcDigiCol::iterator iter = mdcDigiCol->begin();
140 m_nhitTQ = 0;
141 for ( ; iter != mdcDigiCol->end(); iter++ )
142 {
143 MdcDigi* aDigi = ( *iter );
144 unsigned fgOverFlow = ( aDigi )->getOverflow();
145 if ( ( ( fgOverFlow & 3 ) != 0 ) || ( ( fgOverFlow & 12 ) != 0 ) ||
146 ( aDigi->getTimeChannel() == 0x7FFFFFFF ) ||
147 ( aDigi->getChargeChannel() == 0x7FFFFFFF ) )
148 continue;
149 m_nhitTQ++;
150 }
151
152 // get EsTimeCol
153 SmartDataPtr<RecEsTimeCol> aevtimeCol( eventSvc, "/Event/Recon/RecEsTimeCol" );
154 if ( ( !aevtimeCol ) || ( aevtimeCol->size() == 0 ) )
155 {
156 m_tes = -9999.0;
157 m_esFlag = -1;
158 }
159 else
160 {
161 RecEsTimeCol::iterator iter_evt = aevtimeCol->begin();
162 for ( ; iter_evt != aevtimeCol->end(); iter_evt++ )
163 {
164 m_tes = ( *iter_evt )->getTest();
165 m_esFlag = ( *iter_evt )->getStat();
166 }
167 }
168 m_esCutFg = false;
169 m_nEsCutFg = -1;
170 bool flagTes = false;
171 for ( int iEs = 0; iEs < m_param.nEsFlag; iEs++ )
172 {
173 if ( m_esFlag == m_param.esFlag[iEs] )
174 {
175 flagTes = true;
176 m_nEsCutFg = iEs;
177 break;
178 }
179 }
180 if ( flagTes && ( m_tes > m_param.tesMin ) && ( m_tes < m_param.tesMax ) ) m_esCutFg = true;
181
182 SmartDataPtr<RecMdcKalTrackCol> kaltrkCol( eventSvc, "/Event/Recon/RecMdcKalTrackCol" );
183 if ( !kaltrkCol )
184 {
185 log << MSG::FATAL << "Could not find RecMdcKalTrackCol" << endmsg;
186 return StatusCode::FAILURE;
187 }
188
189 int i = 0;
190 MdcCalRecTrk* rectrk;
191 RecMdcKalTrackCol::iterator iter_trk = kaltrkCol->begin();
192 for ( ; iter_trk != kaltrkCol->end(); iter_trk++ )
193 {
194 rectrk = new MdcCalRecTrk( m_param.particle );
195 rectrk->setGeomSvc( m_mdcGeomSvc );
196 rectrk->setUtilSvc( m_mdcUtilitySvc );
197 rectrk->setKalTrk( iter_trk );
198 m_rectrk.push_back( rectrk );
199
200 i++;
201 }
202 log << MSG::INFO << "KalTrack ntrk = " << i << endmsg;
203
204 return StatusCode::SUCCESS;
205}
206
208 unsigned int i;
209 for ( i = 0; i < m_rectrk.size(); i++ ) { delete m_rectrk[i]; }
210 m_rectrk.clear();
211}
EvtStreamInputIterator< typename Generator::result_type > iter(Generator gen, int N=0)
IMessageSvc * msgSvc()
StatusCode setKalEvent()
StatusCode setRecEvent()
void setGeomSvc(IMdcGeomSvc *mdcGeomSvc)
void setUtilSvc(IMdcUtilitySvc *mdcUtilitySvc)
void setRecTrk(RecMdcTrackCol::iterator it_trk)
void setKalTrk(RecMdcKalTrackCol::iterator it_trk)
unsigned int getChargeChannel() const
Definition RawData.cxx:35
unsigned int getTimeChannel() const
Definition RawData.cxx:32