Skip to content

Commit 87ee60f

Browse files
authored
[PWGLF] Add FT0C estimator + replace midrapidity MC gen estimator (#17618)
1 parent 7678065 commit 87ee60f

1 file changed

Lines changed: 80 additions & 40 deletions

File tree

PWGLF/Tasks/GlobalEventProperties/flattenictyPikp.cxx

Lines changed: 80 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,6 @@ auto static constexpr CminCharge = 3.f;
8888
static constexpr int CnullInt = 0;
8989
static constexpr float Cnull = 0.0f;
9090
static constexpr int ConeInt = 1;
91-
static constexpr int CtwoInt = 2;
9291
static constexpr float Cone = 1.0f;
9392

9493
// FV0 specific constants
@@ -221,10 +220,20 @@ enum EvtSel {
221220

222221
struct MultE {
223222
static constexpr int CnoMult = 0;
224-
static constexpr int CmultFT0M = 1;
225-
static constexpr int CmultTPC = 2;
223+
static constexpr int CmultFT0C = 1;
224+
static constexpr int CmultFT0M = 2;
225+
static constexpr int CmultTPC = 3;
226226
};
227-
227+
/*
228+
template <typename C>
229+
concept hasFT0C = requires(C::iterator const& c) {
230+
c.centFT0C();
231+
};
232+
template <typename C>
233+
concept hasFT0M = requires(C::iterator const& c) {
234+
c.centFT0M();
235+
};
236+
*/
228237
struct FlattenictyPikp {
229238

230239
HistogramRegistry registryData{"registryData", {}, OutputObjHandlingPolicy::AnalysisObject, true, true};
@@ -241,7 +250,7 @@ struct FlattenictyPikp {
241250
o2::parameters::GRPMagField* grpmag = nullptr;
242251

243252
struct : ConfigurableGroup {
244-
Configurable<int> multEst{"multEst", 1, "0: without multiplicity; 1: MultFT0M; 2: MultTPC"};
253+
Configurable<int> multEst{"multEst", 1, "0: without multiplicity; 1: MultFT0C; 2: MultFT0M; 3: MultTPC"};
245254
Configurable<bool> applyCalibGainFromCCDB{"applyCalibGainFromCCDB", false, "equalize detector amplitudes"};
246255
Configurable<bool> applyCalibVtxFromCCDB{"applyCalibVtxFromCCDB", false, "equalize Amp vs vtx"};
247256
Configurable<bool> applyCalibDeDx{"applyCalibDeDx", false, "calibration of dedx signal"};
@@ -283,13 +292,14 @@ struct FlattenictyPikp {
283292
Configurable<float> cutVtxZ{"cutVtxZ", 10.0f, "Accepted z-vertex range"};
284293
Configurable<bool> zVtxCutMC{"zVtxCutMC", true, "use Zvtx cut in MC"};
285294
Configurable<bool> useINELCutMC{"useINELCutMC", true, "use INEL>0 cut in MC"};
286-
Configurable<bool> removeNoSameBunchPileup{"removeNoSameBunchPileup", true, "Reject collisions in case of pileup with another collision in the same foundBC"};
287-
Configurable<bool> requireIsGoodZvtxFT0vsPV{"requireIsGoodZvtxFT0vsPV", true, "Small difference between z-vertex from PV and from FT0"};
295+
Configurable<bool> removeNoSameBunchPileup{"removeNoSameBunchPileup", false, "Reject collisions in case of pileup with another collision in the same foundBC"};
296+
Configurable<bool> requireIsGoodZvtxFT0vsPV{"requireIsGoodZvtxFT0vsPV", false, "Small difference between z-vertex from PV and from FT0"};
288297
Configurable<bool> requireIsVertexITSTPC{"requireIsVertexITSTPC", false, "At least one ITS-TPC track (reject vertices built from ITS-only tracks)"};
289298
Configurable<bool> requirekIsVertexTOFmatched{"requirekIsVertexTOFmatched", false, "Require kIsVertexTOFmatched: at least one of vertex contributors is matched to TOF"};
290299
Configurable<bool> useMultMCmidrap{"useMultMCmidrap", true, "use generated Nch in ∣eta∣ < 0.8"};
291300
Configurable<bool> useInelgt0wTVX{"useInelgt0wTVX", true, "Use INEL > 0 condition with TVX trigger, i.e. FT0A and FT0C acceptance"};
292301
Configurable<bool> removeSplitVertex{"removeSplitVertex", true, "Remove split vertices"};
302+
// Configurable<bool> customGenCent{"customGenCent", false, "Use custom generated MC centrality estimation"};
293303
} evtSelOpt;
294304

295305
struct : ConfigurableGroup {
@@ -484,8 +494,9 @@ struct FlattenictyPikp {
484494
using MyCollisions = soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::FT0sCorrected, aod::CentFT0As, aod::CentFT0Cs>;
485495
using Colls = soa::Join<aod::Collisions, aod::EvSels, aod::TPCMults, aod::PVMults, aod::MultZeqs, aod::CentFV0As, aod::CentFT0Ms, aod::CentFT0As, aod::CentFT0Cs>;
486496
using CollsGen = soa::Join<aod::Collisions, aod::McCollisionLabels, aod::EvSels, aod::TPCMults, aod::PVMults, aod::MultZeqs, aod::CentFV0As, aod::CentFT0Ms, aod::CentFT0As, aod::CentFT0Cs>;
487-
using MCColls = soa::Join<aod::McCollisions, aod::McCentFT0Ms, aod::MultsExtraMC>;
488-
using CollsMCExtraMult = soa::Join<aod::McCollisions, aod::McCentFT0Ms, aod::MultMCExtras, aod::McCollsExtra>;
497+
using MCColls = soa::Join<aod::McCollisions, aod::McCentFT0Ms, aod::McCentFT0Cs, aod::MultsExtraMC>;
498+
using CollsMCExtraMult = soa::Join<aod::McCollisions, aod::McCentFT0Ms, aod::McCentFT0Cs, aod::MultMCExtras, aod::McCollsExtra>;
499+
// using CollsMCExtraMultPercentile = soa::Join<aod::McCollisions, aod::McCentFT0Ms, aod::McCentFT0Cs, aod::MultMCExtras, aod::McCollsExtra, aod::McPercentiles>;
489500
using CollsGenSgn = soa::SmallGroups<soa::Join<aod::Collisions, aod::McCollisionLabels, aod::EvSels, aod::TPCMults, aod::PVMults, aod::MultZeqs, aod::CentFV0As, aod::CentFT0Ms, aod::CentFT0As, aod::CentFT0Cs>>;
490501
using MyPIDTracks = soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksDCA, aod::TrackSelection, aod::TrackSelectionExtension, aod::pidTPCFullPi, aod::pidTPCFullKa, aod::pidTPCFullPr, aod::pidTPCFullEl, aod::pidTPCFullMu, aod::pidTOFFullPi, aod::pidTOFFullKa, aod::pidTOFFullPr, aod::pidTOFFullEl, aod::pidTOFFullMu, aod::pidTOFbeta, aod::TOFSignal, aod::pidTOFFlags>;
491502
using MyLabeledTracks = soa::Join<aod::Tracks, aod::TracksExtra, aod::TrackSelection, aod::TrackSelectionExtension, aod::TracksDCA, aod::McTrackLabels>;
@@ -591,17 +602,20 @@ struct FlattenictyPikp {
591602

592603
AxisSpec multAxis{binOpt.axisMultPerc, "multiplicity estimator"};
593604

594-
switch (defOpt.multEst) {
605+
switch (defOpt.multEst.value) {
595606
case MultE::CnoMult:
596607
break;
608+
case MultE::CmultFT0C:
609+
multAxis.name = "multFT0C";
610+
break;
597611
case MultE::CmultFT0M:
598612
multAxis.name = "multFT0M";
599613
break;
600614
case MultE::CmultTPC:
601615
multAxis.name = "multTPC";
602616
break;
603617
default:
604-
LOG(fatal) << "No valid option for mult estimator " << defOpt.multEst;
618+
LOGF(fatal, "No valid option for mult estimator %d", defOpt.multEst.value);
605619
}
606620

607621
if (trkSelOpt.rejectTrkAtTPCSector || v0SelOpt.rejectV0sAtTPCSector) {
@@ -791,6 +805,8 @@ struct FlattenictyPikp {
791805
registryMC.get<TH1>(HIST("Events/hEvtMcGen"))->GetXaxis()->SetBinLabel(3, "INELgt0");
792806
registryMC.get<TH1>(HIST("Events/hEvtMcGen"))->GetXaxis()->SetBinLabel(4, "INELgt0TVX");
793807
//
808+
registryMC.add("Events/hNchGen", "Gen Nch; Gen Nch (|#eta|<0.8)", {kTH1F, {nChAxis}});
809+
registryMC.add("Events/hNchGenCent", "Gen cent; mult", {kTH1F, {multAxis}});
794810
registryMC.add("Events/hNchGenVsCent", "Gen Nch vs Cent; mult; Gen Nch (|#eta|<0.8)", {kTH2F, {nChAxis, multAxis}});
795811
registryMC.add("Events/hVtxZRec", "MC Rec vertex z position", kTH1F, {vtxzAxis});
796812
registryMC.add("Events/hVtxZGen", "Generated vertex z position", kTH1F, {vtxzAxis});
@@ -1337,25 +1353,6 @@ struct FlattenictyPikp {
13371353
return std::abs(charge) >= CminCharge;
13381354
}
13391355

1340-
template <typename P>
1341-
int countPart(P const& particles)
1342-
{
1343-
auto nCharged = 0;
1344-
for (auto const& particle : particles) {
1345-
if (!isChrgParticle(particle.pdgCode())) {
1346-
continue;
1347-
}
1348-
if (!particle.isPhysicalPrimary()) {
1349-
continue;
1350-
}
1351-
if (std::abs(particle.eta()) > trkSelOpt.trkEtaMax) {
1352-
continue;
1353-
}
1354-
nCharged++;
1355-
}
1356-
return nCharged;
1357-
}
1358-
13591356
template <typename P>
13601357
bool isInelGt0wTVX(P const& particles)
13611358
{
@@ -1933,13 +1930,36 @@ struct FlattenictyPikp {
19331930
return iRing;
19341931
}
19351932

1933+
template <typename C>
1934+
float getGenCent(C const& collision)
1935+
{
1936+
float val = -999.0;
1937+
switch (defOpt.multEst.value) {
1938+
case MultE::CnoMult:
1939+
return val;
1940+
case MultE::CmultFT0C:
1941+
return collision.centFT0C();
1942+
case MultE::CmultFT0M:
1943+
return collision.centFT0M();
1944+
default:
1945+
LOGF(fatal, "No valid centrality estimator: %s", defOpt.multEst.value);
1946+
return val;
1947+
}
1948+
}
1949+
19361950
template <typename C, bool isMC = false>
19371951
float getMult(C const& collision)
19381952
{
19391953
float val = -999.0;
1940-
switch (defOpt.multEst) {
1954+
switch (defOpt.multEst.value) {
19411955
case MultE::CnoMult:
19421956
return val;
1957+
case MultE::CmultFT0C:
1958+
if constexpr (!isMC) {
1959+
return collision.centFT0C();
1960+
} else {
1961+
return collision.multMCFT0C();
1962+
}
19431963
break;
19441964
case MultE::CmultFT0M:
19451965
if constexpr (!isMC) {
@@ -1952,13 +1972,12 @@ struct FlattenictyPikp {
19521972
if constexpr (!isMC) {
19531973
return collision.multTPC();
19541974
} else {
1955-
LOG(fatal) << "No valid multiplicity estimator: " << defOpt.multEst;
1956-
return val;
1975+
return collision.multMCNParticlesEta08();
19571976
}
19581977
break;
19591978
default:
1960-
return collision.centFT0M();
1961-
break;
1979+
LOGF(fatal, "No valid multiplicity estimator: %s", defOpt.multEst.value);
1980+
return val;
19621981
}
19631982
}
19641983

@@ -2400,11 +2419,32 @@ struct FlattenictyPikp {
24002419
{
24012420
LOGP(debug, "MC col {} has {} reco cols", mcCollision.globalIndex(), collisions.size());
24022421
auto multMC = -1.;
2403-
if (evtSelOpt.useMultMCmidrap || defOpt.multEst == CtwoInt) { // use generated Nch in ∣eta∣ < 0.8
2404-
multMC = countPart(particles);
2422+
if (evtSelOpt.useMultMCmidrap) {
2423+
multMC = mcCollision.multMCNParticlesEta08();
24052424
} else {
2406-
multMC = getMultMC(mcCollision); // using McCentFT0Ms
2407-
}
2425+
multMC = getMultMC(mcCollision);
2426+
}
2427+
/*
2428+
cauto centMcGen = -1.;
2429+
if (evtSelOpt.customGenCent) {
2430+
if constexpr (hasFT0C<CollsGen>) {
2431+
centMcGen = mcCollision.mcpercft0c();
2432+
} else if (hasFT0M<CollsGen>) {
2433+
centMcGen = mcCollision.mcpercft0m();
2434+
}
2435+
} else {
2436+
if (defOpt.multEst == MultE::CmultFT0C) {
2437+
centMcGen = mcCollision.centFT0C();
2438+
} else if (defOpt.multEst == MultE::CmultFT0M) {
2439+
centMcGen = mcCollision.centFT0M();
2440+
} else {
2441+
centMcGen = -1.;
2442+
}
2443+
}
2444+
*/
2445+
registryMC.fill(HIST("Events/hNchGen"), multMC);
2446+
registryMC.fill(HIST("Events/hNchGenCent"), getGenCent(mcCollision));
2447+
24082448
const float flatMC = fillFlatMC<true>(particles);
24092449
registryMC.fill(HIST("Events/hFlatMCGen"), flatMC);
24102450

@@ -2444,7 +2484,7 @@ struct FlattenictyPikp {
24442484
fillMCGenRecEvt<pidSgn, o2::track::PID::Proton>(particle, multMC, flatMC);
24452485
});
24462486
}
2447-
if (!isGoodEvent<false>(collision)) {
2487+
if (!isGoodEvent<true>(collision)) {
24482488
continue;
24492489
}
24502490
const float multRecGt1 = getMult(collision);

0 commit comments

Comments
 (0)