Skip to content

Commit 92e8b7a

Browse files
authored
PWGMM: Mult: reducer: add eta-phi map of selected tracks (#5576)
1 parent acbd33b commit 92e8b7a

File tree

2 files changed

+59
-10
lines changed

2 files changed

+59
-10
lines changed

PWGMM/Mult/DataModel/ReducedTables.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ DECLARE_SOA_TABLE(StoredRBCs, "AOD1", "RBC",
3333
namespace rcol
3434
{
3535
DECLARE_SOA_INDEX_COLUMN(RBC, rbc);
36+
DECLARE_SOA_COLUMN(MapEtaPhi, mapetaphi, std::vector<int>);
3637
}
3738

3839
#define Ccols o2::soa::Index<>, \
@@ -49,7 +50,8 @@ DECLARE_SOA_INDEX_COLUMN(RBC, rbc);
4950
mult::MultZNC, \
5051
mult::MultNTracksPV, \
5152
mult::MultNTracksPVeta1, \
52-
mult::MultNTracksPVetaHalf
53+
mult::MultNTracksPVetaHalf, \
54+
rcol::MapEtaPhi
5355

5456
#define CCcols cent::CentFV0A, \
5557
cent::CentFT0M, \

PWGMM/Mult/TableProducer/reducer.cxx

Lines changed: 56 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,22 +13,27 @@
1313
#include "Framework/AnalysisDataModel.h"
1414
#include "Framework/AnalysisTask.h"
1515

16+
#include "Selections.h"
1617
#include "ReducedTables.h"
1718

1819
#include "Framework/runDataProcessing.h"
1920

2021
using namespace o2;
2122
using namespace o2::framework;
2223
using namespace o2::framework::expressions;
24+
using namespace pwgmm::mult;
2325
static constexpr float defparams[1][7] = {{0.142664, 1.40302, 2.61158, 1.20139, 5.24992, 2.16384, 0.871307}};
26+
static constexpr double PI = o2::constants::math::PI;
2427

2528
struct Reducer {
29+
SliceCache cache;
30+
2631
using BCs = soa::Join<aod::BCs, aod::Timestamps, aod::BcSels>;
2732
using MCCollisions = soa::Join<aod::McCollisions, aod::HepMCXSections, aod::HepMCPdfInfos, aod::MultsExtraMC>;
2833
using MCCollisionsNoHepMC = soa::Join<aod::McCollisions, aod::MultsExtraMC>;
2934
using Collisions = soa::Join<aod::Collisions, aod::McCollisionLabels, aod::EvSels, aod::FT0Mults, aod::FDDMults, aod::ZDCMults, aod::PVMults>;
3035
using Particles = aod::McParticles;
31-
using Tracks = soa::Join<aod::Tracks, aod::TracksExtra, aod::TrackSelection, aod::TracksDCA, aod::McTrackLabels>;
36+
using Tracks = soa::Filtered<soa::Join<aod::Tracks, aod::TracksExtra, aod::TrackSelection, aod::TracksDCA, aod::McTrackLabels>>;
3237

3338
Produces<aod::StoredRBCs> rbcs;
3439
Produces<aod::StoredRMCCollisions> rmcc;
@@ -39,6 +44,9 @@ struct Reducer {
3944
Configurable<float> reductionFactor{"reduction-factor", 1.e-4, "Reduction factor"};
4045
Configurable<LabeledArray<float>> params{"params", {defparams[0], 1, 7, {"pars"}, {"0bin", "l", "a", "n1", "p1", "n2", "p2"}}, "Multiplicity distribution parameterization"};
4146

47+
Configurable<std::vector<double>> etaBins{"eta", {-1.5, -0.5, 0.5, 1.5}, "eta binning"};
48+
Configurable<std::vector<double>> phiBins{"phi", {0., PI / 2., PI, 3. * PI / 2., 2. * PI}, "phi binning"};
49+
4250
Preslice<aod::Collisions> cperBC = aod::collision::bcId;
4351
Preslice<aod::McCollisions> mccperBC = aod::mccollision::bcId;
4452
Preslice<aod::McParticles> perMCc = aod::mcparticle::mcCollisionId;
@@ -52,6 +60,11 @@ struct Reducer {
5260
std::vector<int64_t> usedLabels;
5361
std::vector<float> weights;
5462

63+
std::vector<double> etabins;
64+
std::vector<double> phibins;
65+
66+
std::vector<int> binned;
67+
5568
double NormalizedDoubleNBD(double x)
5669
{
5770
// <n> = (p[2,4]^2)
@@ -73,6 +86,23 @@ struct Reducer {
7386
randomgen.seed(rd());
7487
LOGP(debug, ">>> Starting with params: {}, {}, {}, {}, {}, {}, {}", params->get((int)0, int(0)), params->get((int)0, 1), params->get((int)0, 2),
7588
params->get((int)0, 3), params->get((int)0, 4), params->get((int)0, 5), params->get((int)0, 6));
89+
etabins = static_cast<std::vector<double>>(etaBins);
90+
phibins = static_cast<std::vector<double>>(phiBins);
91+
binned.resize((etabins.size() - 1) * (phibins.size() - 1));
92+
}
93+
94+
int findBin(float eta, float phi)
95+
{
96+
// locate a bin in a linear array - the stride for phi is etabins.size() - 1
97+
if (std::abs(eta) < etabins[0]) { // underflow
98+
return -1;
99+
}
100+
auto e = std::lower_bound(etabins.begin(), etabins.end(), eta);
101+
if (e == etabins.end()) { // overflow
102+
return -1;
103+
}
104+
auto p = std::lower_bound(phibins.begin(), phibins.end(), phi);
105+
return std::distance(etabins.begin(), e) - 1 /* eta pos */ + (etabins.size() - 1) /* stride */ * (std::distance(phibins.begin(), p) - 1) /* phi pos */;
76106
}
77107

78108
template <typename MCC>
@@ -108,28 +138,37 @@ struct Reducer {
108138
}
109139
}
110140

141+
expressions::Filter fTrackSelectionITS = ncheckbit(aod::track::v001::detectorMap, (uint8_t)o2::aod::track::ITS) &&
142+
ncheckbit(aod::track::trackCutFlag, trackSelectionITS);
143+
expressions::Filter fTrackSelectionTPC = ifnode(ncheckbit(aod::track::v001::detectorMap, (uint8_t)o2::aod::track::TPC),
144+
ncheckbit(aod::track::trackCutFlag, trackSelectionTPC), true);
145+
expressions::Filter fTrackSelectionDCA = ncheckbit(aod::track::trackCutFlag, trackSelectionDCA);
146+
111147
void processFull(BCs::iterator const& bc,
112148
MCCollisions const& mccollisions,
113-
Collisions const& collisions)
149+
Collisions const& collisions,
150+
Tracks const& tracks)
114151
{
115-
processGeneric(bc, mccollisions, collisions);
152+
processGeneric(bc, mccollisions, collisions, tracks);
116153
}
117154

118155
PROCESS_SWITCH(Reducer, processFull, "Full process with HepMC", false);
119156

120157
void processLite(BCs::iterator const& bc,
121158
MCCollisionsNoHepMC const& mccollisions,
122-
Collisions const& collisions)
159+
Collisions const& collisions,
160+
Tracks const& tracks)
123161
{
124-
processGeneric(bc, mccollisions, collisions);
162+
processGeneric(bc, mccollisions, collisions, tracks);
125163
}
126164

127165
PROCESS_SWITCH(Reducer, processLite, "Process without HepMC", true);
128166

129-
template <typename TBCI, typename TMCC, typename TC>
167+
template <typename TBCI, typename TMCC, typename TC, typename TT>
130168
void processGeneric(TBCI const& bc,
131169
TMCC const& mccollisions,
132-
TC const& collisions)
170+
TC const& collisions,
171+
TT const& tracks)
133172
{
134173
usedMCCs.clear();
135174
usedLabels.clear();
@@ -154,7 +193,7 @@ struct Reducer {
154193
continue;
155194
}
156195
rmcc(bcId, weights[i], mcc.posX(), mcc.posY(), mcc.posZ(), mcc.impactParameter(), mcc.multMCFT0A(), mcc.multMCFT0C(), mcc.multMCNParticlesEta05(), mcc.multMCNParticlesEta10());
157-
if constexpr (TMCC::template contains<aod::HepMCXSections>() && TMCC::template contains<aod::HepMCPdfInfos>()) {
196+
if constexpr (requires {mcc.processId(); mcc.pdf1(); }) {
158197
rhepmci(rmcc.lastIndex(), mcc.xsectGen(), mcc.ptHard(), mcc.nMPI(), mcc.processId(), mcc.id1(), mcc.id2(), mcc.pdfId1(), mcc.pdfId2(), mcc.x1(), mcc.x2(), mcc.scalePdf(), mcc.pdf1(), mcc.pdf2());
159198
}
160199
// remember used events so that the index relation can be preserved
@@ -176,7 +215,15 @@ struct Reducer {
176215
++i;
177216
continue;
178217
}
179-
rc(bcId, c.posX(), c.posY(), c.posZ(), c.collisionTimeRes(), c.multFT0A(), c.multFT0C(), c.multFDDA(), c.multFDDC(), c.multZNA(), c.multZNC(), c.multNTracksPV(), c.multNTracksPVeta1(), c.multNTracksPVetaHalf());
218+
std::fill(binned.begin(), binned.end(), 0);
219+
auto stracks = tracks.sliceBy(perC, c.globalIndex());
220+
for (auto& track : stracks) {
221+
auto bin = findBin(track.eta(), track.phi());
222+
if (bin >= 0) {
223+
binned[bin] += 1;
224+
}
225+
}
226+
rc(bcId, c.posX(), c.posY(), c.posZ(), c.collisionTimeRes(), c.multFT0A(), c.multFT0C(), c.multFDDA(), c.multFDDC(), c.multZNA(), c.multZNC(), c.multNTracksPV(), c.multNTracksPVeta1(), c.multNTracksPVetaHalf(), binned);
180227
rmcl(usedLabels[std::distance(usedMCCs.begin(), pos)]);
181228
++i;
182229
}

0 commit comments

Comments
 (0)