@@ -242,58 +242,62 @@ void StrangenessTracker::processCascade(int iCasc, const Cascade& casc, const Ca
242242
243243void 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
0 commit comments