@@ -43,7 +43,7 @@ namespace
4343};
4444
4545struct miniCasc {
46- bool isOmega ;
46+ bool fillOmega ;
4747 float pt;
4848 float eta;
4949 float phi;
@@ -84,6 +84,10 @@ struct strangenessTrackingQC {
8484 HistogramRegistry registry{
8585 " registry" ,
8686 {
87+ {" omegaMassFull" , " ; Mass (GeV/#it{c}^{2}); Counts" , {HistType::kTH1F , {{125 , 1.650 , 1.700 }}}},
88+ {" xiMassFull" , " ; Mass (GeV/#it{c}^{2}); Counts" , {HistType::kTH1F , {{125 , 1.296 , 1.346 }}}},
89+ {" omegaMassTracked" , " ; Mass (GeV/#it{c}^{2}); Counts" , {HistType::kTH1F , {{125 , 1.650 , 1.700 }}}},
90+ {" xiMassTracked" , " ; Mass (GeV/#it{c}^{2}); Counts" , {HistType::kTH1F , {{125 , 1.296 , 1.346 }}}},
8791 {" omegaHistFull" , " ; #it{p}_{T} (GeV/#it{c}); Radius (cm); Mass" , {HistType::kTH3F , {{ptBins, decayRadBins, omegaMassBins}}}},
8892 {" xiHistFull" , " ; #it{p}_{T} (GeV/#it{c}); Radius (cm); Mass" , {HistType::kTH3F , {{ptBins, decayRadBins, xiMassBins}}}},
8993 {" xiHistTracked" , " ; #it{p}_{T} (GeV/#it{c}); Radius (cm); Mass" , {HistType::kTH3F , {{ptBins, decayRadBins, xiMassBins}}}},
@@ -98,15 +102,42 @@ struct strangenessTrackingQC {
98102 return std::hypot (dcaInfo[0 ], dcaInfo[1 ]);
99103 }
100104
105+ template <typename T>
106+ bool qualityTrackSelection (const T& track)
107+ {
108+ if (std::abs (track.eta ()) > 0.9 ) {
109+ return false ;
110+ }
111+ if (track.tpcNClsFound () < cfgCutNclusTPC) {
112+ return false ;
113+ }
114+ return true ;
115+ }
116+
117+ float computeMassMother (const float massA, const float massB, const std::array<float , 3 >& momA, const std::array<float , 3 >& momB, const std::array<float , 3 >& momMother) const
118+ {
119+ float eA = std::hypot (massA, std::hypot (momA[0 ], momA[1 ], momA[2 ]));
120+ float eB = std::hypot (massB, std::hypot (momB[0 ], momB[1 ], momB[2 ]));
121+ float lmomMotherl = std::hypot (momMother[0 ], momMother[1 ], momMother[2 ]);
122+ float eMother = eA + eB;
123+ return std::sqrt (eMother * eMother - lmomMotherl * lmomMotherl);
124+ }
125+
101126 template <class TCasc >
102127 bool buildCascade (TCasc const & casc, CollisionCandidates::iterator const & collision, aod::V0s const &, TrackCandidates const &, miniCasc& miniCasc)
103128 {
104129 const auto & v0 = casc.template v0_as <aod::V0s>();
105130 const auto & bachelor = casc.template bachelor_as <TrackCandidates>();
106131 const auto & ptrack = v0.template posTrack_as <TrackCandidates>();
107132 const auto & ntrack = v0.template negTrack_as <TrackCandidates>();
133+ if (!qualityTrackSelection (ptrack) || !qualityTrackSelection (ntrack) || !qualityTrackSelection (bachelor)) {
134+ return false ;
135+ }
108136 const auto & protonTrack = bachelor.sign () > 0 ? ntrack : ptrack;
109137 const auto & pionTrack = bachelor.sign () > 0 ? ptrack : ntrack;
138+ if (std::abs (protonTrack.tpcNSigmaPr ()) > 3 || std::abs (pionTrack.tpcNSigmaPi ()) > 3 ) {
139+ return false ;
140+ }
110141 const auto primaryVertex = getPrimaryVertex (collision);
111142 std::array<float , 3 > pvPos = {primaryVertex.getX (), primaryVertex.getY (), primaryVertex.getZ ()};
112143
@@ -149,18 +180,12 @@ struct strangenessTrackingQC {
149180 }
150181
151182 miniCasc.pt = std::hypot (cascMom[0 ], cascMom[1 ]);
183+ miniCasc.massOmega = computeMassMother (constants::physics::MassLambda0, constants::physics::MassKaonCharged, v0Mom, bachelorMom, cascMom);
184+ miniCasc.massXi = computeMassMother (constants::physics::MassLambda0, constants::physics::MassPionCharged, v0Mom, bachelorMom, cascMom);
152185
153- // look if the cascade is in the Xi mass window
154- std::array<double , 2 > masses;
155- float eV0 = std::sqrt (RecoDecay::p2 (v0Mom) + o2::constants::physics::MassLambda0 * o2::constants::physics::MassLambda0);
156- float eKBach = std::sqrt (RecoDecay::p2 (bachelorMom) + o2::constants::physics::MassKPlus * o2::constants::physics::MassKPlus);
157- float ePiBach = std::sqrt (RecoDecay::p2 (bachelorMom) + o2::constants::physics::MassPiPlus * o2::constants::physics::MassPiPlus);
158- miniCasc.massOmega = std::sqrt ((eV0 + eKBach) * (eV0 + eKBach) - RecoDecay::p2 (cascMom));
159- miniCasc.massXi = std::sqrt ((eV0 + ePiBach) * (eV0 + ePiBach) - RecoDecay::p2 (cascMom));
160-
161- miniCasc.isOmega = false ;
162- if (TMath::Abs (miniCasc.massXi - constants::physics::MassXiMinus) > 0.005 ) {
163- miniCasc.isOmega = true ;
186+ miniCasc.fillOmega = false ;
187+ if (TMath::Abs (miniCasc.massXi - constants::physics::MassXiMinus) > 0.01 && std::abs (bachelor.tpcNSigmaKa ()) < 3 ) {
188+ miniCasc.fillOmega = true ;
164189 }
165190
166191 miniCasc.dcaXYCasc = dcaToPV (pvPos, trackParCovCasc);
@@ -199,8 +224,6 @@ struct strangenessTrackingQC {
199224 ccdb->setCaching (true );
200225 ccdb->setLocalObjectValidityChecking ();
201226 ccdb->setFatalWhenNull (false );
202- // lut = o2::base::MatLayerCylSet::rectifyPtrFromFile(ccdb->get<o2::base::MatLayerCylSet>("GLO/Param/MatLUT"));
203-
204227 m_fitter.setPropagateToPCA (true );
205228 m_fitter.setMaxR (200 .);
206229 m_fitter.setMinParamChange (1e-3 );
@@ -216,10 +239,15 @@ struct strangenessTrackingQC {
216239
217240 void process (CollisionCandidates const & collisions, aod::AssignedTrackedCascades const & trackedCascades, aod::Cascades const & cascades, aod::V0s const & v0s, TrackCandidates const & tracks, aod::BCsWithTimestamps const &)
218241 {
242+
219243 for (const auto & trackedCascade : trackedCascades) {
220244 miniCasc miniCasc;
221245 const auto & casc = trackedCascade.cascade ();
222246 auto collision = trackedCascade.collision_as <CollisionCandidates>();
247+ if (!collision.sel8 () || std::abs (collision.posZ ()) > 10 ) {
248+ continue ;
249+ }
250+ initCCDB (collision.bc_as <aod::BCsWithTimestamps>());
223251 if (buildCascade (casc, collision, v0s, tracks, miniCasc)) {
224252
225253 // compute the dca of the tracked cascade
@@ -230,23 +258,29 @@ struct strangenessTrackingQC {
230258 auto pvPosArr = std::array<float , 3 >{pvPos.getX (), pvPos.getY (), pvPos.getZ ()};
231259 miniCasc.dcaXYTracked = dcaToPV (pvPosArr, trackCovTrk);
232260 // fill the histograms
233- if (miniCasc.isOmega ) {
261+ if (miniCasc.fillOmega ) {
262+ registry.fill (HIST (" omegaMassTracked" ), miniCasc.massOmega );
234263 registry.fill (HIST (" omegaHistTracked" ), miniCasc.pt , miniCasc.radius , miniCasc.massOmega );
235- } else {
236- registry.fill (HIST (" xiHistTracked" ), miniCasc.pt , miniCasc.radius , miniCasc.massXi );
237264 }
265+ registry.fill (HIST (" xiMassTracked" ), miniCasc.massXi );
266+ registry.fill (HIST (" xiHistTracked" ), miniCasc.pt , miniCasc.radius , miniCasc.massXi );
238267 }
239268 }
240269
241270 for (auto & cascade : cascades) {
242271 miniCasc miniCasc;
243272 auto collision = cascade.collision_as <CollisionCandidates>();
273+ if (!collision.sel8 () || std::abs (collision.posZ ()) > 10 ) {
274+ continue ;
275+ }
276+ initCCDB (collision.bc_as <aod::BCsWithTimestamps>());
244277 if (buildCascade (cascade, collision, v0s, tracks, miniCasc)) {
245- if (miniCasc.isOmega ) {
278+ if (miniCasc.fillOmega ) {
279+ registry.fill (HIST (" omegaMassFull" ), miniCasc.massOmega );
246280 registry.fill (HIST (" omegaHistFull" ), miniCasc.pt , miniCasc.radius , miniCasc.massOmega );
247- } else {
248- registry.fill (HIST (" xiHistFull" ), miniCasc.pt , miniCasc.radius , miniCasc.massXi );
249281 }
282+ registry.fill (HIST (" xiMassFull" ), miniCasc.massXi );
283+ registry.fill (HIST (" xiHistFull" ), miniCasc.pt , miniCasc.radius , miniCasc.massXi );
250284 }
251285 }
252286 }
0 commit comments