Skip to content

Commit 8c89f86

Browse files
authored
[PWGDQ] Fix JIT compilation memory leak using double slicing (#10863)
1 parent 48c3403 commit 8c89f86

File tree

1 file changed

+19
-13
lines changed

1 file changed

+19
-13
lines changed

PWGDQ/TableProducer/tableMaker.cxx

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -167,9 +167,11 @@ struct TableMaker {
167167
OutputObj<TList> fStatsList{"Statistics"}; //! skimming statistics
168168
HistogramManager* fHistMan;
169169

170-
Configurable<std::string> fConfigEventCuts{"cfgEventCuts", "eventStandard", "Event selection"};
171-
Configurable<std::string> fConfigTrackCuts{"cfgBarrelTrackCuts", "jpsiO2MCdebugCuts2", "Comma separated list of barrel track cuts"};
172-
Configurable<std::string> fConfigMuonCuts{"cfgMuonCuts", "muonQualityCuts", "Comma separated list of muon cuts"};
170+
struct : ConfigurableGroup {
171+
Configurable<std::string> fConfigEventCuts{"cfgEventCuts", "eventStandard", "Event selection"};
172+
Configurable<std::string> fConfigTrackCuts{"cfgBarrelTrackCuts", "jpsiO2MCdebugCuts2", "Comma separated list of barrel track cuts"};
173+
Configurable<std::string> fConfigMuonCuts{"cfgMuonCuts", "muonQualityCuts", "Comma separated list of muon cuts"};
174+
} configCuts;
173175
struct : ConfigurableGroup {
174176
Configurable<std::string> fConfigAddEventHistogram{"cfgAddEventHistogram", "", "Comma separated list of histograms"};
175177
Configurable<std::string> fConfigAddTrackHistogram{"cfgAddTrackHistogram", "", "Comma separated list of histograms"};
@@ -178,8 +180,10 @@ struct TableMaker {
178180
Configurable<float> fConfigBarrelTrackPtLow{"cfgBarrelLowPt", 1.0f, "Low pt cut for tracks in the barrel"};
179181
Configurable<float> fConfigBarrelTrackMaxAbsEta{"cfgBarrelMaxAbsEta", 0.9f, "Eta absolute value cut for tracks in the barrel"};
180182
Configurable<float> fConfigMuonPtLow{"cfgMuonLowPt", 1.0f, "Low pt cut for muons"};
181-
Configurable<float> fConfigMinTpcSignal{"cfgMinTpcSignal", 30.0, "Minimum TPC signal"};
182-
Configurable<float> fConfigMaxTpcSignal{"cfgMaxTpcSignal", 300.0, "Maximum TPC signal"};
183+
struct : ConfigurableGroup {
184+
Configurable<float> fConfigMinTpcSignal{"cfgMinTpcSignal", 30.0, "Minimum TPC signal"};
185+
Configurable<float> fConfigMaxTpcSignal{"cfgMaxTpcSignal", 300.0, "Maximum TPC signal"};
186+
} configTpcSignal;
183187
Configurable<bool> fConfigQA{"cfgQA", false, "If true, fill QA histograms"};
184188
Configurable<bool> fConfigDetailedQA{"cfgDetailedQA", false, "If true, include more QA histograms (BeforeCuts classes)"};
185189
Configurable<bool> fIsRun2{"cfgIsRun2", false, "Whether we analyze Run-2 or Run-3 data"};
@@ -225,14 +229,15 @@ struct TableMaker {
225229

226230
Preslice<MyBarrelTracks> perCollisionTracks = aod::track::collisionId;
227231
Preslice<MyMuons> perCollisionMuons = aod::fwdtrack::collisionId;
232+
PresliceUnsorted<MyMuonsRealignWithCov> perCollisionMuonsRealign = aod::fwdtrackrealign::collisionId;
228233
Preslice<aod::TrackAssoc> trackIndicesPerCollision = aod::track_association::collisionId;
229234
Preslice<aod::FwdTrackAssoc> fwdtrackIndicesPerCollision = aod::track_association::collisionId;
230-
235+
PresliceUnsorted<MyMuonsRealignWithCov> fwdtrackRealignPerMuon = aod::fwdtrackrealign::fwdtrackId;
231236
bool fDoDetailedQA = false; // Bool to set detailed QA true, if QA is set true
232237
int fCurrentRun; // needed to detect if the run changed and trigger update of calibrations etc.
233238

234239
// TODO: filter on TPC dedx used temporarily until electron PID will be improved
235-
Filter barrelSelectedTracks = ifnode(fIsRun2.node() == true, aod::track::trackType == uint8_t(aod::track::Run2Track), aod::track::trackType == uint8_t(aod::track::Track)) && o2::aod::track::pt >= fConfigBarrelTrackPtLow && nabs(o2::aod::track::eta) <= fConfigBarrelTrackMaxAbsEta && o2::aod::track::tpcSignal >= fConfigMinTpcSignal && o2::aod::track::tpcSignal <= fConfigMaxTpcSignal && o2::aod::track::tpcChi2NCl < 4.0f && o2::aod::track::itsChi2NCl < 36.0f;
240+
Filter barrelSelectedTracks = ifnode(fIsRun2.node() == true, aod::track::trackType == uint8_t(aod::track::Run2Track), aod::track::trackType == uint8_t(aod::track::Track)) && o2::aod::track::pt >= fConfigBarrelTrackPtLow && nabs(o2::aod::track::eta) <= fConfigBarrelTrackMaxAbsEta && o2::aod::track::tpcSignal >= configTpcSignal.fConfigMinTpcSignal && o2::aod::track::tpcSignal <= configTpcSignal.fConfigMaxTpcSignal && o2::aod::track::tpcChi2NCl < 4.0f && o2::aod::track::itsChi2NCl < 36.0f;
236241

237242
Filter muonFilter = o2::aod::fwdtrack::pt >= fConfigMuonPtLow;
238243

@@ -350,11 +355,11 @@ struct TableMaker {
350355
{
351356
// Event cuts
352357
fEventCut = new AnalysisCompositeCut(true);
353-
TString eventCutStr = fConfigEventCuts.value;
358+
TString eventCutStr = configCuts.fConfigEventCuts.value;
354359
fEventCut->AddCut(dqcuts::GetAnalysisCut(eventCutStr.Data()));
355360

356361
// Barrel track cuts
357-
TString cutNamesStr = fConfigTrackCuts.value;
362+
TString cutNamesStr = configCuts.fConfigTrackCuts.value;
358363
if (!cutNamesStr.IsNull()) {
359364
std::unique_ptr<TObjArray> objArray(cutNamesStr.Tokenize(","));
360365
for (int icut = 0; icut < objArray->GetEntries(); ++icut) {
@@ -363,7 +368,7 @@ struct TableMaker {
363368
}
364369

365370
// Muon cuts
366-
cutNamesStr = fConfigMuonCuts.value;
371+
cutNamesStr = configCuts.fConfigMuonCuts.value;
367372
if (!cutNamesStr.IsNull()) {
368373
std::unique_ptr<TObjArray> objArray(cutNamesStr.Tokenize(","));
369374
for (int icut = 0; icut < objArray->GetEntries(); ++icut) {
@@ -1127,7 +1132,7 @@ struct TableMaker {
11271132
// Update muon information using realigned tracks
11281133
if (static_cast<int>(muon.trackType()) > 2) {
11291134
// Update only MCH or MCH-MID tracks with realigned information
1130-
auto muonRealignSelected = tracksMuonRealign.select(aod::fwdtrackrealign::fwdtrackId == muonId.fwdtrackId() && aod::fwdtrackrealign::collisionId == collision.globalIndex());
1135+
auto muonRealignSelected = tracksMuonRealign.sliceBy(fwdtrackRealignPerMuon, muonId.fwdtrackId());
11311136
if (muonRealignSelected.size() == 1) {
11321137
for (const auto& muonRealign : muonRealignSelected) {
11331138
VarManager::FillTrack<TMuonRealignFillMap>(muonRealign);
@@ -1176,7 +1181,7 @@ struct TableMaker {
11761181
// Update muon information using realigned tracks
11771182
if (static_cast<int>(muon.trackType()) > 2) {
11781183
// Update only MCH or MCH-MID tracks with realigned information
1179-
auto muonRealignSelected = tracksMuonRealign.select(aod::fwdtrackrealign::fwdtrackId == muonId.fwdtrackId() && aod::fwdtrackrealign::collisionId == collision.globalIndex());
1184+
auto muonRealignSelected = tracksMuonRealign.sliceBy(fwdtrackRealignPerMuon, muonId.fwdtrackId());
11801185
if (muonRealignSelected.size() == 1) {
11811186
for (const auto& muonRealign : muonRealignSelected) {
11821187
LOGF(debug, "Muon original - collisionId:%d x:%g y:%g z:%g phi:%g tgl:%g signed1pt:%g pt:%g p:%g eta:%g chi2:%g", muon.collisionId(), muon.x(), muon.y(), muon.z(), muon.phi(), muon.tgl(), muon.signed1Pt(), muon.pt(), muon.p(), muon.eta(), muon.chi2());
@@ -1687,7 +1692,8 @@ struct TableMaker {
16871692
{
16881693
for (auto& collision : collisions) {
16891694
auto muonIdsThisCollision = fwdtrackIndices.sliceBy(fwdtrackIndicesPerCollision, collision.globalIndex());
1690-
fullSkimmingIndices<gkEventFillMap, 0u, gkMuonFillMapWithCovAmbi, gkMuonRealignFillMapWithCov>(collision, bcs, nullptr, tracksMuon, tracksMuonRealign, nullptr, muonIdsThisCollision);
1695+
auto muonsRealignThisCollision = tracksMuonRealign.sliceBy(perCollisionMuonsRealign, collision.globalIndex());
1696+
fullSkimmingIndices<gkEventFillMap, 0u, gkMuonFillMapWithCovAmbi, gkMuonRealignFillMapWithCov>(collision, bcs, nullptr, tracksMuon, muonsRealignThisCollision, nullptr, muonIdsThisCollision);
16911697
}
16921698
}
16931699

0 commit comments

Comments
 (0)