Skip to content

Commit 3c0365b

Browse files
authored
[PWGCF] Update in efficiency calculation and addition of FT0A vs FT0C correlation (#15904)
1 parent 4d5c362 commit 3c0365b

2 files changed

Lines changed: 100 additions & 74 deletions

File tree

PWGCF/TwoParticleCorrelations/TableProducer/longrangeMaker.cxx

Lines changed: 45 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,8 @@ auto static constexpr KminFt0cCell = 96;
7878
auto static constexpr TotFt0Channels = 208;
7979
AxisSpec axisEvent{15, 0.5, 15.5, "#Event", "EventAxis"};
8080
auto static constexpr KminCharge = 3.0f;
81-
static constexpr std::string_view species[] = {"Pi", "Ka", "Pr", "K0s", "L0s"};
82-
static constexpr std::array<int, 5> speciesIds{kPiPlus, kKPlus, kProton, kK0Short, kLambda0};
81+
static constexpr std::string_view species[] = {"Pi", "Ka", "Pr"};
82+
static constexpr std::array<int, 3> speciesIds{kPiPlus, kKPlus, kProton};
8383

8484
enum KindOfV0 {
8585
kLambda = 0,
@@ -178,13 +178,13 @@ struct LongrangeMaker {
178178
Configurable<std::vector<double>> tofNsigmaPidCut{"tofNsigmaPidCut", std::vector<double>{1.5, 1.5, 1.5, -1.5, -1.5, -1.5}, "TOF n-sigma cut for pions_posNsigma, kaons_posNsigma, protons_posNsigma, pions_negNsigma, kaons_negNsigma, protons_negNsigma"};
179179
Configurable<float> cfgTofPidPtCut{"cfgTofPidPtCut", 0.3f, "Minimum pt to use TOF N-sigma"};
180180
Configurable<bool> isUseItsPid{"isUseItsPid", false, "Use ITS PID for particle identification"};
181-
Configurable<int> isUseDataLikeMult{"isUseDataLikeMult", 0, "Data like mult/cent classification"};
181+
Configurable<bool> isUseCentEst{"isUseCentEst", false, "Centrality based classification"};
182182

183183
ConfigurableAxis vtxHistBin{"vtxHistBin", {20, -10, 10}, ""};
184184
ConfigurableAxis multHistBin{"multHistBin", {100, 0, 100}, ""};
185185
ConfigurableAxis etaHistBin{"etaHistBin", {20, -1, 1}, ""};
186186
ConfigurableAxis ptHistBin{"ptHistBin", {10, 0, 10}, ""};
187-
ConfigurableAxis speciesHistBin{"speciesHistBin", {6, 0.5, 6.5}, ""};
187+
ConfigurableAxis speciesHistBin{"speciesHistBin", {4, 0.5, 4.5}, ""};
188188

189189
Service<o2::ccdb::BasicCCDBManager> ccdb;
190190
Service<o2::framework::O2DatabasePDG> pdg;
@@ -252,8 +252,8 @@ struct LongrangeMaker {
252252
axisGen->SetBinLabel(i + 1, species[i].data());
253253
axisRec->SetBinLabel(i + 1, species[i].data());
254254
}
255-
axisGen->SetBinLabel(6, "Other");
256-
axisRec->SetBinLabel(6, "Other");
255+
axisGen->SetBinLabel(4, "Other");
256+
axisRec->SetBinLabel(4, "Other");
257257
}
258258

259259
myTrackFilter = getGlobalTrackSelectionRun3ITSMatch(TrackSelection::GlobalTrackRun3ITSMatching::Run3ITSibAny, TrackSelection::GlobalTrackRun3DCAxyCut::Default);
@@ -735,43 +735,37 @@ struct LongrangeMaker {
735735
return;
736736
}
737737
auto multiplicity = 0;
738-
for (const auto& particle : mcparticles) {
739-
if (!isGenPartSelected(particle) || std::abs(particle.eta()) > cfgtrksel.cfgEtaCut || particle.pt() < cfgtrksel.cfgPtCutMin || particle.pt() > cfgtrksel.cfgPtCutMult)
738+
bool atLeastOne = false;
739+
for (const auto& RecCol : RecCols) {
740+
if (!isEventSelected(RecCol))
740741
continue;
741-
multiplicity++;
742-
}
743-
if (isUseDataLikeMult > 0) {
744-
for (const auto& RecCol : RecCols) {
745-
if (!isEventSelected(RecCol)) {
746-
continue;
747-
}
748-
if (std::abs(RecCol.posZ()) >= cfgevtsel.cfgVtxCut) {
749-
continue;
750-
}
751-
if (cfgevtsel.isApplyBestCollIndex && RecCol.globalIndex() != mcCollision.bestCollisionIndex()) {
752-
continue;
753-
}
742+
if (std::abs(RecCol.posZ()) >= cfgevtsel.cfgVtxCut)
743+
continue;
744+
if (cfgevtsel.isApplyBestCollIndex && RecCol.globalIndex() != mcCollision.bestCollisionIndex())
745+
continue;
746+
if (isUseCentEst) {
754747
multiplicity = selColCent(RecCol);
748+
} else {
749+
auto recTracksPart = RecTracks.sliceBy(perColMidtrack, RecCol.globalIndex());
750+
multiplicity = countNTracks(recTracksPart);
755751
}
752+
atLeastOne = true;
756753
}
757-
758754
for (const auto& particle : mcparticles) {
759-
if (!isGenPartSelected(particle) || std::abs(particle.eta()) > cfgtrksel.cfgEtaCut || particle.pt() < cfgtrksel.cfgPtCutMin || particle.pt() > cfgtrksel.cfgPtCutMult)
755+
if (!isGenPartSelected(particle) || std::abs(particle.eta()) > cfgtrksel.cfgEtaCut || particle.pt() < cfgtrksel.cfgPtCutMin || particle.pt() > cfgtrksel.cfgPtCutMax)
760756
continue;
761-
auto pos = std::distance(speciesIds.begin(), std::find(speciesIds.begin(), speciesIds.end(), particle.pdgCode())) + 1;
762-
histos.fill(HIST("hGenMCdndpt"), mcCollision.posZ(), multiplicity, particle.eta(), particle.pt(), pos);
757+
if (atLeastOne) {
758+
auto pos = std::distance(speciesIds.begin(), std::find(speciesIds.begin(), speciesIds.end(), particle.pdgCode())) + 1;
759+
histos.fill(HIST("hGenMCdndpt"), mcCollision.posZ(), multiplicity, particle.eta(), particle.pt(), pos);
760+
}
763761
}
764-
765762
for (const auto& RecCol : RecCols) {
766-
if (!isEventSelected(RecCol)) {
763+
if (!isEventSelected(RecCol))
767764
continue;
768-
}
769-
if (std::abs(RecCol.posZ()) >= cfgevtsel.cfgVtxCut) {
765+
if (std::abs(RecCol.posZ()) >= cfgevtsel.cfgVtxCut)
770766
continue;
771-
}
772-
if (cfgevtsel.isApplyBestCollIndex && RecCol.globalIndex() != mcCollision.bestCollisionIndex()) {
767+
if (cfgevtsel.isApplyBestCollIndex && RecCol.globalIndex() != mcCollision.bestCollisionIndex())
773768
continue;
774-
}
775769
auto recTracksPart = RecTracks.sliceBy(perColMidtrack, RecCol.globalIndex());
776770
for (const auto& track : recTracksPart) {
777771
if (!track.isGlobalTrack())
@@ -790,50 +784,43 @@ struct LongrangeMaker {
790784
}
791785
}
792786
}
793-
794787
void processMFTtrackEff(ColMCTrueTable::iterator const& mcCollision, ColMCRecTable const& RecCols,
795-
MftTrkMCRecTable const& mfttracks, aod::McParticles const& mcparticles)
788+
TrksMCRecTable const& RecTracks, MftTrkMCRecTable const& mfttracks,
789+
aod::McParticles const& mcparticles)
796790
{
797791
if (std::abs(mcCollision.posZ()) >= cfgevtsel.cfgVtxCut) {
798792
return;
799793
}
800794
auto multiplicity = 0;
801-
for (const auto& particle : mcparticles) {
802-
if (!isGenPartSelected(particle) || std::abs(particle.eta()) > cfgtrksel.cfgEtaCut || particle.pt() < cfgtrksel.cfgPtCutMin || particle.pt() > cfgtrksel.cfgPtCutMult)
795+
bool atLeastOne = false;
796+
for (const auto& RecCol : RecCols) {
797+
if (!isEventSelected(RecCol))
803798
continue;
804-
multiplicity++;
805-
}
806-
if (isUseDataLikeMult > 0) {
807-
for (const auto& RecCol : RecCols) {
808-
if (!isEventSelected(RecCol)) {
809-
continue;
810-
}
811-
if (std::abs(RecCol.posZ()) >= cfgevtsel.cfgVtxCut) {
812-
continue;
813-
}
814-
if (cfgevtsel.isApplyBestCollIndex && RecCol.globalIndex() != mcCollision.bestCollisionIndex()) {
815-
continue;
816-
}
799+
if (std::abs(RecCol.posZ()) >= cfgevtsel.cfgVtxCut)
800+
continue;
801+
if (cfgevtsel.isApplyBestCollIndex && RecCol.globalIndex() != mcCollision.bestCollisionIndex())
802+
continue;
803+
if (isUseCentEst) {
817804
multiplicity = selColCent(RecCol);
805+
} else {
806+
auto recTracksPart = RecTracks.sliceBy(perColMidtrack, RecCol.globalIndex());
807+
multiplicity = countNTracks(recTracksPart);
818808
}
809+
atLeastOne = true;
819810
}
820-
821811
for (const auto& particle : mcparticles) {
822812
if (!isGenPartSelected(particle) || particle.eta() > cfgmfttrksel.cfigMftEtaMax || particle.eta() < cfgmfttrksel.cfigMftEtaMin || particle.pt() < cfgmfttrksel.cfgMftPtCutMin || particle.pt() > cfgmfttrksel.cfgMftPtCutMax)
823813
continue;
824-
histos.fill(HIST("hGenMCdndpt"), mcCollision.posZ(), multiplicity, particle.eta(), particle.pt(), 1.0);
814+
if (atLeastOne)
815+
histos.fill(HIST("hGenMCdndpt"), mcCollision.posZ(), multiplicity, particle.eta(), particle.pt(), 1.0);
825816
}
826-
827817
for (const auto& RecCol : RecCols) {
828-
if (!isEventSelected(RecCol)) {
818+
if (!isEventSelected(RecCol))
829819
continue;
830-
}
831-
if (std::abs(RecCol.posZ()) >= cfgevtsel.cfgVtxCut) {
820+
if (std::abs(RecCol.posZ()) >= cfgevtsel.cfgVtxCut)
832821
continue;
833-
}
834-
if (cfgevtsel.isApplyBestCollIndex && RecCol.globalIndex() != mcCollision.bestCollisionIndex()) {
822+
if (cfgevtsel.isApplyBestCollIndex && RecCol.globalIndex() != mcCollision.bestCollisionIndex())
835823
continue;
836-
}
837824
auto recTracksPart = mfttracks.sliceBy(perColMfttrack, RecCol.globalIndex());
838825
for (const auto& track : recTracksPart) {
839826
if (!isMftTrackSelected(track))

PWGCF/TwoParticleCorrelations/Tasks/longrangecorrDerived.cxx

Lines changed: 55 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,6 @@ struct LongrangecorrDerived {
6868
Configurable<float> cfgZdcCut{"cfgZdcCut", 0.1f, "ZDC threshold"};
6969
Configurable<int> cfgGapSideCut{"cfgGapSideCut", 0, "Gap-side A=0, C=1, AC = 2, No Gap = -1, All events = 3"};
7070

71-
Configurable<bool> isApplyAmpCut{"isApplyAmpCut", false, "Enable FT0 amplitude cut"};
72-
Configurable<float> cfgLowAmpCut{"cfgLowAmpCut", 2.0f, "Low FT0 amplitude cut"};
73-
7471
ConfigurableAxis axisMultiplicity{"axisMultiplicity", {VARIABLE_WIDTH, 0, 10, 15, 25, 50, 60, 1000}, "multiplicity axis"};
7572
ConfigurableAxis axisPhi{"axisPhi", {96, 0, TwoPI}, "#phi axis"};
7673
ConfigurableAxis axisEtaTrig{"axisEtaTrig", {40, -1., 1.}, "#eta trig axis"};
@@ -165,6 +162,10 @@ struct LongrangecorrDerived {
165162
histos.add("Trig_pt", "Trig_pt", kTH1D, {axisPtTrigger});
166163
histos.add("Trig_invMass", "Trig_invMass", kTH1D, {axisInvMassQA});
167164
histos.add("Trig_hist", "Trig_hist", kTHnSparseF, {axisVtxZ, axisMultiplicity, axisPtTrigger, axisInvMass});
165+
histos.add("Trig_amp", "Trig_amp", kTH1D, {axisAmplitude});
166+
histos.add("Trig_amp_gaincorrected", "Trig_amp_gaincorrected", kTH1D, {axisAmplitude});
167+
histos.add("Channel_vs_Trig_amp", "Channel_vs_Trig_amp", kTH2D, {axisChannel, axisAmplitude});
168+
histos.add("Channel_vs_Trig_amp_gaincorrected", "Channel_vs_Trig_amp_gaincorrected", kTH2D, {axisChannel, axisAmplitude});
168169

169170
histos.add("Assoc_eta", "Assoc_eta", kTH1D, {axisEtaAssoc});
170171
histos.add("Assoc_phi", "Assoc_phi", kTH1D, {axisPhi});
@@ -195,7 +196,14 @@ struct LongrangecorrDerived {
195196
histos.fill(HIST("Trig_etavsphi"), track.phi(), track.eta());
196197
histos.fill(HIST("Trig_eta"), track.eta());
197198
histos.fill(HIST("Trig_phi"), track.phi());
198-
histos.fill(HIST("Trig_pt"), track.pt());
199+
if constexpr (std::experimental::is_detected<HasFt0, TTrack>::value) {
200+
histos.fill(HIST("Trig_amp"), track.amplitude());
201+
histos.fill(HIST("Channel_vs_Trig_amp"), track.channelID(), track.amplitude());
202+
histos.fill(HIST("Trig_amp_gaincorrected"), track.gainAmplitude());
203+
histos.fill(HIST("Channel_vs_Trig_amp_gaincorrected"), track.channelID(), track.gainAmplitude());
204+
} else {
205+
histos.fill(HIST("Trig_pt"), track.pt());
206+
}
199207
if constexpr (std::experimental::is_detected<HasInvMass, TTrack>::value) {
200208
histos.fill(HIST("Trig_invMass"), track.invMass());
201209
}
@@ -251,6 +259,7 @@ struct LongrangecorrDerived {
251259
template <CorrelationContainer::CFStep step, typename TTarget, typename TTriggers, typename TAssocs>
252260
void fillCorrHist(TTarget target, TTriggers const& triggers, TAssocs const& assocs, bool mixing, float vz, float multiplicity, float eventWeight)
253261
{
262+
auto trigAmpl = 1.0f;
254263
for (auto const& triggerTrack : triggers) {
255264
if constexpr (std::experimental::is_detected<HasTpcTrack, typename TTriggers::iterator>::value) {
256265
if (cfgPidMask != 0 && (cfgPidMask & (1u << static_cast<uint32_t>(triggerTrack.trackType()))) == 0u)
@@ -259,33 +268,39 @@ struct LongrangecorrDerived {
259268
if (cfgV0Mask != 0 && (cfgV0Mask & (1u << static_cast<uint32_t>(triggerTrack.v0Type()))) == 0u)
260269
continue;
261270
}
271+
if constexpr (std::experimental::is_detected<HasFt0, typename TTriggers::iterator>::value) {
272+
trigAmpl *= triggerTrack.gainAmplitude();
273+
}
262274
if (!mixing) {
263275
fillTrigTrackQA(triggerTrack);
264-
if constexpr (std::experimental::is_detected<HasInvMass, typename TTriggers::iterator>::value) {
265-
histos.fill(HIST("Trig_hist"), vz, multiplicity, triggerTrack.pt(), triggerTrack.invMass(), eventWeight);
276+
if constexpr (std::experimental::is_detected<HasFt0, typename TTriggers::iterator>::value) {
277+
histos.fill(HIST("Trig_hist"), vz, multiplicity, 1.0, 1.0, eventWeight * trigAmpl);
278+
} else if constexpr (std::experimental::is_detected<HasInvMass, typename TTriggers::iterator>::value) {
279+
histos.fill(HIST("Trig_hist"), vz, multiplicity, triggerTrack.pt(), triggerTrack.invMass(), eventWeight * trigAmpl);
266280
} else {
267-
histos.fill(HIST("Trig_hist"), vz, multiplicity, triggerTrack.pt(), 1.0, eventWeight);
281+
histos.fill(HIST("Trig_hist"), vz, multiplicity, triggerTrack.pt(), 1.0, eventWeight * trigAmpl);
268282
}
269283
}
270-
auto ampl = 1.0f;
284+
auto assoAmpl = 1.0f;
271285
for (auto const& assoTrack : assocs) {
272286
if constexpr (std::experimental::is_detected<HasFt0, typename TAssocs::iterator>::value) {
273-
if (isApplyAmpCut && (assoTrack.amplitude() < cfgLowAmpCut))
274-
continue;
275-
ampl *= assoTrack.gainAmplitude();
287+
assoAmpl *= assoTrack.gainAmplitude();
276288
}
277289
float deltaPhi = RecoDecay::constrainAngle(triggerTrack.phi() - assoTrack.phi(), -PIHalf);
278290
float deltaEta = triggerTrack.eta() - assoTrack.eta();
279291
if (!mixing) {
280292
fillAssocTrackQA(assoTrack);
281-
histos.fill(HIST("deltaEta_deltaPhi_same"), deltaPhi, deltaEta, eventWeight * ampl);
293+
histos.fill(HIST("deltaEta_deltaPhi_same"), deltaPhi, deltaEta, eventWeight * trigAmpl * assoAmpl);
282294
} else {
283-
histos.fill(HIST("deltaEta_deltaPhi_mixed"), deltaPhi, deltaEta, eventWeight * ampl);
295+
histos.fill(HIST("deltaEta_deltaPhi_mixed"), deltaPhi, deltaEta, eventWeight * trigAmpl * assoAmpl);
284296
}
285-
if constexpr (std::experimental::is_detected<HasInvMass, typename TTriggers::iterator>::value) {
286-
target->getPairHist()->Fill(step, vz, multiplicity, triggerTrack.pt(), triggerTrack.pt(), deltaPhi, deltaEta, triggerTrack.invMass(), eventWeight * ampl);
297+
298+
if constexpr (std::experimental::is_detected<HasFt0, typename TTriggers::iterator>::value) {
299+
target->getPairHist()->Fill(step, vz, multiplicity, 1.0, 1.0, deltaPhi, deltaEta, 1.0, eventWeight * trigAmpl * assoAmpl);
300+
} else if constexpr (std::experimental::is_detected<HasInvMass, typename TTriggers::iterator>::value) {
301+
target->getPairHist()->Fill(step, vz, multiplicity, triggerTrack.pt(), triggerTrack.pt(), deltaPhi, deltaEta, triggerTrack.invMass(), eventWeight * trigAmpl * assoAmpl);
287302
} else {
288-
target->getPairHist()->Fill(step, vz, multiplicity, triggerTrack.pt(), triggerTrack.pt(), deltaPhi, deltaEta, 1.0, eventWeight * ampl);
303+
target->getPairHist()->Fill(step, vz, multiplicity, triggerTrack.pt(), triggerTrack.pt(), deltaPhi, deltaEta, 1.0, eventWeight * trigAmpl * assoAmpl);
289304
}
290305
} // associated tracks
291306
} // trigger tracks
@@ -446,6 +461,11 @@ struct LongrangecorrDerived {
446461
processSame(col, tracks, mfts);
447462
}
448463

464+
void processFt0aft0cSE(CollsTable::iterator const& col, Ft0aTrksTable const& ft0as, Ft0cTrksTable const& ft0cs)
465+
{
466+
processSame(col, ft0as, ft0cs);
467+
}
468+
449469
void processTpcft0aME(CollsTable const& cols, TrksTable const& tracks, Ft0aTrksTable const& ft0as)
450470
{
451471
processMixed(cols, tracks, ft0as);
@@ -491,6 +511,11 @@ struct LongrangecorrDerived {
491511
processMixed(cols, tracks, mfts);
492512
}
493513

514+
void processFt0aft0cME(CollsTable const& cols, Ft0aTrksTable const& ft0as, Ft0cTrksTable const& ft0cs)
515+
{
516+
processMixed(cols, ft0as, ft0cs);
517+
}
518+
494519
void processUpcTpcft0aSE(UpcCollsTable::iterator const& col, TrksUpcTable const& tracks, Ft0aTrksUpcTable const& ft0as)
495520
{
496521
if (!isUpcEventSelected<true>(col)) {
@@ -628,6 +653,11 @@ struct LongrangecorrDerived {
628653
processMcSame(mccollision, collisions, mfts, ft0as);
629654
}
630655

656+
void processMcFt0aft0cSE(McCollsTable::iterator const& mccollision, soa::SmallGroups<aod::LRCollisionsWithLabel> const& collisions, McFt0aTrksTable const& ft0as, McFt0cTrksTable const& ft0cs)
657+
{
658+
processMcSame(mccollision, collisions, ft0as, ft0cs);
659+
}
660+
631661
void processMcTpcft0aME(McCollsTable const& mccollisions, aod::LRCollisionsWithLabel const& collisions, McTrksTable const& tracks, McFt0aTrksTable const& ft0as)
632662
{
633663
processMcMixed(mccollisions, collisions, tracks, ft0as);
@@ -648,6 +678,11 @@ struct LongrangecorrDerived {
648678
processMcMixed(mccollisions, collisions, mfts, ft0as);
649679
}
650680

681+
void processMcFt0aft0cME(McCollsTable const& mccollisions, aod::LRCollisionsWithLabel const& collisions, McFt0aTrksTable const& ft0as, McFt0cTrksTable const& ft0cs)
682+
{
683+
processMcMixed(mccollisions, collisions, ft0as, ft0cs);
684+
}
685+
651686
PROCESS_SWITCH(LongrangecorrDerived, processTpcft0aSE, "same event TPC vs FT0A", false);
652687
PROCESS_SWITCH(LongrangecorrDerived, processTpcft0aME, "mixed event TPC vs FT0A", false);
653688
PROCESS_SWITCH(LongrangecorrDerived, processTpcft0cSE, "same event TPC vs FT0C", false);
@@ -666,6 +701,8 @@ struct LongrangecorrDerived {
666701
PROCESS_SWITCH(LongrangecorrDerived, processMftbestft0aME, "mixed event best MFT vs FT0A", false);
667702
PROCESS_SWITCH(LongrangecorrDerived, processV0mftbestSE, "same event V0 vs best MFT", false);
668703
PROCESS_SWITCH(LongrangecorrDerived, processV0mftbestME, "mixed event V0 vs best MFT", false);
704+
PROCESS_SWITCH(LongrangecorrDerived, processFt0aft0cSE, "same event FT0A vs FT0C", false);
705+
PROCESS_SWITCH(LongrangecorrDerived, processFt0aft0cME, "mixed event FT0A vs FT0C", false);
669706
PROCESS_SWITCH(LongrangecorrDerived, processUpcTpcft0aSE, "same UPC event TPC vs FT0A", false);
670707
PROCESS_SWITCH(LongrangecorrDerived, processUpcTpcft0aME, "mixed UPC event TPC vs FT0A", false);
671708
PROCESS_SWITCH(LongrangecorrDerived, processUpcTpcft0cSE, "same UPC event TPC vs FT0C", false);
@@ -692,6 +729,8 @@ struct LongrangecorrDerived {
692729
PROCESS_SWITCH(LongrangecorrDerived, processMcTpcmftME, "mixed MC event TPC vs MFT", false);
693730
PROCESS_SWITCH(LongrangecorrDerived, processMcMftft0aSE, "same MC event MFT vs FT0A", false);
694731
PROCESS_SWITCH(LongrangecorrDerived, processMcMftft0aME, "mixed MC event MFT vs FT0A", false);
732+
PROCESS_SWITCH(LongrangecorrDerived, processMcFt0aft0cSE, "same MC event FT0A vs FT0C", false);
733+
PROCESS_SWITCH(LongrangecorrDerived, processMcFt0aft0cME, "mixed MC event FT0A vs FT0C", false);
695734
};
696735

697736
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)

0 commit comments

Comments
 (0)