Skip to content

Commit e6f05f7

Browse files
authored
PWGMM: Mult: percentiles: matching FT0M/C bins to central dN/deta value (#6985)
1 parent a815f52 commit e6f05f7

1 file changed

Lines changed: 77 additions & 10 deletions

File tree

PWGMM/Mult/TableProducer/percentiles.cxx

Lines changed: 77 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,25 @@
88
// In applying this license CERN does not waive the privileges and immunities
99
// granted to it by virtue of its status as an Intergovernmental Organization
1010
// or submit itself to any jurisdiction.
11-
12-
#include "Framework/AnalysisDataModel.h"
13-
#include "Framework/AnalysisTask.h"
14-
#include "Framework/Configurable.h"
15-
#include "Framework/O2DatabasePDGPlugin.h"
11+
#include "Selections.h"
12+
13+
#include <Framework/AnalysisDataModel.h>
14+
#include <Framework/AnalysisTask.h>
15+
#include <Framework/Configurable.h>
16+
#include <Common/DataModel/EventSelection.h>
17+
#include <Common/DataModel/TrackSelectionTables.h>
18+
#include <Framework/O2DatabasePDGPlugin.h>
1619
#include <CCDB/BasicCCDBManager.h>
17-
#include "Framework/runDataProcessing.h"
20+
#include <Framework/runDataProcessing.h>
1821

1922
#include "Gencentralities.h"
2023

2124
using namespace o2;
2225
using namespace o2::framework;
2326
using namespace o2::framework::expressions;
2427

28+
using namespace pwgmm::mult;
29+
2530
constexpr float FT0Alo = -3.3;
2631
constexpr float FT0Ahi = -2.1;
2732
constexpr float FT0Clo = 3.5;
@@ -34,8 +39,10 @@ struct Binner {
3439

3540
using Particles = soa::Filtered<aod::McParticles>;
3641
Preslice<Particles> perMcCol = aod::mcparticle::mcCollisionId;
42+
Preslice<aod::Tracks> perCol = aod::track::collisionId;
3743

3844
ConfigurableAxis multBinning{"multBinning", {301, -0.5, 300.5}, ""};
45+
AxisSpec SmallMultAxis = {100, 0.5, 100.5};
3946

4047
// The objects are uploaded with https://alimonitor.cern.ch/ccdb/upload.jsp
4148
Service<ccdb::BasicCCDBManager> ccdb;
@@ -51,6 +58,15 @@ struct Binner {
5158
return std::abs(p->Charge()) >= 3.;
5259
}
5360

61+
template <typename C>
62+
inline bool isCollisionSelectedMC(C const& collision)
63+
{
64+
return collision.selection_bit(aod::evsel::kIsTriggerTVX) &&
65+
collision.selection_bit(aod::evsel::kIsGoodZvtxFT0vsPV) &&
66+
collision.selection_bit(aod::evsel::kIsVertexITSTPC) &&
67+
collision.selection_bit(aod::evsel::kIsVertexTOFmatched);
68+
}
69+
5470
TH1F* multFT0C = nullptr;
5571
TH1F* multFT0M = nullptr;
5672

@@ -63,9 +79,11 @@ struct Binner {
6379
ccdb->setURL(url.value);
6480
ccdb->setCaching(true);
6581
ccdb->setLocalObjectValidityChecking();
66-
} else if (docalibrate) {
67-
} else {
68-
LOGP(fatal, "Need to have either calibration or binning enabled");
82+
}
83+
if (docalibrate) {
84+
}
85+
if (docalibrateAdvanced) {
86+
h.add({"hCorrelate", " ; N_{part}^{FT0M}; N_{part}^{FT0C}; dN/d#eta|_{#eta = 0}", {HistType::kTHnSparseF, {MultAxis, MultAxis, SmallMultAxis}}});
6987
}
7088
}
7189

@@ -95,7 +113,56 @@ struct Binner {
95113
}
96114
}
97115

98-
PROCESS_SWITCH(Binner, calibrate, "Create binnings", false);
116+
PROCESS_SWITCH(Binner, calibrate, "Create binnings", true);
117+
118+
using ExCols = soa::Join<aod::Collisions, aod::McCollisionLabels, aod::EvSels>;
119+
using Trks = soa::Join<aod::Tracks, aod::TracksExtra, aod::TrackSelection, aod::TracksDCA>;
120+
// require a mix of ITS+TPC and ITS-only tracks (filters on the same table are automatically combined with &&)
121+
Filter fTrackSelectionITS = ncheckbit(aod::track::v001::detectorMap, (uint8_t)o2::aod::track::ITS) &&
122+
ncheckbit(aod::track::trackCutFlag, trackSelectionITS);
123+
Filter fTrackSelectionTPC = ifnode(ncheckbit(aod::track::v001::detectorMap, (uint8_t)o2::aod::track::TPC),
124+
ncheckbit(aod::track::trackCutFlag, trackSelectionTPC), true);
125+
Filter fTrackSelectionDCA = nabs(aod::track::dcaZ) <= 0.2f && ncheckbit(aod::track::trackCutFlag, trackSelectionDCAXYonly);
126+
Filter fTracksEta = nabs(aod::track::eta) < 0.5f;
127+
128+
void calibrateAdvanced(aod::McCollision const& mcc,
129+
soa::SmallGroups<ExCols> const& collisions,
130+
Particles const&,
131+
soa::Filtered<Trks> const& tracks)
132+
{
133+
auto pcFT0M = pFT0M.sliceBy(perMcCol, mcc.globalIndex());
134+
auto pcFT0C = pFT0C.sliceBy(perMcCol, mcc.globalIndex());
135+
int nFT0M = 0;
136+
int nFT0C = 0;
137+
int nTrkAt0 = 0;
138+
for (auto& p : pcFT0M) {
139+
if (isChargedParticle(p.pdgCode())) {
140+
++nFT0M;
141+
}
142+
}
143+
h.fill(HIST("hFT0M"), nFT0M);
144+
for (auto& p : pcFT0C) {
145+
if (isChargedParticle(p.pdgCode())) {
146+
++nFT0C;
147+
}
148+
}
149+
h.fill(HIST("hFT0C"), nFT0C);
150+
151+
bool selected = false;
152+
for (auto& c : collisions) {
153+
if (isCollisionSelectedMC(c)) {
154+
selected = true;
155+
auto sample = tracks.sliceBy(perCol, c.globalIndex());
156+
nTrkAt0 += sample.size();
157+
}
158+
}
159+
if (!selected) {
160+
return;
161+
}
162+
h.fill(HIST("hCorrelate"), nFT0M, nFT0C, nTrkAt0);
163+
}
164+
165+
PROCESS_SWITCH(Binner, calibrateAdvanced, "Create binning matched to dN/deta", false);
99166

100167
void bin(aod::BCsWithTimestamps const& bcs, aod::McCollisions const& mccollisions, Particles const&)
101168
{

0 commit comments

Comments
 (0)