Skip to content

Commit b1549c8

Browse files
committed
Actually check for track being PV contributor and set flag accordingly.
1 parent 46f0ac9 commit b1549c8

1 file changed

Lines changed: 32 additions & 17 deletions

File tree

ALICE3/TableProducer/OTF/onTheFlyTracker.cxx

Lines changed: 32 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,7 @@ struct OnTheFlyTracker {
283283
const float time = 0,
284284
const float timeError = 1,
285285
bool decayDauInput = false,
286+
bool isPVContributorInput = false,
286287
bool weakDecayDauInput = false,
287288
int isUsedInCascadingInput = 0,
288289
int nSiliconHitsInput = 0,
@@ -291,6 +292,7 @@ struct OnTheFlyTracker {
291292
mcLabel{label},
292293
timeEst{time, timeError},
293294
isDecayDau(decayDauInput),
295+
isPVContributor(isPVContributorInput),
294296
isWeakDecayDau(weakDecayDauInput),
295297
isUsedInCascading(isUsedInCascadingInput),
296298
nSiliconHits(nSiliconHitsInput),
@@ -300,6 +302,7 @@ struct OnTheFlyTracker {
300302
int64_t mcLabel;
301303
TimeEst timeEst; ///< time estimate in ns
302304
bool isDecayDau;
305+
bool isPVContributor;
303306
bool isWeakDecayDau;
304307
int isUsedInCascading; // 0: not at all, 1: is a cascade, 2: is a bachelor, 3: is a pion, 4: is a proton
305308
int nSiliconHits;
@@ -992,13 +995,13 @@ struct OnTheFlyTracker {
992995
thisCascade.cascadeTrackId = trackTableOffset + 4;
993996

994997
float trackTime = (eventCollisionTimeNS + gRandom->Gaus(0., timeResolutionNs)) * nsToMus;
995-
tracksCascadeProngs.push_back(TrackAlice3{xiDaughterTrackParCovsPerfect[0], mcParticle.globalIndex(), trackTime, timeResolutionUs, true, true, 1, -1, -1, TrackType::kGenCascDaug});
998+
tracksCascadeProngs.push_back(TrackAlice3{xiDaughterTrackParCovsPerfect[0], mcParticle.globalIndex(), trackTime, timeResolutionUs, true, false, true, 1, -1, -1, TrackType::kGenCascDaug});
996999
trackTime = (eventCollisionTimeNS + gRandom->Gaus(0., timeResolutionNs)) * nsToMus;
997-
tracksCascadeProngs.push_back(TrackAlice3{xiDaughterTrackParCovsPerfect[1], mcParticle.globalIndex(), trackTime, timeResolutionUs, true, true, 2, -1, -1, TrackType::kGenCascDaug});
1000+
tracksCascadeProngs.push_back(TrackAlice3{xiDaughterTrackParCovsPerfect[1], mcParticle.globalIndex(), trackTime, timeResolutionUs, true, false, true, 2, -1, -1, TrackType::kGenCascDaug});
9981001
trackTime = (eventCollisionTimeNS + gRandom->Gaus(0., timeResolutionNs)) * nsToMus;
999-
tracksCascadeProngs.push_back(TrackAlice3{xiDaughterTrackParCovsPerfect[2], mcParticle.globalIndex(), trackTime, timeResolutionUs, true, true, 3, -1, -1, TrackType::kGenCascDaug});
1002+
tracksCascadeProngs.push_back(TrackAlice3{xiDaughterTrackParCovsPerfect[2], mcParticle.globalIndex(), trackTime, timeResolutionUs, true, false, true, 3, -1, -1, TrackType::kGenCascDaug});
10001003
trackTime = (eventCollisionTimeNS + gRandom->Gaus(0., timeResolutionNs)) * nsToMus;
1001-
tracksCascadeProngs.push_back(TrackAlice3{perfectCascadeTrack, mcParticle.globalIndex(), trackTime, timeResolutionUs, true, true, 3, -1, -1, TrackType::kGenCascDaug});
1004+
tracksCascadeProngs.push_back(TrackAlice3{perfectCascadeTrack, mcParticle.globalIndex(), trackTime, timeResolutionUs, true, false, true, 3, -1, -1, TrackType::kGenCascDaug});
10021005

10031006
for (int i = 0; i < kCascProngs; i++) {
10041007
isReco[i] = false;
@@ -1049,7 +1052,7 @@ struct OnTheFlyTracker {
10491052
trackTime = (eventCollisionTimeNS + gRandom->Gaus(0., timeResolutionNs)) * nsToMus;
10501053
// TODO: add flag for whether it's a ghost track or not, currently assuming all are reconstructed tracks if they pass the fast tracker requirements
10511054
TrackType trackType = isReco[i] ? TrackType::kRecoCascDaug : TrackType::kGenCascDaug;
1052-
tracksCascadeProngs[i] = TrackAlice3{xiDaughterTrackParCovsTracked[i], mcParticle.globalIndex(), trackTime, timeResolutionUs, true, true, i + 2, nSiliconHitsCascadeProngs[i], nTPCHitsCascadeProngs[i], trackType};
1055+
tracksCascadeProngs[i] = TrackAlice3{xiDaughterTrackParCovsTracked[i], mcParticle.globalIndex(), trackTime, timeResolutionUs, true, false, true, i + 2, nSiliconHitsCascadeProngs[i], nTPCHitsCascadeProngs[i], trackType};
10531056
}
10541057

10551058
bool tryKinkReco = false;
@@ -1260,7 +1263,7 @@ struct OnTheFlyTracker {
12601263
return; // We didn't find enough hits for strangeness tracking
12611264
}
12621265
}
1263-
tracksCascadeProngs[kCascProngs] = TrackAlice3{cascadeTrack, mcParticle.globalIndex(), trackTime, timeResolutionUs, false, false, 1, thisCascade.foundClusters, TrackType::kGenCascDaug};
1266+
tracksCascadeProngs[kCascProngs] = TrackAlice3{cascadeTrack, mcParticle.globalIndex(), trackTime, timeResolutionUs, false, false, false, 1, thisCascade.foundClusters, TrackType::kGenCascDaug};
12641267
fillCascadeTable = true;
12651268
}
12661269
}
@@ -1331,7 +1334,7 @@ struct OnTheFlyTracker {
13311334
newCascadeTrack.setPID(pdgCodeToPID(PDG_t::kXiMinus)); // FIXME: not OK for omegas
13321335
float trackTime = (eventCollisionTimeNS + gRandom->Gaus(0., timeResolutionNs)) * nsToMus;
13331336
if (reconstructedCascade) {
1334-
tracksCascadeProngs[kCascProngs + 1] = TrackAlice3{newCascadeTrack, mcParticle.globalIndex(), trackTime, timeResolutionUs, false, false, 1, thisCascade.foundClusters, TrackType::kRecoCascDaug};
1337+
tracksCascadeProngs[kCascProngs + 1] = TrackAlice3{newCascadeTrack, mcParticle.globalIndex(), trackTime, timeResolutionUs, false, false, false, 1, thisCascade.foundClusters, TrackType::kRecoCascDaug};
13351338
}
13361339
fillCascadeTable = true;
13371340
} // end fitter OK
@@ -1482,9 +1485,9 @@ struct OnTheFlyTracker {
14821485

14831486
// Store not reconstructed daughters, will update them in case reconstruction is successful
14841487
float trackTime = (eventCollisionTimeNS + gRandom->Gaus(0., timeResolutionNs)) * nsToMus;
1485-
tracksV0Daugs.push_back(TrackAlice3{v0DaughterTrackParCovsPerfect[0], mcParticle.globalIndex(), 0.f, timeResolutionUs, true, true, 1, TrackType::kGhostV0Daug});
1488+
tracksV0Daugs.push_back(TrackAlice3{v0DaughterTrackParCovsPerfect[0], mcParticle.globalIndex(), 0.f, timeResolutionUs, true, false, true, 1, TrackType::kGhostV0Daug});
14861489
trackTime = (eventCollisionTimeNS + gRandom->Gaus(0., timeResolutionNs)) * nsToMus;
1487-
tracksV0Daugs.push_back(TrackAlice3{v0DaughterTrackParCovsPerfect[1], mcParticle.globalIndex(), 0.f, timeResolutionUs, true, true, 1, TrackType::kGhostV0Daug});
1490+
tracksV0Daugs.push_back(TrackAlice3{v0DaughterTrackParCovsPerfect[1], mcParticle.globalIndex(), 0.f, timeResolutionUs, true, false, true, 1, TrackType::kGhostV0Daug});
14881491

14891492
bool fillV0Table{false};
14901493
for (int i = 0; i < kv0Prongs; i++) {
@@ -1521,7 +1524,7 @@ struct OnTheFlyTracker {
15211524
trackTime = (eventCollisionTimeNS + gRandom->Gaus(0., timeResolutionNs)) * nsToMus;
15221525
// TODO: flag to separate ghost and reco tracks
15231526
TrackType trackType = isV0Reco[i] ? TrackType::kRecoV0Daug : TrackType::kGhostV0Daug;
1524-
tracksV0Daugs[i] = TrackAlice3{v0DaughterTrackParCovsTracked[i], mcParticle.globalIndex(), trackTime, timeResolutionUs, true, true, i + 2, trackType};
1527+
tracksV0Daugs[i] = TrackAlice3{v0DaughterTrackParCovsTracked[i], mcParticle.globalIndex(), trackTime, timeResolutionUs, true, false, true, i + 2, trackType};
15251528
}
15261529
if (v0DecaySettings.doV0QA) {
15271530
if (isV0Reco[0] && isV0Reco[1]) {
@@ -1672,8 +1675,8 @@ struct OnTheFlyTracker {
16721675
/// \param prmTrks the vector of tracks to be used for vertex reconstruction
16731676
/// \param primaryVertex the output variable where the computed primary vertex will be stored
16741677
/// \param icfg index of the current configuration, used for histogram filling
1675-
template <typename McCollisionType, typename TrackType>
1676-
void computeVertex(McCollisionType& mcCollision, const std::vector<TrackType>& prmTrks, o2::vertexing::PVertex& primaryVertex, const int icfg)
1678+
template <typename McCollisionType, typename TrackT>
1679+
void computeVertex(McCollisionType& mcCollision, std::vector<TrackT>& prmTrks, o2::vertexing::PVertex& primaryVertex, const int icfg)
16771680
{
16781681

16791682
if (!enablePrimaryVertexing) {
@@ -1725,7 +1728,18 @@ struct OnTheFlyTracker {
17251728
largestVertex = iv;
17261729
}
17271730
}
1731+
17281732
primaryVertex = vertices[largestVertex];
1733+
1734+
const auto& contributorRef = v2tRefs[largestVertex];
1735+
const int first = contributorRef.getFirstEntry();
1736+
const int end = first + contributorRef.getEntries();
1737+
1738+
for (int i = first; i < end; ++i) {
1739+
const auto trackIndex = vertexTrackIDs[i].getIndex();
1740+
prmTrks[trackIndex].isPVContributor = true;
1741+
}
1742+
17291743
if (doExtraQA) {
17301744
histos.fill(HIST("h2dVerticesVsContributors"), primaryVertex.getNContributors(), n_vertices);
17311745
}
@@ -1776,7 +1790,7 @@ struct OnTheFlyTracker {
17761790
trackParCov.getSigmaTgl2(), trackParCov.getSigma1PtY(), trackParCov.getSigma1PtZ(), trackParCov.getSigma1PtSnp(), trackParCov.getSigma1PtTgl(),
17771791
trackParCov.getSigma1Pt2());
17781792
tableMcTrackLabels(trackParCov.mcLabel, 0);
1779-
tableTracksExtraA3(trackParCov.nSiliconHits, trackParCov.nTPCHits, trackParCov.trackType, true);
1793+
tableTracksExtraA3(trackParCov.nSiliconHits, trackParCov.nTPCHits, trackParCov.trackType, trackParCov.isPVContributor);
17801794

17811795
// populate extra tables if required to do so
17821796
if (populateTracksExtra) {
@@ -1969,10 +1983,11 @@ struct OnTheFlyTracker {
19691983
// Time associated to the mcParticle: collision time + smearing
19701984
float trackTime = (eventCollisionTimeNS + gRandom->Gaus(0., timeResolutionNs)) * nsToMus;
19711985
TrackType trackType = reconstructed ? TrackType::kRecoPrimary : TrackType::kGhostPrimary;
1986+
bool isPVContributor = trackType == TrackType::kRecoPrimary;
19721987
if (reconstructed) {
1973-
recoPrimaries.push_back(TrackAlice3{trackParCov, mcParticle.globalIndex(), trackTime, timeResolutionUs, isDecayDaughter, false, 0, nTrkHits, trackType});
1988+
recoPrimaries.push_back(TrackAlice3{trackParCov, mcParticle.globalIndex(), trackTime, timeResolutionUs, isDecayDaughter, isPVContributor, false, 0, nTrkHits, trackType});
19741989
} else {
1975-
ghostPrimaries.push_back(TrackAlice3{trackParCov, mcParticle.globalIndex(), trackTime, timeResolutionUs, isDecayDaughter, false, 0, nTrkHits, trackType});
1990+
ghostPrimaries.push_back(TrackAlice3{trackParCov, mcParticle.globalIndex(), trackTime, timeResolutionUs, isDecayDaughter, isPVContributor, false, 0, nTrkHits, trackType});
19761991
}
19771992
}
19781993

@@ -2194,10 +2209,10 @@ struct OnTheFlyTracker {
21942209
}
21952210

21962211
if (reconstructed) {
2197-
tracksAlice3.push_back(TrackAlice3{trackParCov, mcParticle.globalIndex(), time, timeResolutionUs, isSecondary, false, 0, nTrkHits, kRecoPrimary});
2212+
tracksAlice3.push_back(TrackAlice3{trackParCov, mcParticle.globalIndex(), time, timeResolutionUs, isSecondary, false, true, false, 0, nTrkHits, kRecoPrimary});
21982213
getHist(TH1, histPath + "hPtReconstructedPr")->Fill(trackParCov.getPt());
21992214
} else {
2200-
ghostTracksAlice3.push_back(TrackAlice3{trackParCov, mcParticle.globalIndex(), time, timeResolutionUs, isSecondary, false, 0, nTrkHits, kGhostPrimary});
2215+
ghostTracksAlice3.push_back(TrackAlice3{trackParCov, mcParticle.globalIndex(), time, timeResolutionUs, isSecondary, false, false, false, 0, nTrkHits, kGhostPrimary});
22012216
}
22022217
}
22032218

0 commit comments

Comments
 (0)