Skip to content

Commit 1208a71

Browse files
authored
[PWGDQ] update dqefficiency for acceptance check and tree production (#14361)
1 parent f54c181 commit 1208a71

File tree

3 files changed

+66
-36
lines changed

3 files changed

+66
-36
lines changed

PWGDQ/Core/CutsLibrary.cxx

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4347,6 +4347,24 @@ AnalysisCut* o2::aod::dqcuts::GetAnalysisCut(const char* cutName)
43474347
return cut;
43484348
}
43494349

4350+
if (!nameStr.compare("acceptance_pp13600")) {
4351+
cut->AddCut(VarManager::kMCY, -0.8, 0.8);
4352+
cut->AddCut(VarManager::kMCPt1, 1.0, 1000.0);
4353+
cut->AddCut(VarManager::kMCPt2, 1.0, 1000.0);
4354+
cut->AddCut(VarManager::kMCEta1, -0.8, 0.8);
4355+
cut->AddCut(VarManager::kMCEta2, -0.8, 0.8);
4356+
return cut;
4357+
}
4358+
4359+
if (!nameStr.compare("acceptance_pp5360")) {
4360+
cut->AddCut(VarManager::kMCY, -0.9, 0.9);
4361+
cut->AddCut(VarManager::kMCPt1, 1.0, 1000.0);
4362+
cut->AddCut(VarManager::kMCPt2, 1.0, 1000.0);
4363+
cut->AddCut(VarManager::kMCEta1, -0.9, 0.9);
4364+
cut->AddCut(VarManager::kMCEta2, -0.9, 0.9);
4365+
return cut;
4366+
}
4367+
43504368
// ---------------------------------------------------
43514369
// MC generated particle acceptance cuts
43524370

PWGDQ/Core/VarManager.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -666,6 +666,10 @@ class VarManager : public TObject
666666
kMCMotherPdgCode,
667667

668668
// MC pair variables
669+
kMCPt1,
670+
kMCEta1,
671+
kMCPt2,
672+
kMCEta2,
669673
kMCCosThetaHE,
670674
kMCPhiHE,
671675
kMCPhiTildeHE,
@@ -3784,6 +3788,10 @@ void VarManager::FillPairMC(T1 const& t1, T2 const& t2, float* values)
37843788
values[kMCEta] = v12.Eta();
37853789
values[kMCPhi] = v12.Phi();
37863790
values[kMCY] = -v12.Rapidity();
3791+
values[kMCPt1] = t1.pt();
3792+
values[kMCPt2] = t2.pt();
3793+
values[kMCEta1] = t1.eta();
3794+
values[kMCEta2] = t2.eta();
37873795

37883796
// polarization parameters
37893797
bool useHE = fgUsedVars[kMCCosThetaHE] || fgUsedVars[kMCPhiHE]; // helicity frame

PWGDQ/Tasks/dqEfficiency_withAssoc.cxx

Lines changed: 40 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1325,6 +1325,7 @@ struct AnalysisSameEventPairing {
13251325
Produces<aod::DileptonsInfo> dileptonInfoList;
13261326
Produces<aod::JPsieeCandidates> PromptNonPromptSepTable;
13271327
Produces<aod::OniaMCTruth> MCTruthTableEffi;
1328+
Produces<aod::DileptonPolarization> dileptonPolarList;
13281329

13291330
o2::base::MatLayerCylSet* fLUT = nullptr;
13301331
int fCurrentRun; // needed to detect if the run changed and trigger update of calibrations etc.
@@ -1335,7 +1336,7 @@ struct AnalysisSameEventPairing {
13351336
Configurable<std::string> track{"cfgTrackCuts", "jpsiO2MCdebugCuts2", "Comma separated list of barrel track cuts"};
13361337
Configurable<std::string> muon{"cfgMuonCuts", "", "Comma separated list of muon cuts"};
13371338
Configurable<std::string> pair{"cfgPairCuts", "", "Comma separated list of pair cuts, !!! Use only if you know what you are doing, otherwise leave empty"};
1338-
Configurable<std::string> MCgenAcc{"cfgMCGenAccCut", "", "cut for MC generated particles acceptance"};
1339+
Configurable<std::string> MCgenAcc{"cfgMCGenAccCuts", "", "Comma separated list of MC generated particles acceptance cuts, !!! Use only if you know what you are doing, otherwise leave empty"};
13391340
// TODO: Add pair cuts via JSON
13401341
} fConfigCuts;
13411342

@@ -1354,6 +1355,7 @@ struct AnalysisSameEventPairing {
13541355
Configurable<bool> useRemoteField{"cfgUseRemoteField", false, "Chose whether to fetch the magnetic field from ccdb or set it manually"};
13551356
Configurable<float> magField{"cfgMagField", 5.0f, "Manually set magnetic field"};
13561357
Configurable<bool> flatTables{"cfgFlatTables", false, "Produce a single flat tables with all relevant information of the pairs and single tracks"};
1358+
Configurable<bool> polarTables{"cfgPolarTables", false, "Produce tables with dilepton polarization information"};
13571359
Configurable<bool> useKFVertexing{"cfgUseKFVertexing", false, "Use KF Particle for secondary vertex reconstruction (DCAFitter is used by default)"};
13581360
Configurable<bool> useAbsDCA{"cfgUseAbsDCA", false, "Use absolute DCA minimization instead of chi^2 minimization in secondary vertexing"};
13591361
Configurable<bool> propToPCA{"cfgPropToPCA", false, "Propagate tracks to secondary vertex"};
@@ -1396,7 +1398,7 @@ struct AnalysisSameEventPairing {
13961398
std::vector<MCSignal*> fGenMCSignals;
13971399

13981400
std::vector<AnalysisCompositeCut> fPairCuts;
1399-
AnalysisCompositeCut fMCGenAccCut;
1401+
std::vector<AnalysisCut*> fMCGenAccCuts;
14001402
bool fUseMCGenAccCut = false;
14011403

14021404
uint32_t fTrackFilterMask; // mask for the track cuts required in this task to be applied on the barrel cuts produced upstream
@@ -1485,16 +1487,6 @@ struct AnalysisSameEventPairing {
14851487
}
14861488
}
14871489

1488-
// get the mc generated acceptance cut
1489-
TString mcGenAccCutStr = fConfigCuts.MCgenAcc.value;
1490-
if (mcGenAccCutStr != "") {
1491-
AnalysisCut* cut = dqcuts::GetAnalysisCut(mcGenAccCutStr.Data());
1492-
if (cut != nullptr) {
1493-
fMCGenAccCut.AddCut(cut);
1494-
}
1495-
fUseMCGenAccCut = true;
1496-
}
1497-
14981490
// check that the barrel track cuts array required in this task is not empty
14991491
if (!trackCutsStr.IsNull()) {
15001492
// tokenize and loop over the barrel cuts produced by the barrel track selection task
@@ -1663,6 +1655,19 @@ struct AnalysisSameEventPairing {
16631655
} // end loop over cuts
16641656
} // end if (muonCutsStr)
16651657

1658+
// get the mc generated acceptance cuts
1659+
TString mcgenCutsStr = fConfigCuts.MCgenAcc.value;
1660+
if (!mcgenCutsStr.IsNull()) {
1661+
std::unique_ptr<TObjArray> objArray(mcgenCutsStr.Tokenize(","));
1662+
for (int icut = 0; icut < objArray->GetEntries(); ++icut) {
1663+
AnalysisCut* cut = dqcuts::GetAnalysisCut(objArray->At(icut)->GetName());
1664+
if (cut != nullptr) {
1665+
fMCGenAccCuts.push_back(cut);
1666+
}
1667+
}
1668+
fUseMCGenAccCut = true;
1669+
}
1670+
16661671
// Add histogram classes for each specified MCsignal at the generator level
16671672
// TODO: create a std::vector of hist classes to be used at Fill time, to avoid using Form in the process function
16681673
TString sigGenNamesStr = fConfigMC.genSignals.value;
@@ -1695,6 +1700,12 @@ struct AnalysisSameEventPairing {
16951700
histNames += Form("MCTruthGenPair_%s;", sig->GetName());
16961701
histNames += Form("MCTruthGenPairSel_%s;", sig->GetName());
16971702
fHasTwoProngGenMCsignals = true;
1703+
// for these pair level signals, also add histograms for each MCgenAcc cut if specified
1704+
if (fUseMCGenAccCut) {
1705+
for (auto& cut : fMCGenAccCuts) {
1706+
histNames += Form("MCTruthGenPairSel_%s_%s;", sig->GetName(), cut->GetName());
1707+
}
1708+
}
16981709
}
16991710
}
17001711
}
@@ -1806,6 +1817,9 @@ struct AnalysisSameEventPairing {
18061817
dileptonMiniTreeGen.reserve(1);
18071818
dileptonMiniTreeRec.reserve(1);
18081819
}
1820+
if (fConfigOptions.polarTables.value) {
1821+
dileptonPolarList.reserve(1);
1822+
}
18091823
constexpr bool eventHasQvector = ((TEventFillMap & VarManager::ObjTypes::ReducedEventQvector) > 0);
18101824
constexpr bool trackHasCov = ((TTrackFillMap & VarManager::ObjTypes::ReducedTrackBarrelCov) > 0);
18111825

@@ -1900,6 +1914,13 @@ struct AnalysisSameEventPairing {
19001914
VarManager::fgValues[VarManager::kVertexingTauzProjected], VarManager::fgValues[VarManager::kVertexingTauxyProjected],
19011915
VarManager::fgValues[VarManager::kVertexingLzProjected], VarManager::fgValues[VarManager::kVertexingLxyProjected]);
19021916
}
1917+
if (fConfigOptions.polarTables.value && t1.has_reducedMCTrack() && t2.has_reducedMCTrack()) {
1918+
dileptonPolarList(VarManager::fgValues[VarManager::kCosThetaHE], VarManager::fgValues[VarManager::kPhiHE], VarManager::fgValues[VarManager::kPhiTildeHE],
1919+
VarManager::fgValues[VarManager::kCosThetaCS], VarManager::fgValues[VarManager::kPhiCS], VarManager::fgValues[VarManager::kPhiTildeCS],
1920+
VarManager::fgValues[VarManager::kCosThetaPP], VarManager::fgValues[VarManager::kPhiPP], VarManager::fgValues[VarManager::kPhiTildePP],
1921+
VarManager::fgValues[VarManager::kCosThetaRM],
1922+
VarManager::fgValues[VarManager::kCosThetaStarTPC], VarManager::fgValues[VarManager::kCosThetaStarFT0A], VarManager::fgValues[VarManager::kCosThetaStarFT0C]);
1923+
}
19031924
}
19041925
}
19051926
}
@@ -2147,12 +2168,6 @@ struct AnalysisSameEventPairing {
21472168

21482169
for (auto& mctrack : mcTracks) {
21492170
VarManager::FillTrackMC(mcTracks, mctrack);
2150-
// if we have a mc generated acceptance cut, apply it here
2151-
if (fUseMCGenAccCut) {
2152-
if (!fMCGenAccCut.IsSelected(VarManager::fgValues)) {
2153-
continue;
2154-
}
2155-
}
21562171
// NOTE: Signals are checked here mostly based on the skimmed MC stack, so depending on the requested signal, the stack could be incomplete.
21572172
// NOTE: However, the working model is that the decisions on MC signals are precomputed during skimming and are stored in the mcReducedFlags member.
21582173
// TODO: Use the mcReducedFlags to select signals
@@ -2176,12 +2191,6 @@ struct AnalysisSameEventPairing {
21762191
continue;
21772192
}
21782193
VarManager::FillTrackMC(mcTracks, track);
2179-
// if we have a mc generated acceptance cut, apply it here
2180-
if (fUseMCGenAccCut) {
2181-
if (!fMCGenAccCut.IsSelected(VarManager::fgValues)) {
2182-
continue;
2183-
}
2184-
}
21852194
auto track_raw = mcTracks.rawIteratorAt(track.globalIndex());
21862195
mcDecision = 0;
21872196
isig = 0;
@@ -2212,11 +2221,6 @@ struct AnalysisSameEventPairing {
22122221
}
22132222
if (sig->CheckSignal(true, t1_raw, t2_raw)) {
22142223
VarManager::FillPairMC<TPairType>(t1, t2);
2215-
if (fUseMCGenAccCut) {
2216-
if (!fMCGenAccCut.IsSelected(VarManager::fgValues)) {
2217-
continue;
2218-
}
2219-
}
22202224
fHistMan->FillHistClass(Form("MCTruthGenPair_%s", sig->GetName()), VarManager::fgValues);
22212225
}
22222226
}
@@ -2247,12 +2251,15 @@ struct AnalysisSameEventPairing {
22472251
if (sig->CheckSignal(true, t1_raw, t2_raw)) {
22482252
mcDecision |= (static_cast<uint32_t>(1) << isig);
22492253
VarManager::FillPairMC<TPairType>(t1, t2);
2254+
fHistMan->FillHistClass(Form("MCTruthGenPairSel_%s", sig->GetName()), VarManager::fgValues);
2255+
// Fill also acceptance cut histograms if requested
22502256
if (fUseMCGenAccCut) {
2251-
if (!fMCGenAccCut.IsSelected(VarManager::fgValues)) {
2252-
continue;
2257+
for (auto& cut : fMCGenAccCuts) {
2258+
if (cut->IsSelected(VarManager::fgValues)) {
2259+
fHistMan->FillHistClass(Form("MCTruthGenPairSel_%s_%s", sig->GetName(), cut->GetName()), VarManager::fgValues);
2260+
}
22532261
}
22542262
}
2255-
fHistMan->FillHistClass(Form("MCTruthGenPairSel_%s", sig->GetName()), VarManager::fgValues);
22562263
if (useMiniTree.fConfigMiniTree) {
22572264
// WARNING! To be checked
22582265
dileptonMiniTreeGen(mcDecision, -999, t1.pt(), t1.eta(), t1.phi(), t2.pt(), t2.eta(), t2.phi());
@@ -2293,10 +2300,7 @@ struct AnalysisSameEventPairing {
22932300
MyBarrelTracksWithCovWithAmbiguitiesWithColl const& barrelTracks, ReducedMCEvents const& mcEvents, ReducedMCTracks const& mcTracks)
22942301
{
22952302
runSameEventPairing<true, VarManager::kDecayToEE, gkEventFillMapWithCov, gkTrackFillMapWithCovWithColl>(events, trackAssocsPerCollision, barrelAssocs, barrelTracks, mcEvents, mcTracks);
2296-
// Feature replaced by processMCGen
2297-
/* if (fConfigMC.runMCGenPair) {
2298-
runMCGen<VarManager::kDecayToEE>(mcEvents, mcTracks);
2299-
}*/
2303+
runMCGenWithGrouping<VarManager::kDecayToEE>(events, mcEvents, mcTracks);
23002304
}
23012305

23022306
void processMuonOnlySkimmed(MyEventsVtxCovSelected const& events,

0 commit comments

Comments
 (0)