Skip to content

Commit dd3bc3a

Browse files
[PWGDQ] Adding minitree to esimate offline Axe (#10170)
Co-authored-by: Lucamicheletti93 <luca.mike93@gmail.com>
1 parent 757752c commit dd3bc3a

File tree

2 files changed

+64
-1
lines changed

2 files changed

+64
-1
lines changed

PWGDQ/DataModel/ReducedInfoTables.h

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -848,7 +848,21 @@ DECLARE_SOA_TABLE(DimuonsAll, "AOD", "RTDIMUONALL", //!
848848
reducedpair::SVertex);
849849

850850
DECLARE_SOA_TABLE(DileptonsMiniTree, "AOD", "RTDILEPTMTREE", //!
851-
reducedpair::Mass, reducedpair::Pt, reducedpair::Eta, reducedpair::CentFT0C, reducedpair::Cos2DeltaPhi, dilepton_track_index::Pt1, dilepton_track_index::Eta1, dilepton_track_index::Phi1, dilepton_track_index::Pt2, dilepton_track_index::Eta2, dilepton_track_index::Phi2);
851+
reducedpair::Mass, reducedpair::Pt, reducedpair::Eta, reducedpair::CentFT0C, reducedpair::Cos2DeltaPhi,
852+
dilepton_track_index::Pt1, dilepton_track_index::Eta1, dilepton_track_index::Phi1,
853+
dilepton_track_index::Pt2, dilepton_track_index::Eta2, dilepton_track_index::Phi2);
854+
855+
DECLARE_SOA_TABLE(DileptonsMiniTreeGen, "AOD", "RTDILMTREEGEN", //!
856+
reducedpair::McDecision, mccollision::ImpactParameter,
857+
dilepton_track_index::PtMC1, dilepton_track_index::EtaMC1, dilepton_track_index::PhiMC1,
858+
dilepton_track_index::PtMC2, dilepton_track_index::EtaMC2, dilepton_track_index::PhiMC2);
859+
860+
DECLARE_SOA_TABLE(DileptonsMiniTreeRec, "AOD", "RTDILMTREEREC", //!
861+
reducedpair::McDecision, reducedpair::Mass, reducedpair::Pt, reducedpair::Eta, reducedpair::Phi, reducedpair::CentFT0C,
862+
dilepton_track_index::PtMC1, dilepton_track_index::EtaMC1, dilepton_track_index::PhiMC1,
863+
dilepton_track_index::PtMC2, dilepton_track_index::EtaMC2, dilepton_track_index::PhiMC2,
864+
dilepton_track_index::Pt1, dilepton_track_index::Eta1, dilepton_track_index::Phi1,
865+
dilepton_track_index::Pt2, dilepton_track_index::Eta2, dilepton_track_index::Phi2);
852866

853867
using Dielectron = Dielectrons::iterator;
854868
using StoredDielectron = StoredDielectrons::iterator;
@@ -861,6 +875,8 @@ using DileptonInfo = DileptonsInfo::iterator;
861875
using DielectronAll = DielectronsAll::iterator;
862876
using DimuonAll = DimuonsAll::iterator;
863877
using DileptonMiniTree = DileptonsMiniTree::iterator;
878+
using DileptonMiniTreeGen = DileptonsMiniTreeGen::iterator;
879+
using DileptonMiniTreeRec = DileptonsMiniTreeRec::iterator;
864880

865881
// Tables for using analysis-dilepton-track with analysis-asymmetric-pairing
866882
DECLARE_SOA_TABLE(Ditracks, "AOD", "RTDITRACK", //!

PWGDQ/Tasks/dqEfficiency_withAssoc.cxx

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1199,6 +1199,8 @@ struct AnalysisSameEventPairing {
11991199
Produces<aod::DielectronsInfo> dielectronInfoList;
12001200
Produces<aod::DimuonsExtra> dimuonsExtraList;
12011201
Produces<aod::DimuonsAll> dimuonAllList;
1202+
Produces<aod::DileptonsMiniTreeGen> dileptonMiniTreeGen;
1203+
Produces<aod::DileptonsMiniTreeRec> dileptonMiniTreeRec;
12021204
Produces<aod::DileptonsInfo> dileptonInfoList;
12031205
Produces<aod::JPsieeCandidates> PromptNonPromptSepTable;
12041206

@@ -1247,6 +1249,12 @@ struct AnalysisSameEventPairing {
12471249
Configurable<bool> runMCGenPair{"cfgRunMCGenPair", false, "Do pairing of true MC particles"};
12481250
} fConfigMC;
12491251

1252+
struct : ConfigurableGroup {
1253+
Configurable<bool> fConfigMiniTree{"useMiniTree.cfgMiniTree", false, "Produce a single flat table with minimal information for analysis"};
1254+
Configurable<float> fConfigMiniTreeMinMass{"useMiniTree.cfgMiniTreeMinMass", 2, "Min. mass cut for minitree"};
1255+
Configurable<float> fConfigMiniTreeMaxMass{"useMiniTree.cfgMiniTreeMaxMass", 5, "Max. mass cut for minitree"};
1256+
} useMiniTree;
1257+
12501258
// Track related options
12511259
Configurable<bool> fPropTrack{"cfgPropTrack", true, "Propgate tracks to associated collision to recalculate DCA and momentum vector"};
12521260

@@ -1648,6 +1656,10 @@ struct AnalysisSameEventPairing {
16481656
if (fConfigOptions.flatTables.value) {
16491657
dimuonAllList.reserve(1);
16501658
}
1659+
if (useMiniTree.fConfigMiniTree) {
1660+
dileptonMiniTreeGen.reserve(1);
1661+
dileptonMiniTreeRec.reserve(1);
1662+
}
16511663
constexpr bool eventHasQvector = ((TEventFillMap & VarManager::ObjTypes::ReducedEventQvector) > 0);
16521664
constexpr bool trackHasCov = ((TTrackFillMap & VarManager::ObjTypes::ReducedTrackBarrelCov) > 0);
16531665

@@ -1847,6 +1859,27 @@ struct AnalysisSameEventPairing {
18471859
if (mcDecision & (static_cast<uint32_t>(1) << isig)) {
18481860
PromptNonPromptSepTable(VarManager::fgValues[VarManager::kMass], VarManager::fgValues[VarManager::kPt], VarManager::fgValues[VarManager::kVertexingTauxyProjected], VarManager::fgValues[VarManager::kVertexingTauxyProjectedPoleJPsiMass], VarManager::fgValues[VarManager::kVertexingTauzProjected], isAmbiInBunch, isAmbiOutOfBunch, isCorrect_pair);
18491861
fHistMan->FillHistClass(histNamesMC[icut * fRecMCSignals.size() + isig][0].Data(), VarManager::fgValues); // matched signal
1862+
if (useMiniTree.fConfigMiniTree) {
1863+
if constexpr (TPairType == VarManager::kDecayToMuMu) {
1864+
twoTrackFilter = a1.isMuonSelected_raw() & a2.isMuonSelected_raw() & fMuonFilterMask;
1865+
if (!twoTrackFilter) { // the tracks must have at least one filter bit in common to continue
1866+
continue;
1867+
}
1868+
auto t1 = a1.template reducedmuon_as<TTracks>();
1869+
auto t2 = a2.template reducedmuon_as<TTracks>();
1870+
1871+
float dileptonMass = VarManager::fgValues[VarManager::kMass];
1872+
if (dileptonMass > useMiniTree.fConfigMiniTreeMinMass && dileptonMass < useMiniTree.fConfigMiniTreeMaxMass) {
1873+
dileptonMiniTreeRec(mcDecision,
1874+
VarManager::fgValues[VarManager::kMass],
1875+
VarManager::fgValues[VarManager::kPt], VarManager::fgValues[VarManager::kEta], VarManager::fgValues[VarManager::kPhi], VarManager::fgValues[VarManager::kCentFT0C],
1876+
t1.reducedMCTrack().pt(), t1.reducedMCTrack().eta(), t1.reducedMCTrack().phi(),
1877+
t2.reducedMCTrack().pt(), t2.reducedMCTrack().eta(), t2.reducedMCTrack().phi(),
1878+
VarManager::fgValues[VarManager::kPt1], VarManager::fgValues[VarManager::kEta1], VarManager::fgValues[VarManager::kPhi1],
1879+
VarManager::fgValues[VarManager::kPt2], VarManager::fgValues[VarManager::kEta2], VarManager::fgValues[VarManager::kPhi2]);
1880+
}
1881+
}
1882+
}
18501883
if (fConfigQA) {
18511884
if (isCorrectAssoc_leg1 && isCorrectAssoc_leg2) { // correct track-collision association
18521885
fHistMan->FillHistClass(histNamesMC[icut * fRecMCSignals.size() + isig][3].Data(), VarManager::fgValues);
@@ -1941,6 +1974,8 @@ struct AnalysisSameEventPairing {
19411974
// loop over mc stack and fill histograms for pure MC truth signals
19421975
// group all the MC tracks which belong to the MC event corresponding to the current reconstructed event
19431976
// auto groupedMCTracks = tracksMC.sliceBy(aod::reducedtrackMC::reducedMCeventId, event.reducedMCevent().globalIndex());
1977+
uint32_t mcDecision = 0;
1978+
int isig = 0;
19441979
for (auto& mctrack : mcTracks) {
19451980
VarManager::FillTrackMC(mcTracks, mctrack);
19461981
// NOTE: Signals are checked here mostly based on the skimmed MC stack, so depending on the requested signal, the stack could be incomplete.
@@ -1958,9 +1993,15 @@ struct AnalysisSameEventPairing {
19581993
checked = sig->CheckSignal(true, mctrack);
19591994
//}
19601995
if (checked) {
1996+
mcDecision |= (static_cast<uint32_t>(1) << isig);
19611997
fHistMan->FillHistClass(Form("MCTruthGen_%s", sig->GetName()), VarManager::fgValues);
1998+
if (useMiniTree.fConfigMiniTree) {
1999+
auto mcEvent = mcEvents.rawIteratorAt(mctrack.reducedMCeventId());
2000+
dileptonMiniTreeGen(mcDecision, mcEvent.impactParameter(), mctrack.pt(), mctrack.eta(), mctrack.phi(), -999, -999, -999);
2001+
}
19622002
}
19632003
}
2004+
isig++;
19642005
}
19652006

19662007
if (fHasTwoProngGenMCsignals) {
@@ -1975,9 +2016,15 @@ struct AnalysisSameEventPairing {
19752016
continue;
19762017
}
19772018
if (sig->CheckSignal(true, t1_raw, t2_raw)) {
2019+
mcDecision |= (static_cast<uint32_t>(1) << isig);
19782020
VarManager::FillPairMC<VarManager::kDecayToEE>(t1, t2);
19792021
fHistMan->FillHistClass(Form("MCTruthGenPair_%s", sig->GetName()), VarManager::fgValues);
2022+
if (useMiniTree.fConfigMiniTree) {
2023+
// WARNING! To be checked
2024+
dileptonMiniTreeGen(mcDecision, event.impactParameter(), t1.pt(), t1.eta(), t1.phi(), t2.pt(), t2.eta(), t2.phi());
2025+
}
19802026
}
2027+
isig++;
19812028
} // end loop over MC signals
19822029
} // end loop over pairs
19832030
} // end loop over events

0 commit comments

Comments
 (0)