131 {
132
133 MsgStream log(
msgSvc(), name() );
134
135 SmartDataPtr<Event::EventHeader> eventHeader( eventSvc(), "/Event/EventHeader" );
136 int runNo = eventHeader->runNumber();
137 int event = eventHeader->eventNumber();
138
141
143
144
145
146
147 double Ebeam = 3.773 / 2.0;
148
150 {
151 for ( int i = 0; i < 3467; i++ )
152 {
153 if (
runNo == p_run[i] ) { Ebeam = p_Ecm[i] / 2.0; }
154 }
155 }
156
158 {
160
161
162
163 }
164
165 if (
nD0 % 1000 == 0 )
166 cout <<
"SD0TagAlg-13-11-15pp = " <<
nD0 <<
" " <<
runNo <<
" " <<
event <<
" "
167 << Ebeam * 2 << endl;
168
169 Hep3Vector xorigin( 0, 0, 0 );
170 IVertexDbSvc* vtxsvc;
171 Gaudi::svcLocator()->service( "VertexDbSvc", vtxsvc );
173 {
176 xorigin.setX( dbv[0] );
177 xorigin.setY( dbv[1] );
178 xorigin.setZ( dbv[2] );
179 }
180
181
183 iCharge_good.clear();
184 for ( int i = 0; i < evtRecEvent->totalCharged(); i++ )
185 {
187 if ( !( *itTrk )->isMdcTrackValid() ) continue;
188 RecMdcTrack* mdcTrk = ( *itTrk )->mdcTrack();
189
190 HepVector a = mdcTrk->
helix();
191 HepSymMatrix Ea = mdcTrk->
err();
193 HepPoint3D IP( xorigin[0], xorigin[1], xorigin[2] );
194 VFHelix helixip( point0, a, Ea );
195 helixip.pivot( IP );
196 HepVector vecipa = helixip.a();
197 double Rvxy0 = fabs( vecipa[0] );
198 double Rvz0 = vecipa[3];
199 double costheta =
cos( mdcTrk->
theta() );
200
201 if ( fabs( Rvxy0 ) >= 1.0 ) continue;
202 if ( fabs( Rvz0 ) >= 10.0 ) continue;
203 if ( fabs( costheta ) >= 0.930 ) continue;
204 iCharge_good.push_back( i );
205 }
206
207
209 iGam.clear();
210 for ( int i = evtRecEvent->totalCharged(); i < evtRecEvent->totalTracks(); i++ )
211 {
213 if ( !( *itTrk )->isEmcShowerValid() ) continue;
214 RecEmcShower* emcTrk = ( *itTrk )->emcShower();
215
216
217
219 continue;
221 continue;
223 continue;
225 continue;
226
227 int emctdc = emcTrk->
time();
228 if ( emctdc > 14 || emctdc < 0 ) continue;
229
230 double eraw = emcTrk->
energy();
231 double theta = emcTrk->
theta();
232 int Module = 0;
233 if ( fabs(
cos( theta ) ) < 0.80 && eraw > 0.025 ) { Module = 1; }
234 if ( fabs(
cos( theta ) ) > 0.86 && fabs(
cos( theta ) ) < 0.92 && eraw > 0.05 )
235 { Module = 2; }
236 if ( Module == 0 ) continue;
237 iGam.push_back( ( *itTrk )->trackId() );
238 }
239
240 DTagTool trk;
242
243
244 int ntk;
245 double tagmass,
ebeam, tagmode, ksmass, dlte;
246
248 tagtrk.clear();
250 tagGam.clear();
251
252 HepLorentzVector tagp;
253
254 double mass_bc_temp, mass_kf_temp, kf_chi2_temp, mks_temp, mpi0_temp, ptag_temp;
255 int Charge_candidate_D = 0;
256 double EGam_max_0 = 0;
257
258 for ( int i1 = 0; i1 < 2; i1++ )
259 {
260 if ( Seperate_Charge == 2 )
261 {
262 Charge_candidate_D = Charge_default;
263 i1 = 2;
264 }
265 if ( Seperate_Charge == 1 ) { Charge_candidate_D = pow( -1, i1 ); }
266 if ( Seperate_Charge == 0 )
267 {
268 Charge_candidate_D = 0;
269 i1 = 2;
270 }
271
272 for ( int i = 0; i < 15; i++ )
273 {
274 EGam_max_0 = 0;
275 int mdslct = pow( 2., i );
276 Sing sing;
277 sing.
Mdset( event, evtRecTrkCol, iCharge_good, iGam, mdslct, Ebeam, PID_flag,
278 Charge_candidate_D );
280 if ( oktag )
281 {
282
283
284
285
288
289 if ( (
abs( tagmode ) == 11 ||
abs( tagmode ) == 15 ||
abs( tagmode ) == 19 ) )
290 {
291
292 for ( int i = evtRecEvent->totalCharged(); i < evtRecEvent->totalTracks(); i++ )
293 {
295 int itrk = ( *itTrk )->trackId();
296 if ( !( *itTrk )->isEmcShowerValid() ) continue;
297 RecEmcShower* emcTrk = ( *itTrk )->emcShower();
298
299 int emctdc = emcTrk->
time();
300 if ( emctdc > 14 || emctdc < 0 ) continue;
301
302 Hep3Vector emcpos( emcTrk->
x(), emcTrk->
y(), emcTrk->
z() );
303 double dang = 200.;
304 for ( int j = 0; j < tagtrk.size(); j++ )
305 {
307 if ( !( *jtTrk )->isExtTrackValid() ) continue;
308 RecExtTrack* extTrk = ( *jtTrk )->extTrack();
311 double angd = extpos.angle( emcpos );
312 if ( angd < dang ) dang = angd;
313 }
314 dang = dang * 180 / ( CLHEP::pi );
315 if ( fabs( dang ) < 20. ) continue;
316
317 double eraw = emcTrk->
energy();
318 if ( eraw > EGam_max_0 ) EGam_max_0 = eraw;
319 }
320 }
321
322 m_cosmic_ok = cosmic_ok;
323 m_EGam_max_0 = EGam_max_0;
324 m_nGood = iCharge_good.size();
325 m_nGam = iGam.size();
327 m_event = event;
328
332
333 m_tuple1->write();
334
335
336
337
338
339 }
340 }
341 }
342
343 return StatusCode::SUCCESS;
344}
HepGeom::Point3D< double > HepPoint3D
EvtRecTrackCol::iterator EvtRecTrackIterator
double cos(const BesAngle a)
const Hep3Vector emcPosition() const
const int emcVolumeNumber() const
const double theta() const
const HepSymMatrix err() const
const HepVector helix() const
......
virtual bool isVertexValid()=0
virtual double * SigmaPrimaryVertex()=0
virtual double * PrimaryVertex()=0
void Mdset(double event, SmartDataPtr< EvtRecTrackCol > evtRecTrkCol, Vint iGood, Vint iGam, int mdset, double Ebeam, int PID_flag, int Charge_candidate_D)
_EXTERN_ std::string EvtRecEvent
_EXTERN_ std::string EvtRecTrackCol