Skip to content

Commit 4baca43

Browse files
[PWGDQ] Updating dqEfficiencyWithAssociation (#11028)
Co-authored-by: Lucamicheletti93 <luca.mike93@gmail.com>
1 parent 0817b12 commit 4baca43

File tree

1 file changed

+74
-14
lines changed

1 file changed

+74
-14
lines changed

PWGDQ/Tasks/dqEfficiency_withAssoc.cxx

Lines changed: 74 additions & 14 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 {
@@ -1267,6 +1267,7 @@ struct AnalysisSameEventPairing {
12671267
Service<o2::ccdb::BasicCCDBManager> fCCDB;
12681268

12691269
// Filter filterEventSelected = aod::dqanalysisflags::isEventSelected & uint32_t(1);
1270+
Filter eventFilter = aod::dqanalysisflags::isEventSelected > static_cast<uint32_t>(0);
12701271

12711272
HistogramManager* fHistMan;
12721273

@@ -1298,6 +1299,7 @@ struct AnalysisSameEventPairing {
12981299
if (context.mOptions.get<bool>("processDummy")) {
12991300
return;
13001301
}
1302+
bool isMCGen = context.mOptions.get<bool>("processMCGen") || context.mOptions.get<bool>("processMCGenWithEventSelection");
13011303
VarManager::SetDefaultVarNames();
13021304

13031305
fEnableBarrelHistos = context.mOptions.get<bool>("processAllSkimmed") || context.mOptions.get<bool>("processBarrelOnlySkimmed") || context.mOptions.get<bool>("processBarrelOnlyWithCollSkimmed");
@@ -1555,12 +1557,16 @@ struct AnalysisSameEventPairing {
15551557
}
15561558
}
15571559

1558-
for (auto& sig : fGenMCSignals) {
1559-
if (sig->GetNProngs() == 1) {
1560-
histNames += Form("MCTruthGen_%s;", sig->GetName()); // TODO: Add these names to a std::vector to avoid using Form in the process function
1561-
} else if (sig->GetNProngs() == 2) {
1562-
histNames += Form("MCTruthGenPair_%s;", sig->GetName());
1563-
fHasTwoProngGenMCsignals = true;
1560+
if (isMCGen) {
1561+
for (auto& sig : fGenMCSignals) {
1562+
if (sig->GetNProngs() == 1) {
1563+
histNames += Form("MCTruthGen_%s;", sig->GetName()); // TODO: Add these names to a std::vector to avoid using Form in the process function
1564+
histNames += Form("MCTruthGenSel_%s;", sig->GetName());
1565+
} else if (sig->GetNProngs() == 2) {
1566+
histNames += Form("MCTruthGenPair_%s;", sig->GetName());
1567+
histNames += Form("MCTruthGenPairSel_%s;", sig->GetName());
1568+
fHasTwoProngGenMCsignals = true;
1569+
}
15641570
}
15651571
}
15661572

@@ -2044,9 +2050,10 @@ struct AnalysisSameEventPairing {
20442050
{
20452051
runSameEventPairing<true, VarManager::kDecayToEE, gkEventFillMapWithCov, gkTrackFillMapWithCov>(events, trackAssocsPerCollision, barrelAssocs, barrelTracks, mcEvents, mcTracks);
20462052
runSameEventPairing<true, VarManager::kDecayToMuMu, gkEventFillMapWithCov, gkMuonFillMapWithCov>(events, muonAssocsPerCollision, muonAssocs, muons, mcEvents, mcTracks);
2047-
if (fConfigMC.runMCGenPair) {
2053+
// Feature replaced by processMCGen and processMCGenWithEventSelection
2054+
/*if (fConfigMC.runMCGenPair) {
20482055
runMCGen(mcEvents, mcTracks);
2049-
}
2056+
}*/
20502057
// runSameEventPairing<true, VarManager::kElectronMuon, gkEventFillMap, gkTrackFillMap>(event, tracks, muons);
20512058
}
20522059

@@ -2055,30 +2062,81 @@ struct AnalysisSameEventPairing {
20552062
MyBarrelTracksWithCovWithAmbiguities const& barrelTracks, ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks)
20562063
{
20572064
runSameEventPairing<true, VarManager::kDecayToEE, gkEventFillMapWithCov, gkTrackFillMapWithCov>(events, trackAssocsPerCollision, barrelAssocs, barrelTracks, mcEvents, mcTracks);
2058-
if (fConfigMC.runMCGenPair) {
2065+
// Feature replaced by processMCGen and processMCGenWithEventSelection
2066+
/*if (fConfigMC.runMCGenPair) {
20592067
runMCGen(mcEvents, mcTracks);
2060-
}
2068+
}*/
20612069
}
20622070

20632071
void processBarrelOnlyWithCollSkimmed(MyEventsVtxCovSelected const& events,
20642072
soa::Join<aod::ReducedTracksAssoc, aod::BarrelTrackCuts, aod::Prefilter> const& barrelAssocs,
20652073
MyBarrelTracksWithCovWithAmbiguitiesWithColl const& barrelTracks, ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks)
20662074
{
20672075
runSameEventPairing<true, VarManager::kDecayToEE, gkEventFillMapWithCov, gkTrackFillMapWithCovWithColl>(events, trackAssocsPerCollision, barrelAssocs, barrelTracks, mcEvents, mcTracks);
2068-
if (fConfigMC.runMCGenPair) {
2076+
// Feature replaced by processMCGen and processMCGenWithEventSelection
2077+
/*if (fConfigMC.runMCGenPair) {
20692078
runMCGen(mcEvents, mcTracks);
2070-
}
2079+
}*/
20712080
}
20722081

20732082
void processMuonOnlySkimmed(MyEventsVtxCovSelected const& events,
20742083
soa::Join<aod::ReducedMuonsAssoc, aod::MuonTrackCuts> const& muonAssocs, MyMuonTracksWithCovWithAmbiguities const& muons, ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks)
20752084
{
20762085
runSameEventPairing<true, VarManager::kDecayToMuMu, gkEventFillMapWithCov, gkMuonFillMapWithCov>(events, muonAssocsPerCollision, muonAssocs, muons, mcEvents, mcTracks);
2077-
if (fConfigMC.runMCGenPair) {
2086+
// Feature replaced by processMCGen and processMCGenWithEventSelection
2087+
/*if (fConfigMC.runMCGenPair) {
20782088
runMCGen(mcEvents, mcTracks);
2089+
}*/
2090+
}
2091+
2092+
void processMCGen(ReducedMCTracks const& mcTracks)
2093+
{
2094+
// loop over mc stack and fill histograms for pure MC truth signals
2095+
// group all the MC tracks which belong to the MC event corresponding to the current reconstructed event
2096+
// auto groupedMCTracks = tracksMC.sliceBy(aod::reducedtrackMC::reducedMCeventId, event.reducedMCevent().globalIndex());
2097+
for (auto& mctrack : mcTracks) {
2098+
2099+
VarManager::FillTrackMC(mcTracks, mctrack);
2100+
// NOTE: Signals are checked here mostly based on the skimmed MC stack, so depending on the requested signal, the stack could be incomplete.
2101+
// NOTE: However, the working model is that the decisions on MC signals are precomputed during skimming and are stored in the mcReducedFlags member.
2102+
// TODO: Use the mcReducedFlags to select signals
2103+
for (auto& sig : fGenMCSignals) {
2104+
if (sig->CheckSignal(true, mctrack)) {
2105+
fHistMan->FillHistClass(Form("MCTruthGen_%s", sig->GetName()), VarManager::fgValues);
2106+
}
2107+
}
20792108
}
20802109
}
20812110

2111+
PresliceUnsorted<ReducedMCTracks> perReducedMcGenEvent = aod::reducedtrackMC::reducedMCeventId;
2112+
2113+
void processMCGenWithEventSelection(soa::Filtered<MyEventsVtxCovSelected> const& events,
2114+
ReducedMCEvents const& /*mcEvents*/, ReducedMCTracks const& mcTracks)
2115+
{
2116+
for (auto& event : events) {
2117+
if (!event.isEventSelected_bit(0)) {
2118+
continue;
2119+
}
2120+
if (!event.has_reducedMCevent()) {
2121+
continue;
2122+
}
2123+
2124+
auto groupedMCTracks = mcTracks.sliceBy(perReducedMcGenEvent, event.reducedMCeventId());
2125+
groupedMCTracks.bindInternalIndicesTo(&mcTracks);
2126+
for (auto& track : groupedMCTracks) {
2127+
2128+
VarManager::FillTrackMC(mcTracks, track);
2129+
2130+
auto track_raw = groupedMCTracks.rawIteratorAt(track.globalIndex());
2131+
for (auto& sig : fGenMCSignals) {
2132+
if (sig->CheckSignal(true, track_raw)) {
2133+
fHistMan->FillHistClass(Form("MCTruthGenSel_%s", sig->GetName()), VarManager::fgValues);
2134+
}
2135+
}
2136+
}
2137+
} // end loop over reconstructed events
2138+
}
2139+
20822140
void processDummy(MyEvents&)
20832141
{
20842142
// do nothing
@@ -2088,6 +2146,8 @@ struct AnalysisSameEventPairing {
20882146
PROCESS_SWITCH(AnalysisSameEventPairing, processBarrelOnlySkimmed, "Run barrel only pairing, with skimmed tracks", false);
20892147
PROCESS_SWITCH(AnalysisSameEventPairing, processBarrelOnlyWithCollSkimmed, "Run barrel only pairing, with skimmed tracks and with collision information", false);
20902148
PROCESS_SWITCH(AnalysisSameEventPairing, processMuonOnlySkimmed, "Run muon only pairing, with skimmed tracks", false);
2149+
PROCESS_SWITCH(AnalysisSameEventPairing, processMCGen, "Loop over MC particle stack and fill generator level histograms", false);
2150+
PROCESS_SWITCH(AnalysisSameEventPairing, processMCGenWithEventSelection, "Loop over MC particle stack and fill generator level histograms with event selection", false);
20912151
PROCESS_SWITCH(AnalysisSameEventPairing, processDummy, "Dummy function, enabled only if none of the others are enabled", false);
20922152
};
20932153

0 commit comments

Comments
 (0)