@@ -332,7 +332,7 @@ class FemtoDreamContainer
332332 }
333333 const float mTMC = FemtoDreamMath::getmT (part1.fdMCParticle (), mMassOne , part2, mMassTwo );
334334
335- if (abs (part1.fdMCParticle ().pdgMCTruth ()) == mPDGOne ) { // Note: all pair-histogramms are filled with MC truth information ONLY in case of non-fake candidates
335+ if (std:: abs (part1.fdMCParticle ().pdgMCTruth ()) == mPDGOne ) { // Note: all pair-histogramms are filled with MC truth information ONLY in case of non-fake candidates
336336 setPair_base<o2::aod::femtodreamMCparticle::MCType::kTruth , isHF>(femtoObsMC, mTMC , part1.fdMCParticle (), part2, mult, multPercentile, use4dplots, extendedplots);
337337 setPair_MC (femtoObsMC, femtoObs, mT , mult, part1.fdMCParticle ().partOriginMCTruth (), part2.flagMc (), smearingByOrigin);
338338 } else {
@@ -346,7 +346,7 @@ class FemtoDreamContainer
346346 }
347347 const float mTMC = FemtoDreamMath::getmT (part1.fdMCParticle (), mMassOne , part2.fdMCParticle (), mMassTwo );
348348
349- if (abs (part1.fdMCParticle ().pdgMCTruth ()) == mPDGOne && abs (part2.fdMCParticle ().pdgMCTruth ()) == mPDGTwo ) { // Note: all pair-histogramms are filled with MC truth information ONLY in case of non-fake candidates
349+ if (std:: abs (part1.fdMCParticle ().pdgMCTruth ()) == mPDGOne && std:: abs (part2.fdMCParticle ().pdgMCTruth ()) == mPDGTwo ) { // Note: all pair-histogramms are filled with MC truth information ONLY in case of non-fake candidates
350350 setPair_base<o2::aod::femtodreamMCparticle::MCType::kTruth , isHF>(femtoObsMC, mTMC , part1.fdMCParticle (), part2.fdMCParticle (), mult, multPercentile, use4dplots, extendedplots);
351351 setPair_MC (femtoObsMC, femtoObs, mT , mult, part1.fdMCParticle ().partOriginMCTruth (), part2.fdMCParticle ().partOriginMCTruth (), smearingByOrigin);
352352 } else {
@@ -364,13 +364,53 @@ class FemtoDreamContainer
364364 template <o2::aod::femtodreamMCparticle::MCType mc>
365365 void setPair_qn_base (const float femtoObs, const float mT , const float multPercentile, const int myQnBin, const int numQnBins = 10 )
366366 {
367- if (myQnBin >= 0 && myQnBin < numQnBins) {
368- mHistogramRegistry ->fill (HIST (mFolderSuffix [mEventType ]) + HIST (o2::aod::femtodreamMCparticle::MCTypeName[mc]) + HIST (" _qn" ) + HIST (" /relPairkstarmTMultMultPercentileQn" ), femtoObs, mT , multPercentile, myQnBin);
369- } else {
370- return ;
367+ mHistogramRegistry ->fill (HIST (mFolderSuffix [mEventType ]) + HIST (o2::aod::femtodreamMCparticle::MCTypeName[mc]) + HIST (" _EP" ) + HIST (" /relPairkstarmTMultMultPercentileQn" ), femtoObs, mT , multPercentile, myEPObs);
368+ }
369+
370+ template <bool isMC, typename T1, typename T2>
371+ void setPair_EP (T1 const & part1, T2 const & part2, const float multPercentile, const bool doQnSeparation, float myEPObs)
372+ {
373+ float femtoObs, femtoObsMC;
374+ // Calculate femto observable and the mT with reconstructed information
375+ if constexpr (mFemtoObs == femtoDreamContainer::Observable::kstar) {
376+ femtoObs = FemtoDreamMath::getkstar (part1, mMassOne , part2, mMassTwo );
377+ }
378+ if (mHighkstarCut > 0 ) {
379+ if (femtoObs > mHighkstarCut ) {
380+ return ;
381+ }
382+ }
383+ const float mT = FemtoDreamMath::getmT (part1, mMassOne , part2, mMassTwo );
384+
385+ if (!doQnSeparation) {
386+ myEPObs = FemtoDreamMath::getPairPhiEP (part1, mMassOne , part2, mMassTwo , myEPObs);
387+ }
388+
389+ if (mHistogramRegistry ) {
390+ setPair_EP_base<o2::aod::femtodreamMCparticle::MCType::kRecon >(femtoObs, mT , multPercentile, myEPObs);
391+
392+ if constexpr (isMC) {
393+ if (part1.has_fdMCParticle () && part2.has_fdMCParticle ()) {
394+ // calculate the femto observable and the mT with MC truth information
395+ if constexpr (mFemtoObs == femtoDreamContainer::Observable::kstar) {
396+ femtoObsMC = FemtoDreamMath::getkstar (part1.fdMCParticle (), mMassOne , part2.fdMCParticle (), mMassTwo );
397+ }
398+ const float mTMC = FemtoDreamMath::getmT (part1.fdMCParticle (), mMassOne , part2.fdMCParticle (), mMassTwo );
399+
400+ if (std::abs (part1.fdMCParticle ().pdgMCTruth ()) == mPDGOne && std::abs (part2.fdMCParticle ().pdgMCTruth ()) == mPDGTwo ) { // Note: all pair-histogramms are filled with MC truth information ONLY in case of non-fake candidates
401+ setPair_EP_base<o2::aod::femtodreamMCparticle::MCType::kTruth >(femtoObsMC, mTMC , multPercentile, myEPObs);
402+ } else {
403+ mHistogramRegistry ->fill (HIST (mFolderSuffix [mEventType ]) + HIST (o2::aod::femtodreamMCparticle::MCTypeName[o2::aod::femtodreamMCparticle::MCType::kTruth ]) + HIST (" /hFakePairsCounter" ), 0 );
404+ }
405+
406+ } else {
407+ mHistogramRegistry ->fill (HIST (mFolderSuffix [mEventType ]) + HIST (o2::aod::femtodreamMCparticle::MCTypeName[o2::aod::femtodreamMCparticle::MCType::kTruth ]) + HIST (" /hNoMCtruthPairsCounter" ), 0 );
408+ }
409+ }
371410 }
372411 }
373412
413+ // while doing mixing for EP, we have to compute the phi angular of a pair according to plane-calibarated second particle
374414 template <bool isMC, typename T1, typename T2>
375415 void setPair_qn (T1 const & part1, T2 const & part2, const float multPercentile, const int myQnBin, const int numQnBins = 10 )
376416 {
@@ -397,8 +437,87 @@ class FemtoDreamContainer
397437 }
398438 const float mTMC = FemtoDreamMath::getmT (part1.fdMCParticle (), mMassOne , part2.fdMCParticle (), mMassTwo );
399439
400- if (abs (part1.fdMCParticle ().pdgMCTruth ()) == mPDGOne && abs (part2.fdMCParticle ().pdgMCTruth ()) == mPDGTwo ) { // Note: all pair-histogramms are filled with MC truth information ONLY in case of non-fake candidates
401- setPair_qn_base<o2::aod::femtodreamMCparticle::MCType::kTruth >(femtoObsMC, mTMC , multPercentile, myQnBin, numQnBins);
440+ if (std::abs (part1.fdMCParticle ().pdgMCTruth ()) == mPDGOne && std::abs (part2.fdMCParticle ().pdgMCTruth ()) == mPDGTwo ) { // Note: all pair-histogramms are filled with MC truth information ONLY in case of non-fake candidates
441+ setPair_EP_base<o2::aod::femtodreamMCparticle::MCType::kTruth >(femtoObsMC, mTMC , multPercentile, EP1);
442+ } else {
443+ mHistogramRegistry ->fill (HIST (mFolderSuffix [mEventType ]) + HIST (o2::aod::femtodreamMCparticle::MCTypeName[o2::aod::femtodreamMCparticle::MCType::kTruth ]) + HIST (" /hFakePairsCounter" ), 0 );
444+ }
445+
446+ } else {
447+ mHistogramRegistry ->fill (HIST (mFolderSuffix [mEventType ]) + HIST (o2::aod::femtodreamMCparticle::MCTypeName[o2::aod::femtodreamMCparticle::MCType::kTruth ]) + HIST (" /hNoMCtruthPairsCounter" ), 0 );
448+ }
449+ }
450+ }
451+ }
452+
453+ // / Pass a pair to the container and compute all the relevant observables in divided qn bins
454+ template <o2::aod::femtodreamMCparticle::MCType mc>
455+ void setPair_3Dqn_base (const float femtoDKout, const float femtoDKside, const float femtoDKlong, const float mT , const float multPercentile, const float myQnBin, const float pairPhiEP)
456+ {
457+ mHistogramRegistry ->fill (HIST (mFolderSuffix [mEventType ]) + HIST (o2::aod::femtodreamMCparticle::MCTypeName[mc]) + HIST (" _3Dqn" ) + HIST (" /relPair3dRmTMultPercentileQnPairphi" ), femtoDKout, femtoDKside, femtoDKlong, mT , multPercentile, myQnBin, pairPhiEP);
458+ }
459+
460+ template <bool isMC, typename T1, typename T2>
461+ void setPair_3Dqn (T1 const & part1, T2 const & part2, const float multPercentile, bool IsSameSpecies, const float myQnBin, const float eventPlane)
462+ {
463+
464+ std::vector<double > k3d = FemtoDreamMath::newpairfunc (part1, mMassOne , part2, mMassTwo , IsSameSpecies);
465+ float DKout = k3d[1 ];
466+ float DKside = k3d[2 ];
467+ float DKlong = k3d[3 ];
468+
469+ const float mT = FemtoDreamMath::getmT (part1, mMassOne , part2, mMassTwo );
470+
471+ const float pairPhiEP = FemtoDreamMath::getPairPhiEP (part1, mMassOne , part2, mMassTwo , eventPlane);
472+
473+ if (mHistogramRegistry ) {
474+ setPair_3Dqn_base<o2::aod::femtodreamMCparticle::MCType::kRecon >(DKout, DKside, DKlong, mT , multPercentile, myQnBin, pairPhiEP);
475+
476+ if constexpr (isMC) {
477+ if (part1.has_fdMCParticle () && part2.has_fdMCParticle ()) {
478+
479+ std::vector<double > k3dMC = FemtoDreamMath::newpairfunc (part1.fdMCParticle (), mMassOne , part2.fdMCParticle (), mMassTwo , IsSameSpecies);
480+ const float mTMC = FemtoDreamMath::getmT (part1.fdMCParticle (), mMassOne , part2.fdMCParticle (), mMassTwo );
481+ const float pairPhiEPMC = FemtoDreamMath::getPairPhiEP (part1.fdMCParticle (), mMassOne , part2.fdMCParticle (), mMassTwo , eventPlane);
482+
483+ if (std::abs (part1.fdMCParticle ().pdgMCTruth ()) == mPDGOne && std::abs (part2.fdMCParticle ().pdgMCTruth ()) == mPDGTwo ) { // Note: all pair-histogramms are filled with MC truth information ONLY in case of non-fake candidates
484+ setPair_3Dqn_base<o2::aod::femtodreamMCparticle::MCType::kTruth >(k3dMC[1 ], k3dMC[2 ], k3dMC[3 ], mTMC , multPercentile, myQnBin, pairPhiEPMC);
485+ } else {
486+ mHistogramRegistry ->fill (HIST (mFolderSuffix [mEventType ]) + HIST (o2::aod::femtodreamMCparticle::MCTypeName[o2::aod::femtodreamMCparticle::MCType::kTruth ]) + HIST (" /hFakePairsCounter" ), 0 );
487+ }
488+
489+ } else {
490+ mHistogramRegistry ->fill (HIST (mFolderSuffix [mEventType ]) + HIST (o2::aod::femtodreamMCparticle::MCTypeName[o2::aod::femtodreamMCparticle::MCType::kTruth ]) + HIST (" /hNoMCtruthPairsCounter" ), 0 );
491+ }
492+ }
493+ }
494+ }
495+
496+ template <bool isMC, typename T1, typename T2>
497+ void setPair_3Dqn (T1 const & part1, T2 const & part2, const float multPercentile, bool IsSameSpecies, const float myQnBin, const float EP1, const float EP2)
498+ {
499+
500+ std::vector<double > k3d = FemtoDreamMath::newpairfunc (part1, mMassOne , part2, mMassTwo , IsSameSpecies);
501+ float DKout = k3d[1 ];
502+ float DKside = k3d[2 ];
503+ float DKlong = k3d[3 ];
504+
505+ const float mT = FemtoDreamMath::getmT (part1, mMassOne , part2, mMassTwo );
506+
507+ const float pairPhiEP = FemtoDreamMath::getPairPhiEP (part1, mMassOne , part2, mMassTwo , EP1, EP2);
508+
509+ if (mHistogramRegistry ) {
510+ setPair_3Dqn_base<o2::aod::femtodreamMCparticle::MCType::kRecon >(DKout, DKside, DKlong, mT , multPercentile, myQnBin, pairPhiEP);
511+
512+ if constexpr (isMC) {
513+ if (part1.has_fdMCParticle () && part2.has_fdMCParticle ()) {
514+
515+ std::vector<double > k3dMC = FemtoDreamMath::newpairfunc (part1.fdMCParticle (), mMassOne , part2.fdMCParticle (), mMassTwo , IsSameSpecies);
516+ const float mTMC = FemtoDreamMath::getmT (part1.fdMCParticle (), mMassOne , part2.fdMCParticle (), mMassTwo );
517+ const float pairPhiEPMC = FemtoDreamMath::getPairPhiEP (part1.fdMCParticle (), mMassOne , part2.fdMCParticle (), mMassTwo , EP1, EP2);
518+
519+ if (std::abs (part1.fdMCParticle ().pdgMCTruth ()) == mPDGOne && std::abs (part2.fdMCParticle ().pdgMCTruth ()) == mPDGTwo ) { // Note: all pair-histogramms are filled with MC truth information ONLY in case of non-fake candidates
520+ setPair_3Dqn_base<o2::aod::femtodreamMCparticle::MCType::kTruth >(k3dMC[1 ], k3dMC[2 ], k3dMC[3 ], mTMC , multPercentile, myQnBin, pairPhiEPMC);
402521 } else {
403522 mHistogramRegistry ->fill (HIST (mFolderSuffix [mEventType ]) + HIST (o2::aod::femtodreamMCparticle::MCTypeName[o2::aod::femtodreamMCparticle::MCType::kTruth ]) + HIST (" /hFakePairsCounter" ), 0 );
404523 }
0 commit comments