Skip to content

Commit b375176

Browse files
bhagyasahoalibuild
andauthored
[PWGDQ] Modification in dqEfficiency_withAsso task (#10957)
Co-authored-by: ALICE Action Bot <alibuild@cern.ch>
1 parent be3b634 commit b375176

File tree

4 files changed

+91
-24
lines changed

4 files changed

+91
-24
lines changed

PWGDQ/Core/HistogramsLibrary.cxx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -889,6 +889,15 @@ void o2::aod::dqhistograms::DefineHistograms(HistogramManager* hm, const char* h
889889
hm->AddHistogram(histClass, "Mass", "", false, 500, 0.0, 5.0, VarManager::kMass);
890890
hm->AddHistogram(histClass, "Eta_Pt", "", false, 40, -2.0, 2.0, VarManager::kEta, 200, 0.0, 20.0, VarManager::kPt);
891891
hm->AddHistogram(histClass, "Phi_Eta", "#phi vs #eta distribution", false, 200, -5.0, 5.0, VarManager::kEta, 200, -2. * o2::constants::math::PI, 2. * o2::constants::math::PI, VarManager::kPhi);
892+
int varspTHE[3] = {VarManager::kMCPt, VarManager::kMCCosThetaHE, VarManager::kMCPhiHE};
893+
int varspTCS[3] = {VarManager::kMCPt, VarManager::kMCCosThetaCS, VarManager::kMCPhiCS};
894+
int varspTPP[3] = {VarManager::kMCPt, VarManager::kMCCosThetaPP, VarManager::kMCPhiPP};
895+
int binspT[3] = {20, 20, 20};
896+
double xminpT[3] = {0., -1., -3.14};
897+
double xmaxpT[3] = {20., 1., +3.14};
898+
hm->AddHistogram(histClass, "Pt_cosThetaHE_phiHE", "", 3, varspTHE, binspT, xminpT, xmaxpT, 0, -1, kFALSE);
899+
hm->AddHistogram(histClass, "Pt_cosThetaCS_phiCS", "", 3, varspTCS, binspT, xminpT, xmaxpT, 0, -1, kFALSE);
900+
hm->AddHistogram(histClass, "Pt_cosThetaPP_phiPP", "", 3, varspTPP, binspT, xminpT, xmaxpT, 0, -1, kFALSE);
892901
}
893902
if (!groupStr.CompareTo("mctruth_quad")) {
894903
hm->AddHistogram(histClass, "hMass_defaultDileptonMass", "", false, 1000, 3.0, 5.0, VarManager::kQuadDefaultDileptonMass);

PWGDQ/Core/VarManager.cxx

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -542,6 +542,18 @@ void VarManager::SetDefaultVarNames()
542542
fgVariableUnits[kMCVy] = "cm"; // TODO: check the unit
543543
fgVariableNames[kMCVz] = "MC vz";
544544
fgVariableUnits[kMCVz] = "cm"; // TODO: check the unit
545+
fgVariableNames[kMCCosThetaHE] = "cos#it{#theta}^{MC}_{HE}";
546+
fgVariableUnits[kMCCosThetaHE] = "";
547+
fgVariableNames[kMCPhiHE] = "#varphi^{MC}_{HE}";
548+
fgVariableUnits[kMCPhiHE] = "rad.";
549+
fgVariableNames[kMCCosThetaCS] = "cos#it{#theta}^{MC}_{CS}";
550+
fgVariableUnits[kMCCosThetaCS] = "";
551+
fgVariableNames[kMCPhiCS] = "#varphi^{MC}_{CS}";
552+
fgVariableUnits[kMCPhiCS] = "rad.";
553+
fgVariableNames[kMCCosThetaPP] = "cos#it{#theta}^{MC}_{PP}";
554+
fgVariableUnits[kMCCosThetaPP] = "";
555+
fgVariableNames[kMCPhiPP] = "#varphi^{MC}_{PP}";
556+
fgVariableUnits[kMCPhiPP] = "rad.";
545557
fgVariableNames[kCandidateId] = "";
546558
fgVariableUnits[kCandidateId] = "";
547559
fgVariableNames[kPairType] = "Pair type";
@@ -1441,6 +1453,12 @@ void VarManager::SetDefaultVarNames()
14411453
fgVarNamesMap["kMCPhi"] = kMCPhi;
14421454
fgVarNamesMap["kMCEta"] = kMCEta;
14431455
fgVarNamesMap["kMCY"] = kMCY;
1456+
fgVarNamesMap["kMCCosThetaHE"] = kMCCosThetaHE;
1457+
fgVarNamesMap["kMCCosThetaCS"] = kMCCosThetaCS;
1458+
fgVarNamesMap["kMCCosThetaPP"] = kMCCosThetaPP;
1459+
fgVarNamesMap["kMCPhiHE"] = kMCPhiHE;
1460+
fgVarNamesMap["kMCPhiCS"] = kMCPhiCS;
1461+
fgVarNamesMap["kMCPhiPP"] = kMCPhiPP;
14441462
fgVarNamesMap["kMCParticleGeneratorId"] = kMCParticleGeneratorId;
14451463
fgVarNamesMap["kNMCParticleVariables"] = kNMCParticleVariables;
14461464
fgVarNamesMap["kMCMotherPdgCode"] = kMCMotherPdgCode;

PWGDQ/Core/VarManager.h

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -618,6 +618,14 @@ class VarManager : public TObject
618618
// MC mother particle variables
619619
kMCMotherPdgCode,
620620

621+
// MC pair variables
622+
kMCCosThetaHE,
623+
kMCCosThetaCS,
624+
kMCCosThetaPP,
625+
kMCPhiHE,
626+
kMCPhiCS,
627+
kMCPhiPP,
628+
621629
// Pair variables
622630
kCandidateId,
623631
kPairType,
@@ -3242,6 +3250,39 @@ void VarManager::FillPairMC(T1 const& t1, T2 const& t2, float* values)
32423250
values[kMCEta] = v12.Eta();
32433251
values[kMCPhi] = v12.Phi();
32443252
values[kMCY] = -v12.Rapidity();
3253+
double BeamMomentum = TMath::Sqrt(fgCenterOfMassEnergy * fgCenterOfMassEnergy / 4 - fgMassofCollidingParticle * fgMassofCollidingParticle); // GeV
3254+
ROOT::Math::PxPyPzEVector Beam1(0., 0., -BeamMomentum, fgCenterOfMassEnergy / 2);
3255+
ROOT::Math::PxPyPzEVector Beam2(0., 0., BeamMomentum, fgCenterOfMassEnergy / 2);
3256+
3257+
// Boost to center of mass frame
3258+
ROOT::Math::Boost boostv12{v12.BoostToCM()};
3259+
ROOT::Math::XYZVectorF v1_CM{(boostv12(v1).Vect()).Unit()};
3260+
ROOT::Math::XYZVectorF v2_CM{(boostv12(v2).Vect()).Unit()};
3261+
ROOT::Math::XYZVectorF Beam1_CM{(boostv12(Beam1).Vect()).Unit()};
3262+
ROOT::Math::XYZVectorF Beam2_CM{(boostv12(Beam2).Vect()).Unit()};
3263+
3264+
if (fgUsedVars[kMCCosThetaHE] || fgUsedVars[kMCPhiHE]) {
3265+
ROOT::Math::XYZVectorF zaxis_HE{(v12.Vect()).Unit()};
3266+
ROOT::Math::XYZVectorF yaxis_HE{(Beam1_CM.Cross(Beam2_CM)).Unit()};
3267+
ROOT::Math::XYZVectorF xaxis_HE{(yaxis_HE.Cross(zaxis_HE)).Unit()};
3268+
values[kMCCosThetaHE] = (t1.pdgCode() < 0 ? zaxis_HE.Dot(v1_CM) : zaxis_HE.Dot(v2_CM));
3269+
values[kMCPhiHE] = (t1.pdgCode() < 0 ? TMath::ATan2(yaxis_HE.Dot(v1_CM), xaxis_HE.Dot(v1_CM)) : TMath::ATan2(yaxis_HE.Dot(v2_CM), xaxis_HE.Dot(v2_CM)));
3270+
}
3271+
3272+
if (fgUsedVars[kMCCosThetaCS] || fgUsedVars[kMCPhiCS]) {
3273+
ROOT::Math::XYZVectorF zaxis_CS{((Beam1_CM.Unit() - Beam2_CM.Unit()).Unit())};
3274+
ROOT::Math::XYZVectorF yaxis_CS{(Beam1_CM.Cross(Beam2_CM)).Unit()};
3275+
ROOT::Math::XYZVectorF xaxis_CS{(yaxis_CS.Cross(zaxis_CS)).Unit()};
3276+
values[kMCCosThetaCS] = (t1.pdgCode() < 0 ? zaxis_CS.Dot(v1_CM) : zaxis_CS.Dot(v2_CM));
3277+
values[kMCPhiCS] = (t1.pdgCode() < 0 ? TMath::ATan2(yaxis_CS.Dot(v1_CM), xaxis_CS.Dot(v1_CM)) : TMath::ATan2(yaxis_CS.Dot(v2_CM), xaxis_CS.Dot(v2_CM)));
3278+
}
3279+
3280+
if (fgUsedVars[kMCCosThetaPP] || fgUsedVars[kMCPhiPP]) {
3281+
ROOT::Math::XYZVectorF zaxis_HE{(v12.Vect()).Unit()};
3282+
ROOT::Math::XYZVector normalVec = ROOT::Math::XYZVector(v12.Py(), -v12.Px(), 0.f);
3283+
values[kMCCosThetaPP] = (t1.pdgCode() < 0 ? normalVec.Dot(v1_CM) : normalVec.Dot(v2_CM));
3284+
values[kMCPhiPP] = (t1.pdgCode() < 0 ? TMath::ATan2((normalVec.Dot(v1_CM)), zaxis_HE.Dot(v1_CM)) : TMath::ATan2((normalVec.Dot(v2_CM)), zaxis_HE.Dot(v2_CM)));
3285+
}
32453286
}
32463287

32473288
template <typename T1, typename T2, typename T3>

PWGDQ/Tasks/dqEfficiency_withAssoc.cxx

Lines changed: 23 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1252,7 +1252,7 @@ struct AnalysisSameEventPairing {
12521252
Configurable<std::string> recSignals{"cfgBarrelMCRecSignals", "", "Comma separated list of MC signals (reconstructed)"};
12531253
Configurable<std::string> recSignalsJSON{"cfgMCRecSignalsJSON", "", "Comma separated list of MC signals (reconstructed) via JSON"};
12541254
Configurable<bool> skimSignalOnly{"cfgSkimSignalOnly", false, "Configurable to select only matched candidates"};
1255-
// Configurable<bool> runMCGenPair{"cfgRunMCGenPair", false, "Do pairing of true MC particles"};
1255+
Configurable<bool> runMCGenPair{"cfgRunMCGenPair", false, "Do pairing of true MC particles"};
12561256
} fConfigMC;
12571257

12581258
struct : ConfigurableGroup {
@@ -1981,6 +1981,7 @@ struct AnalysisSameEventPairing {
19811981
// Preslice<ReducedMCTracks> perReducedMcEvent = aod::reducedtrackMC::reducedMCeventId;
19821982
PresliceUnsorted<ReducedMCTracks> perReducedMcEvent = aod::reducedtrackMC::reducedMCeventId;
19831983

1984+
template <int TPairType>
19841985
void runMCGen(ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks)
19851986
{
19861987
// loop over mc stack and fill histograms for pure MC truth signals
@@ -2017,29 +2018,27 @@ struct AnalysisSameEventPairing {
20172018
}
20182019

20192020
if (fHasTwoProngGenMCsignals) {
2020-
for (auto& event : mcEvents) {
2021-
auto groupedMCTracks = mcTracks.sliceBy(perReducedMcEvent, event.globalIndex());
2022-
groupedMCTracks.bindInternalIndicesTo(&mcTracks);
2023-
for (auto& [t1, t2] : combinations(groupedMCTracks, groupedMCTracks)) {
2024-
auto t1_raw = groupedMCTracks.rawIteratorAt(t1.globalIndex());
2025-
auto t2_raw = groupedMCTracks.rawIteratorAt(t2.globalIndex());
2021+
for (auto& [t1, t2] : combinations(mcTracks, mcTracks)) {
2022+
auto t1_raw = mcTracks.rawIteratorAt(t1.globalIndex());
2023+
auto t2_raw = mcTracks.rawIteratorAt(t2.globalIndex());
2024+
if (t1_raw.reducedMCeventId() == t2_raw.reducedMCeventId()) {
20262025
for (auto& sig : fGenMCSignals) {
20272026
if (sig->GetNProngs() != 2) { // NOTE: 2-prong signals required here
20282027
continue;
20292028
}
20302029
if (sig->CheckSignal(true, t1_raw, t2_raw)) {
20312030
mcDecision |= (static_cast<uint32_t>(1) << isig);
2032-
VarManager::FillPairMC<VarManager::kDecayToEE>(t1, t2);
2031+
VarManager::FillPairMC<TPairType>(t1, t2);
20332032
fHistMan->FillHistClass(Form("MCTruthGenPair_%s", sig->GetName()), VarManager::fgValues);
20342033
if (useMiniTree.fConfigMiniTree) {
20352034
// WARNING! To be checked
2036-
dileptonMiniTreeGen(mcDecision, event.impactParameter(), t1.pt(), t1.eta(), t1.phi(), t2.pt(), t2.eta(), t2.phi());
2035+
dileptonMiniTreeGen(mcDecision, -999, t1.pt(), t1.eta(), t1.phi(), t2.pt(), t2.eta(), t2.phi());
20372036
}
20382037
}
20392038
isig++;
2040-
} // end loop over MC signals
2041-
} // end loop over pairs
2042-
} // end loop over events
2039+
}
2040+
}
2041+
}
20432042
}
20442043
} // end runMCGen
20452044

@@ -2051,9 +2050,9 @@ struct AnalysisSameEventPairing {
20512050
runSameEventPairing<true, VarManager::kDecayToEE, gkEventFillMapWithCov, gkTrackFillMapWithCov>(events, trackAssocsPerCollision, barrelAssocs, barrelTracks, mcEvents, mcTracks);
20522051
runSameEventPairing<true, VarManager::kDecayToMuMu, gkEventFillMapWithCov, gkMuonFillMapWithCov>(events, muonAssocsPerCollision, muonAssocs, muons, mcEvents, mcTracks);
20532052
// Feature replaced by processMCGen
2054-
/*if (fConfigMC.runMCGenPair) {
2055-
runMCGen(mcEvents, mcTracks);
2056-
}*/
2053+
if (fConfigMC.runMCGenPair) {
2054+
runMCGen<VarManager::kDecayToEE>(mcEvents, mcTracks);
2055+
}
20572056
// runSameEventPairing<true, VarManager::kElectronMuon, gkEventFillMap, gkTrackFillMap>(event, tracks, muons);
20582057
}
20592058

@@ -2063,9 +2062,9 @@ struct AnalysisSameEventPairing {
20632062
{
20642063
runSameEventPairing<true, VarManager::kDecayToEE, gkEventFillMapWithCov, gkTrackFillMapWithCov>(events, trackAssocsPerCollision, barrelAssocs, barrelTracks, mcEvents, mcTracks);
20652064
// Feature replaced by processMCGen
2066-
/*if (fConfigMC.runMCGenPair) {
2067-
runMCGen(mcEvents, mcTracks);
2068-
}*/
2065+
if (fConfigMC.runMCGenPair) {
2066+
runMCGen<VarManager::kDecayToEE>(mcEvents, mcTracks);
2067+
}
20692068
}
20702069

20712070
void processBarrelOnlyWithCollSkimmed(MyEventsVtxCovSelected const& events,
@@ -2074,19 +2073,19 @@ struct AnalysisSameEventPairing {
20742073
{
20752074
runSameEventPairing<true, VarManager::kDecayToEE, gkEventFillMapWithCov, gkTrackFillMapWithCovWithColl>(events, trackAssocsPerCollision, barrelAssocs, barrelTracks, mcEvents, mcTracks);
20762075
// Feature replaced by processMCGen
2077-
/*if (fConfigMC.runMCGenPair) {
2078-
runMCGen(mcEvents, mcTracks);
2079-
}*/
2076+
if (fConfigMC.runMCGenPair) {
2077+
runMCGen<VarManager::kDecayToEE>(mcEvents, mcTracks);
2078+
}
20802079
}
20812080

20822081
void processMuonOnlySkimmed(MyEventsVtxCovSelected const& events,
20832082
soa::Join<aod::ReducedMuonsAssoc, aod::MuonTrackCuts> const& muonAssocs, MyMuonTracksWithCovWithAmbiguities const& muons, ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks)
20842083
{
20852084
runSameEventPairing<true, VarManager::kDecayToMuMu, gkEventFillMapWithCov, gkMuonFillMapWithCov>(events, muonAssocsPerCollision, muonAssocs, muons, mcEvents, mcTracks);
20862085
// Feature replaced by processMCGen
2087-
/*if (fConfigMC.runMCGenPair) {
2088-
runMCGen(mcEvents, mcTracks);
2089-
}*/
2086+
if (fConfigMC.runMCGenPair) {
2087+
runMCGen<VarManager::kDecayToMuMu>(mcEvents, mcTracks);
2088+
}
20902089
}
20912090

20922091
PresliceUnsorted<ReducedMCTracks> perReducedMcGenEvent = aod::reducedtrackMC::reducedMCeventId;

0 commit comments

Comments
 (0)