@@ -75,7 +75,7 @@ struct CorrelationTask {
7575 O2_DEFINE_CONFIGURABLE (cfgTriggerCharge, int , 0 , " Select on charge of trigger particle: 0 = all; 1 = positive; -1 = negative" );
7676 O2_DEFINE_CONFIGURABLE (cfgAssociatedCharge, int , 0 , " Select on charge of associated particle: 0 = all; 1 = positive; -1 = negative" );
7777 O2_DEFINE_CONFIGURABLE (cfgPairCharge, int , 0 , " Select on charge of particle pair: 0 = all; 1 = like sign; -1 = unlike sign" );
78- O2_DEFINE_CONFIGURABLE (cfgCorrelateTheSame , int , 0 , " Correlate the d0 with d0 or d0bar with d0bar, 0 = no, 1 = yes " );
78+ O2_DEFINE_CONFIGURABLE (cfgCorrelationMethod , int , 0 , " Correlation method, 0 = all, 1 = dd, 2 = ddbar " );
7979
8080 O2_DEFINE_CONFIGURABLE (cfgTwoTrackCut, float , -1 , " Two track cut: -1 = off; >0 otherwise distance value (suggested: 0.02)" );
8181 O2_DEFINE_CONFIGURABLE (cfgTwoTrackCutMinRadius, float , 0 .8f , " Two track cut: radius in m from which two track cuts are applied" );
@@ -157,11 +157,11 @@ struct CorrelationTask {
157157 {
158158 registry.add (" yields" , " multiplicity/centrality vs pT vs eta" , {HistType::kTH3F , {{100 , 0 , 100 , " /multiplicity/centrality" }, {40 , 0 , 20 , " p_{T}" }, {100 , -2 , 2 , " #eta" }}});
159159 registry.add (" etaphi" , " multiplicity/centrality vs eta vs phi" , {HistType::kTH3F , {{100 , 0 , 100 , " multiplicity/centrality" }, {100 , -2 , 2 , " #eta" }, {200 , 0 , o2::constants::math::TwoPI, " #varphi" }}});
160- if (doprocessSame2ProngDerived || doprocessMixed2ProngDerived || doprocessSame2Prong2Prong ) {
160+ if (doprocessSame2ProngDerived || doprocessSame2Prong2Prong || doprocessSame2Prong2ProngML ) {
161161 registry.add (" yieldsTrigger" , " multiplicity/centrality vs pT vs eta (triggers)" , {HistType::kTH3F , {{100 , 0 , 100 , " /multiplicity/centrality" }, {40 , 0 , 20 , " p_{T}" }, {100 , -2 , 2 , " #eta" }}});
162162 registry.add (" etaphiTrigger" , " multiplicity/centrality vs eta vs phi (triggers)" , {HistType::kTH3F , {{100 , 0 , 100 , " multiplicity/centrality" }, {100 , -2 , 2 , " #eta" }, {200 , 0 , o2::constants::math::TwoPI, " #varphi" }}});
163163 registry.add (" invMass" , " 2-prong invariant mass (GeV/c^2)" , {HistType::kTH3F , {axisInvMassHistogram, axisPtTrigger, axisMultiplicity}});
164- if (doprocessSame2Prong2Prong) {
164+ if (doprocessSame2Prong2Prong || doprocessSame2Prong2ProngML ) {
165165 registry.add (" invMassTwoPart" , " 2D 2-prong invariant mass (GeV/c^2)" , {HistType::kTHnSparseF , {axisInvMassHistogram, axisInvMassHistogram, axisPtTrigger, axisPtAssoc, axisMultiplicity}});
166166 }
167167 }
@@ -204,9 +204,9 @@ struct CorrelationTask {
204204 userAxis.emplace_back (axisInvMass, " m (GeV/c^2)" );
205205 userMixingAxis.emplace_back (axisInvMass, " m (GeV/c^2)" );
206206 }
207- if (doprocessSame2Prong2Prong)
207+ if (doprocessSame2Prong2Prong || doprocessSame2Prong2ProngML )
208208 userAxis.emplace_back (axisInvMass, " m (GeV/c^2)" );
209- if (doprocessMixed2Prong2Prong)
209+ if (doprocessMixed2Prong2Prong || doprocessMixed2Prong2ProngML )
210210 userMixingAxis.emplace_back (axisInvMass, " m (GeV/c^2)" );
211211
212212 same.setObject (new CorrelationContainer (" sameEvent" , " sameEvent" , corrAxis, effAxis, userAxis));
@@ -263,18 +263,45 @@ struct CorrelationTask {
263263 void fillQA (const TCollision& collision, float multiplicity, const TTracks1& tracks1, const TTracks2& tracks2)
264264 {
265265 for (const auto & track1 : tracks1) {
266- if constexpr (std::experimental::is_detected<HasInvMass, typename TTracks1::iterator>::value) {
267- if constexpr (std::experimental::is_detected<HasDecay, typename TTracks1::iterator>::value) {
268- if (cfgDecayParticleMask != 0 && (cfgDecayParticleMask & (1u << static_cast <uint32_t >(track1.decay ()))) == 0u )
269- continue ;
270- }
266+ if constexpr (std::experimental::is_detected<HasInvMass, typename TTracks1::iterator>::value && std::experimental::is_detected<HasDecay, typename TTracks1::iterator>::value) {
267+ if (cfgDecayParticleMask != 0 && (cfgDecayParticleMask & (1u << static_cast <uint32_t >(track1.decay ()))) == 0u )
268+ continue ;
271269 registry.fill (HIST (" invMass" ), track1.invMass (), track1.pt (), multiplicity);
272270 for (const auto & track2 : tracks2) {
273271 if constexpr (std::experimental::is_detected<HasInvMass, typename TTracks2::iterator>::value && std::experimental::is_detected<HasDecay, typename TTracks2::iterator>::value) {
274- if (doprocessSame2Prong2Prong || doprocessMixed2Prong2Prong) {
272+ if (doprocessSame2Prong2Prong || doprocessMixed2Prong2Prong || doprocessSame2Prong2ProngML || doprocessMixed2Prong2ProngML ) {
275273 if (cfgDecayParticleMask != 0 && (cfgDecayParticleMask & (1u << static_cast <uint32_t >(track1.decay ()))) == 0u )
276274 continue ;
277- if ((track1.decay () != 0 ) || (track2.decay () != 1 )) // D0 in trk1, D0bar in trk2
275+
276+ if constexpr (std::experimental::is_detected<HasProng0Id, typename TTracks1::iterator>::value) {
277+ if constexpr (std::experimental::is_detected<HasProng0Id, typename TTracks2::iterator>::value) {
278+ if (track1.cfTrackProng0Id () == track2.cfTrackProng0Id ()) {
279+ continue ;
280+ }
281+ }
282+ if constexpr (std::experimental::is_detected<HasProng1Id, typename TTracks2::iterator>::value) {
283+ if (track1.cfTrackProng0Id () == track2.cfTrackProng1Id ()) {
284+ continue ;
285+ }
286+ }
287+ }
288+
289+ if constexpr (std::experimental::is_detected<HasProng1Id, typename TTracks1::iterator>::value) {
290+ if constexpr (std::experimental::is_detected<HasProng0Id, typename TTracks2::iterator>::value) {
291+ if (track1.cfTrackProng1Id () == track2.cfTrackProng0Id ()) {
292+ continue ;
293+ }
294+ }
295+ if constexpr (std::experimental::is_detected<HasProng1Id, typename TTracks2::iterator>::value) {
296+ if (track1.cfTrackProng1Id () == track2.cfTrackProng1Id ()) {
297+ continue ;
298+ }
299+ }
300+ } // no shared prong for two mothers
301+
302+ if (cfgCorrelationMethod == 1 && track1.decay () != track2.decay ())
303+ continue ;
304+ if (cfgCorrelationMethod == 2 && track1.decay () == track2.decay ())
278305 continue ;
279306 registry.fill (HIST (" invMassTwoPart" ), track1.invMass (), track2.invMass (), track1.pt (), track2.pt (), multiplicity);
280307 }
@@ -386,7 +413,7 @@ struct CorrelationTask {
386413 continue ;
387414 }
388415 }
389- }
416+ } // ML selection
390417
391418 if (cfgMassAxis) {
392419 if constexpr (std::experimental::is_detected<HasInvMass, typename TTracks1::iterator>::value)
@@ -430,11 +457,10 @@ struct CorrelationTask {
430457 }
431458
432459 if constexpr (std::experimental::is_detected<HasDecay, typename TTracks1::iterator>::value && std::experimental::is_detected<HasDecay, typename TTracks2::iterator>::value) {
433- if (cfgCorrelateTheSame == 0 && (doprocessSame2Prong2Prong || doprocessMixed2Prong2Prong) && (track1.decay () == track2.decay () || track1.decay () > 1 || track2.decay () > 1 )) {
434- continue ; // D0 and anti-D0 selection
435- } else if (cfgCorrelateTheSame == 1 && (doprocessSame2Prong2Prong || doprocessMixed2Prong2Prong) && (track1.decay () != track2.decay () || track1.decay () > 1 || track2.decay () > 1 )) {
436- continue ; // the same particle selection
437- }
460+ if (cfgCorrelationMethod == 1 && track1.decay () != track2.decay ())
461+ continue ;
462+ if (cfgCorrelationMethod == 2 && track1.decay () == track2.decay ())
463+ continue ;
438464 }
439465
440466 if constexpr (std::experimental::is_detected<HasProng0Id, typename TTracks1::iterator>::value) {
@@ -511,10 +537,10 @@ struct CorrelationTask {
511537 continue ;
512538 }
513539 }
514- }
540+ } // ML selection
515541
516542 // last param is the weight
517- if (cfgMassAxis && (doprocessSame2Prong2Prong || doprocessMixed2Prong2Prong) && !(doprocessSame2ProngDerived || doprocessMixed2ProngDerived)) {
543+ if (cfgMassAxis && (doprocessSame2Prong2Prong || doprocessMixed2Prong2Prong || doprocessSame2Prong2ProngML || doprocessMixed2Prong2ProngML ) && !(doprocessSame2ProngDerived || doprocessMixed2ProngDerived)) {
518544 if constexpr (std::experimental::is_detected<HasInvMass, typename TTracks1::iterator>::value && std::experimental::is_detected<HasInvMass, typename TTracks2::iterator>::value)
519545 target->getPairHist ()->Fill (step, track1.eta () - track2.eta (), track2.pt (), track1.pt (), multiplicity, deltaPhi, posZ, track2.invMass (), track1.invMass (), associatedWeight);
520546 else
0 commit comments