BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
DedxCalibEvent.cxx
Go to the documentation of this file.
1#include "GaudiKernel/INTupleSvc.h"
2#include "GaudiKernel/MsgStream.h"
3#include "GaudiKernel/SmartDataPtr.h"
4#include "GaudiKernel/StatusCode.h"
5
6#include "EvTimeEvent/RecEsTime.h"
7#include "EventModel/EventHeader.h"
8#include "Identifier/Identifier.h"
9#include "Identifier/MdcID.h"
10#include "MdcRecEvent/RecMdcDedx.h"
11#include "MdcRecEvent/RecMdcDedxHit.h"
12#include "MdcRecEvent/RecMdcHit.h"
13#include "MdcRecEvent/RecMdcKalHelixSeg.h"
14#include "MdcRecEvent/RecMdcKalTrack.h"
15#include "MdcRecEvent/RecMdcTrack.h"
16
17#include "EventModel/Event.h"
18#include "EventModel/EventModel.h"
19#include "EvtRecEvent/EvtRecEvent.h"
20#include "EvtRecEvent/EvtRecTrack.h"
21
22#include <TMath.h>
23
26
27typedef std::vector<int> Vint;
28
29using namespace std;
30using CLHEP::HepVector;
31static int evt_count( 0 ), evt_threshold( 0 );
32
33DedxCalibEvent::DedxCalibEvent( const std::string& name, ISvcLocator* pSvcLocator )
34 : DedxCalib( name, pSvcLocator ) {
35 // Declare the properties
36 declareProperty( "CutWire", cut_wire = -1 );
37 declareProperty( "Count", m_count = 1000000 );
38 declareProperty( "Gap", m_gap = 1 );
39}
40
42 MsgStream log( msgSvc(), name() );
43 log << MSG::INFO << "DedxCalibEvent::initializing()" << endmsg;
44
45 StatusCode status;
46 NTuplePtr nt1( ntupleSvc(), "FILE100/n103" );
47 if ( nt1 ) m_nt1 = nt1;
48 else
49 {
50 m_nt1 = ntupleSvc()->book( "FILE100/n103", CLID_ColumnWiseTuple, "dEdx per track" );
51 if ( m_nt1 )
52 {
53 status = m_nt1->addItem( "ptrk", m_ptrk );
54 status = m_nt1->addItem( "ptrk_t", m_ptrk_t );
55 status = m_nt1->addItem( "sintheta", m_sintheta );
56 status = m_nt1->addItem( "costheta", m_costheta );
57 status = m_nt1->addItem( "charge", m_charge );
58 status = m_nt1->addItem( "runNO", m_runNO );
59 status = m_nt1->addItem( "runFlag", m_runFlag );
60 status = m_nt1->addItem( "evtNO", m_evtNO );
61 status = m_nt1->addItem( "t0", m_t0 );
62 status = m_nt1->addItem( "trackId", m_trackId );
63 status = m_nt1->addItem( "poca_x", m_poca_x );
64 status = m_nt1->addItem( "poca_y", m_poca_y );
65 status = m_nt1->addItem( "poca_z", m_poca_z );
66 status = m_nt1->addItem( "recalg", m_recalg );
67 status = m_nt1->addItem( "nhit", m_nhit );
68 status = m_nt1->addItem( "nhits", m_nhits );
69 status = m_nt1->addItem( "usedhit", m_usedhit );
70
71 status = m_nt1->addItem( "ndedxhit", m_nphlisthit, 0, 100 );
72 status = m_nt1->addIndexedItem( "dEdx_hit", m_nphlisthit, m_dEdx_hit );
73 status = m_nt1->addIndexedItem( "pathlength_hit", m_nphlisthit, m_pathlength_hit );
74 status = m_nt1->addIndexedItem( "wid_hit", m_nphlisthit, m_wid_hit );
75 status = m_nt1->addIndexedItem( "layid_hit", m_nphlisthit, m_layid_hit );
76 status = m_nt1->addIndexedItem( "dd_in_hit", m_nphlisthit, m_dd_in_hit );
77 status = m_nt1->addIndexedItem( "eangle_hit", m_nphlisthit, m_eangle_hit );
78 status = m_nt1->addIndexedItem( "zhit_hit", m_nphlisthit, m_zhit_hit );
79
80 // status = m_nt1->addItem("dEdx_meas_hit", m_dEdx_meas_hit);
81 status = m_nt1->addItem( "dEdx_meas", m_dEdx_meas );
82 // status = m_nt1->addItem("dEdx_meas_esat", m_dEdx_meas_esat);
83 // status = m_nt1->addItem("dEdx_meas_norun", m_dEdx_meas_norun);
84
85 status = m_nt1->addItem( "type", m_parttype );
86 status = m_nt1->addItem( "chidedx_e", m_chidedxe );
87 status = m_nt1->addItem( "chidedx_mu", m_chidedxmu );
88 status = m_nt1->addItem( "chidedx_pi", m_chidedxpi );
89 status = m_nt1->addItem( "chidedx_k", m_chidedxk );
90 status = m_nt1->addItem( "chidedx_p", m_chidedxp );
91 status = m_nt1->addItem( "partid", 5, m_probpid );
92 status = m_nt1->addItem( "expectid", 5, m_expectid );
93 status = m_nt1->addItem( "sigmaid", 5, m_sigmaid );
94 }
95 }
96
97 NTuplePtr nt2( ntupleSvc(), "FILE100/n102" );
98 if ( nt2 ) m_nt2 = nt2;
99 else
100 {
101 m_nt2 = ntupleSvc()->book( "FILE100/n102", CLID_RowWiseTuple, "dE/dx per hit" );
102 if ( m_nt2 )
103 {
104 status = m_nt2->addItem( "charge", m_charge1 );
105 status = m_nt2->addItem( "adc_raw", m_phraw );
106 status = m_nt2->addItem( "exraw", m_exraw );
107 status = m_nt2->addItem( "runNO", m_runNO1 );
108 status = m_nt2->addItem( "evtNO", m_evtNO1 );
109 status = m_nt2->addItem( "runFlag", m_runFlag1 );
110 status = m_nt2->addItem( "wire", m_wire );
111 status = m_nt2->addItem( "doca_in", m_doca_in );
112 status = m_nt2->addItem( "doca_ex", m_doca_ex );
113 status = m_nt2->addItem( "driftdist", m_driftdist );
114 status = m_nt2->addItem( "eangle", m_eangle );
115 status = m_nt2->addItem( "zhit", m_zhit );
116 status = m_nt2->addItem( "costheta1", m_costheta1 );
117 status = m_nt2->addItem( "path_rphi", m_pathL );
118 status = m_nt2->addItem( "layer", m_layer );
119 status = m_nt2->addItem( "ptrk1", m_ptrk1 );
120 status = m_nt2->addItem( "ptrk_hit", m_ptrk_hit );
121 status = m_nt2->addItem( "t01", m_t01 );
122 status = m_nt2->addItem( "tdc_raw", m_tdc_raw );
123 status = m_nt2->addItem( "driftT", m_driftT );
124 status = m_nt2->addItem( "localwid", m_localwid );
125 status = m_nt2->addItem( "trackId1", m_trackId1 );
126 }
127 }
128}
129
131 MsgStream log( msgSvc(), name() );
132 log << MSG::INFO << "DedxCalibEvent::genNtuple()" << endmsg;
133
134 SmartDataPtr<Event::EventHeader> eventHeader( eventSvc(), "/Event/EventHeader" );
135 if ( !eventHeader )
136 {
137 log << MSG::INFO << "Could not find Event Header" << endmsg;
138 return;
139 }
140 int eventNO = eventHeader->eventNumber();
141 int runNO = eventHeader->runNumber();
142 // only save part of the events, in each cluster only m_count events saved, then jump with a
143 // gap
144 // std::cout << "eventNO " << eventNO << " evt_count " << evt_count << std::endl;
145 if ( eventNO < evt_threshold ) return;
146 evt_count++;
147 if ( evt_count == m_count )
148 {
149 evt_threshold = eventNO + m_gap;
150 evt_count = 0;
151 }
152 // std::cout << "evt_threshold " << evt_threshold << " evt_count " << evt_count <<
153 // std::endl;
154
155 log << MSG::INFO << "now begin the event: runNO= " << runNO << " eventNO= " << eventNO
156 << endmsg;
157
158 int runFlag = 0; // data type flag
159 if ( runNO < RUN0 ) runFlag = 0;
160 if ( runNO >= RUN1 && runNO < RUN2 ) runFlag = 1;
161 if ( runNO >= RUN2 && runNO < RUN3 ) runFlag = 2;
162 if ( runNO >= RUN3 && runNO < RUN4 ) runFlag = 3;
163 if ( runNO >= RUN4 && runNO < RUN5 ) runFlag = 4; // jpsi
164 if ( runNO >= RUN5 && runNO < RUN6 ) runFlag = 5; // psipp
165 if ( runNO >= RUN6 && runNO < RUN7 ) runFlag = 6; // psi4040, psip, jpsi...
166 if ( runNO >= RUN7 ) runFlag = 7; // psip
167
168 double tes = -999.0;
169 int esTimeflag = -1;
170 SmartDataPtr<RecEsTimeCol> aevtimeCol( eventSvc(), "/Event/Recon/RecEsTimeCol" );
171 if ( ( !aevtimeCol ) || ( aevtimeCol->size() == 0 ) )
172 {
173 tes = -9999.0;
174 esTimeflag = -1;
175 }
176 else
177 {
178 RecEsTimeCol::iterator iter_evt = aevtimeCol->begin();
179 for ( ; iter_evt != aevtimeCol->end(); iter_evt++ )
180 {
181 tes = ( *iter_evt )->getTest();
182 esTimeflag = ( *iter_evt )->getStat();
183 }
184 }
185 if ( runFlag == 2 )
186 {
187 if ( tes > 1000 ) return;
188 }
189 else if ( runFlag == 3 )
190 {
191 if ( tes > 700 ) return;
192 }
193 else
194 {
195 if ( tes > 1400 ) return;
196 }
197
198 SmartDataPtr<EvtRecEvent> evtRecEvent( eventSvc(), "/Event/EvtRec/EvtRecEvent" );
199 if ( !evtRecEvent )
200 {
201 log << MSG::ERROR << "EvtRecEvent not found" << endmsg;
202 return;
203 }
204
205 SmartDataPtr<EvtRecTrackCol> evtRecTrkCol( eventSvc(), "/Event/EvtRec/EvtRecTrackCol" );
206 if ( !evtRecTrkCol )
207 {
208 log << MSG::ERROR << "EvtRecTrackCol" << endmsg;
209 return;
210 }
211
212 Vint iGood;
213 iGood.clear();
214 int nCharge = 0;
215 double db = 0, dz = 0, pt0 = 0, charge0 = 0;
216 for ( int i = 0; i < evtRecEvent->totalCharged(); i++ )
217 {
218 EvtRecTrackIterator itTrk = evtRecTrkCol->begin() + i;
219 RecMdcDedx* it = ( *itTrk )->mdcDedx();
220 if ( it == 0 ) continue;
221 HepVector a;
222 // if((*itTrk)->isMdcKalTrackValid()) cout << "mdckaltrack is valid" << endl;
223 // else cout << "mdckaltrack is not valid" << endl;
224
225 if ( ( *itTrk )->isMdcKalTrackValid() )
226 {
227 RecMdcKalTrack* trk = it->getMdcKalTrack();
228 if ( ParticleFlag > -1 && ParticleFlag < 5 )
229 {
230 DstMdcKalTrack* dstTrk = trk;
231 a = dstTrk->getZHelix( ParticleFlag );
232 }
233 else a = trk->getZHelix();
234 }
235 else if ( ( *itTrk )->isMdcTrackValid() )
236 {
237 RecMdcTrack* trk = it->getMdcTrack();
238 a = trk->helix();
239 }
240 else continue;
241 db = a[0];
242 dz = a[3];
243 pt0 = fabs( 1.0 / a[2] );
244 charge0 = ( a[2] > 0 ) ? 1 : -1;
245
246 // cout<<"db: "<<db<<" dz: "<<dz<<" pt0: "<<pt0<<" charge0: "<<charge0<<endl;
247 if ( fabs( dz ) >= VZ0CUT ) continue;
248 if ( db >= VR0CUT ) continue;
249 if ( pt0 >= PT0HighCut ) continue;
250 if ( pt0 <= PT0LowCut ) continue;
251 iGood.push_back( it->trackId() );
252 nCharge += charge0;
253 }
254
255 double poca_x = 0, poca_y = 0, poca_z = 0;
256 float sintheta = 0, costheta = 0, ptrk = 0, ptrk_t = 0, charge = 0, trackId = 0;
257 int Nhit = 0, usedhit = 0, Nhits = 0, Nphlisthit = 0;
258 double dEdx_meas_hit = 0, dEdx_meas = 0, dEdx_meas_esat = 0, dEdx_meas_norun = 0;
259 double dEdx_hit[100] = { 0 }, pathlength_hit[100] = { 0 }, wid_hit[100] = { 0 },
260 layid_hit[100] = { 0 }, dd_in_hit[100] = { 0 }, eangle_hit[100] = { 0 },
261 zhit_hit[100] = { 0 };
262 int trk_recalg = -1;
263 Identifier mdcid;
264
265 for ( int i = 0; i < evtRecEvent->totalCharged(); i++ )
266 {
267 EvtRecTrackIterator itTrk = evtRecTrkCol->begin() + i;
268 RecMdcDedx* it = ( *itTrk )->mdcDedx();
269 if ( it == 0 ) continue;
270 bool flag = false;
271 for ( unsigned int i = 0; i < iGood.size(); i++ )
272 {
273 if ( it->trackId() == iGood[i] ) flag = true;
274 }
275 if ( flag == false ) continue;
276
277 HepVector a;
278 HepSymMatrix tkErrM;
279 if ( ( *itTrk )->isMdcKalTrackValid() )
280 {
281 poca_x = it->getMdcKalTrack()->x(); // get poca, default pid is pion; change pid using
282 // setPidType();
283 poca_y = it->getMdcKalTrack()->y();
284 poca_z = it->getMdcKalTrack()->z();
285
286 RecMdcKalTrack* trk = it->getMdcKalTrack();
287 if ( ParticleFlag > -1 && ParticleFlag < 5 )
288 {
289 DstMdcKalTrack* dstTrk = trk;
290 a = dstTrk->getFHelix( ParticleFlag );
291 tkErrM = dstTrk->getFError( ParticleFlag );
292 }
293 else
294 {
295 a = trk->getFHelix();
296 tkErrM = trk->getFError();
297 }
298 }
299 else if ( ( *itTrk )->isMdcTrackValid() )
300 {
301 poca_x = it->getMdcTrack()->x();
302 poca_y = it->getMdcTrack()->y();
303 poca_z = it->getMdcTrack()->z();
304
305 RecMdcTrack* trk = it->getMdcTrack();
306 a = trk->helix();
307 tkErrM = trk->err();
308 }
309 else continue;
310
311 sintheta = sin( M_PI_2 - atan( a[4] ) );
312 costheta = cos( M_PI_2 - atan( a[4] ) );
313 ptrk_t = 1.0 / fabs( a[2] );
314 ptrk = ptrk_t * sqrt( 1 + a[4] * a[4] );
315 charge = ( a[2] > 0 ) ? 1 : -1;
316
317 Nhit = it->numTotalHits(); // total hits on track used as sample;
318 Nhits = ( it->getVecDedxHits() ).size(); // dedx hits on this track, they are put in phlist
319 // if layid>3
320 usedhit = it->numGoodHits(); // hits after truncting phlist and used in cal dE/dx value;
321 trk_recalg = it->status();
322 trackId = it->trackId();
323
324 if ( m_eventType == "isBhabha" )
325 {
326 if ( runFlag == 3 && ( ptrk > 1.88 || ptrk < 1.80 ) ) continue;
327 if ( runFlag == 4 && ( ptrk > 1.72 || ptrk < 1.45 ) ) continue;
328 if ( runFlag == 5 && ( ptrk > 2.00 || ptrk < 1.70 ) ) continue;
329 if ( runFlag == 6 && ( ptrk > 1.90 || ptrk < 1.00 ) ) continue;
330 if ( runFlag == 7 && ( ptrk > 1.90 || ptrk < 0.90 ) ) continue;
331 if ( abs( costheta ) > 0.9 ) continue;
332
333 if ( Nhit < 20 ) continue;
334 if ( usedhit < 6 ) continue;
335 }
336
337 int layid = 0, localwid = 0, w0id = 0, wid = 0, lr = 0;
338 double p_hit = 0, adc_raw = 0, tdc_raw = 0, zhit = 0, driftd = 0, driftD = 0, driftT = 0,
339 dd_in = 0, dd_ex = 0, eangle = 0;
340 double ph = 0, pathlength = 0, rphi_path = 0;
341 long k = 0;
342
343 DedxHitRefVec gothits = it->getVecDedxHits();
344 DedxHitRefVec::iterator it_gothit = gothits.begin();
345 for ( ; it_gothit != gothits.end(); it_gothit++ )
346 {
347 if ( ( *it_gothit )->isMdcHitValid() )
348 {
349 RecMdcHit* itor = ( *it_gothit )->getMdcHit();
350 mdcid = itor->getMdcId();
351 layid = MdcID::layer( mdcid );
352 localwid = MdcID::wire( mdcid );
353 w0id = geosvc->Layer( layid )->Wirst();
354 wid = w0id + localwid;
355 adc_raw = itor->getAdc();
356 tdc_raw = itor->getTdc();
357 zhit = itor->getZhit();
358
359 lr = itor->getFlagLR();
360 if ( lr == 2 ) cout << "lr = " << lr << endl;
361 if ( lr == 0 || lr == 2 ) driftD = itor->getDriftDistLeft();
362 else driftD = itor->getDriftDistRight();
363 driftd = abs( driftD );
364 dd_in = itor->getDoca();
365 dd_ex = itor->getDoca();
366 if ( lr == 0 || lr == 2 )
367 {
368 dd_in = -abs( dd_in );
369 dd_ex = -abs( dd_ex );
370 }
371 if ( lr == 1 )
372 {
373 dd_in = abs( dd_in );
374 dd_ex = abs( dd_ex );
375 }
376 driftT = itor->getDriftT();
377 eangle = itor->getEntra();
378 eangle = eangle / M_PI;
379 }
380 else if ( ( *it_gothit )->isMdcKalHelixSegValid() )
381 {
382 RecMdcKalHelixSeg* itor = ( *it_gothit )->getMdcKalHelixSeg();
383 HepVector a_hit_in = itor->getHelixIncl();
384 p_hit = 1.0 / fabs( a_hit_in( 3 ) ) * sqrt( 1 + a_hit_in( 5 ) * a_hit_in( 5 ) );
385
386 mdcid = itor->getMdcId();
387 layid = MdcID::layer( mdcid );
388 localwid = MdcID::wire( mdcid );
389 w0id = geosvc->Layer( layid )->Wirst();
390 wid = w0id + localwid;
391 adc_raw = itor->getAdc();
392 tdc_raw = itor->getTdc();
393 zhit = itor->getZhit();
394
395 lr = itor->getFlagLR();
396 if ( lr == 2 ) cout << "lr = " << lr << endl;
397 driftD = itor->getDD();
398 driftd = abs( driftD );
399 driftT = itor->getDT();
400 dd_in = itor->getDocaIncl(); // getDocaIncl() include fit unused hit
401 dd_ex = itor->getDocaExcl(); // getDocaExcl() exclude fit unused hit
402 if ( lr == -1 || lr == 2 )
403 {
404 dd_in = dd_in;
405 dd_ex = dd_ex;
406 }
407 else if ( lr == 1 )
408 {
409 dd_in = -dd_in;
410 dd_ex = -dd_ex;
411 }
412 eangle = itor->getEntra();
413 eangle = eangle / M_PI;
414 }
415 else continue;
416
417 pathlength = ( *it_gothit )->getPathLength();
418 rphi_path = pathlength * sintheta;
419 ph = ( *it_gothit )->getDedx();
420 if ( layid > 3 )
421 {
422 dEdx_hit[k] = adc_raw;
423 pathlength_hit[k] = pathlength;
424 wid_hit[k] = wid;
425 layid_hit[k] = layid;
426 dd_in_hit[k] = dd_in;
427 eangle_hit[k] = eangle;
428 zhit_hit[k] = zhit;
429
430 k++;
431 }
432
433 // cout<<"begin to Fill Ntuple n102!!!!!!!!!"<<endl;
434 m_charge1 = charge;
435 m_t01 = tes;
436 m_driftT = driftT;
437 m_tdc_raw = tdc_raw;
438 m_phraw = adc_raw;
439 m_exraw = ph;
440 m_localwid = localwid;
441 m_wire = wid;
442 m_runNO1 = runNO;
443 m_evtNO1 = eventNO;
444 m_runFlag1 = runFlag;
445 m_doca_in = dd_in;
446 m_doca_ex = dd_ex;
447 m_driftdist = driftD;
448 m_eangle = eangle;
449 m_zhit = zhit;
450 m_costheta1 = costheta;
451 m_pathL = pathlength;
452 m_layer = layid;
453 m_ptrk1 = ptrk;
454 m_ptrk_hit = p_hit;
455 m_trackId1 = trackId;
456 StatusCode status;
457 if ( cut_wire > 0 )
458 {
459 if ( cut_wire == m_wire ) status = m_nt2->write();
460 }
461 else status = m_nt2->write();
462 if ( status.isFailure() ) log << MSG::ERROR << "Cannot fill Ntuple n102" << endmsg;
463 }
464
465 Nphlisthit = k; // dedx hits on this track, exclude the first 3 layers
466 dEdx_meas = it->probPH();
467 dEdx_meas_esat = it->getDedxEsat();
468 dEdx_meas_norun = it->getDedxNoRun();
469 dEdx_meas_hit = it->getDedxHit();
470
471 // cout<<"begin to Fill Ntuple n103!!!!!!!"<<endl;
472 m_poca_x = poca_x;
473 m_poca_y = poca_y;
474 m_poca_z = poca_z;
475 m_ptrk_t = ptrk_t;
476 m_ptrk = ptrk;
477 m_sintheta = sintheta;
478 m_costheta = costheta;
479 m_charge = charge;
480 m_runNO = runNO;
481 m_runFlag = runFlag;
482 m_evtNO = eventNO;
483 m_t0 = tes;
484 m_trackId = trackId;
485 m_recalg = trk_recalg;
486
487 m_nhit = Nhit;
488 m_nhits = Nhits;
489 m_nphlisthit = Nphlisthit;
490 m_usedhit = usedhit;
491 for ( int j = 0; j < Nphlisthit; j++ )
492 {
493 m_dEdx_hit[j] = dEdx_hit[j];
494 m_pathlength_hit[j] = pathlength_hit[j];
495 m_wid_hit[j] = wid_hit[j];
496 m_layid_hit[j] = layid_hit[j];
497 m_dd_in_hit[j] = dd_in_hit[j];
498 m_eangle_hit[j] = eangle_hit[j];
499 m_zhit_hit[j] = zhit_hit[j];
500 }
501
502 // m_dEdx_meas_hit = dEdx_meas_hit;
503 m_dEdx_meas = dEdx_meas;
504 // m_dEdx_meas_esat = dEdx_meas_esat;
505 // m_dEdx_meas_norun = dEdx_meas_norun;
506
507 m_parttype = it->particleId();
508 m_chidedxe = it->chiE();
509 m_chidedxmu = it->chiMu();
510 m_chidedxpi = it->chiPi();
511 m_chidedxk = it->chiK();
512 m_chidedxp = it->chiP();
513 for ( int i = 0; i < 5; i++ )
514 {
515 m_probpid[i] = it->getPidProb( i );
516 m_expectid[i] = it->getDedxExpect( i );
517 m_sigmaid[i] = it->getSigmaDedx( i );
518 }
519 StatusCode status;
520 if ( cut_wire < 0 ) status = m_nt1->write();
521 if ( status.isFailure() ) { log << MSG::ERROR << "Cannot fill Ntuple n103" << endmsg; }
522 }
523 // cout<<"track iteration ended!!!!!!!!!!"<<endl;
524}
DECLARE_COMPONENT(BesBdkRc)
static int evt_threshold(0)
const long int RUN5
const double VZ0CUT
const double PT0HighCut
const long int RUN6
const long int RUN2
const long int RUN7
const long int RUN1
const long int RUN4
const double VR0CUT
const double PT0LowCut
const long int RUN3
const long int RUN0
EvtRecTrackCol::iterator EvtRecTrackIterator
std::vector< int > Vint
Definition Gam4pikp.cxx:37
SmartRefVector< RecMdcDedxHit > DedxHitRefVec
INTupleSvc * ntupleSvc()
IMessageSvc * msgSvc()
#define M_PI
Definition TConstant.h:4
DedxCalibEvent(const std::string &name, ISvcLocator *pSvcLocator)
DedxCalib(const std::string &name, ISvcLocator *pSvcLocator)
Definition DedxCalib.cxx:12
int ParticleFlag
Definition DedxCalib.h:52
IMdcGeomSvc * geosvc
Definition DedxCalib.h:28
std::string m_eventType
Definition DedxCalib.h:55
const HepVector & getZHelix(const int pid) const
const HepSymMatrix & getFError(const int pid) const
const HepVector & getFHelix(const int pid) const
const HepSymMatrix err() const
const HepVector helix() const
......
static int layer(const Identifier &id)
Values of different levels (failure returns 0).
Definition MdcID.cxx:47
static int wire(const Identifier &id)
Definition MdcID.cxx:52