Skip to content

Commit d0b09fe

Browse files
torkjellsdatterIda Torkjellsdatter Storehaugalibuild
authored
[PWGDQ] dqEfficiency_withAssoc/VarManager: Add MC-truth secondary vertex for B→J/ψK triplet quantities (#13919)
Co-authored-by: Ida Torkjellsdatter Storehaug <idats@eduroam-193-157-242-223.wlan.uio.no> Co-authored-by: ALICE Action Bot <alibuild@cern.ch>
1 parent fe31180 commit d0b09fe

File tree

4 files changed

+171
-7
lines changed

4 files changed

+171
-7
lines changed

PWGDQ/Core/HistogramsLibrary.cxx

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2031,6 +2031,36 @@ void o2::aod::dqhistograms::DefineHistograms(HistogramManager* hm, const char* h
20312031
hm->AddHistogram(histClass, "hMass_defaultDileptonMass_Chi2OverNDFGeo", "", false, 1000, 3.0, 5.0, VarManager::kQuadDefaultDileptonMass, 150, -5, 10., VarManager::kKFChi2OverNDFGeo);
20322032
}
20332033
}
2034+
if (subGroupStr.Contains("mctruth")) {
2035+
hm->AddHistogram(histClass, "PtMC", "MC pT", false, 200, 0.0, 20.0, VarManager::kMCPt);
2036+
hm->AddHistogram(histClass, "EtaMC", "MC #eta", false, 50, -5.0, 5.0, VarManager::kMCEta);
2037+
hm->AddHistogram(histClass, "PhiMC", "MC #phi", false, 50, -6.3, 6.3, VarManager::kMCPhi);
2038+
hm->AddHistogram(histClass, "YMC", "MC y", false, 50, -5.0, 5.0, VarManager::kMCY);
2039+
hm->AddHistogram(histClass, "PtMC_YMC", "MC pT vs MC y", false, 120, 0.0, 30.0, VarManager::kMCPt, 1000, -5.0, 5.0, VarManager::kMCY);
2040+
hm->AddHistogram(histClass, "EtaMC_PtMC", "", false, 40, -2.0, 2.0, VarManager::kMCEta, 200, 0.0, 20.0, VarManager::kMCPt);
2041+
hm->AddHistogram(histClass, "VzMC", "MC vz", false, 100, -15.0, 15.0, VarManager::kMCVz);
2042+
hm->AddHistogram(histClass, "VzMC_VtxZMC", "MC vz vs MC vtxZ", false, 50, -15.0, 15.0, VarManager::kMCVz, 50, -15.0, 15.0, VarManager::kMCVtxZ);
2043+
hm->AddHistogram(histClass, "LzMC", "", false, 1000, 0.0, 2.0, VarManager::kMCVertexingLz);
2044+
hm->AddHistogram(histClass, "LxyMC", "", false, 1000, 0.0, 2.0, VarManager::kMCVertexingLxy);
2045+
hm->AddHistogram(histClass, "LxyzMC", "", false, 1000, 0.0, 2.0, VarManager::kMCVertexingLxyz);
2046+
hm->AddHistogram(histClass, "LxyMCExpected", "", false, 1000, 0.0, 2.0, VarManager::kMCLxyExpected);
2047+
hm->AddHistogram(histClass, "LxyzMCExpected", "", false, 1000, 0.0, 2.0, VarManager::kMCLxyzExpected);
2048+
hm->AddHistogram(histClass, "LxyMC_LxyMCExpected", "", false, 500, 0.0, 2.0, VarManager::kMCVertexingLxy, 500, 0.0, 2.0, VarManager::kMCLxyExpected);
2049+
hm->AddHistogram(histClass, "LxyzMC_LxyzMCExpected", "", false, 500, 0.0, 2.0, VarManager::kMCVertexingLxyz, 500, 0.0, 2.0, VarManager::kMCLxyzExpected);
2050+
hm->AddHistogram(histClass, "TauzMC", "", false, 4000, -0.01, 0.01, VarManager::kMCVertexingTauz);
2051+
hm->AddHistogram(histClass, "TauxyMC", "", false, 4000, -0.01, 0.01, VarManager::kMCVertexingTauxy);
2052+
hm->AddHistogram(histClass, "TauzMC_PtMC", "", false, 500, -0.01, 0.01, VarManager::kMCVertexingTauz, 200, 0.0, 20.0, VarManager::kMCPt);
2053+
hm->AddHistogram(histClass, "TauxyMC_PtMC", "", false, 500, -0.01, 0.01, VarManager::kMCVertexingTauxy, 200, 0.0, 20.0, VarManager::kMCPt);
2054+
hm->AddHistogram(histClass, "TauzProjectedMC", "", false, 4000, -0.5, 0.5, VarManager::kMCVertexingTauzProjected);
2055+
hm->AddHistogram(histClass, "TauxyProjectedMC", "", false, 4000, -0.5, 0.5, VarManager::kMCVertexingTauxyProjected);
2056+
hm->AddHistogram(histClass, "TauzProjectedMC_PtMC", "", false, 500, -0.5, 0.5, VarManager::kMCVertexingTauzProjected, 200, 0.0, 20.0, VarManager::kMCPt);
2057+
hm->AddHistogram(histClass, "TauxyProjectedMC_PtMC", "", false, 500, -0.5, 0.5, VarManager::kMCVertexingTauxyProjected, 200, 0.0, 20.0, VarManager::kMCPt);
2058+
hm->AddHistogram(histClass, "LzMC_Lz", "", false, 500, 0.0, 2.0, VarManager::kMCVertexingLz, 500, 0.0, 2.0, VarManager::kVertexingLz);
2059+
hm->AddHistogram(histClass, "LxyMC_Lxy", "", false, 500, 0.0, 2.0, VarManager::kMCVertexingLxy, 500, 0.0, 2.0, VarManager::kVertexingLxy);
2060+
hm->AddHistogram(histClass, "TauzMC_Tauz", "", false, 500, -0.01, 0.01, VarManager::kMCVertexingTauz, 500, -0.01, 0.01, VarManager::kVertexingTauz);
2061+
hm->AddHistogram(histClass, "TauxyMC_Tauxy", "", false, 500, -0.01, 0.01, VarManager::kMCVertexingTauxy, 500, -0.01, 0.01, VarManager::kVertexingTauxy);
2062+
hm->AddHistogram(histClass, "CosPointingAngleMC", "", false, 100, 0.0, 1.0, VarManager::kMCCosPointingAngle);
2063+
}
20342064
if (!groupStr.CompareTo("dilepton-photon-mass")) {
20352065
hm->AddHistogram(histClass, "Mass_Dilepton", "", false, 500, 0.0, 5.0, VarManager::kPairMassDau);
20362066
hm->AddHistogram(histClass, "Mass_Photon", "", false, 500, 0.0, 0.1, VarManager::kMassDau);

PWGDQ/Core/VarManager.cxx

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -804,10 +804,20 @@ void VarManager::SetDefaultVarNames()
804804
fgVariableUnits[kPairType] = "";
805805
fgVariableNames[kVertexingLxy] = "Pair Lxy";
806806
fgVariableUnits[kVertexingLxy] = "cm";
807+
fgVariableNames[kMCVertexingLxy] = "MC Lxy";
808+
fgVariableUnits[kMCVertexingLxy] = "cm";
807809
fgVariableNames[kVertexingLz] = "Pair Lz";
808810
fgVariableUnits[kVertexingLz] = "cm";
811+
fgVariableNames[kMCVertexingLz] = "MC Lz";
812+
fgVariableUnits[kMCVertexingLz] = "cm";
809813
fgVariableNames[kVertexingLxyz] = "Pair Lxyz";
810814
fgVariableUnits[kVertexingLxyz] = "cm";
815+
fgVariableNames[kMCVertexingLxyz] = "MC Lxyz";
816+
fgVariableUnits[kMCVertexingLxyz] = "cm";
817+
fgVariableNames[kMCLxyExpected] = "MC Expected Lxy";
818+
fgVariableUnits[kMCLxyExpected] = "cm";
819+
fgVariableNames[kMCLxyzExpected] = "MC Expected Lxyz";
820+
fgVariableUnits[kMCLxyzExpected] = "cm";
811821
fgVariableNames[kVertexingLxyErr] = "Pair Lxy err.";
812822
fgVariableUnits[kVertexingLxyErr] = "cm";
813823
fgVariableNames[kVertexingLzErr] = "Pair Lz err.";
@@ -818,6 +828,10 @@ void VarManager::SetDefaultVarNames()
818828
fgVariableUnits[kVertexingTauz] = "ns";
819829
fgVariableNames[kVertexingTauxy] = "Pair pseudo-proper Tauxy";
820830
fgVariableUnits[kVertexingTauxy] = "ns";
831+
fgVariableNames[kMCVertexingTauz] = "MC pseudo-proper Tauz";
832+
fgVariableUnits[kMCVertexingTauz] = "ns";
833+
fgVariableNames[kMCVertexingTauxy] = "MC pseudo-proper Tauxy";
834+
fgVariableUnits[kMCVertexingTauxy] = "ns";
821835
fgVariableNames[kVertexingTauzErr] = "Pair pseudo-proper Tauz err.";
822836
fgVariableUnits[kVertexingTauzErr] = "ns";
823837
fgVariableNames[kVertexingLxyProjected] = "Pair Lxy";
@@ -834,8 +848,22 @@ void VarManager::SetDefaultVarNames()
834848
fgVariableUnits[kVertexingTauxyProjectedPoleJPsiMass] = "ns";
835849
fgVariableNames[kVertexingTauxyzProjected] = "Pair pseudo-proper Tauxyz";
836850
fgVariableUnits[kVertexingTauxyzProjected] = "ns";
851+
fgVariableNames[kMCVertexingLxyProjected] = "MC Lxy_{proj}";
852+
fgVariableUnits[kMCVertexingLxyProjected] = "cm";
853+
fgVariableNames[kMCVertexingLzProjected] = "MC Lz_{proj}";
854+
fgVariableUnits[kMCVertexingLzProjected] = "cm";
855+
fgVariableNames[kMCVertexingLxyzProjected] = "MC Lxyz_{proj}";
856+
fgVariableUnits[kMCVertexingLxyzProjected] = "cm";
857+
fgVariableNames[kMCVertexingTauzProjected] = "MC Tauz_{proj}";
858+
fgVariableUnits[kMCVertexingTauzProjected] = "ns";
859+
fgVariableNames[kMCVertexingTauxyProjected] = "MC Tauxy_{proj}";
860+
fgVariableUnits[kMCVertexingTauxyProjected] = "ns";
861+
fgVariableNames[kMCVertexingTauxyzProjected] = "MC Tauxyz_{proj}";
862+
fgVariableUnits[kMCVertexingTauxyzProjected] = "ns";
837863
fgVariableNames[kCosPointingAngle] = "cos(#theta_{pointing})";
838864
fgVariableUnits[kCosPointingAngle] = "";
865+
fgVariableNames[kMCCosPointingAngle] = "MC cos(#theta_{pointing})";
866+
fgVariableUnits[kMCCosPointingAngle] = "";
839867
fgVariableNames[kVertexingPz] = "Pz Pair";
840868
fgVariableUnits[kVertexingPz] = "GeV/c";
841869
fgVariableNames[kVertexingSV] = "Secondary Vertexing z";
@@ -852,8 +880,6 @@ void VarManager::SetDefaultVarNames()
852880
fgVariableUnits[kVertexingLzOverErr] = "";
853881
fgVariableNames[kVertexingLxyzOverErr] = "Pair Lxyz/DLxyz";
854882
fgVariableUnits[kVertexingLxyzOverErr] = "";
855-
fgVariableNames[kCosPointingAngle] = "Cos #theta_{pointing}";
856-
fgVariableUnits[kCosPointingAngle] = "";
857883
fgVariableNames[kKFTrack0DCAxyz] = "Daughter0 DCAxyz";
858884
fgVariableUnits[kKFTrack0DCAxyz] = "cm";
859885
fgVariableNames[kKFTrack1DCAxyz] = "Daughter1 DCAxyz";
@@ -1753,13 +1779,17 @@ void VarManager::SetDefaultVarNames()
17531779
fgVarNamesMap["kPairType"] = kPairType;
17541780
fgVarNamesMap["kVertexingLxy"] = kVertexingLxy;
17551781
fgVarNamesMap["kVertexingLxyErr"] = kVertexingLxyErr;
1782+
fgVarNamesMap["kMCVertexingLxy"] = kMCVertexingLxy;
17561783
fgVarNamesMap["kVertexingPseudoCTau"] = kVertexingPseudoCTau;
17571784
fgVarNamesMap["kVertexingLxyz"] = kVertexingLxyz;
17581785
fgVarNamesMap["kVertexingLxyzErr"] = kVertexingLxyzErr;
1786+
fgVarNamesMap["kMCVertexingLxyz"] = kMCVertexingLxyz;
17591787
fgVarNamesMap["kVertexingLz"] = kVertexingLz;
17601788
fgVarNamesMap["kVertexingLzErr"] = kVertexingLzErr;
1789+
fgVarNamesMap["kMCVertexingLz"] = kMCVertexingLz;
17611790
fgVarNamesMap["kVertexingTauxy"] = kVertexingTauxy;
17621791
fgVarNamesMap["kVertexingTauxyErr"] = kVertexingTauxyErr;
1792+
fgVarNamesMap["kMCVertexingTauxy"] = kMCVertexingTauxy;
17631793
fgVarNamesMap["kVertexingLzProjected"] = kVertexingLzProjected;
17641794
fgVarNamesMap["kVertexingLxyProjected"] = kVertexingLxyProjected;
17651795
fgVarNamesMap["kVertexingLxyzProjected"] = kVertexingLxyzProjected;
@@ -1768,8 +1798,12 @@ void VarManager::SetDefaultVarNames()
17681798
fgVarNamesMap["kVertexingTauxyProjectedPoleJPsiMass"] = kVertexingTauxyProjectedPoleJPsiMass;
17691799
fgVarNamesMap["kVertexingTauxyProjectedNs"] = kVertexingTauxyProjectedNs;
17701800
fgVarNamesMap["kVertexingTauxyzProjected"] = kVertexingTauxyzProjected;
1801+
fgVarNamesMap["kMCVertexingTauzProjected"] = kVertexingTauzProjected;
1802+
fgVarNamesMap["kMCVertexingTauxyProjected"] = kVertexingTauxyProjected;
1803+
fgVarNamesMap["kMCVertexingTauxyzProjected"] = kVertexingTauxyzProjected;
17711804
fgVarNamesMap["kVertexingTauz"] = kVertexingTauz;
17721805
fgVarNamesMap["kVertexingTauzErr"] = kVertexingTauzErr;
1806+
fgVarNamesMap["kMCVertexingTauz"] = kMCVertexingTauz;
17731807
fgVarNamesMap["kVertexingPz"] = kVertexingPz;
17741808
fgVarNamesMap["kVertexingSV"] = kVertexingSV;
17751809
fgVarNamesMap["kVertexingProcCode"] = kVertexingProcCode;
@@ -1801,6 +1835,7 @@ void VarManager::SetDefaultVarNames()
18011835
fgVarNamesMap["kQuadDCAsigXYZ"] = kQuadDCAsigXYZ;
18021836
fgVarNamesMap["kSignQuadDCAsigXY"] = kSignQuadDCAsigXY;
18031837
fgVarNamesMap["kCosPointingAngle"] = kCosPointingAngle;
1838+
fgVarNamesMap["kMCCosPointingAngle"] = kMCCosPointingAngle;
18041839
fgVarNamesMap["kImpParXYJpsi"] = kImpParXYJpsi;
18051840
fgVarNamesMap["kImpParXYK"] = kImpParXYK;
18061841
fgVarNamesMap["kDCATrackProd"] = kDCATrackProd;

PWGDQ/Core/VarManager.h

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -666,19 +666,34 @@ class VarManager : public TObject
666666
kVertexingPseudoCTau,
667667
kVertexingLxyz,
668668
kVertexingLxyzErr,
669+
kMCVertexingLxy,
670+
kMCVertexingLxyz,
671+
kMCLxyExpected,
672+
kMCLxyzExpected,
669673
kVertexingLz,
670674
kVertexingLzErr,
675+
kMCVertexingLz,
671676
kVertexingTauxy,
672677
kVertexingTauxyErr,
678+
kMCVertexingTauxy,
673679
kVertexingLzProjected,
674680
kVertexingLxyProjected,
675681
kVertexingLxyzProjected,
682+
kMCVertexingLzProjected,
683+
kMCVertexingLxyProjected,
684+
kMCVertexingLxyzProjected,
676685
kVertexingTauzProjected,
677686
kVertexingTauxyProjected,
678687
kVertexingTauxyProjectedPoleJPsiMass,
679688
kVertexingTauxyProjectedNs,
680689
kVertexingTauxyzProjected,
690+
kMCVertexingTauzProjected,
691+
kMCVertexingTauxyProjected,
692+
kMCVertexingTauxyProjectedNs,
693+
kMCVertexingTauxyzProjected,
694+
kMCCosPointingAngle,
681695
kVertexingTauz,
696+
kMCVertexingTauz,
682697
kVertexingTauzErr,
683698
kVertexingPz,
684699
kVertexingSV,
@@ -1165,6 +1180,8 @@ class VarManager : public TObject
11651180
static void FillPhoton(T const& photon, float* values = nullptr);
11661181
template <uint32_t fillMap, typename T, typename C>
11671182
static void FillTrackCollision(T const& track, C const& collision, float* values = nullptr);
1183+
template <int candidateType, typename T1, typename T2, typename C>
1184+
static void FillTrackCollisionMC(T1 const& track, T2 const& MotherTrack, C const& collision, float* values = nullptr);
11681185
template <uint32_t fillMap, typename T, typename C, typename M, typename P>
11691186
static void FillTrackCollisionMatCorr(T const& track, C const& collision, M const& materialCorr, P const& propagator, float* values = nullptr);
11701187
template <typename U, typename T>
@@ -2823,6 +2840,52 @@ void VarManager::FillTrackMC(const U& mcStack, T const& track, float* values)
28232840
FillTrackDerived(values);
28242841
}
28252842

2843+
template <int candidateType, typename T1, typename T2, typename C>
2844+
void VarManager::FillTrackCollisionMC(T1 const& track, T2 const& MotherTrack, C const& collision, float* values)
2845+
{
2846+
2847+
if (!values) {
2848+
values = fgValues;
2849+
}
2850+
2851+
float m = 0.0;
2852+
float pdgLifetime = 0.0;
2853+
if (std::abs(MotherTrack.pdgCode()) == 521) {
2854+
m = o2::constants::physics::MassBPlus;
2855+
pdgLifetime = 1.638e-12; // s
2856+
}
2857+
if (std::abs(MotherTrack.pdgCode()) == 511) {
2858+
m = o2::constants::physics::MassB0;
2859+
pdgLifetime = 1.517e-12; // s
2860+
}
2861+
2862+
// displaced vertex is compued with decay product (track) and momentum of mother particle (MotherTrack)
2863+
values[kMCVertexingLxy] = (collision.mcPosX() - track.vx()) * (collision.mcPosX() - track.vx()) +
2864+
(collision.mcPosY() - track.vy()) * (collision.mcPosY() - track.vy());
2865+
values[kMCVertexingLz] = (collision.mcPosZ() - track.vz()) * (collision.mcPosZ() - track.vz());
2866+
values[kMCVertexingLxyz] = values[kMCVertexingLxy] + values[kMCVertexingLz];
2867+
values[kMCVertexingLxy] = std::sqrt(values[kMCVertexingLxy]);
2868+
values[kMCVertexingLz] = std::sqrt(values[kMCVertexingLz]);
2869+
values[kMCVertexingLxyz] = std::sqrt(values[kMCVertexingLxyz]);
2870+
values[kMCVertexingTauz] = (collision.mcPosZ() - track.vz()) * m / (TMath::Abs(MotherTrack.pz()) * o2::constants::physics::LightSpeedCm2NS);
2871+
values[kMCVertexingTauxy] = values[kMCVertexingLxy] * m / (MotherTrack.pt() * o2::constants::physics::LightSpeedCm2NS);
2872+
2873+
values[kMCCosPointingAngle] = ((collision.mcPosX() - track.vx()) * MotherTrack.px() +
2874+
(collision.mcPosY() - track.vy()) * MotherTrack.py() +
2875+
(collision.mcPosZ() - track.vz()) * MotherTrack.pz()) /
2876+
(MotherTrack.p() * values[VarManager::kMCVertexingLxyz]);
2877+
2878+
values[kMCLxyExpected] = (MotherTrack.pt() / m) * (pdgLifetime * o2::constants::physics::LightSpeedCm2S);
2879+
values[kMCLxyzExpected] = (MotherTrack.p() / m) * (pdgLifetime * o2::constants::physics::LightSpeedCm2S);
2880+
2881+
values[kMCVertexingLzProjected] = ((track.vz() - collision.mcPosZ()) * MotherTrack.pz()) / TMath::Abs(MotherTrack.pz());
2882+
values[kMCVertexingLxyProjected] = (((track.vx() - collision.mcPosX()) * MotherTrack.px()) + ((track.vy() - collision.mcPosY()) * MotherTrack.py())) / TMath::Abs(MotherTrack.pt());
2883+
values[kMCVertexingLxyzProjected] = (((track.vx() - collision.mcPosX()) * MotherTrack.px()) + ((track.vy() - collision.mcPosY()) * MotherTrack.py()) + ((track.vz() - collision.mcPosZ()) * MotherTrack.pz())) / MotherTrack.p();
2884+
values[kMCVertexingTauxyProjected] = values[kMCVertexingLxyProjected] * m / (MotherTrack.pt());
2885+
values[kMCVertexingTauzProjected] = values[kMCVertexingLzProjected] * m / TMath::Abs(MotherTrack.pz());
2886+
values[kMCVertexingTauxyzProjected] = values[kMCVertexingLxyzProjected] * m / (MotherTrack.p());
2887+
}
2888+
28262889
template <int pairType, typename T, typename T1>
28272890
void VarManager::FillEnergyCorrelatorsMC(T const& track, T1 const& t1, float* values)
28282891
{

0 commit comments

Comments
 (0)