@@ -210,13 +210,13 @@ bool MatchTOF::prepareTPCData()
210210 if (std::abs (trk.getQ2Pt ()) > mMaxInvPt ) {
211211 return true ;
212212 }
213- this ->addTPCSeed (trk, gid);
213+ this ->addTPCSeed (trk, gid, time0, terr );
214214 }
215215 if constexpr (isTPCITSTrack<decltype (trk)>()) {
216216 if (trk.getParamOut ().getX () < o2::constants::geom::XTPCOuterRef - 1 .) {
217217 return true ;
218218 }
219- this ->addITSTPCSeed (trk, gid);
219+ this ->addITSTPCSeed (trk, gid, time0, terr );
220220 }
221221 if constexpr (isTRDTrack<decltype (trk)>()) {
222222 this ->addTRDSeed (trk, gid, time0, terr);
@@ -268,14 +268,16 @@ bool MatchTOF::prepareTPCData()
268268 return true ;
269269}
270270// ______________________________________________
271- void MatchTOF::addITSTPCSeed (const o2::dataformats::TrackTPCITS& _tr, o2::dataformats::GlobalTrackID srcGID)
271+ void MatchTOF::addITSTPCSeed (const o2::dataformats::TrackTPCITS& _tr, o2::dataformats::GlobalTrackID srcGID, float time0, float terr )
272272{
273273 mIsITSTPCused = true ;
274274
275275 auto trc = _tr.getParamOut ();
276276 o2::track::TrackLTIntegral intLT0 = _tr.getLTIntegralOut ();
277277
278- addConstrainedSeed (trc, srcGID, intLT0, _tr.getTimeMUS ());
278+ timeEst ts (time0, terr);
279+
280+ addConstrainedSeed (trc, srcGID, intLT0, ts);
279281}
280282// ______________________________________________
281283void MatchTOF::addConstrainedSeed (o2::track::TrackParCov& trc, o2::dataformats::GlobalTrackID srcGID, o2::track::TrackLTIntegral intLT0, timeEst timeMUS)
@@ -342,7 +344,7 @@ void MatchTOF::addTRDSeed(const o2::trd::TrackTRD& _tr, o2::dataformats::GlobalT
342344 addConstrainedSeed (trc, srcGID, intLT0, ts);
343345}
344346// ______________________________________________
345- void MatchTOF::addTPCSeed (const o2::tpc::TrackTPC& _tr, o2::dataformats::GlobalTrackID srcGID)
347+ void MatchTOF::addTPCSeed (const o2::tpc::TrackTPC& _tr, o2::dataformats::GlobalTrackID srcGID, float time0, float terr )
346348{
347349 mIsTPCused = true ;
348350
@@ -383,11 +385,20 @@ void MatchTOF::addTPCSeed(const o2::tpc::TrackTPC& _tr, o2::dataformats::GlobalT
383385 return ;
384386 }
385387
386- timeInfo.setTimeStamp (_tr.getTime0 () * mTPCTBinMUS );
388+ float trackTime0 = _tr.getTime0 () * mTPCTBinMUS ;
389+
387390 timeInfo.setTimeStampError ((_tr.getDeltaTBwd () + 5 ) * mTPCTBinMUS + extraErr);
388- mSideTPC .push_back (_tr.hasASideClustersOnly () ? 1 : (_tr.hasCSideClustersOnly () ? -1 : 0 ));
389391 mExtraTPCFwdTime .push_back ((_tr.getDeltaTFwd () + 5 ) * mTPCTBinMUS + extraErr);
390392
393+ // timeInfo.setTimeStampError(trackTime0 - time0 + terr + extraErr);
394+ // mExtraTPCFwdTime.push_back(time0 + terr - trackTime0 + extraErr);
395+
396+ timeInfo.setTimeStamp (trackTime0);
397+ mSideTPC .push_back (_tr.hasASideClustersOnly () ? 1 : (_tr.hasCSideClustersOnly () ? -1 : 0 ));
398+
399+ // printf("time0 %f -> %f (diff = %f, err = %f)\n",trackTime0, time0, trackTime0 - time0, terr);
400+ // printf("time errors %f,%f -> %f,%f\n",(_tr.getDeltaTBwd() + 5) * mTPCTBinMUS,(_tr.getDeltaTFwd() + 5) * mTPCTBinMUS,trackTime0 - time0 + terr, time0 + terr - trackTime0);
401+
391402 trc.getXYZGlo (globalPos);
392403 int sector = o2::math_utils::angle2Sector (TMath::ATan2 (globalPos[1 ], globalPos[0 ]));
393404
@@ -496,12 +507,14 @@ void MatchTOF::doMatching(int sec)
496507 auto & trackWork = mTracksWork [type][cacheTrk[itrk]];
497508 auto & trefTrk = trackWork.first ;
498509 auto & intLT = mLTinfos [type][cacheTrk[itrk]];
510+ float timeShift = intLT.getL () * 33.35641 ; // integrated time for 0.75 beta particles in ps, to take into account the t.o.f. delay with respect the interaction BC
511+ // using beta=0.75 to cover beta range [0.59 , 1.04] also for a 8 m track lenght with a 10 ns track resolution (TRD)
499512
500513 // Printf("intLT (before doing anything): length = %f, time (Pion) = %f", intLT.getL(), intLT.getTOF(o2::track::PID::Pion));
501- float minTrkTime = (trackWork.second .getTimeStamp () - mSigmaTimeCut * trackWork.second .getTimeStampError ()) * 1 .E6 ; // minimum time in ps
502- float maxTrkTime = (trackWork.second .getTimeStamp () + mSigmaTimeCut * trackWork.second .getTimeStampError ()) * 1 .E6 ; // maximum time in ps
503- int istep = 1 ; // number of steps
504- float step = 1.0 ; // step size in cm
514+ float minTrkTime = (trackWork.second .getTimeStamp () - mSigmaTimeCut * trackWork.second .getTimeStampError ()) * 1 .E6 + timeShift; // minimum time in ps
515+ float maxTrkTime = (trackWork.second .getTimeStamp () + mSigmaTimeCut * trackWork.second .getTimeStampError ()) * 1 .E6 + timeShift + 100E3 ; // maximum time in ps + 100 ns for slow tracks (beta->0.2)
516+ int istep = 1 ; // number of steps
517+ float step = 1.0 ; // step size in cm
505518
506519 // uncomment for local debug
507520 /*
@@ -694,7 +707,7 @@ void MatchTOF::doMatching(int sec)
694707 foundCluster = true ;
695708 // set event indexes (to be checked)
696709 int eventIndexTOFCluster = mTOFClusSectIndexCache [indices[0 ]][itof];
697- mMatchedTracksPairs .emplace_back (cacheTrk[itrk], eventIndexTOFCluster, mTOFClusWork [cacheTOF[itof]].getTime (), chi2, trkLTInt[iPropagation], mTrackGid [type][cacheTrk[itrk]], type, (trefTOF.getTime () - (minTrkTime + maxTrkTime) * 0.5 ) * 1E-6 , 0 ., resX, resZ); // TODO: check if this is correct!
710+ mMatchedTracksPairs .emplace_back (cacheTrk[itrk], eventIndexTOFCluster, mTOFClusWork [cacheTOF[itof]].getTime (), chi2, trkLTInt[iPropagation], mTrackGid [type][cacheTrk[itrk]], type, (trefTOF.getTime () - (minTrkTime + maxTrkTime - 100E3 ) * 0.5 ) * 1E-6 , 0 ., resX, resZ); // subracting 100 ns to max track which was artificially added
698711 }
699712 }
700713 }
@@ -742,14 +755,17 @@ void MatchTOF::doMatchingForTPC(int sec)
742755 auto & trefTrk = trackWork.first ;
743756 auto & intLT = mLTinfos [trkType::UNCONS][cacheTrk[itrk]];
744757
758+ float timeShift = intLT.getL () * 33.35641 ; // integrated time for 0.75 beta particles in ps, to take into account the t.o.f. delay with respect the interaction BC
759+ // using beta=0.75 to cover beta range [0.59 , 1.04] also for a 8 m track lenght with a 10 ns track resolution (TRD)
760+
745761 BCcand.clear ();
746762 nStripsCrossedInPropagation.clear ();
747763
748764 int side = mSideTPC [cacheTrk[itrk]];
749765 // look at BC candidates for the track
750- double minTrkTime = (trackWork.second .getTimeStamp () - trackWork.second .getTimeStampError ()) * 1 .E6 ; // minimum time in ps
751- minTrkTime = int (minTrkTime / BCgranularity) * BCgranularity; // align min to a BC
752- double maxTrkTime = (trackWork.second .getTimeStamp () + mExtraTPCFwdTime [cacheTrk[itrk]]) * 1 .E6 ; // maximum time in ps
766+ double minTrkTime = (trackWork.second .getTimeStamp () - trackWork.second .getTimeStampError ()) * 1 .E6 + timeShift ; // minimum time in ps
767+ minTrkTime = int (minTrkTime / BCgranularity) * BCgranularity; // align min to a BC
768+ double maxTrkTime = (trackWork.second .getTimeStamp () + mExtraTPCFwdTime [cacheTrk[itrk]]) * 1 .E6 + timeShift ; // maximum time in ps
753769
754770 if (mIsCosmics ) {
755771 for (double tBC = minTrkTime; tBC < maxTrkTime; tBC += BCgranularity) {
0 commit comments