@@ -67,16 +67,24 @@ struct MyTrack : o2::tof::eventTimeTrackTest {
6767 float tofExpTimeDe () const { return mExpDe ; }
6868 double mSignalDouble = 0.0 ;
6969 float mEta = 0.0 ;
70+ float mPhi = 0.0 ;
7071 float mExpDe = 0 ;
7172 int mIsProb = 0 ;
7273 int mCh = -1 ;
74+ float mChi2 = 0 ;
75+ bool mHasTOF = false ;
76+ int mSource = -1 ;
77+ double mTrktime = 0 ;
78+ double mTrktimeRes = 0 ;
79+ float mDx = 0 ;
80+ float mDz = 0 ;
7381};
7482
7583using TimeSlewing = o2::dataformats::CalibTimeSlewingParamTOF;
7684
7785bool MyFilter (const MyTrack& tr)
7886{
79- return (tr.mP < 2.0 && tr.mEta > o2::tof::Utils::mEtaMin && tr.mEta < o2::tof::Utils::mEtaMax );
87+ return (tr.mP < 2.0 && tr.mEta > o2::tof::Utils::mEtaMin && tr.mEta < o2::tof::Utils::mEtaMax && tr. mHasTOF );
8088} // accept all
8189
8290namespace o2
@@ -92,7 +100,7 @@ class TOFEventTimeChecker : public Task
92100 void init (InitContext& ic) final ;
93101 void run (ProcessingContext& pc) final ;
94102 void endOfStream (framework::EndOfStreamContext& ec) final ;
95- void fillMatching (GID gid);
103+ void fillMatching (GID gid, float time0, float time0res );
96104 void processEvent (std::vector<MyTrack>& tracks);
97105
98106 private:
@@ -132,6 +140,8 @@ class TOFEventTimeChecker : public Task
132140 float mP = 0 ;
133141 float mPt = 0 ;
134142 float mEta = 0 ;
143+ float mPhi = 0 ;
144+ float mChi2 = 0 ;
135145 float mL = 0 ;
136146 float mTof = 0 ;
137147 float mT0 = 0 ;
@@ -140,7 +150,12 @@ class TOFEventTimeChecker : public Task
140150 float mExpPi = 0 ;
141151 float mExpKa = 0 ;
142152 float mExpPr = 0 ;
153+ float mDx = 0 ;
154+ float mDz = 0 ;
143155 int mIsProb = 0 ;
156+ int mSource = -1 ;
157+ float mTrktime = 0 ;
158+ float mTrktimeRes = 0 ;
144159 RecoContainer mRecoData ;
145160 std::shared_ptr<DataRequest> mDataRequest ;
146161 bool mUseMC = true ;
@@ -153,6 +168,7 @@ void TOFEventTimeChecker::processEvent(std::vector<MyTrack>& tracks)
153168 for (auto & track : tracks) {
154169 if (!o2::tof::Utils::hasFillScheme ()) {
155170 track.mSignal = float (track.mSignalDouble - double (o2::tof::Geo::BC_TIME_INPS) * nBC);
171+ track.mTrktime = (track.mTrktime - double (o2::tof::Geo::BC_TIME_INPS) * nBC);
156172 } else {
157173 double localTime = track.mSignalDouble ;
158174
@@ -161,6 +177,11 @@ void TOFEventTimeChecker::processEvent(std::vector<MyTrack>& tracks)
161177 bcStarOrbit = (bcStarOrbit / o2::constants::lhc::LHCMaxBunches) * o2::constants::lhc::LHCMaxBunches; // truncation
162178 localTime -= bcStarOrbit * o2::tof::Geo::BC_TIME_INPS;
163179 track.mSignal = o2::tof::Utils::subtractInteractionBC (localTime);
180+ localTime = track.mTrktime ;
181+ bcStarOrbit = int (localTime * o2::tof::Geo::BC_TIME_INPS_INV);
182+ bcStarOrbit = (bcStarOrbit / o2::constants::lhc::LHCMaxBunches) * o2::constants::lhc::LHCMaxBunches; // truncation
183+ localTime -= bcStarOrbit * o2::tof::Geo::BC_TIME_INPS;
184+ track.mTrktime = o2::tof::Utils::subtractInteractionBC (localTime);
164185 }
165186 }
166187
@@ -190,13 +211,20 @@ void TOFEventTimeChecker::processEvent(std::vector<MyTrack>& tracks)
190211 mP = track.mP ;
191212 mPt = track.mPt ;
192213 mEta = track.mEta ;
214+ mSource = track.mSource ;
215+ mPhi = track.mPhi ;
216+ mChi2 = track.mChi2 ;
193217 mL = track.mLength ;
194218 mTof = track.tofSignal ();
195219 mExpDe = track.tofExpTimeDe ();
196220 mExpPi = track.tofExpTimePi ();
197221 mExpKa = track.tofExpTimeKa ();
198222 mExpPr = track.tofExpTimePr ();
199223 mIsProb = track.mIsProb ;
224+ mTrktime = track.mTrktime ;
225+ mTrktimeRes = track.mTrktimeRes ;
226+ mDx = track.mDx ;
227+ mDz = track.mDz ;
200228
201229#ifdef TDEBUG
202230 mTree ->Fill ();
@@ -250,85 +278,154 @@ void TOFEventTimeChecker::processEvent(std::vector<MyTrack>& tracks)
250278 }
251279}
252280
253- void TOFEventTimeChecker::fillMatching (GID gid)
281+ void TOFEventTimeChecker::fillMatching (GID gid, float time0, float time0res )
254282{
283+ MyTrack trk;
284+ trk.mHasTOF = true ;
285+
255286 if (!gid.includesDet (DetID::TOF)) {
256- return ;
287+ trk. mHasTOF = false ;
257288 }
258- const o2::dataformats::MatchInfoTOF& match = mRecoData .getTOFMatch (gid);
259- const o2::track::TrackLTIntegral& info = match.getLTIntegralOut ();
260289
261- if (info.getL () < 370 ) {
262- return ;
263- }
290+ trk.mTrktime = time0 * 1E6 ;
291+ trk.mTrktimeRes = time0res * 1E6 ;
292+
293+ trk.mDx = 0 ;
294+ trk.mDz = 0 ;
264295
265- MyTrack trk;
266296 int trksource = 5 ;
267297 if (gid.getSource () == GID::TPCTOF) {
298+ const o2::dataformats::MatchInfoTOF& match = mRecoData .getTOFMatch (gid);
268299 const auto & array = mRecoData .getTPCTracks ();
269300 GID gTrackId = match.getTrackRef ();
270301 const auto & srctrk = array[gTrackId .getIndex ()];
271302 trk.mPt = srctrk.getPt ();
272303 trk.mP = srctrk.getP ();
273304 trk.mEta = srctrk.getEta ();
305+ trk.mPhi = srctrk.getPhi ();
306+ trk.mDx = match.getDXatTOF ();
307+ trk.mDz = match.getDZatTOF ();
308+ trksource = 0 ;
309+ } else if (gid.getSource () == GID::TPC) {
310+ const o2::dataformats::MatchInfoTOF& match = mRecoData .getTOFMatch (gid);
311+ const auto & array = mRecoData .getTPCTracks ();
312+ GID gTrackId = gid;
313+ const auto & srctrk = array[gTrackId .getIndex ()];
314+ trk.mPt = srctrk.getPt ();
315+ trk.mP = srctrk.getP ();
316+ trk.mEta = srctrk.getEta ();
317+ trk.mPhi = srctrk.getPhi ();
274318 trksource = 0 ;
275319 } else if (gid.getSource () == GID::ITSTPCTOF) {
320+ const o2::dataformats::MatchInfoTOF& match = mRecoData .getTOFMatch (gid);
276321 const auto & array = mRecoData .getTPCITSTracks ();
277322 GID gTrackId = match.getTrackRef ();
278323 const auto & srctrk = array[gTrackId .getIndex ()];
279324 trk.mPt = srctrk.getPt ();
280325 trk.mP = srctrk.getP ();
281326 trk.mEta = srctrk.getEta ();
327+ trk.mPhi = srctrk.getPhi ();
328+ trksource = 1 ;
329+ trk.mTrktime = srctrk.getTimeMUS ().getTimeStamp () * 1E6 ;
330+ trk.mTrktimeRes = srctrk.getTimeMUS ().getTimeStampError () * 1E6 ;
331+ trk.mDx = match.getDXatTOF ();
332+ trk.mDz = match.getDZatTOF ();
333+ } else if (gid.getSource () == GID::ITSTPC) {
334+ const auto & array = mRecoData .getTPCITSTracks ();
335+ GID gTrackId = gid; // match.getTrackRef();
336+ const auto & srctrk = array[gTrackId .getIndex ()];
337+ trk.mPt = srctrk.getPt ();
338+ trk.mP = srctrk.getP ();
339+ trk.mEta = srctrk.getEta ();
340+ trk.mPhi = srctrk.getPhi ();
282341 trksource = 1 ;
342+ trk.mTrktime = srctrk.getTimeMUS ().getTimeStamp () * 1E6 ;
343+ trk.mTrktimeRes = srctrk.getTimeMUS ().getTimeStampError () * 1E6 ;
283344 } else if (gid.getSource () == GID::TPCTRDTOF) {
345+ const o2::dataformats::MatchInfoTOF& match = mRecoData .getTOFMatch (gid);
284346 const auto & array = mRecoData .getTPCTRDTracks <o2::trd::TrackTRD>();
285347 GID gTrackId = match.getTrackRef ();
286348 const auto & srctrk = array[gTrackId .getIndex ()];
287349 trk.mPt = srctrk.getPt ();
288350 trk.mP = srctrk.getP ();
289351 trk.mEta = srctrk.getEta ();
352+ trk.mPhi = srctrk.getPhi ();
290353 trksource = 2 ;
354+ trk.mDx = match.getDXatTOF ();
355+ trk.mDz = match.getDZatTOF ();
291356 } else if (gid.getSource () == GID::ITSTPCTRDTOF) {
357+ const o2::dataformats::MatchInfoTOF& match = mRecoData .getTOFMatch (gid);
292358 const auto & array = mRecoData .getITSTPCTRDTracks <o2::trd::TrackTRD>();
293359 GID gTrackId = match.getTrackRef ();
294360 const auto & srctrk = array[gTrackId .getIndex ()];
295361 trk.mPt = srctrk.getPt ();
296362 trk.mP = srctrk.getP ();
297363 trk.mEta = srctrk.getEta ();
364+ trk.mPhi = srctrk.getPhi ();
298365 trksource = 3 ;
366+ trk.mDx = match.getDXatTOF ();
367+ trk.mDz = match.getDZatTOF ();
299368 }
300369
370+ trk.mSource = trksource;
371+
301372 const char * sources[5 ] = {" TPC" , " ITS-TPC" , " TPC-TRD" , " ITS-TPC-TRD" , " NONE" };
302373
303- trk.mExpDe = info.getTOF (5 ); // el
304- trk.expTimes [0 ] = info.getTOF (2 ); // pi
305- trk.expTimes [1 ] = info.getTOF (3 ); // ka
306- trk.expTimes [2 ] = info.getTOF (4 ); // pr
307- trk.expSigma [0 ] = 120 ; // dummy resolution (to be updated)
308- trk.expSigma [1 ] = 120 ; // dummy resolution (to be updated)
309- trk.expSigma [2 ] = 120 ; // dummy resolution (to be updated)
310-
311- int tofcl = match.getIdxTOFCl ();
312- // trk.mSignal = mTOFClustersArrayInp[tofcl].getTime();
313- double tofsignal = match.getSignal ();
314-
315- trk.mSignalDouble = tofsignal;
316-
317- // trk.mSignal = match.getSignal();
318- trk.mTOFChi2 = match.getChi2 ();
319- trk.mLength = info.getL ();
320- // trk.mHypo = 0;
321- trk.mCh = mTOFClustersArrayInp [tofcl].getMainContributingChannel ();
322-
323- if (mSlewing ) { // let's calibrate
324- trk.mIsProb = mSlewing ->isProblematic (trk.mCh );
325- if (mSlewing ->isProblematic (trk.mCh )) {
326- // LOG(DEBUG) << "skip channel " << trk.mCh << " since problematic";
327- // return;
374+ if (trk.mHasTOF ) {
375+ const o2::dataformats::MatchInfoTOF& match = mRecoData .getTOFMatch (gid);
376+ const o2::track::TrackLTIntegral& info = match.getLTIntegralOut ();
377+
378+ if (info.getL () < 370 ) {
379+ // trk.mHasTOF = false;
380+ }
381+
382+ trk.mExpDe = info.getTOF (5 ); // el
383+ trk.expTimes [0 ] = info.getTOF (2 ); // pi
384+ trk.expTimes [1 ] = info.getTOF (3 ); // ka
385+ trk.expTimes [2 ] = info.getTOF (4 ); // pr
386+ trk.expSigma [0 ] = 120 ; // dummy resolution (to be updated)
387+ trk.expSigma [1 ] = 120 ; // dummy resolution (to be updated)
388+ trk.expSigma [2 ] = 120 ; // dummy resolution (to be updated)
389+
390+ trk.mChi2 = match.getChi2 ();
391+
392+ int tofcl = match.getIdxTOFCl ();
393+ // trk.mSignal = mTOFClustersArrayInp[tofcl].getTime();
394+ double tofsignal = match.getSignal ();
395+
396+ trk.mSignalDouble = tofsignal;
397+
398+ // trk.mSignal = match.getSignal();
399+ trk.mTOFChi2 = match.getChi2 ();
400+ trk.mLength = info.getL ();
401+ // trk.mHypo = 0;
402+ trk.mCh = mTOFClustersArrayInp [tofcl].getMainContributingChannel ();
403+
404+ if (mSlewing ) { // let's calibrate
405+ trk.mIsProb = mSlewing ->isProblematic (trk.mCh );
406+ if (mSlewing ->isProblematic (trk.mCh )) {
407+ // LOG(DEBUG) << "skip channel " << trk.mCh << " since problematic";
408+ // return;
409+ }
410+ float tot = mTOFClustersArrayInp [tofcl].getTot ();
411+ trk.mSignalDouble -= mSlewing ->evalTimeSlewing (trk.mCh , tot);
412+ LOG (DEBUG) << " calibration -> " << mSlewing ->evalTimeSlewing (trk.mCh , tot);
328413 }
329- float tot = mTOFClustersArrayInp [tofcl].getTot ();
330- trk.mSignalDouble -= mSlewing ->evalTimeSlewing (trk.mCh , tot);
331- LOG (DEBUG) << " calibration -> " << mSlewing ->evalTimeSlewing (trk.mCh , tot);
414+ }
415+ if (!trk.mHasTOF ) {
416+ trk.mExpDe = 0 ;
417+ trk.expTimes [0 ] = 0 ;
418+ trk.expTimes [1 ] = 0 ;
419+ trk.expTimes [2 ] = 0 ;
420+ trk.expSigma [0 ] = 0 ; // dummy resolution (to be updated)
421+ trk.expSigma [1 ] = 0 ; // dummy resolution (to be updated)
422+ trk.expSigma [2 ] = 0 ; // dummy resolution (to be updated)
423+ trk.mSignalDouble = time0 * 1E6 ;
424+ trk.mTOFChi2 = 9999 ;
425+ trk.mLength = 0 ;
426+ trk.mCh = -1 ;
427+ trk.mChi2 = 0 ;
428+ trk.mIsProb = 0 ;
332429 }
333430
334431 mMyTracks .push_back (trk);
@@ -390,11 +487,18 @@ void TOFEventTimeChecker::init(InitContext& ic)
390487 mTree ->Branch (" isProb" , &mIsProb , " isProb/I" );
391488 mTree ->Branch (" p" , &mP , " p/F" );
392489 mTree ->Branch (" pt" , &mPt , " pt/F" );
490+ mTree ->Branch (" source" , &mSource , " source/I" );
393491 mTree ->Branch (" eta" , &mEta , " eta/F" );
492+ mTree ->Branch (" phi" , &mPhi , " phi/F" );
493+ mTree ->Branch (" chi2" , &mChi2 , " chi2/F" );
394494 mTree ->Branch (" l" , &mL , " l/F" );
395495 mTree ->Branch (" tof" , &mTof , " tof/F" );
396496 mTree ->Branch (" t0" , &mT0 , " t0/F" );
397497 mTree ->Branch (" t0res" , &mT0Res , " t0res/F" );
498+ mTree ->Branch (" trkTime" , &mTrktime , " trkTime/F" );
499+ mTree ->Branch (" trkTimeRes" , &mTrktimeRes , " trkTimeRes/F" );
500+ mTree ->Branch (" dx" , &mDx , " dx/F" );
501+ mTree ->Branch (" dz" , &mDz , " dz/F" );
398502 mTree ->Branch (" expDe" , &mExpDe , " expDe/F" );
399503 mTree ->Branch (" expPi" , &mExpPi , " expPi/F" );
400504 mTree ->Branch (" expKa" , &mExpKa , " expKa/F" );
@@ -427,7 +531,7 @@ void TOFEventTimeChecker::run(ProcessingContext& pc)
427531 }
428532
429533 auto creator = [this ](auto & trk, GID gid, float time0, float terr) {
430- this ->fillMatching (gid);
534+ this ->fillMatching (gid, time0, terr );
431535 return true ;
432536 };
433537 mRecoData .createTracksVariadic (creator);
0 commit comments