@@ -431,73 +431,86 @@ struct nucleiFilter {
431431 h2TPCsignal[iN]->Fill (track.sign () * track.tpcInnerParam () * fixTPCrigidity, track.tpcSignal ());
432432 }
433433 }
434+ //
435+ // fill QA histograms
436+ //
437+ qaHists.fill (HIST (" fTPCsignal" ), track.sign () * track.tpcInnerParam () * fixTPCrigidity, track.tpcSignal ());
434438
435- for (const auto & track : tracks) {
436- if (track.itsNCls () < cfgCutNclusITS ||
437- track.tpcNClsFound () < cfgCutNclusTPC ||
438- std::abs (track.dcaXY ()) > cfgCutDCAxy ||
439- std::abs (track.dcaZ ()) > cfgCutDCAz ||
440- std::abs (track.eta ()) > cfgCutEta) {
439+ } // end loop over tracks
440+
441+ for (const auto & track : tracks) {
442+ if (track.itsNCls () < cfgCutNclusITS ||
443+ track.tpcNClsFound () < cfgCutNclusTPC ||
444+ std::abs (track.dcaXY ()) > cfgCutDCAxy ||
445+ std::abs (track.dcaZ ()) > cfgCutDCAz ||
446+ std::abs (track.eta ()) > cfgCutEta) {
447+ continue ;
448+ }
449+ const ROOT::Math::PtEtaPhiMVector trackVector (track.pt (), track.eta (), track.phi (), constants::physics::MassPiMinus);
450+ for (size_t iH3{0 }; iH3 < h3vectors.size (); ++iH3) {
451+ if (h3indices[iH3] == track.globalIndex ()) {
441452 continue ;
442453 }
443- const ROOT::Math::PtEtaPhiMVector trackVector (track.pt (), track.eta (), track.phi (), constants::physics::MassPiMinus);
444- for (size_t iH3{0 }; iH3 < h3vectors.size (); ++iH3) {
445- if (h3indices[iH3] == track.globalIndex ()) {
446- continue ;
447- }
448- const auto & h3vector = h3vectors[iH3];
449- auto pivector = trackVector;
450- auto cm = h3vector + trackVector;
451- const ROOT::Math::Boost boost (cm.BoostToCM ());
452- boost (pivector);
453- if (pivector.P () < cfgCutKstar) {
454- keepEvent[kTritonFemto ] = true ;
455- break ;
456- }
454+ const auto & h3vector = h3vectors[iH3];
455+ auto pivector = trackVector;
456+ auto cm = h3vector + trackVector;
457+ const ROOT::Math::Boost boost (cm.BoostToCM ());
458+ boost (pivector);
459+ if (pivector.P () < cfgCutKstar) {
460+ keepEvent[kTritonFemto ] = true ;
461+ break ;
457462 }
458463 }
464+ }
459465
460- for (const auto & v0 : v0s) {
461- const auto & posTrack = v0.posTrack_as <TrackCandidates>();
462- const auto & negTrack = v0.negTrack_as <TrackCandidates>();
463- if ((posTrack.itsNCls () < cfgCutNclusITS || posTrack.tpcNClsFound () < cfgCutNclusTPC) &&
464- (negTrack.itsNCls () < cfgCutNclusITS || negTrack.tpcNClsFound () < cfgCutNclusTPC)) {
465- continue ;
466- }
467- float nSigmas[2 ]{
468- cfgBetheBlochParams->get (2 , 5u ) > 0 .f ? getNsigma (posTrack, 2 , 0 ) : posTrack.tpcNSigmaHe (),
469- cfgBetheBlochParams->get (2 , 5u ) > 0 .f ? getNsigma (negTrack, 2 , 1 ) : negTrack.tpcNSigmaHe ()};
470- if ((nSigmas[0 ] < cfgCutsPID->get (2 , 0u ) || nSigmas[0 ] > cfgCutsPID->get (2 , 1u )) &&
471- (nSigmas[1 ] < cfgCutsPID->get (2 , 0u ) || nSigmas[1 ] > cfgCutsPID->get (2 , 1u ))) {
472- continue ;
473- }
474- int n2bodyVtx = fitter2body.process (getTrackParCov (posTrack), getTrackParCov (negTrack));
475- if (n2bodyVtx == 0 ) {
476- continue ;
477- }
478- auto vtxXYZ = fitter2body.getPCACandidate ();
479- o2::gpu::gpustd::array<float , 3 > mom = {0 .};
480- vtxXYZ[0 ] -= collision.posX ();
481- vtxXYZ[1 ] -= collision.posY ();
482- vtxXYZ[2 ] -= collision.posZ ();
483- auto momTrackParCov = fitter2body.createParentTrackPar ();
484- momTrackParCov.getPxPyPzGlo (mom);
485- double cosPA = (vtxXYZ[0 ] * mom[0 ] + vtxXYZ[1 ] * mom[1 ] + vtxXYZ[2 ] * mom[2 ]) /
486- std::sqrt ((vtxXYZ[0 ] * vtxXYZ[0 ] + vtxXYZ[1 ] * vtxXYZ[1 ] + vtxXYZ[2 ] * vtxXYZ[2 ]) *
487- (mom[0 ] * mom[0 ] + mom[1 ] * mom[1 ] + mom[2 ] * mom[2 ]));
488- if (cosPA < cfgCutCosPAheV0) {
489- continue ;
490- }
491- keepEvent[kHeV0 ] = true ;
492- break ;
466+ for (const auto & v0 : v0s) {
467+ const auto & posTrack = v0.posTrack_as <TrackCandidates>();
468+ const auto & negTrack = v0.negTrack_as <TrackCandidates>();
469+ if ((posTrack.itsNCls () < cfgCutNclusITS || posTrack.tpcNClsFound () < cfgCutNclusTPC) &&
470+ (negTrack.itsNCls () < cfgCutNclusITS || negTrack.tpcNClsFound () < cfgCutNclusTPC)) {
471+ continue ;
493472 }
473+ float nSigmas[2 ]{
474+ cfgBetheBlochParams->get (2 , 5u ) > 0 .f ? getNsigma (posTrack, 2 , 0 ) : posTrack.tpcNSigmaHe (),
475+ cfgBetheBlochParams->get (2 , 5u ) > 0 .f ? getNsigma (negTrack, 2 , 1 ) : negTrack.tpcNSigmaHe ()};
494476
495- //
496- // fill QA histograms
497- //
498- qaHists.fill (HIST (" fTPCsignal" ), track.sign () * track.tpcInnerParam () * fixTPCrigidity, track.tpcSignal ());
477+ bool isHe3 = nSigmas[0 ] > cfgCutsPID->get (2 , 0u ) && nSigmas[0 ] < cfgCutsPID->get (2 , 1u );
478+ bool isAntiHe3 = nSigmas[1 ] > cfgCutsPID->get (2 , 0u ) && nSigmas[1 ] < cfgCutsPID->get (2 , 1u );
479+ if (!isHe3 && !isAntiHe3) {
480+ continue ;
481+ }
482+ auto & he3Track = isHe3 ? posTrack : negTrack;
483+ auto & piTrack = isHe3 ? negTrack : posTrack;
499484
500- } // end loop over tracks
485+ int n2bodyVtx = fitter2body.process (getTrackParCov (he3Track), getTrackParCov (piTrack));
486+ if (n2bodyVtx == 0 ) {
487+ continue ;
488+ }
489+ auto vtxXYZ = fitter2body.getPCACandidate ();
490+ vtxXYZ[0 ] -= collision.posX ();
491+ vtxXYZ[1 ] -= collision.posY ();
492+ vtxXYZ[2 ] -= collision.posZ ();
493+
494+ o2::gpu::gpustd::array<float , 3 > momHe3 = {0 .};
495+ o2::gpu::gpustd::array<float , 3 > momPi = {0 .};
496+ o2::gpu::gpustd::array<float , 3 > momTot = {0 .};
497+ auto & hePropTrack = fitter2body.getTrack (0 );
498+ auto & piPropTrack = fitter2body.getTrack (1 );
499+ hePropTrack.getPxPyPzGlo (momHe3);
500+ piPropTrack.getPxPyPzGlo (momPi);
501+ for (int i = 0 ; i < 3 ; ++i) {
502+ momHe3[i] *= 2 ;
503+ momTot[i] = momHe3[i] + momPi[i];
504+ }
505+ double cosPA = (vtxXYZ[0 ] * momTot[0 ] + vtxXYZ[1 ] * momTot[1 ] + vtxXYZ[2 ] * momTot[2 ]) /
506+ std::sqrt ((vtxXYZ[0 ] * vtxXYZ[0 ] + vtxXYZ[1 ] * vtxXYZ[1 ] + vtxXYZ[2 ] * vtxXYZ[2 ]) *
507+ (momTot[0 ] * momTot[0 ] + momTot[1 ] * momTot[1 ] + momTot[2 ] * momTot[2 ]));
508+ if (cosPA < cfgCutCosPAheV0) {
509+ continue ;
510+ }
511+ keepEvent[kHeV0 ] = true ;
512+ break ;
513+ }
501514
502515 // fH3L3Body trigger
503516 auto bc = collision.bc_as <aod::BCsWithTimestamps>();
0 commit comments