Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,12 @@ namespace o2
namespace strangeness_tracking
{

enum DauType : int {
kV0DauPos = 0,
kV0DauNeg = 1,
kBach = 2
};

struct ClusAttachments {

std::array<unsigned int, 7> arr;
Expand Down Expand Up @@ -150,7 +156,7 @@ class StrangenessTracker
propPos.getPxPyPzGlo(pP);
propNeg.getPxPyPzGlo(pN);
std::array<float, 3> pV0 = {pP[0] + pN[0], pP[1] + pN[1], pP[2] + pN[2]};
newV0 = V0(v0XYZ, pV0, mFitterV0.calcPCACovMatrixFlat(0), propPos, propNeg, mV0dauIDs[0], mV0dauIDs[1], PID::HyperTriton);
newV0 = V0(v0XYZ, pV0, mFitterV0.calcPCACovMatrixFlat(0), propPos, propNeg, mV0dauIDs[kV0DauPos], mV0dauIDs[kV0DauNeg], PID::HyperTriton);
return true;
};

Expand Down
36 changes: 19 additions & 17 deletions Detectors/StrangenessTracking/tracking/src/StrangenessTracker.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -111,11 +111,10 @@ void StrangenessTracker::process()

for (int iV0{0}; iV0 < mInputV0tracks.size(); iV0++) {
LOG(debug) << "Analysing V0: " << iV0 + 1 << "/" << mInputV0tracks.size();
auto& DecIndexRef = iV0;
auto& v0 = mInputV0tracks[iV0];
mV0dauIDs[0] = v0.getProngID(0), mV0dauIDs[1] = v0.getProngID(1);
auto posTrack = v0.getProng(0);
auto negTrack = v0.getProng(1);
mV0dauIDs[kV0DauPos] = v0.getProngID(kV0DauPos), mV0dauIDs[kV0DauNeg] = v0.getProngID(kV0DauNeg);
auto posTrack = v0.getProng(kV0DauPos);
auto negTrack = v0.getProng(kV0DauNeg);
auto alphaV0 = calcV0alpha(v0);
alphaV0 > 0 ? posTrack.setAbsCharge(2) : negTrack.setAbsCharge(2);
V0 correctedV0; // recompute V0 for Hypertriton
Expand All @@ -131,11 +130,11 @@ void StrangenessTracker::process()
for (int& iBinV0 : iBinsV0) {
for (int iTrack{mTracksIdxTable[iBinV0]}; iTrack < TMath::Min(mTracksIdxTable[iBinV0 + 1], int(mSortedITStracks.size())); iTrack++) {
mStrangeTrack.mMother = (o2::track::TrackParCovF)correctedV0;
mDaughterTracks[0] = correctedV0.getProng(0);
mDaughterTracks[1] = correctedV0.getProng(1);
mDaughterTracks[kV0DauPos] = correctedV0.getProng(kV0DauPos);
mDaughterTracks[kV0DauNeg] = correctedV0.getProng(kV0DauNeg);
mITStrack = mSortedITStracks[iTrack];
auto& ITSindexRef = mSortedITSindexes[iTrack];
LOG(debug) << "V0 pos: " << v0.getProngID(0) << " V0 neg: " << v0.getProngID(1) << ", ITS track ref: " << mSortedITSindexes[iTrack];

if (mStrParams->mVertexMatching && (mITSvtxBrackets[ITSindexRef].getMin() > v0.getVertexID() ||
mITSvtxBrackets[ITSindexRef].getMax() < v0.getVertexID())) {
continue;
Expand All @@ -152,8 +151,8 @@ void StrangenessTracker::process()

decayVtxTrackClone.getPxPyPzGlo(mStrangeTrack.mDecayMom);
auto p2mom = decayVtxTrackClone.getP2();
auto p2pos = mFitter3Body.getTrack(0).getP2(); // positive V0 daughter
auto p2neg = mFitter3Body.getTrack(1).getP2(); // negative V0 daughter
auto p2pos = mFitter3Body.getTrack(kV0DauPos).getP2(); // positive V0 daughter
auto p2neg = mFitter3Body.getTrack(kV0DauNeg).getP2(); // negative V0 daughter
if (alphaV0 > 0) {
mStrangeTrack.mMasses[0] = calcMotherMass(p2mom, p2pos, p2neg, PID::Helium3, PID::Pion); // Hypertriton invariant mass at decay vertex
mStrangeTrack.mMasses[1] = calcMotherMass(p2mom, p2pos, p2neg, PID::Alpha, PID::Pion); // Hyperhydrogen4Lam invariant mass at decay vertex
Expand Down Expand Up @@ -182,10 +181,11 @@ void StrangenessTracker::process()

for (int iCasc{0}; iCasc < mInputCascadeTracks.size(); iCasc++) {
LOG(debug) << "Analysing Cascade: " << iCasc + 1 << "/" << mInputCascadeTracks.size();
auto& DecIndexRef = iCasc;

auto& casc = mInputCascadeTracks[iCasc];
auto& cascV0 = mInputV0tracks[casc.getV0ID()];
mV0dauIDs[0] = cascV0.getProngID(0), mV0dauIDs[1] = cascV0.getProngID(1);
mV0dauIDs[kV0DauPos] = cascV0.getProngID(kV0DauPos);
mV0dauIDs[kV0DauNeg] = cascV0.getProngID(kV0DauNeg);

mStrangeTrack.mPartType = dataformats::kStrkCascade;
// first: bachelor, second: V0 pos, third: V0 neg
Expand All @@ -194,7 +194,9 @@ void StrangenessTracker::process()
for (int& iBinCasc : iBinsCasc) {
for (int iTrack{mTracksIdxTable[iBinCasc]}; iTrack < TMath::Min(mTracksIdxTable[iBinCasc + 1], int(mSortedITStracks.size())); iTrack++) {
mStrangeTrack.mMother = (o2::track::TrackParCovF)casc;
mDaughterTracks[0] = casc.getBachelorTrack(), mDaughterTracks[1] = cascV0.getProng(0), mDaughterTracks[2] = cascV0.getProng(1);
mDaughterTracks[kV0DauPos] = cascV0.getProng(kV0DauPos);
mDaughterTracks[kV0DauNeg] = cascV0.getProng(kV0DauNeg);
mDaughterTracks[kBach] = casc.getBachelorTrack();
mITStrack = mSortedITStracks[iTrack];
auto& ITSindexRef = mSortedITSindexes[iTrack];
LOG(debug) << "----------------------";
Expand All @@ -216,8 +218,8 @@ void StrangenessTracker::process()
}
decayVtxTrackClone.getPxPyPzGlo(mStrangeTrack.mDecayMom);
auto p2mom = decayVtxTrackClone.getP2();
auto p2V0 = mFitter3Body.getTrack(0).getP2();
auto p2bach = mFitter3Body.getTrack(1).getP2();
auto p2V0 = mFitter3Body.getTrack(0).getP2(); // V0 momentum at decay vertex
auto p2bach = mFitter3Body.getTrack(1).getP2(); // bachelor momentum at decay vertex
mStrangeTrack.mMasses[0] = calcMotherMass(p2mom, p2V0, p2bach, PID::Lambda, PID::Pion); // Xi invariant mass at decay vertex
mStrangeTrack.mMasses[1] = calcMotherMass(p2mom, p2V0, p2bach, PID::Lambda, PID::Kaon); // Omega invariant mass at decay vertex

Expand Down Expand Up @@ -330,12 +332,12 @@ bool StrangenessTracker::matchDecayToITStrack(float decayR)
// refit cascade
if (mStrangeTrack.mPartType == dataformats::kStrkCascade) {
V0 cascV0Upd;
if (!recreateV0(mDaughterTracks[1], mDaughterTracks[2], cascV0Upd)) {
if (!recreateV0(mDaughterTracks[kV0DauPos], mDaughterTracks[kV0DauNeg], cascV0Upd)) {
LOG(debug) << "Cascade V0 refit failed";
return false;
}
try {
nCand = mFitter3Body.process(cascV0Upd, mDaughterTracks[0], motherTrackClone);
nCand = mFitter3Body.process(cascV0Upd, mDaughterTracks[kBach], motherTrackClone);
} catch (std::runtime_error& e) {
LOG(debug) << "Fitter3Body failed: " << e.what();
return false;
Expand All @@ -349,7 +351,7 @@ bool StrangenessTracker::matchDecayToITStrack(float decayR)
// refit V0
else if (mStrangeTrack.mPartType == dataformats::kStrkV0) {
try {
nCand = mFitter3Body.process(mDaughterTracks[0], mDaughterTracks[1], motherTrackClone);
nCand = mFitter3Body.process(mDaughterTracks[kV0DauPos], mDaughterTracks[kV0DauNeg], motherTrackClone);
} catch (std::runtime_error& e) {
LOG(debug) << "Fitter3Body failed: " << e.what();
return false;
Expand Down