Skip to content

Commit 9c73016

Browse files
creetz16chiarazampolli
authored andcommitted
[Strangeness tracking] Enable 3body strangeness tracking by default (#13182)
* Enable 3body strangeness tracking by default * Add 3body tracking process in SVertexer * Formatting (cherry picked from commit 40b4132)
1 parent cbb9f77 commit 9c73016

File tree

3 files changed

+57
-48
lines changed

3 files changed

+57
-48
lines changed

Detectors/Vertexing/StrangenessTracking/include/StrangenessTracking/StrangenessTrackingConfigParam.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ struct StrangenessTrackingParamConfig : public o2::conf::ConfigurableParamHelper
3333
float mMaxChi2 = 50; // Maximum matching chi2
3434
bool mVertexMatching = true; // Flag to enable/disable vertex matching
3535
bool mSkipTPC = true; // Flag to enable/disable TPC only tracks
36-
bool mSkip3Body = true; // Flag to enable/disable Decay3Body tracking
36+
bool mSkip3Body = false; // Flag to enable/disable Decay3Body tracking
3737

3838
O2ParamDef(StrangenessTrackingParamConfig, "strtracker");
3939
};

Detectors/Vertexing/StrangenessTracking/src/StrangenessTracker.cxx

Lines changed: 51 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -242,58 +242,62 @@ void StrangenessTracker::processCascade(int iCasc, const Cascade& casc, const Ca
242242

243243
void StrangenessTracker::process3Body(int i3Body, const Decay3Body& dec3body, const Decay3BodyIndex& dec3bodyIdx, int iThread)
244244
{
245-
ClusAttachments structClus;
246-
auto& daughterTracks = mDaughterTracks[iThread];
247-
daughterTracks.resize(3); // resize to 3 prongs
248-
249-
StrangeTrack strangeTrack;
250-
strangeTrack.mPartType = dataformats::kStrkThreeBody;
251-
auto dec3bodyR = std::sqrt(dec3body.calcR2());
252-
auto iBins3Body = mUtils.getBinRect(dec3body.getEta(), dec3body.getPhi(), mStrParams->mEtaBinSize, mStrParams->mPhiBinSize);
253-
for (int& iBin3Body : iBins3Body) {
254-
for (int iTrack{mTracksIdxTable[iBin3Body]}; iTrack < TMath::Min(mTracksIdxTable[iBin3Body + 1], int(mSortedITStracks.size())); iTrack++) {
255-
strangeTrack.mMother = (o2::track::TrackParCovF)dec3body;
256-
/// TODO: indices of daughters...
257-
daughterTracks[kV0DauPos] = dec3body.getProng(kV0DauPos); // proton
258-
daughterTracks[kV0DauNeg] = dec3body.getProng(kV0DauNeg); // pion
259-
daughterTracks[kBach] = dec3body.getProng(kBach); // deuteron
260-
const auto& itsTrack = mSortedITStracks[iTrack];
261-
const auto& ITSindexRef = mSortedITSindexes[iTrack];
262-
if (mStrParams->mVertexMatching && (mITSvtxBrackets[ITSindexRef].getMin() > dec3bodyIdx.getVertexID() || mITSvtxBrackets[ITSindexRef].getMax() < dec3bodyIdx.getVertexID())) {
263-
continue;
264-
}
265-
if (matchDecayToITStrack(dec3bodyR, strangeTrack, structClus, itsTrack, daughterTracks, iThread)) {
266-
auto propInstance = o2::base::Propagator::Instance();
267-
o2::track::TrackParCov decayVtxTrackClone = strangeTrack.mMother; // clone track and propagate to decay vertex
268-
if (!propInstance->propagateToX(decayVtxTrackClone, strangeTrack.mDecayVtx[0], getBz(), o2::base::PropagatorImpl<float>::MAX_SIN_PHI, o2::base::PropagatorImpl<float>::MAX_STEP, mCorrType)) {
269-
LOG(debug) << "Mother propagation to decay vertex failed";
245+
if (!mStrParams->mSkip3Body) {
246+
ClusAttachments structClus;
247+
auto& daughterTracks = mDaughterTracks[iThread];
248+
daughterTracks.resize(3); // resize to 3 prongs
249+
250+
StrangeTrack strangeTrack;
251+
strangeTrack.mPartType = dataformats::kStrkThreeBody;
252+
auto dec3bodyR = std::sqrt(dec3body.calcR2());
253+
auto iBins3Body = mUtils.getBinRect(dec3body.getEta(), dec3body.getPhi(), mStrParams->mEtaBinSize, mStrParams->mPhiBinSize);
254+
for (int& iBin3Body : iBins3Body) {
255+
for (int iTrack{mTracksIdxTable[iBin3Body]}; iTrack < TMath::Min(mTracksIdxTable[iBin3Body + 1], int(mSortedITStracks.size())); iTrack++) {
256+
strangeTrack.mMother = (o2::track::TrackParCovF)dec3body;
257+
/// TODO: indices of daughters...
258+
daughterTracks[kV0DauPos] = dec3body.getProng(kV0DauPos); // proton
259+
daughterTracks[kV0DauNeg] = dec3body.getProng(kV0DauNeg); // pion
260+
daughterTracks[kBach] = dec3body.getProng(kBach); // deuteron
261+
const auto& itsTrack = mSortedITStracks[iTrack];
262+
const auto& ITSindexRef = mSortedITSindexes[iTrack];
263+
if (mStrParams->mVertexMatching && (mITSvtxBrackets[ITSindexRef].getMin() > dec3bodyIdx.getVertexID() || mITSvtxBrackets[ITSindexRef].getMax() < dec3bodyIdx.getVertexID())) {
270264
continue;
271265
}
272-
decayVtxTrackClone.getPxPyPzGlo(strangeTrack.mDecayMom);
273-
std::array<float, 3> momPos, momNeg, momBach;
274-
mFitter4Body[iThread].propagateTracksToVertex();
275-
mFitter4Body[iThread].getTrack(kV0DauPos).getPxPyPzGlo(momPos);
276-
mFitter4Body[iThread].getTrack(kV0DauNeg).getPxPyPzGlo(momNeg);
277-
mFitter4Body[iThread].getTrack(kBach).getPxPyPzGlo(momBach);
278-
/// TODO: mother mass
279-
if (daughterTracks[kBach].getCharge() > 0) {
280-
strangeTrack.mMasses[0] = calcMotherMass3body(momPos, momNeg, momBach, PID::Proton, PID::Pion, PID::Deuteron);
281-
} else {
282-
strangeTrack.mMasses[0] = calcMotherMass3body(momPos, momNeg, momBach, PID::Pion, PID::Proton, PID::Deuteron);
283-
}
284-
285-
LOG(debug) << "ITS Track matched with a dec3body decay topology ....";
286-
LOG(debug) << "Number of ITS track clusters attached: " << itsTrack.getNumberOfClusters();
287-
strangeTrack.mDecayRef = i3Body;
288-
strangeTrack.mITSRef = mSortedITSindexes[iTrack];
289-
mStrangeTrackVec[iThread].push_back(strangeTrack);
290-
mClusAttachments[iThread].push_back(structClus);
291-
if (mMCTruthON) {
292-
auto lab = getStrangeTrackLabel(itsTrack, strangeTrack, structClus);
293-
mStrangeTrackLabels[iThread].push_back(lab);
266+
if (matchDecayToITStrack(dec3bodyR, strangeTrack, structClus, itsTrack, daughterTracks, iThread)) {
267+
auto propInstance = o2::base::Propagator::Instance();
268+
o2::track::TrackParCov decayVtxTrackClone = strangeTrack.mMother; // clone track and propagate to decay vertex
269+
if (!propInstance->propagateToX(decayVtxTrackClone, strangeTrack.mDecayVtx[0], getBz(), o2::base::PropagatorImpl<float>::MAX_SIN_PHI, o2::base::PropagatorImpl<float>::MAX_STEP, mCorrType)) {
270+
LOG(debug) << "Mother propagation to decay vertex failed";
271+
continue;
272+
}
273+
decayVtxTrackClone.getPxPyPzGlo(strangeTrack.mDecayMom);
274+
std::array<float, 3> momPos, momNeg, momBach;
275+
mFitter4Body[iThread].propagateTracksToVertex();
276+
mFitter4Body[iThread].getTrack(kV0DauPos).getPxPyPzGlo(momPos);
277+
mFitter4Body[iThread].getTrack(kV0DauNeg).getPxPyPzGlo(momNeg);
278+
mFitter4Body[iThread].getTrack(kBach).getPxPyPzGlo(momBach);
279+
/// TODO: mother mass
280+
if (daughterTracks[kBach].getCharge() > 0) {
281+
strangeTrack.mMasses[0] = calcMotherMass3body(momPos, momNeg, momBach, PID::Proton, PID::Pion, PID::Deuteron);
282+
} else {
283+
strangeTrack.mMasses[0] = calcMotherMass3body(momPos, momNeg, momBach, PID::Pion, PID::Proton, PID::Deuteron);
284+
}
285+
286+
LOG(debug) << "ITS Track matched with a dec3body decay topology ....";
287+
LOG(debug) << "Number of ITS track clusters attached: " << itsTrack.getNumberOfClusters();
288+
strangeTrack.mDecayRef = i3Body;
289+
strangeTrack.mITSRef = mSortedITSindexes[iTrack];
290+
mStrangeTrackVec[iThread].push_back(strangeTrack);
291+
mClusAttachments[iThread].push_back(structClus);
292+
if (mMCTruthON) {
293+
auto lab = getStrangeTrackLabel(itsTrack, strangeTrack, structClus);
294+
mStrangeTrackLabels[iThread].push_back(lab);
295+
}
294296
}
295297
}
296298
}
299+
} else {
300+
return;
297301
}
298302
}
299303

Detectors/Vertexing/src/SVertexer.cxx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1182,6 +1182,11 @@ int SVertexer::check3bodyDecays(const V0Index& v0Idx, const V0& v0, float rv0, s
11821182
m3bodyTmp[ithread].push_back(candidate3B);
11831183
}
11841184
m3bodyIdxTmp[ithread].emplace_back(decay3bodyVtxID, v0Idx.getProngID(0), v0Idx.getProngID(1), bach.gid);
1185+
1186+
Decay3BodyIndex decay3bodyIdx(decay3bodyVtxID, v0Idx.getProngID(0), v0Idx.getProngID(1), bach.gid);
1187+
if (mStrTracker) {
1188+
mStrTracker->process3Body(m3bodyIdxTmp[ithread].size() - 1, candidate3B, decay3bodyIdx, ithread);
1189+
}
11851190
}
11861191
return m3bodyIdxTmp[ithread].size() - n3BodyIni;
11871192
}

0 commit comments

Comments
 (0)