Skip to content

Commit dc004ad

Browse files
BongHwialibuild
authored andcommitted
General update on Reso2Initializer (AliceO2Group#3358)
* Update temporary TPC multiplcity FT0 * Remove Reco getMass, efficient multi,cent estimate * Remove mixing part for TPCtemp multi removal * Update QA hitogram to add multiplicity * Please consider the following formatting changes * resolve megalinter --------- Co-authored-by: ALICE Action Bot <alibuild@cern.ch>
1 parent 8fe970a commit dc004ad

File tree

4 files changed

+90
-94
lines changed

4 files changed

+90
-94
lines changed

PWGLF/DataModel/LFResonanceTables.h

+3-3
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ namespace o2::aod
3131
/// Resonance Collisions
3232
namespace resocollision
3333
{
34-
DECLARE_SOA_COLUMN(MultV0M, multV0M, float); //! V0M multiplicity
35-
DECLARE_SOA_COLUMN(MultTPCtemp, multTPCtemp, float); //! TPC multiplicity (temporal)
34+
DECLARE_SOA_COLUMN(MultV0M, multV0M, float); //! V0M multiplicity percentile (run2: V0M, run3: FT0A/C/M)
35+
DECLARE_SOA_COLUMN(MultFT0, multFT0, int); //! FT0 multiplicity
3636
DECLARE_SOA_COLUMN(Spherocity, spherocity, float); //! Spherocity of the event
3737
DECLARE_SOA_COLUMN(BMagField, bMagField, float); //! Magnetic field
3838
} // namespace resocollision
@@ -42,7 +42,7 @@ DECLARE_SOA_TABLE(ResoCollisions, "AOD", "RESOCOL",
4242
collision::PosY,
4343
collision::PosZ,
4444
resocollision::MultV0M,
45-
resocollision::MultTPCtemp,
45+
resocollision::MultFT0,
4646
resocollision::Spherocity,
4747
resocollision::BMagField,
4848
timestamp::Timestamp);

PWGLF/TableProducer/LFResonanceInitializer.cxx

+72-31
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,9 @@ using namespace o2::soa;
4343

4444
/// Initializer for the resonance candidate producers
4545
struct reso2initializer {
46-
float cXiMass = RecoDecay::getMassPDG(3312);
46+
float cXiMass = TDatabasePDG::Instance()->GetParticle(3312)->Mass();
4747
int mRunNumber;
48+
int multEstimator;
4849
float d_bz;
4950
Service<o2::ccdb::BasicCCDBManager> ccdb;
5051

@@ -70,6 +71,7 @@ struct reso2initializer {
7071
Configurable<bool> ConfIsRun3{"ConfIsRun3", true, "Running on Pilot beam"}; // Choose if running on converted data or pilot beam
7172
Configurable<double> d_bz_input{"d_bz", -999, "bz field, -999 is automatic"};
7273
Configurable<bool> ConfFillQA{"ConfFillQA", false, "Fill QA histograms"};
74+
Configurable<bool> ConfBypassCCDB{"ConfBypassCCDB", false, "Bypass loading CCDB part to save CPU time and memory"}; // will be affected to b_z value.
7375

7476
// Track filter from tpcSkimsTableCreator
7577
Configurable<int> trackSelection{"trackSelection", 0, "Track selection: 0 -> No Cut, 1 -> kGlobalTrack, 2 -> kGlobalTrackWoPtEta, 3 -> kGlobalTrackWoDCA, 4 -> kQualityTracks, 5 -> kInAcceptanceTracks"};
@@ -146,7 +148,7 @@ struct reso2initializer {
146148
|| (nabs(aod::mcparticle::pdgCode) == 123314) // Xi(1820)0
147149
|| (nabs(aod::mcparticle::pdgCode) == 123324); // Xi(1820)-0
148150

149-
using ResoEvents = soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::CentFT0Ms, aod::CentFT0Cs, aod::CentFT0As>;
151+
using ResoEvents = soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::CentFV0As, aod::CentFT0Ms, aod::CentFT0Cs, aod::CentFT0As>;
150152
using ResoEventsMC = soa::Join<ResoEvents, aod::McCollisionLabels>;
151153
using ResoTracks = aod::Reso2TracksPIDExt;
152154
using ResoTracksMC = soa::Join<ResoTracks, aod::McTrackLabels>;
@@ -295,21 +297,44 @@ struct reso2initializer {
295297
return true;
296298
}
297299

300+
// Centralicity estimator selection
301+
template <typename ResoColl>
302+
float CentEst(ResoColl ResoEvents)
303+
{
304+
float returnValue = -999.0;
305+
switch (multEstimator) {
306+
case 0:
307+
returnValue = ResoEvents.centFT0M();
308+
case 1:
309+
returnValue = ResoEvents.centFT0C();
310+
case 2:
311+
returnValue = ResoEvents.centFT0A();
312+
case 99:
313+
returnValue = ResoEvents.centFV0A();
314+
default:
315+
returnValue = ResoEvents.centFT0M();
316+
}
317+
return returnValue;
318+
}
319+
298320
// Multiplicity estimator selection
299321
template <typename ResoColl>
300322
float MultEst(ResoColl ResoEvents)
301323
{
302-
if (cfgMultName.value == "FT0M") {
303-
return ResoEvents.centFT0M();
304-
} else if (cfgMultName.value == "FT0C") {
305-
return ResoEvents.centFT0C();
306-
} else if (cfgMultName.value == "FT0A") {
307-
return ResoEvents.centFT0A();
308-
} else if (cfgMultName.value == "FV0M") {
309-
return ResoEvents.multFV0M();
310-
} else {
311-
return ResoEvents.centFT0M();
324+
float returnValue = -999.0;
325+
switch (multEstimator) {
326+
case 0:
327+
returnValue = ResoEvents.multFT0M();
328+
case 1:
329+
returnValue = ResoEvents.multFT0C();
330+
case 2:
331+
returnValue = ResoEvents.multFT0A();
332+
case 99:
333+
returnValue = ResoEvents.multFV0A();
334+
default:
335+
returnValue = ResoEvents.multFT0M();
312336
}
337+
return returnValue;
313338
}
314339

315340
// Filter for all tracks
@@ -708,15 +733,29 @@ struct reso2initializer {
708733
{
709734
mRunNumber = 0;
710735
d_bz = 0;
736+
// Multiplicity estimator selection (0: FT0M, 1: FT0C, 2: FT0A, 99: FV0A)
737+
if (cfgMultName.value == "FT0M") {
738+
multEstimator = 0;
739+
} else if (cfgMultName.value == "FT0C") {
740+
multEstimator = 1;
741+
} else if (cfgMultName.value == "FT0A") {
742+
multEstimator = 2;
743+
} else if (cfgMultName.value == "FV0A") {
744+
multEstimator = 99;
745+
} else {
746+
multEstimator = 0;
747+
}
748+
711749
colCuts.setCuts(ConfEvtZvtx, ConfEvtTriggerCheck, ConfEvtTriggerSel, ConfEvtOfflineCheck, ConfIsRun3);
712750
colCuts.init(&qaRegistry);
713-
714-
ccdb->setURL(ccdburl.value);
715-
ccdb->setCaching(true);
716-
ccdb->setLocalObjectValidityChecking();
717-
ccdb->setFatalWhenNull(cfgFatalWhenNull);
718-
uint64_t now = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count();
719-
ccdb->setCreatedNotAfter(now); // TODO must become global parameter from the train creation time
751+
if (!ConfBypassCCDB) {
752+
ccdb->setURL(ccdburl.value);
753+
ccdb->setCaching(true);
754+
ccdb->setLocalObjectValidityChecking();
755+
ccdb->setFatalWhenNull(cfgFatalWhenNull);
756+
uint64_t now = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count();
757+
ccdb->setCreatedNotAfter(now); // TODO must become global parameter from the train creation time
758+
}
720759

721760
// QA histograms
722761
if (ConfFillQA) {
@@ -732,6 +771,8 @@ struct reso2initializer {
732771

733772
void initCCDB(aod::BCsWithTimestamps::iterator const& bc) // Simple copy from LambdaKzeroFinder.cxx
734773
{
774+
if (ConfBypassCCDB)
775+
return;
735776
if (mRunNumber == bc.runNumber()) {
736777
return;
737778
}
@@ -784,9 +825,9 @@ struct reso2initializer {
784825
colCuts.fillQA(collision);
785826

786827
if (ConfIsRun3) {
787-
resoCollisions(collision.posX(), collision.posY(), collision.posZ(), MultEst(collision), collision.multTPC(), colCuts.computeSpherocity(collision, tracks), d_bz, bc.timestamp());
828+
resoCollisions(collision.posX(), collision.posY(), collision.posZ(), CentEst(collision), MultEst(collision), colCuts.computeSpherocity(collision, tracks), d_bz, bc.timestamp());
788829
} else {
789-
resoCollisions(collision.posX(), collision.posY(), collision.posZ(), collision.multFV0M(), collision.multTPC(), colCuts.computeSpherocity(collision, tracks), d_bz, bc.timestamp());
830+
resoCollisions(collision.posX(), collision.posY(), collision.posZ(), collision.multFV0M(), MultEst(collision), colCuts.computeSpherocity(collision, tracks), d_bz, bc.timestamp());
790831
}
791832

792833
fillTracks<false>(collision, tracks);
@@ -806,9 +847,9 @@ struct reso2initializer {
806847
colCuts.fillQA(collision);
807848

808849
if (ConfIsRun3) {
809-
resoCollisions(collision.posX(), collision.posY(), collision.posZ(), MultEst(collision), collision.multTPC(), colCuts.computeSpherocity(collision, tracks), d_bz, bc.timestamp());
850+
resoCollisions(collision.posX(), collision.posY(), collision.posZ(), CentEst(collision), MultEst(collision), colCuts.computeSpherocity(collision, tracks), d_bz, bc.timestamp());
810851
} else {
811-
resoCollisions(collision.posX(), collision.posY(), collision.posZ(), collision.multFV0M(), collision.multTPC(), colCuts.computeSpherocity(collision, tracks), d_bz, bc.timestamp());
852+
resoCollisions(collision.posX(), collision.posY(), collision.posZ(), collision.multFV0M(), MultEst(collision), colCuts.computeSpherocity(collision, tracks), d_bz, bc.timestamp());
812853
}
813854

814855
fillTracks<false>(collision, tracks);
@@ -830,9 +871,9 @@ struct reso2initializer {
830871
colCuts.fillQA(collision);
831872

832873
if (ConfIsRun3) {
833-
resoCollisions(collision.posX(), collision.posY(), collision.posZ(), MultEst(collision), collision.multTPC(), colCuts.computeSpherocity(collision, tracks), d_bz, bc.timestamp());
874+
resoCollisions(collision.posX(), collision.posY(), collision.posZ(), CentEst(collision), MultEst(collision), colCuts.computeSpherocity(collision, tracks), d_bz, bc.timestamp());
834875
} else {
835-
resoCollisions(collision.posX(), collision.posY(), collision.posZ(), collision.multFV0M(), collision.multTPC(), colCuts.computeSpherocity(collision, tracks), d_bz, bc.timestamp());
876+
resoCollisions(collision.posX(), collision.posY(), collision.posZ(), collision.multFV0M(), MultEst(collision), colCuts.computeSpherocity(collision, tracks), d_bz, bc.timestamp());
836877
}
837878

838879
fillTracks<false>(collision, tracks);
@@ -853,9 +894,9 @@ struct reso2initializer {
853894
colCuts.fillQA(collision);
854895

855896
if (ConfIsRun3) {
856-
resoCollisions(collision.posX(), collision.posY(), collision.posZ(), MultEst(collision), collision.multTPC(), colCuts.computeSpherocity(collision, tracks), d_bz, bc.timestamp());
897+
resoCollisions(collision.posX(), collision.posY(), collision.posZ(), CentEst(collision), MultEst(collision), colCuts.computeSpherocity(collision, tracks), d_bz, bc.timestamp());
857898
} else {
858-
resoCollisions(collision.posX(), collision.posY(), collision.posZ(), collision.multFV0M(), collision.multTPC(), colCuts.computeSpherocity(collision, tracks), d_bz, bc.timestamp());
899+
resoCollisions(collision.posX(), collision.posY(), collision.posZ(), collision.multFV0M(), MultEst(collision), colCuts.computeSpherocity(collision, tracks), d_bz, bc.timestamp());
859900
}
860901

861902
// Loop over tracks
@@ -879,9 +920,9 @@ struct reso2initializer {
879920
colCuts.fillQA(collision);
880921

881922
if (ConfIsRun3) {
882-
resoCollisions(collision.posX(), collision.posY(), collision.posZ(), MultEst(collision), collision.multTPC(), colCuts.computeSpherocity(collision, tracks), d_bz, bc.timestamp());
923+
resoCollisions(collision.posX(), collision.posY(), collision.posZ(), CentEst(collision), MultEst(collision), colCuts.computeSpherocity(collision, tracks), d_bz, bc.timestamp());
883924
} else {
884-
resoCollisions(collision.posX(), collision.posY(), collision.posZ(), collision.multFV0M(), collision.multTPC(), colCuts.computeSpherocity(collision, tracks), d_bz, bc.timestamp());
925+
resoCollisions(collision.posX(), collision.posY(), collision.posZ(), collision.multFV0M(), MultEst(collision), colCuts.computeSpherocity(collision, tracks), d_bz, bc.timestamp());
885926
}
886927

887928
// Loop over tracks
@@ -907,9 +948,9 @@ struct reso2initializer {
907948
colCuts.fillQA(collision);
908949

909950
if (ConfIsRun3) {
910-
resoCollisions(collision.posX(), collision.posY(), collision.posZ(), MultEst(collision), collision.multTPC(), colCuts.computeSpherocity(collision, tracks), d_bz, bc.timestamp());
951+
resoCollisions(collision.posX(), collision.posY(), collision.posZ(), CentEst(collision), MultEst(collision), colCuts.computeSpherocity(collision, tracks), d_bz, bc.timestamp());
911952
} else {
912-
resoCollisions(collision.posX(), collision.posY(), collision.posZ(), collision.multFV0M(), collision.multTPC(), colCuts.computeSpherocity(collision, tracks), d_bz, bc.timestamp());
953+
resoCollisions(collision.posX(), collision.posY(), collision.posZ(), collision.multFV0M(), MultEst(collision), colCuts.computeSpherocity(collision, tracks), d_bz, bc.timestamp());
913954
}
914955

915956
// Loop over tracks

PWGLF/Tasks/phianalysis.cxx

-49
Original file line numberDiff line numberDiff line change
@@ -217,55 +217,6 @@ struct phianalysis {
217217
}
218218
}
219219
PROCESS_SWITCH(phianalysis, processMC, "Process Event for MC", false);
220-
221-
// Processing Event Mixing
222-
using BinningTypeVetZTPCtemp = ColumnBinningPolicy<aod::collision::PosZ, aod::resocollision::MultTPCtemp>;
223-
BinningTypeVetZTPCtemp colBinning{{CfgVtxBins, CfgMultBins}, true};
224-
void processME(o2::aod::ResoCollisions& collisions, aod::ResoTracks const& resotracks)
225-
{
226-
LOGF(debug, "Event Mixing Started");
227-
auto tracksTuple = std::make_tuple(resotracks);
228-
SameKindPair<aod::ResoCollisions, aod::ResoTracks, BinningTypeVetZTPCtemp> pairs{colBinning, nEvtMixing, -1, collisions, tracksTuple, &cache}; // -1 is the number of the bin to skip
229-
230-
TLorentzVector lDecayDaughter1, lDecayDaughter2, lResonance;
231-
for (auto& [collision1, tracks1, collision2, tracks2] : pairs) {
232-
Partition<aod::ResoTracks> selectedTracks1 = requireTOFPIDKaonCutInFilter() && (o2::aod::track::pt > static_cast<float_t>(cMinPtcut)) && (nabs(o2::aod::track::dcaZ) > static_cast<float_t>(cMinDCAzToPVcut)) && (nabs(o2::aod::track::dcaZ) < static_cast<float_t>(cMaxDCAzToPVcut)) && (nabs(o2::aod::track::dcaXY) < static_cast<float_t>(cMaxDCArToPVcut)); // Basic DCA cuts
233-
selectedTracks1.bindTable(tracks1);
234-
235-
Partition<aod::ResoTracks> selectedTracks2 = requireTOFPIDKaonCutInFilter() && (o2::aod::track::pt > static_cast<float_t>(cMinPtcut)) && (nabs(o2::aod::track::dcaZ) > static_cast<float_t>(cMinDCAzToPVcut)) && (nabs(o2::aod::track::dcaZ) < static_cast<float_t>(cMaxDCAzToPVcut)) && (nabs(o2::aod::track::dcaXY) < static_cast<float_t>(cMaxDCArToPVcut)); // Basic DCA cuts
236-
selectedTracks2.bindTable(tracks2);
237-
238-
for (auto& [trk1, trk2] : combinations(CombinationsFullIndexPolicy(selectedTracks1, selectedTracks2))) {
239-
// Un-like sign pair only
240-
if (trk1.sign() * trk2.sign() > 0)
241-
continue;
242-
if ((trk1.pt() < 0.3) && (std::abs(trk1.tpcNSigmaKa()) > 6.0))
243-
continue;
244-
if ((trk1.pt() >= 0.3) && (trk1.pt() < 0.4) && (std::abs(trk1.tpcNSigmaKa()) > 4.0))
245-
continue;
246-
if ((trk1.pt() >= 0.4) && (std::abs(trk1.tpcNSigmaKa()) > 2.0))
247-
continue;
248-
249-
if ((trk2.pt() < 0.3) && (std::abs(trk2.tpcNSigmaKa()) > 6.0))
250-
continue;
251-
if ((trk2.pt() >= 0.3) && (trk2.pt() < 0.4) && (std::abs(trk2.tpcNSigmaKa()) > 4.0))
252-
continue;
253-
if ((trk2.pt() >= 0.4) && (std::abs(trk2.tpcNSigmaKa()) > 2.0))
254-
continue;
255-
256-
lDecayDaughter1.SetXYZM(trk1.px(), trk1.py(), trk1.pz(), massKa);
257-
lDecayDaughter2.SetXYZM(trk2.px(), trk2.py(), trk2.pz(), massKa);
258-
lResonance = lDecayDaughter1 + lDecayDaughter2;
259-
260-
if (lResonance.Rapidity() > 0.5 || lResonance.Rapidity() < -0.5)
261-
continue;
262-
263-
histos.fill(HIST("phiinvmassME"), lResonance.M());
264-
histos.fill(HIST("h3phiinvmassME"), collision1.multV0M(), lResonance.Pt(), lResonance.M());
265-
}
266-
}
267-
};
268-
PROCESS_SWITCH(phianalysis, processME, "Process EventMixing", false);
269220
};
270221

271222
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)

PWGLF/Utils/collisionCuts.h

+15-11
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,14 @@ class CollisonCuts
5656
LOGF(error, "Event selection not set - quitting!");
5757
}
5858
mHistogramRegistry = registry;
59-
mHistogramRegistry->add("Event/posZ", "; vtx_{z} (cm); Entries", kTH1F, {{300, -12.5, 12.5}});
60-
mHistogramRegistry->add("Event/MultFV0M", "; vMultV0M; Entries", kTH1F, {{120, 0, 120}});
61-
mHistogramRegistry->add("Event/MultFT0M", "; vMultT0M; Entries", kTH1F, {{120, 0, 120}});
62-
mHistogramRegistry->add("Event/MultFT0C", "; vMultT0C; Entries", kTH1F, {{120, 0, 120}});
63-
mHistogramRegistry->add("Event/MultFT0A", "; vMultT0A; Entries", kTH1F, {{120, 0, 120}});
64-
mHistogramRegistry->add("Event/MultTPC", "; vMultTPC; Entries", kTH1F, {{300, 0, 3000}});
59+
mHistogramRegistry->add("Event/posZ", "; vtx_{z} (cm); Entries", kTH1F, {{250, -12.5, 12.5}});
60+
mHistogramRegistry->add("Event/CentFV0A", "; vCentV0A; Entries", kTH1F, {{110, 0, 110}});
61+
mHistogramRegistry->add("Event/CentFT0M", "; vCentT0M; Entries", kTH1F, {{110, 0, 110}});
62+
mHistogramRegistry->add("Event/CentFT0C", "; vCentT0C; Entries", kTH1F, {{110, 0, 110}});
63+
mHistogramRegistry->add("Event/CentFT0A", "; vCentT0A; Entries", kTH1F, {{110, 0, 110}});
64+
mHistogramRegistry->add("Event/MultFT0M", "; FT0M signal; Entries", kTH1F, {{100000, 0, 100000}});
65+
mHistogramRegistry->add("Event/MultFT0C", "; FT0C signal; Entries", kTH1F, {{100000, 0, 100000}});
66+
mHistogramRegistry->add("Event/MultFT0A", "; FT0A signal; Entries", kTH1F, {{100000, 0, 100000}});
6567
}
6668

6769
/// Print some debug information
@@ -119,11 +121,13 @@ class CollisonCuts
119121
{
120122
if (mHistogramRegistry) {
121123
mHistogramRegistry->fill(HIST("Event/posZ"), col.posZ());
122-
mHistogramRegistry->fill(HIST("Event/MultFV0M"), col.multFV0M());
123-
mHistogramRegistry->fill(HIST("Event/MultFT0M"), col.centFT0M());
124-
mHistogramRegistry->fill(HIST("Event/MultFT0C"), col.centFT0C());
125-
mHistogramRegistry->fill(HIST("Event/MultFT0A"), col.centFT0A());
126-
mHistogramRegistry->fill(HIST("Event/MultTPC"), col.multTPC());
124+
mHistogramRegistry->fill(HIST("Event/CentFV0A"), col.centFV0A());
125+
mHistogramRegistry->fill(HIST("Event/CentFT0M"), col.centFT0M());
126+
mHistogramRegistry->fill(HIST("Event/CentFT0C"), col.centFT0C());
127+
mHistogramRegistry->fill(HIST("Event/CentFT0A"), col.centFT0A());
128+
mHistogramRegistry->fill(HIST("Event/MultFT0M"), col.multFT0M());
129+
mHistogramRegistry->fill(HIST("Event/MultFT0C"), col.multFT0C());
130+
mHistogramRegistry->fill(HIST("Event/MultFT0A"), col.multFT0A());
127131
}
128132
}
129133

0 commit comments

Comments
 (0)