From 59dbf6adcf760736c380aceb6111caf4e7a5a425 Mon Sep 17 00:00:00 2001 From: sarahherrmann <83958698+sarahherrmann@users.noreply.github.com> Date: Fri, 16 Sep 2022 15:56:50 +0200 Subject: [PATCH 1/2] Avoid double counting ambigtracks in dndeta-mft --- PWGMM/Mult/Tasks/dndeta-mft.cxx | 65 +++++++++++++++++++++------------ 1 file changed, 42 insertions(+), 23 deletions(-) diff --git a/PWGMM/Mult/Tasks/dndeta-mft.cxx b/PWGMM/Mult/Tasks/dndeta-mft.cxx index 891da94afc6..75f95fe203f 100644 --- a/PWGMM/Mult/Tasks/dndeta-mft.cxx +++ b/PWGMM/Mult/Tasks/dndeta-mft.cxx @@ -75,7 +75,8 @@ struct PseudorapidityDensityMFT { Configurable nolaterthan{"ccdb-no-later-than", std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch()).count(), "latest acceptable timestamp of creation for the object"}; // the histogram has been previously stored in the CCDB - TH2F* histoReweight = nullptr; + TH1D* histoReweight = nullptr; + std::vector ambTrackIds; //------ HistogramRegistry registry{ @@ -92,6 +93,7 @@ struct PseudorapidityDensityMFT { void init(InitContext&) { + ambTrackIds.clear(); auto hstat = registry.get(HIST("EventSelection")); auto* x = hstat->GetXaxis(); x->SetBinLabel(1, "All"); @@ -134,7 +136,7 @@ struct PseudorapidityDensityMFT { // This avoids that users can replace objects **while** a train is running ccdb->setCreatedNotAfter(nolaterthan.value); LOGF(info, "Getting object %s", path.value.data()); - histoReweight = ccdb->getForTimeStamp(path.value, nolaterthan.value); + histoReweight = ccdb->getForTimeStamp(path.value, nolaterthan.value); if (!histoReweight) { LOGF(fatal, "object not found!"); } @@ -190,7 +192,23 @@ struct PseudorapidityDensityMFT { auto Ntrk = perCollisionSample.size() + atracks.size(); registry.fill(HIST("EventsNtrkZvtx"), Ntrk, z); + for (auto& track : atracks) { + registry.fill(HIST("TracksEtaZvtx"), track.etas(), z); + float phi = track.phis(); + o2::math_utils::bringTo02Pi(phi); + registry.fill(HIST("TracksPhiEta"), phi, track.etas()); + registry.fill(HIST("TracksPhiZvtx"), phi, z); + registry.fill(HIST("TracksPtEta"), track.pts(), track.etas()); + auto mfttrack = track.mfttrack(); + if (mfttrack.has_collision()) { + ambTrackIds.push_back(track.mfttrackId()); + } + } + for (auto& track : tracks) { + if (find(ambTrackIds.begin(), ambTrackIds.end(), track.globalIndex()) != ambTrackIds.end()) { + continue; // this track has already been reassigned to bestcollision, don't double count + } registry.fill(HIST("TracksEtaZvtx"), track.eta(), z); float phi = track.phi(); o2::math_utils::bringTo02Pi(phi); @@ -200,14 +218,7 @@ struct PseudorapidityDensityMFT { registry.fill(HIST("TracksPhiZvtx"), phi, z); } } - for (auto& track : atracks) { - registry.fill(HIST("TracksEtaZvtx"), track.etas(), z); - float phi = track.phis(); - o2::math_utils::bringTo02Pi(phi); - registry.fill(HIST("TracksPhiEta"), phi, track.etas()); - registry.fill(HIST("TracksPhiZvtx"), phi, z); - registry.fill(HIST("TracksPtEta"), track.pts(), track.etas()); - } + } else { registry.fill(HIST("EventSelection"), 4.); } @@ -230,20 +241,9 @@ struct PseudorapidityDensityMFT { auto perCollisionSample = sample->sliceByCached(o2::aod::fwdtrack::collisionId, collision.globalIndex()); auto Ntrk = perCollisionSample.size() + atracks.size(); float weight = 1.; + weight = histoReweight->GetBinContent(histoReweight->FindBin(z)); - registry.fill(HIST("EventsNtrkZvtx"), Ntrk, z); - for (auto& track : tracks) { - - float phi = track.phi(); - o2::math_utils::bringTo02Pi(phi); - weight = histoReweight->GetBinContent(histoReweight->FindBin(phi, z)); - registry.fill(HIST("TracksEtaZvtx"), track.eta(), z, weight); - registry.fill(HIST("TracksPhiEta"), phi, track.eta(), weight); - registry.fill(HIST("TracksPtEta"), track.pt(), track.eta(), weight); - if ((track.eta() < -2.0f) && (track.eta() > -3.9f)) { - registry.fill(HIST("TracksPhiZvtx"), phi, z, weight); - } - } + registry.fill(HIST("EventsNtrkZvtx"), Ntrk, z, weight); for (auto& track : atracks) { float phi = track.phis(); @@ -254,7 +254,26 @@ struct PseudorapidityDensityMFT { registry.fill(HIST("TracksPhiEta"), phi, track.etas(), weight); registry.fill(HIST("TracksPhiZvtx"), phi, z, weight); registry.fill(HIST("TracksPtEta"), track.pts(), track.etas(), weight); + auto mfttrack = track.mfttrack(); + if (mfttrack.has_collision()) { + ambTrackIds.push_back(track.mfttrackId()); + } } + + for (auto& track : tracks) { + if (find(ambTrackIds.begin(), ambTrackIds.end(), track.globalIndex()) != ambTrackIds.end()) { + continue; // this track has already been reassigned to bestcollision, don't double count + } + float phi = track.phi(); + o2::math_utils::bringTo02Pi(phi); + registry.fill(HIST("TracksEtaZvtx"), track.eta(), z, weight); + registry.fill(HIST("TracksPhiEta"), phi, track.eta(), weight); + registry.fill(HIST("TracksPtEta"), track.pt(), track.eta(), weight); + if ((track.eta() < -2.0f) && (track.eta() > -3.9f)) { + registry.fill(HIST("TracksPhiZvtx"), phi, z, weight); + } + } + } else { registry.fill(HIST("EventSelection"), 4.); } From a85558c9a995c8632a15f27eef07c1438c31e5ee Mon Sep 17 00:00:00 2001 From: sarahherrmann <83958698+sarahherrmann@users.noreply.github.com> Date: Fri, 16 Sep 2022 17:21:30 +0200 Subject: [PATCH 2/2] Avoid double counting ambigtracks in dndeta-mft -fix --- PWGMM/Mult/Tasks/dndeta-mft.cxx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/PWGMM/Mult/Tasks/dndeta-mft.cxx b/PWGMM/Mult/Tasks/dndeta-mft.cxx index 75f95fe203f..5e2230a59ac 100644 --- a/PWGMM/Mult/Tasks/dndeta-mft.cxx +++ b/PWGMM/Mult/Tasks/dndeta-mft.cxx @@ -93,7 +93,6 @@ struct PseudorapidityDensityMFT { void init(InitContext&) { - ambTrackIds.clear(); auto hstat = registry.get(HIST("EventSelection")); auto* x = hstat->GetXaxis(); x->SetBinLabel(1, "All"); @@ -181,6 +180,7 @@ struct PseudorapidityDensityMFT { void processMult(soa::Join::iterator const& collision, aod::MFTTracks const& tracks, soa::SmallGroups> const& atracks) { + ambTrackIds.clear(); if (tracks.size() == 0) { return; } @@ -227,6 +227,7 @@ struct PseudorapidityDensityMFT { void processMultReweight(soa::Join::iterator const& collision, aod::MFTTracks const& tracks, soa::SmallGroups> const& atracks) { + ambTrackIds.clear(); if (!doprocessGen) { LOGP(debug, "You can't enable processMultReweight if not analysing MC"); return;