Skip to content

Commit e5a71fd

Browse files
noferinishahor02
authored andcommitted
fix in TOF matching (time) to account for integrated times
1 parent 4bc341d commit e5a71fd

4 files changed

Lines changed: 73 additions & 25 deletions

File tree

Detectors/GlobalTracking/include/GlobalTracking/MatchTOF.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -197,8 +197,8 @@ class MatchTOF
197197
bool prepareFITData();
198198
int prepareInteractionTimes();
199199
bool prepareTPCData();
200-
void addTPCSeed(const o2::tpc::TrackTPC& _tr, o2::dataformats::GlobalTrackID srcGID);
201-
void addITSTPCSeed(const o2::dataformats::TrackTPCITS& _tr, o2::dataformats::GlobalTrackID srcGID);
200+
void addTPCSeed(const o2::tpc::TrackTPC& _tr, o2::dataformats::GlobalTrackID srcGID, float time0, float terr);
201+
void addITSTPCSeed(const o2::dataformats::TrackTPCITS& _tr, o2::dataformats::GlobalTrackID srcGID, float time0, float terr);
202202
void addTRDSeed(const o2::trd::TrackTRD& _tr, o2::dataformats::GlobalTrackID srcGID, float time0, float terr);
203203
void addConstrainedSeed(o2::track::TrackParCov& trc, o2::dataformats::GlobalTrackID srcGID, o2::track::TrackLTIntegral intLT0, timeEst timeMUS);
204204
// void addTPCTRDSeed(const o2::track::TrackParCov& _tr, o2::dataformats::GlobalTrackID srcGID, int tpcID);

Detectors/GlobalTracking/src/MatchTOF.cxx

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -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
//______________________________________________
281283
void 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) {

Detectors/GlobalTrackingWorkflow/src/TOFEventTimeChecker.cxx

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ struct MyTrack : o2::tof::eventTimeTrackTest {
6565
float tofExpSignalDe() const { return mExpDe; }
6666
double mSignalDouble = 0.0;
6767
float mEta = 0.0;
68+
float mPTPC = 0.0;
6869
float mPhi = 0.0;
6970
float mExpDe = 0;
7071
int mIsProb = 0;
@@ -156,6 +157,7 @@ class TOFEventTimeChecker : public Task
156157
int mCh;
157158
float mP = 0;
158159
float mPt = 0;
160+
float mPTPC = 0;
159161
float mEta = 0;
160162
float mPhi = 0;
161163
float mChi2 = 0;
@@ -230,6 +232,7 @@ void TOFEventTimeChecker::processEvent(std::vector<MyTrack>& tracks)
230232
mCh = track.mCh;
231233
mP = track.mP;
232234
mPt = track.mPt;
235+
mPTPC = track.mPTPC;
233236
mEta = track.mEta;
234237
mSource = track.mSource;
235238
mPhi = track.mPhi;
@@ -319,7 +322,8 @@ void TOFEventTimeChecker::fillMatching(GID gid, float time0, float time0res)
319322
const auto& array = mRecoData.getTPCTracks();
320323
GID gTrackId = match.getTrackRef();
321324
const auto& srctrk = array[gTrackId.getIndex()];
322-
trk.mPt = srctrk.getPt();
325+
trk.mPt = srctrk.getPt() * srctrk.getCharge();
326+
trk.mPTPC = srctrk.getP();
323327
trk.mP = srctrk.getP();
324328
trk.mEta = srctrk.getEta();
325329
trk.mPhi = srctrk.getPhi();
@@ -331,7 +335,8 @@ void TOFEventTimeChecker::fillMatching(GID gid, float time0, float time0res)
331335
const auto& array = mRecoData.getTPCTracks();
332336
GID gTrackId = gid;
333337
const auto& srctrk = array[gTrackId.getIndex()];
334-
trk.mPt = srctrk.getPt();
338+
trk.mPt = srctrk.getPt() * srctrk.getCharge();
339+
trk.mPTPC = srctrk.getP();
335340
trk.mP = srctrk.getP();
336341
trk.mEta = srctrk.getEta();
337342
trk.mPhi = srctrk.getPhi();
@@ -341,7 +346,8 @@ void TOFEventTimeChecker::fillMatching(GID gid, float time0, float time0res)
341346
const auto& array = mRecoData.getTPCITSTracks();
342347
GID gTrackId = match.getTrackRef();
343348
const auto& srctrk = array[gTrackId.getIndex()];
344-
trk.mPt = srctrk.getPt();
349+
trk.mPt = srctrk.getPt() * srctrk.getCharge();
350+
trk.mPTPC = srctrk.getP();
345351
trk.mP = srctrk.getP();
346352
trk.mEta = srctrk.getEta();
347353
trk.mPhi = srctrk.getPhi();
@@ -354,7 +360,8 @@ void TOFEventTimeChecker::fillMatching(GID gid, float time0, float time0res)
354360
const auto& array = mRecoData.getTPCITSTracks();
355361
GID gTrackId = gid; //match.getTrackRef();
356362
const auto& srctrk = array[gTrackId.getIndex()];
357-
trk.mPt = srctrk.getPt();
363+
trk.mPt = srctrk.getPt() * srctrk.getCharge();
364+
trk.mPTPC = srctrk.getP();
358365
trk.mP = srctrk.getP();
359366
trk.mEta = srctrk.getEta();
360367
trk.mPhi = srctrk.getPhi();
@@ -366,25 +373,47 @@ void TOFEventTimeChecker::fillMatching(GID gid, float time0, float time0res)
366373
const auto& array = mRecoData.getTPCTRDTracks<o2::trd::TrackTRD>();
367374
GID gTrackId = match.getTrackRef();
368375
const auto& srctrk = array[gTrackId.getIndex()];
369-
trk.mPt = srctrk.getPt();
376+
trk.mPt = srctrk.getPt() * srctrk.getCharge();
377+
trk.mPTPC = srctrk.getP();
370378
trk.mP = srctrk.getP();
371379
trk.mEta = srctrk.getEta();
372380
trk.mPhi = srctrk.getPhi();
373381
trksource = 2;
374382
trk.mDx = match.getDXatTOF();
375383
trk.mDz = match.getDZatTOF();
384+
} else if (gid.getSource() == GID::TPCTRD && 0) {
385+
const auto& array = mRecoData.getTPCTRDTracks<o2::trd::TrackTRD>();
386+
GID gTrackId = gid; // match.getTrackRef();
387+
const auto& srctrk = array[gTrackId.getIndex()];
388+
trk.mPt = srctrk.getPt() * srctrk.getCharge();
389+
trk.mPTPC = srctrk.getP();
390+
trk.mP = srctrk.getP();
391+
trk.mEta = srctrk.getEta();
392+
trk.mPhi = srctrk.getPhi();
393+
trksource = 2;
376394
} else if (gid.getSource() == GID::ITSTPCTRDTOF) {
377395
const o2::dataformats::MatchInfoTOF& match = mRecoData.getTOFMatch(gid);
378396
const auto& array = mRecoData.getITSTPCTRDTracks<o2::trd::TrackTRD>();
379397
GID gTrackId = match.getTrackRef();
380398
const auto& srctrk = array[gTrackId.getIndex()];
381-
trk.mPt = srctrk.getPt();
399+
trk.mPt = srctrk.getPt() * srctrk.getCharge();
400+
trk.mPTPC = srctrk.getP();
382401
trk.mP = srctrk.getP();
383402
trk.mEta = srctrk.getEta();
384403
trk.mPhi = srctrk.getPhi();
385404
trksource = 3;
386405
trk.mDx = match.getDXatTOF();
387406
trk.mDz = match.getDZatTOF();
407+
} else if (gid.getSource() == GID::ITSTPCTRD && 0) {
408+
const auto& array = mRecoData.getTPCTRDTracks<o2::trd::TrackTRD>();
409+
GID gTrackId = gid; // match.getTrackRef();
410+
const auto& srctrk = array[gTrackId.getIndex()];
411+
trk.mPt = srctrk.getPt() * srctrk.getCharge();
412+
trk.mPTPC = srctrk.getP();
413+
trk.mP = srctrk.getP();
414+
trk.mEta = srctrk.getEta();
415+
trk.mPhi = srctrk.getPhi();
416+
trksource = 3;
388417
}
389418

390419
trk.mSource = trksource;
@@ -502,6 +531,7 @@ void TOFEventTimeChecker::init(InitContext& ic)
502531
mTree->Branch("isProb", &mIsProb, "isProb/I");
503532
mTree->Branch("p", &mP, "p/F");
504533
mTree->Branch("pt", &mPt, "pt/F");
534+
mTree->Branch("pTPC", &mPTPC, "pTPC/F");
505535
mTree->Branch("source", &mSource, "source/I");
506536
mTree->Branch("eta", &mEta, "eta/F");
507537
mTree->Branch("phi", &mPhi, "phi/F");

Detectors/TOF/base/src/EventTimeMaker.cxx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ namespace o2
2727
namespace tof
2828
{
2929

30-
constexpr int MAXNTRACKINSET = 10;
30+
constexpr int MAXNTRACKINSET = 20;
3131
// usefull constants
3232
constexpr unsigned long combinatorial[MAXNTRACKINSET + 1] = {1, 3, 9, 27, 81, 243, 729, 2187, 6561, 19683, 59049};
3333
//---------------
@@ -47,7 +47,9 @@ void computeEvTime(const std::vector<eventTimeTrack>& tracks, const std::vector<
4747

4848
int hypo[MAXNTRACKINSET];
4949

50-
int nmaxtracksinset = ntracks > 22 ? 6 : MAXNTRACKINSET; // max number of tracks in a set for event time computation
50+
// int nmaxtracksinset = ntracks > 22 ? 6 : MAXNTRACKINSET; // max number of tracks in a set for event time computation
51+
int nmaxtracksinset = MAXNTRACKINSET;
52+
5153
LOG(debug) << "nmaxtracksinset " << nmaxtracksinset;
5254
int ntracksinset = std::min(ntracks, nmaxtracksinset);
5355
LOG(debug) << "ntracksinset " << ntracksinset;

0 commit comments

Comments
 (0)