@@ -56,7 +56,7 @@ static constexpr std::array<int, nNuclei> charges{1, 1, 2};
5656static const std::vector<std::string> matterOrNot{" Matter" , " Antimatter" };
5757static const std::vector<std::string> nucleiNames{" H2" , " H3" , " Helium" };
5858static const std::vector<std::string> hypernucleiNames{" H3L" }; // 3-body decay case
59- static const std::vector<std::string> columnsNames{o2::aod::filtering::H2::columnLabel (), o2::aod::filtering::He::columnLabel (), o2::aod::filtering::HeV0::columnLabel (), o2::aod::filtering::H3L3Body::columnLabel (), o2::aod::filtering::Tracked3Body::columnLabel (), o2::aod::filtering::ITSmildIonisation::columnLabel (), o2::aod::filtering::ITSextremeIonisation::columnLabel ()};
59+ static const std::vector<std::string> columnsNames{o2::aod::filtering::H2::columnLabel (), o2::aod::filtering::He::columnLabel (), o2::aod::filtering::HeV0::columnLabel (), o2::aod::filtering::TritonFemto::columnLabel (), o2::aod::filtering:: H3L3Body::columnLabel (), o2::aod::filtering::Tracked3Body::columnLabel (), o2::aod::filtering::ITSmildIonisation::columnLabel (), o2::aod::filtering::ITSextremeIonisation::columnLabel ()};
6060static const std::vector<std::string> cutsNames{
6161 " TPCnSigmaMin" , " TPCnSigmaMax" , " TOFnSigmaMin" , " TOFnSigmaMax" , " TOFpidStartPt" };
6262constexpr double betheBlochDefault[nNuclei][6 ]{
@@ -316,6 +316,7 @@ struct nucleiFilter {
316316 kH2 = 0 ,
317317 kHe ,
318318 kHeV0 ,
319+ kTritonFemto ,
319320 kH3L3Body ,
320321 kTracked3Body ,
321322 kITSmildIonisation ,
@@ -333,7 +334,7 @@ struct nucleiFilter {
333334 hProcessedEvents->Fill (0 );
334335 //
335336 if (!collision.selection_bit (aod::evsel::kNoTimeFrameBorder )) {
336- tags (keepEvent[kH2 ], keepEvent[kHe ], keepEvent[kHeV0 ], keepEvent[kH3L3Body ], keepEvent[kTracked3Body ], keepEvent[kITSmildIonisation ], keepEvent[kITSextremeIonisation ]);
337+ tags (keepEvent[kH2 ], keepEvent[kHe ], keepEvent[kHeV0 ], keepEvent[kTritonFemto ], keepEvent[ kH3L3Body ], keepEvent[kTracked3Body ], keepEvent[kITSmildIonisation ], keepEvent[kITSextremeIonisation ]);
337338 return ;
338339 }
339340
@@ -344,7 +345,8 @@ struct nucleiFilter {
344345 {charges[2 ] * cfgMomentumScalingBetheBloch->get (2u , 0u ) / masses[2 ], charges[2 ] * cfgMomentumScalingBetheBloch->get (2u , 1u ) / masses[2 ]}};
345346
346347 constexpr int nucleusIndex[nNuclei]{kH2 , -1 , kHe }; // / remap for nuclei triggers
347- std::vector<int > he3indices;
348+ std::vector<int > h3indices, he3indices;
349+ std::vector<ROOT::Math::PtEtaPhiMVector> h3vectors;
348350 for (auto & track : tracks) { // start loop over tracks
349351 if (track.itsNCls () >= cfgCutNclusExtremeIonisationITS) {
350352 double avgClsSize{0 .};
@@ -398,15 +400,44 @@ struct nucleiFilter {
398400 if (track.p () > cfgCutsPID->get (iN, 4u ) && (nSigmaTOF[iN] < cfgCutsPID->get (iN, 2u ) || nSigmaTOF[iN] > cfgCutsPID->get (iN, 3u ))) {
399401 continue ;
400402 }
403+ if (iN == 1 && passesDCAselection) {
404+ h3indices.push_back (track.globalIndex ());
405+ h3vectors.emplace_back (track.pt (), track.eta (), track.phi (), masses[iN]);
406+ }
407+ if (iN == 2 ) {
408+ he3indices.push_back (track.globalIndex ());
409+ }
401410 if (nucleusIndex[iN] < 0 ) {
402411 continue ;
403412 }
404413 keepEvent[nucleusIndex[iN]] = passesDCAselection;
405414 if (keepEvent[nucleusIndex[iN]]) {
406415 h2TPCsignal[iN]->Fill (track.sign () * track.tpcInnerParam () * fixTPCrigidity, track.tpcSignal ());
407416 }
408- if (iN == 2 ) {
409- he3indices.push_back (track.globalIndex ());
417+ }
418+
419+ for (const auto & track : tracks) {
420+ if (track.itsNCls () < cfgCutNclusITS ||
421+ track.tpcNClsFound () < cfgCutNclusTPC ||
422+ std::abs (track.dcaXY ()) > cfgCutDCAxy ||
423+ std::abs (track.dcaZ ()) > cfgCutDCAz ||
424+ std::abs (track.eta ()) > 0.9 ) {
425+ continue ;
426+ }
427+ const ROOT::Math::PtEtaPhiMVector trackVector (track.pt (), track.eta (), track.phi (), constants::physics::MassPiMinus);
428+ for (size_t iH3{0 }; iH3 < h3vectors.size (); ++iH3) {
429+ if (h3indices[iH3] == track.globalIndex ()) {
430+ continue ;
431+ }
432+ const auto & h3vector = h3vectors[iH3];
433+ auto pivector = trackVector;
434+ auto cm = h3vector + trackVector;
435+ const ROOT::Math::Boost boost (cm.BoostToCM ());
436+ boost (pivector);
437+ if (pivector.p () < cfgCutKstar) {
438+ keepEvent[kTritonFemto ] = true ;
439+ break ;
440+ }
410441 }
411442 }
412443
@@ -582,7 +613,7 @@ struct nucleiFilter {
582613 }
583614 }
584615
585- tags (keepEvent[kH2 ], keepEvent[kHe ], keepEvent[kHeV0 ], keepEvent[kH3L3Body ], keepEvent[kTracked3Body ], keepEvent[kITSmildIonisation ], keepEvent[kITSextremeIonisation ]);
616+ tags (keepEvent[kH2 ], keepEvent[kHe ], keepEvent[kHeV0 ], keepEvent[kTritonFemto ], keepEvent[ kH3L3Body ], keepEvent[kTracked3Body ], keepEvent[kITSmildIonisation ], keepEvent[kITSextremeIonisation ]);
586617 }
587618};
588619
0 commit comments