42 MsgStream log(
msgSvc(), name() );
43 log << MSG::INFO <<
"DedxCalibEvent::initializing()" << endmsg;
46 NTuplePtr nt1(
ntupleSvc(),
"FILE100/n103" );
47 if ( nt1 ) m_nt1 = nt1;
50 m_nt1 =
ntupleSvc()->book(
"FILE100/n103", CLID_ColumnWiseTuple,
"dEdx per track" );
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 );
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 );
81 status = m_nt1->addItem(
"dEdx_meas", m_dEdx_meas );
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 );
97 NTuplePtr nt2(
ntupleSvc(),
"FILE100/n102" );
98 if ( nt2 ) m_nt2 = nt2;
101 m_nt2 =
ntupleSvc()->book(
"FILE100/n102", CLID_RowWiseTuple,
"dE/dx per hit" );
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 );
131 MsgStream log(
msgSvc(), name() );
132 log << MSG::INFO <<
"DedxCalibEvent::genNtuple()" << endmsg;
134 SmartDataPtr<Event::EventHeader> eventHeader( eventSvc(),
"/Event/EventHeader" );
137 log << MSG::INFO <<
"Could not find Event Header" << endmsg;
140 int eventNO = eventHeader->eventNumber();
141 int runNO = eventHeader->runNumber();
155 log << MSG::INFO <<
"now begin the event: runNO= " << runNO <<
" eventNO= " << eventNO
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;
164 if ( runNO >=
RUN5 && runNO <
RUN6 ) runFlag = 5;
165 if ( runNO >=
RUN6 && runNO <
RUN7 ) runFlag = 6;
166 if ( runNO >=
RUN7 ) runFlag = 7;
170 SmartDataPtr<RecEsTimeCol> aevtimeCol( eventSvc(),
"/Event/Recon/RecEsTimeCol" );
171 if ( ( !aevtimeCol ) || ( aevtimeCol->size() == 0 ) )
178 RecEsTimeCol::iterator iter_evt = aevtimeCol->begin();
179 for ( ; iter_evt != aevtimeCol->end(); iter_evt++ )
181 tes = ( *iter_evt )->getTest();
182 esTimeflag = ( *iter_evt )->getStat();
187 if ( tes > 1000 )
return;
189 else if ( runFlag == 3 )
191 if ( tes > 700 )
return;
195 if ( tes > 1400 )
return;
198 SmartDataPtr<EvtRecEvent> evtRecEvent( eventSvc(),
"/Event/EvtRec/EvtRecEvent" );
201 log << MSG::ERROR <<
"EvtRecEvent not found" << endmsg;
205 SmartDataPtr<EvtRecTrackCol> evtRecTrkCol( eventSvc(),
"/Event/EvtRec/EvtRecTrackCol" );
208 log << MSG::ERROR <<
"EvtRecTrackCol" << endmsg;
215 double db = 0, dz = 0, pt0 = 0, charge0 = 0;
216 for (
int i = 0; i < evtRecEvent->totalCharged(); i++ )
220 if ( it == 0 )
continue;
225 if ( ( *itTrk )->isMdcKalTrackValid() )
235 else if ( ( *itTrk )->isMdcTrackValid() )
243 pt0 = fabs( 1.0 / a[2] );
244 charge0 = ( a[2] > 0 ) ? 1 : -1;
247 if ( fabs( dz ) >=
VZ0CUT )
continue;
248 if ( db >=
VR0CUT )
continue;
251 iGood.push_back( it->
trackId() );
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 };
265 for (
int i = 0; i < evtRecEvent->totalCharged(); i++ )
269 if ( it == 0 )
continue;
271 for (
unsigned int i = 0; i < iGood.size(); i++ )
275 if (
flag ==
false )
continue;
279 if ( ( *itTrk )->isMdcKalTrackValid() )
299 else if ( ( *itTrk )->isMdcTrackValid() )
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;
321 trk_recalg = it->
status();
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;
333 if ( Nhit < 20 )
continue;
334 if ( usedhit < 6 )
continue;
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;
344 DedxHitRefVec::iterator it_gothit = gothits.begin();
345 for ( ; it_gothit != gothits.end(); it_gothit++ )
347 if ( ( *it_gothit )->isMdcHitValid() )
349 RecMdcHit* itor = ( *it_gothit )->getMdcHit();
353 w0id =
geosvc->Layer( layid )->Wirst();
354 wid = w0id + localwid;
360 if ( lr == 2 ) cout <<
"lr = " << lr << endl;
363 driftd =
abs( driftD );
366 if ( lr == 0 || lr == 2 )
368 dd_in = -
abs( dd_in );
369 dd_ex = -
abs( dd_ex );
373 dd_in =
abs( dd_in );
374 dd_ex =
abs( dd_ex );
378 eangle = eangle /
M_PI;
380 else if ( ( *it_gothit )->isMdcKalHelixSegValid() )
384 p_hit = 1.0 / fabs( a_hit_in( 3 ) ) * sqrt( 1 + a_hit_in( 5 ) * a_hit_in( 5 ) );
389 w0id =
geosvc->Layer( layid )->Wirst();
390 wid = w0id + localwid;
396 if ( lr == 2 ) cout <<
"lr = " << lr << endl;
397 driftD = itor->
getDD();
398 driftd =
abs( driftD );
399 driftT = itor->
getDT();
402 if ( lr == -1 || lr == 2 )
413 eangle = eangle /
M_PI;
417 pathlength = ( *it_gothit )->getPathLength();
418 rphi_path = pathlength * sintheta;
419 ph = ( *it_gothit )->getDedx();
422 dEdx_hit[k] = adc_raw;
423 pathlength_hit[k] = pathlength;
425 layid_hit[k] = layid;
426 dd_in_hit[k] = dd_in;
427 eangle_hit[k] = eangle;
440 m_localwid = localwid;
444 m_runFlag1 = runFlag;
447 m_driftdist = driftD;
450 m_costheta1 = costheta;
451 m_pathL = pathlength;
455 m_trackId1 = trackId;
459 if (
cut_wire == m_wire ) status = m_nt2->write();
461 else status = m_nt2->write();
462 if ( status.isFailure() ) log << MSG::ERROR <<
"Cannot fill Ntuple n102" << endmsg;
477 m_sintheta = sintheta;
478 m_costheta = costheta;
485 m_recalg = trk_recalg;
489 m_nphlisthit = Nphlisthit;
491 for (
int j = 0; j < Nphlisthit; j++ )
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];
503 m_dEdx_meas = dEdx_meas;
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++ )
520 if (
cut_wire < 0 ) status = m_nt1->write();
521 if ( status.isFailure() ) { log << MSG::ERROR <<
"Cannot fill Ntuple n103" << endmsg; }