Skip to content

Commit 1e84886

Browse files
authored
Merge branch 'AliceO2Group:master' into add-centrality-in-d0-hadrons-correlation
2 parents de3546e + 4d53821 commit 1e84886

File tree

16 files changed

+1302
-90
lines changed

16 files changed

+1302
-90
lines changed

Common/Core/CollisionAssociation.h

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,8 @@ class CollisionAssociation
8080
switch (mTrackSelection) {
8181
case o2::aod::track_association::TrackSelection::CentralBarrelRun2: {
8282
unsigned char itsClusterMap = track.itsClusterMap();
83-
if (!(track.tpcNClsFound() >= 50 && track.flags() & o2::aod::track::ITSrefit && track.flags() & o2::aod::track::TPCrefit && (TESTBIT(itsClusterMap, 0) || TESTBIT(itsClusterMap, 1)))) {
83+
int minTpcNClsFound{50};
84+
if (!(track.tpcNClsFound() >= minTpcNClsFound && track.flags() & o2::aod::track::ITSrefit && track.flags() & o2::aod::track::TPCrefit && (TESTBIT(itsClusterMap, 0) || TESTBIT(itsClusterMap, 1)))) {
8485
hasGoodQuality = false;
8586
}
8687
break;
@@ -127,7 +128,7 @@ class CollisionAssociation
127128
TTracksUnfiltered const& tracksUnfiltered,
128129
TTracks const& tracks,
129130
TAmbiTracks const& ambiguousTracks,
130-
o2::aod::BCs const&,
131+
o2::aod::BCs const& bcs,
131132
Assoc& association,
132133
RevIndices& reverseIndices)
133134
{
@@ -151,6 +152,11 @@ class CollisionAssociation
151152
for (const auto& ambTrack : ambiguousTracks) {
152153
if constexpr (isCentralBarrel) { // FIXME: to be removed as soon as it is possible to use getId<Table>() for joined tables
153154
if (ambTrack.trackId() == track.globalIndex()) {
155+
// special check to avoid crashes (in particular on some MC datasets)
156+
// related to shifts in ambiguous tracks association to bc slices (off by 1) - see https://mattermost.web.cern.ch/alice/pl/g9yaaf3tn3g4pgn7c1yex9copy
157+
if (ambTrack.bcIds()[0] >= bcs.size() || ambTrack.bcIds()[1] >= bcs.size()) {
158+
break;
159+
}
154160
if (!ambTrack.has_bc() || ambTrack.bc().size() == 0) {
155161
break;
156162
}
@@ -194,7 +200,7 @@ class CollisionAssociation
194200
uint64_t collBC = collision.bc().globalBC();
195201

196202
// This is done per block to allow optimization below. Within each block the globalBC increase continously
197-
for (auto& iterationWindow : trackIterationWindows) {
203+
for (auto& iterationWindow : trackIterationWindows) { // o2-linter: disable=const-ref-in-for-loop (iterationWindow is modified)
198204
bool iteratorMoved = false;
199205
const bool isAssignedTrackWindow = (iterationWindow.first != iterationWindow.second) ? iterationWindow.first.has_collision() : false;
200206
for (auto trackInWindow = iterationWindow.first; trackInWindow != iterationWindow.second; ++trackInWindow) {

PWGCF/Flow/Tasks/flowGfwOmegaXi.cxx

Lines changed: 55 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ struct FlowGfwOmegaXi {
212212

213213
using TracksPID = soa::Join<aod::pidTPCPi, aod::pidTPCKa, aod::pidTPCPr, aod::pidTOFPi, aod::pidTOFKa, aod::pidTOFPr>;
214214
using AodTracks = soa::Filtered<soa::Join<aod::Tracks, aod::TrackSelection, o2::aod::TrackSelectionExtension, aod::TracksExtra, TracksPID, aod::TracksIU>>; // tracks filter
215-
using AodCollisions = soa::Filtered<soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Cs, aod::Mults>>; // collisions filter
215+
using AodCollisions = soa::Filtered<soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Cs, aod::MultsRun3>>; // collisions filter
216216
using DaughterTracks = soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksDCA, TracksPID, aod::TrackSelection, o2::aod::TrackSelectionExtension>;
217217

218218
// Connect to ccdb
@@ -356,9 +356,12 @@ struct FlowGfwOmegaXi {
356356
registry.add("hEta", "", {HistType::kTH1D, {cfgaxisEta}});
357357
registry.add("hVtxZ", "", {HistType::kTH1D, {cfgaxisVertex}});
358358
registry.add("hMult", "", {HistType::kTH1D, {cfgaxisNch}});
359+
registry.add("hMultTPC", "", {HistType::kTH1D, {cfgaxisNch}});
359360
registry.add("hCent", "", {HistType::kTH1D, {{90, 0, 90}}});
360361
registry.add("hCentvsNch", "", {HistType::kTH2D, {{18, 0, 90}, cfgaxisNch}});
361362
registry.add("MC/hCentvsNchMC", "", {HistType::kTH2D, {{18, 0, 90}, cfgaxisNch}});
363+
registry.add("hCentvsMultTPC", "", {HistType::kTH2D, {{18, 0, 90}, cfgaxisNch}});
364+
registry.add("MC/hCentvsMultTPCMC", "", {HistType::kTH2D, {{18, 0, 90}, cfgaxisNch}});
362365
registry.add("hPt", "", {HistType::kTH1D, {cfgaxisPt}});
363366
registry.add("hEtaPhiVtxzREF", "", {HistType::kTH3D, {cfgaxisPhi, cfgaxisEta, {20, -10, 10}}});
364367
registry.add("hEtaPhiVtxzPOIXi", "", {HistType::kTH3D, {cfgaxisPhi, cfgaxisEta, {20, -10, 10}}});
@@ -531,15 +534,26 @@ struct FlowGfwOmegaXi {
531534
registry.add("InvMassLambda_all", "", {HistType::kTHnSparseF, {cfgaxisPtLambda, axisLambdaMass, cfgaxisEta, axisMultiplicity}});
532535
registry.add("InvMassK0s", "", {HistType::kTHnSparseF, {cfgaxisPtK0s, axisK0sMass, cfgaxisEta, axisMultiplicity}});
533536
registry.add("InvMassLambda", "", {HistType::kTHnSparseF, {cfgaxisPtLambda, axisLambdaMass, cfgaxisEta, axisMultiplicity}});
534-
// for local density correlation
535-
registry.add("MC/densityMCGenK0s", "", {HistType::kTH3D, {cfgaxisPtK0s, cfgaxisNch, cfgaxisLocalDensity}});
536-
registry.add("MC/densityMCGenLambda", "", {HistType::kTH3D, {cfgaxisPtLambda, cfgaxisNch, cfgaxisLocalDensity}});
537-
registry.add("MC/densityMCGenXi", "", {HistType::kTH3D, {cfgaxisPtXi, cfgaxisNch, cfgaxisLocalDensity}});
538-
registry.add("MC/densityMCGenOmega", "", {HistType::kTH3D, {cfgaxisPtOmega, cfgaxisNch, cfgaxisLocalDensity}});
539-
registry.add("MC/densityMCRecK0s", "", {HistType::kTHnSparseF, {cfgaxisPtK0s, cfgaxisNch, cfgaxisLocalDensity, axisK0sMass}});
540-
registry.add("MC/densityMCRecLambda", "", {HistType::kTHnSparseF, {cfgaxisPtLambda, cfgaxisNch, cfgaxisLocalDensity, axisLambdaMass}});
541-
registry.add("MC/densityMCRecXi", "", {HistType::kTHnSparseF, {cfgaxisPtXi, cfgaxisNch, cfgaxisLocalDensity, axisXiMass}});
542-
registry.add("MC/densityMCRecOmega", "", {HistType::kTHnSparseF, {cfgaxisPtOmega, cfgaxisNch, cfgaxisLocalDensity, axisOmegaMass}});
537+
// for local density correction
538+
if (cfgOutputLocDenWeights) {
539+
registry.add("MC/densityMCGenK0s", "", {HistType::kTH3D, {cfgaxisPtK0s, cfgaxisNch, cfgaxisLocalDensity}});
540+
registry.add("MC/densityMCGenLambda", "", {HistType::kTH3D, {cfgaxisPtLambda, cfgaxisNch, cfgaxisLocalDensity}});
541+
registry.add("MC/densityMCGenXi", "", {HistType::kTH3D, {cfgaxisPtXi, cfgaxisNch, cfgaxisLocalDensity}});
542+
registry.add("MC/densityMCGenOmega", "", {HistType::kTH3D, {cfgaxisPtOmega, cfgaxisNch, cfgaxisLocalDensity}});
543+
registry.add("MC/densityMCRecK0s", "", {HistType::kTHnSparseF, {cfgaxisPtK0s, cfgaxisNch, cfgaxisLocalDensity, axisK0sMass}});
544+
registry.add("MC/densityMCRecLambda", "", {HistType::kTHnSparseF, {cfgaxisPtLambda, cfgaxisNch, cfgaxisLocalDensity, axisLambdaMass}});
545+
registry.add("MC/densityMCRecXi", "", {HistType::kTHnSparseF, {cfgaxisPtXi, cfgaxisNch, cfgaxisLocalDensity, axisXiMass}});
546+
registry.add("MC/densityMCRecOmega", "", {HistType::kTHnSparseF, {cfgaxisPtOmega, cfgaxisNch, cfgaxisLocalDensity, axisOmegaMass}});
547+
548+
registry.add("MC/densityMCGenK0sMultTPC", "", {HistType::kTH3D, {cfgaxisPtK0s, cfgaxisNch, cfgaxisLocalDensity}});
549+
registry.add("MC/densityMCGenLambdaMultTPC", "", {HistType::kTH3D, {cfgaxisPtLambda, cfgaxisNch, cfgaxisLocalDensity}});
550+
registry.add("MC/densityMCGenXiMultTPC", "", {HistType::kTH3D, {cfgaxisPtXi, cfgaxisNch, cfgaxisLocalDensity}});
551+
registry.add("MC/densityMCGenOmegaMultTPC", "", {HistType::kTH3D, {cfgaxisPtOmega, cfgaxisNch, cfgaxisLocalDensity}});
552+
registry.add("MC/densityMCRecK0sMultTPC", "", {HistType::kTHnSparseF, {cfgaxisPtK0s, cfgaxisNch, cfgaxisLocalDensity, axisK0sMass}});
553+
registry.add("MC/densityMCRecLambdaMultTPC", "", {HistType::kTHnSparseF, {cfgaxisPtLambda, cfgaxisNch, cfgaxisLocalDensity, axisLambdaMass}});
554+
registry.add("MC/densityMCRecXiMultTPC", "", {HistType::kTHnSparseF, {cfgaxisPtXi, cfgaxisNch, cfgaxisLocalDensity, axisXiMass}});
555+
registry.add("MC/densityMCRecOmegaMultTPC", "", {HistType::kTHnSparseF, {cfgaxisPtOmega, cfgaxisNch, cfgaxisLocalDensity, axisOmegaMass}});
556+
}
543557

544558
// Data
545559
fGFW->AddRegion("reffull", -0.8, 0.8, 1, 1); // ("name", etamin, etamax, ptbinnum, bitmask)eta region -0.8 to 0.8
@@ -990,6 +1004,7 @@ struct FlowGfwOmegaXi {
9901004
{
9911005
o2::aod::ITSResponse itsResponse;
9921006
int nTot = tracks.size();
1007+
float nMultTPC = collision.multTPC();
9931008
auto bc = collision.bc_as<aod::BCsWithTimestamps>();
9941009
int runNumber = bc.runNumber();
9951010
double interactionRate = rateFetcher.fetch(ccdb.service, bc.timestamp(), runNumber, "ZNC hadronic") * 1.e-3;
@@ -1009,6 +1024,7 @@ struct FlowGfwOmegaXi {
10091024
float vtxz = collision.posZ();
10101025
registry.fill(HIST("hVtxZ"), vtxz);
10111026
registry.fill(HIST("hMult"), nTot);
1027+
registry.fill(HIST("hMultTPC"), nMultTPC);
10121028
registry.fill(HIST("hCent"), cent);
10131029

10141030
float weff = 1;
@@ -1049,6 +1065,7 @@ struct FlowGfwOmegaXi {
10491065
}
10501066
if (cfgDoLocDenCorr) {
10511067
registry.fill(HIST("hCentvsNch"), cent, nch);
1068+
registry.fill(HIST("hCentvsMultTPC"), cent, nMultTPC);
10521069
}
10531070
// fill GFW of V0 flow
10541071
double lowpt = trkQualityOpts.cfgCutPtPIDDauMin.value;
@@ -1164,8 +1181,10 @@ struct FlowGfwOmegaXi {
11641181
phibin = hLocalDensity->FindBin(RecoDecay::constrainAngle(v0.phi(), -constants::math::PI));
11651182
double density = hLocalDensity->Integral(phibin - cfgDeltaPhiLocDen, phibin + cfgDeltaPhiLocDen);
11661183
setCurrentLocalDensityWeights(wloc, v0, density, 1);
1167-
if (cfgOutputLocDenWeights)
1184+
if (cfgOutputLocDenWeights) {
11681185
registry.fill(HIST("MC/densityMCRecK0s"), v0.pt(), nch, density, v0.mK0Short());
1186+
registry.fill(HIST("MC/densityMCRecK0sMultTPC"), v0.pt(), nMultTPC, density, v0.mK0Short());
1187+
}
11691188
}
11701189
registry.fill(HIST("InvMassK0s"), v0.pt(), v0.mK0Short(), v0.eta(), cent);
11711190
registry.fill(HIST("hEtaPhiVtxzPOIK0s"), v0.phi(), v0.eta(), vtxz, wacc);
@@ -1188,8 +1207,10 @@ struct FlowGfwOmegaXi {
11881207
phibin = hLocalDensity->FindBin(RecoDecay::constrainAngle(v0.phi(), -constants::math::PI));
11891208
double density = hLocalDensity->Integral(phibin - cfgDeltaPhiLocDen, phibin + cfgDeltaPhiLocDen);
11901209
setCurrentLocalDensityWeights(wloc, v0, density, 2);
1191-
if (cfgOutputLocDenWeights)
1210+
if (cfgOutputLocDenWeights) {
11921211
registry.fill(HIST("MC/densityMCRecLambda"), v0.pt(), nch, density, v0.mLambda());
1212+
registry.fill(HIST("MC/densityMCRecLambdaMultTPC"), v0.pt(), nMultTPC, density, v0.mLambda());
1213+
}
11931214
}
11941215
registry.fill(HIST("InvMassLambda"), v0.pt(), v0.mLambda(), v0.eta(), cent);
11951216
registry.fill(HIST("hEtaPhiVtxzPOILambda"), v0.phi(), v0.eta(), vtxz, wacc);
@@ -1361,8 +1382,10 @@ struct FlowGfwOmegaXi {
13611382
phibin = hLocalDensity->FindBin(RecoDecay::constrainAngle(casc.phi(), -constants::math::PI));
13621383
double density = hLocalDensity->Integral(phibin - cfgDeltaPhiLocDen, phibin + cfgDeltaPhiLocDen);
13631384
setCurrentLocalDensityWeights(wloc, casc, density, 4);
1364-
if (cfgOutputLocDenWeights)
1385+
if (cfgOutputLocDenWeights) {
13651386
registry.fill(HIST("MC/densityMCRecOmega"), casc.pt(), nch, density, casc.mOmega());
1387+
registry.fill(HIST("MC/densityMCRecOmegaMultTPC"), casc.pt(), nMultTPC, density, casc.mOmega());
1388+
}
13661389
}
13671390
registry.fill(HIST("hEtaPhiVtxzPOIOmega"), casc.phi(), casc.eta(), vtxz, wacc);
13681391
registry.fill(HIST("hPhiOmega"), casc.phi());
@@ -1387,8 +1410,10 @@ struct FlowGfwOmegaXi {
13871410
phibin = hLocalDensity->FindBin(RecoDecay::constrainAngle(casc.phi(), -constants::math::PI));
13881411
double density = hLocalDensity->Integral(phibin - cfgDeltaPhiLocDen, phibin + cfgDeltaPhiLocDen);
13891412
setCurrentLocalDensityWeights(wloc, casc, density, 3);
1390-
if (cfgOutputLocDenWeights)
1413+
if (cfgOutputLocDenWeights) {
13911414
registry.fill(HIST("MC/densityMCRecXi"), casc.pt(), nch, density, casc.mXi());
1415+
registry.fill(HIST("MC/densityMCRecXiMultTPC"), casc.pt(), nMultTPC, density, casc.mXi());
1416+
}
13921417
}
13931418
registry.fill(HIST("hEtaPhiVtxzPOIXi"), casc.phi(), casc.eta(), vtxz, wacc);
13941419
registry.fill(HIST("hPhiXi"), casc.phi());
@@ -1518,14 +1543,17 @@ struct FlowGfwOmegaXi {
15181543
{
15191544
fGFW->Clear();
15201545
int nch = 0;
1546+
float nMultTPC = 0;
15211547
double cent = -1;
15221548
TH1D* hLocalDensity = new TH1D("hphi", "hphi", 400, -constants::math::TwoPI, constants::math::TwoPI);
15231549
for (const auto& collision : collisionsRec) {
15241550
if (!collision.sel8())
15251551
return;
1526-
if (eventSelected(collision, cent))
1552+
if (!eventSelected(collision, cent))
15271553
return;
15281554
cent = collision.centFT0C();
1555+
nMultTPC = collision.multTPC();
1556+
registry.fill(HIST("MC/hCentvsMultTPCMC"), cent, nMultTPC);
15291557
}
15301558
if (cent < 0)
15311559
return;
@@ -1572,30 +1600,38 @@ struct FlowGfwOmegaXi {
15721600
if (pdgCode == PDG_t::kXiMinus) {
15731601
int phibin = hLocalDensity->FindBin(RecoDecay::constrainAngle(straGen.phi(), -constants::math::PI));
15741602
double density = hLocalDensity->Integral(phibin - cfgDeltaPhiLocDen, phibin + cfgDeltaPhiLocDen);
1575-
if (cfgOutputLocDenWeights)
1603+
if (cfgOutputLocDenWeights) {
15761604
registry.fill(HIST("MC/densityMCGenXi"), straGen.pt(), nch, density);
1605+
registry.fill(HIST("MC/densityMCGenXiMultTPC"), straGen.pt(), nMultTPC, density);
1606+
}
15771607
fGFW->Fill(straGen.eta(), fXiPtAxis->FindBin(straGen.pt()) - 1, straGen.phi(), 1, 128);
15781608
}
15791609
if (pdgCode == PDG_t::kOmegaMinus) {
15801610
int phibin = hLocalDensity->FindBin(RecoDecay::constrainAngle(straGen.phi(), -constants::math::PI));
15811611
double density = hLocalDensity->Integral(phibin - cfgDeltaPhiLocDen, phibin + cfgDeltaPhiLocDen);
1582-
if (cfgOutputLocDenWeights)
1612+
if (cfgOutputLocDenWeights) {
15831613
registry.fill(HIST("MC/densityMCGenOmega"), straGen.pt(), nch, density);
1614+
registry.fill(HIST("MC/densityMCGenOmegaMultTPC"), straGen.pt(), nMultTPC, density);
1615+
}
15841616
fGFW->Fill(straGen.eta(), fOmegaPtAxis->FindBin(straGen.pt()) - 1, straGen.phi(), 1, 256);
15851617
}
15861618

15871619
if (pdgCode == PDG_t::kK0Short) {
15881620
int phibin = hLocalDensity->FindBin(RecoDecay::constrainAngle(straGen.phi(), -constants::math::PI));
15891621
double density = hLocalDensity->Integral(phibin - cfgDeltaPhiLocDen, phibin + cfgDeltaPhiLocDen);
1590-
if (cfgOutputLocDenWeights)
1622+
if (cfgOutputLocDenWeights) {
15911623
registry.fill(HIST("MC/densityMCGenK0s"), straGen.pt(), nch, density);
1624+
registry.fill(HIST("MC/densityMCGenK0sMultTPC"), straGen.pt(), nMultTPC, density);
1625+
}
15921626
fGFW->Fill(straGen.eta(), fK0sPtAxis->FindBin(straGen.pt()) - 1, straGen.phi(), 1, 512);
15931627
}
15941628
if (pdgCode == PDG_t::kLambda0) {
15951629
int phibin = hLocalDensity->FindBin(RecoDecay::constrainAngle(straGen.phi(), -constants::math::PI));
15961630
double density = hLocalDensity->Integral(phibin - cfgDeltaPhiLocDen, phibin + cfgDeltaPhiLocDen);
1597-
if (cfgOutputLocDenWeights)
1631+
if (cfgOutputLocDenWeights) {
15981632
registry.fill(HIST("MC/densityMCGenLambda"), straGen.pt(), nch, density);
1633+
registry.fill(HIST("MC/densityMCGenLambdaMultTPC"), straGen.pt(), nMultTPC, density);
1634+
}
15991635
fGFW->Fill(straGen.eta(), fLambdaPtAxis->FindBin(straGen.pt()) - 1, straGen.phi(), 1, 1024);
16001636
}
16011637
}

PWGCF/TableProducer/filterCorrelations.cxx

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -316,9 +316,9 @@ struct FilterCF {
316316
/// event selections
317317
/// \param tracks The collection of tracks, filtered by selection criteria
318318
/// \param bcs The collection of bunch crossings with timestamps
319-
template <typename T1>
319+
template <typename C1, typename T1>
320320
void processMCT(aod::McCollisions const& mcCollisions, aod::McParticles const& allParticles,
321-
soa::Join<aod::McCollisionLabels, aod::Collisions, aod::EvSels, aod::CFMultiplicities> const& allCollisions,
321+
C1 const& allCollisions,
322322
T1 const& tracks,
323323
aod::BCsWithTimestamps const&)
324324
{
@@ -403,10 +403,24 @@ struct FilterCF {
403403
continue;
404404
}
405405

406-
auto bc = collision.bc_as<aod::BCsWithTimestamps>();
406+
auto bc = collision.template bc_as<aod::BCsWithTimestamps>();
407407
// NOTE works only when we store all MC collisions (as we do here)
408408
outputCollisions(bc.runNumber(), collision.posZ(), collision.multiplicity(), bc.timestamp());
409409
outputMcCollisionLabels(collision.mcCollisionId());
410+
411+
if constexpr (std::experimental::is_detected<HasMultTables, C1>::value) {
412+
multiplicities.clear();
413+
if (cfgEstimatorBitMask & aod::cfmultset::CentFT0C)
414+
multiplicities.push_back(collision.centFT0C());
415+
if (cfgEstimatorBitMask & aod::cfmultset::MultFV0A)
416+
multiplicities.push_back(collision.multFV0A());
417+
if (cfgEstimatorBitMask & aod::cfmultset::MultNTracksPV)
418+
multiplicities.push_back(collision.multNTracksPV());
419+
if (cfgEstimatorBitMask & aod::cfmultset::MultNTracksGlobal)
420+
multiplicities.push_back(collision.multNTracksGlobal());
421+
outputMultSets(multiplicities);
422+
}
423+
410424
if (cfgTransientTables)
411425
outputCollRefs(collision.globalIndex());
412426

@@ -451,6 +465,16 @@ struct FilterCF {
451465
}
452466
PROCESS_SWITCH(FilterCF, processMCPid, "Process MC with PID", false);
453467

468+
void processMCMults(aod::McCollisions const& mcCollisions, aod::McParticles const& allParticles,
469+
soa::Join<aod::McCollisionLabels, aod::Collisions, aod::EvSels, aod::CFMultiplicities, aod::CentFT0Cs, aod::PVMults, aod::FV0Mults, aod::MultsGlobal> const& allCollisions,
470+
soa::Filtered<soa::Join<aod::Tracks, aod::TracksExtra, aod::McTrackLabels, aod::TrackSelection>> const& tracks,
471+
aod::BCsWithTimestamps const& bcs)
472+
{
473+
processMCT(mcCollisions, allParticles, allCollisions, tracks, bcs);
474+
}
475+
476+
PROCESS_SWITCH(FilterCF, processMCMults, "Process MC with multiplicity sets", false);
477+
454478
void processMCGen(aod::McCollisions::iterator const& mcCollision, aod::McParticles const& particles)
455479
{
456480
float multiplicity = 0.0f;

0 commit comments

Comments
 (0)