Skip to content

Commit caed0e2

Browse files
authored
Merge branch 'AliceO2Group:master' into update-longrange
2 parents e7f8039 + 6bb97e0 commit caed0e2

10 files changed

Lines changed: 613 additions & 23 deletions

File tree

Common/Tools/Multiplicity/MultModule.h

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,12 @@ struct standardConfigurables : o2::framework::ConfigurableGroup {
319319
o2::framework::Configurable<int> minNclsITSGlobalTrack{"minNclsITSGlobalTrack", 5, "min. number of ITS clusters for global tracks"};
320320
o2::framework::Configurable<int> minNclsITSibGlobalTrack{"minNclsITSibGlobalTrack", 1, "min. number of ITSib clusters for global tracks"};
321321

322+
// MFT track counter configurables
323+
o2::framework::Configurable<int> minNclsMFTTrack{"minNclsMFTTrack", 5, "min. number of MFT clusters for MFT tracks"};
324+
o2::framework::Configurable<float> maxDCAxyToPVMFTTrack{"maxDCAxyToPVMFTTrack", 2.0f, "max DCAxy to PV for MFT tracks (cm)"};
325+
o2::framework::Configurable<float> minEtaMFTTrack{"minEtaMFTTrack", -3.9f, "min. pseudorapidity for MFT tracks (nominal: -3.6)"};
326+
o2::framework::Configurable<float> maxEtaMFTTrack{"maxEtaMFTTrack", -2.0f, "max. pseudorapidity for MFT tracks (nominal: -2.45)"};
327+
322328
// ccdb information
323329
o2::framework::Configurable<std::string> ccdbPathVtxZ{"ccdbPathVtxZ", "Centrality/Calibration", "The CCDB path for vertex-Z calibration"};
324330
o2::framework::Configurable<std::string> ccdbPathCentrality{"ccdbPathCentrality", "Centrality/Estimators", "The CCDB path for centrality information"};
@@ -988,21 +994,21 @@ class MultModule
988994
int nTracks = 0;
989995

990996
for (const auto& track : mfttracks) {
991-
if (track.nClusters() >= 5) { // hardcoded for now
997+
if (track.nClusters() >= internalOpts.minNclsMFTTrack.value) {
992998
nAllTracks++;
993999
}
9941000
}
9951001

9961002
if (retracks.size() > 0) {
9971003
for (const auto& retrack : retracks) {
9981004
auto track = retrack.mfttrack();
999-
if (track.nClusters() < 5) {
1005+
if (track.nClusters() < internalOpts.minNclsMFTTrack.value) {
10001006
continue; // min cluster requirement
10011007
}
1002-
if ((track.eta() > -2.0f) && (track.eta() < -3.9f)) {
1008+
if (track.eta() > internalOpts.maxEtaMFTTrack.value || track.eta() < internalOpts.minEtaMFTTrack.value) {
10031009
continue; // too far to be of true interest
10041010
}
1005-
if (std::abs(retrack.bestDCAXY()) > 2.0f) {
1011+
if (std::abs(retrack.bestDCAXY()) > internalOpts.maxDCAxyToPVMFTTrack.value) {
10061012
continue; // does not point to PV properly
10071013
}
10081014
nTracks++;

PWGCF/Femto/Core/collisionBuilder.h

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -585,11 +585,12 @@ class CollisionBuilder
585585
}
586586

587587
// PbPb specific columns
588-
if constexpr (modes::isFlagSet(system, modes::System::kPbPb)) {
589-
if (mProduceQns) {
590-
collisionProducts.producedQns(utils::qn(col));
591-
}
592-
}
588+
// TODO: enable later update
589+
// if constexpr (modes::isFlagSet(system, modes::System::kPbPb)) {
590+
// if (mProduceQns) {
591+
// collisionProducts.producedQns(utils::qn(col));
592+
// }
593+
// }
593594

594595
mCollisionAlreadyFilled = true;
595596
}

PWGCF/Femto/Core/mcBuilder.h

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -230,9 +230,15 @@ class McBuilder
230230
template <modes::System system, typename T1, typename T2>
231231
void fillMcCollision(T1 const& mcCol, T2& mcProducts)
232232
{
233-
mcProducts.producedMcCollisions(
234-
mcCol.multMCNParticlesEta08(),
235-
mcCol.centFT0M());
233+
float centrality = -1;
234+
if constexpr (modes::isFlagSet(system, modes::System::kPP)) {
235+
centrality = mcCol.centFT0M();
236+
}
237+
if constexpr (modes::isFlagSet(system, modes::System::kPbPb)) {
238+
centrality = mcCol.centFT0C();
239+
}
240+
241+
mcProducts.producedMcCollisions(mcCol.multMCNParticlesEta08(), centrality);
236242
mCollisionMap.emplace(mcCol.globalIndex(), mcProducts.producedMcCollisions.lastIndex());
237243
}
238244

PWGCF/Femto/Core/modes.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ enum class System : uint32_t {
6969
kPP_Run3_MC = kPP | kRun3 | kMC,
7070
kPP_Run2 = kPP | kRun2,
7171
kPbPb_Run3 = kPbPb | kRun3,
72+
kPbPb_Run3_MC = kPbPb | kRun3 | kMC,
7273
kPbPb_Run2 = kPbPb | kRun2,
7374
};
7475

PWGCF/Femto/TableProducer/femtoProducer.cxx

Lines changed: 66 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,12 @@ namespace consumeddata
5454
{
5555
using Run3PpCollisions = o2::soa::Join<o2::aod::Collisions, o2::aod::EvSels, o2::aod::Mults, o2::aod::CentFT0As, o2::aod::CentFT0Cs, o2::aod::CentFT0Ms>;
5656
using Run3PpMcRecoCollisions = o2::soa::Join<Run3PpCollisions, o2::aod::McCollisionLabels>;
57-
using Run3PpMcGenCollisions = o2::soa::Join<o2::aod::McCollisions, o2::aod::MultsExtraMC, o2::aod::McCentFT0Ms>;
57+
using Run3PpMcGenCollisions = o2::soa::Join<o2::aod::McCollisions, o2::aod::MultsExtraMC, o2::aod::McCentFT0As, o2::aod::McCentFT0Cs, o2::aod::McCentFT0Ms>;
58+
59+
using Run3PbPbCollisions = o2::soa::Join<o2::aod::Collisions, o2::aod::EvSels, o2::aod::Mults, o2::aod::CentFT0As, o2::aod::CentFT0Cs, o2::aod::CentFT0Ms>;
60+
61+
using Run3PbPbMcRecoCollisions = o2::soa::Join<Run3PbPbCollisions, o2::aod::McCollisionLabels>;
62+
using Run3PbPbMcGenCollisions = o2::soa::Join<o2::aod::McCollisions, o2::aod::MultsExtraMC, o2::aod::McCentFT0As, o2::aod::McCentFT0Cs, o2::aod::McCentFT0Ms>;
5863

5964
using Run3FullPidTracks =
6065
soa::Join<o2::aod::Tracks, o2::aod::TracksExtra, o2::aod::TracksDCA,
@@ -288,6 +293,19 @@ struct FemtoProducer {
288293
}
289294
PROCESS_SWITCH(FemtoProducer, processTracksRun3pp, "Process tracks", true);
290295

296+
void processTracksRun3PbPb(consumeddata::Run3PbPbCollisions::iterator const& col,
297+
o2::aod::BCsWithTimestamps const& bcs,
298+
consumeddata::Run3FullPidTracks const& tracks)
299+
{
300+
if (!processCollisions<modes::System::kPbPb_Run3>(col, bcs, tracks)) {
301+
return;
302+
}
303+
auto tracksWithItsPid = o2::soa::Attach<consumeddata::Run3FullPidTracks, o2::aod::pidits::ITSNSigmaEl, o2::aod::pidits::ITSNSigmaPi, o2::aod::pidits::ITSNSigmaKa,
304+
o2::aod::pidits::ITSNSigmaPr, o2::aod::pidits::ITSNSigmaDe, o2::aod::pidits::ITSNSigmaTr, o2::aod::pidits::ITSNSigmaHe>(tracks);
305+
processTracks<modes::System::kPbPb_Run3>(col, tracksWithItsPid);
306+
}
307+
PROCESS_SWITCH(FemtoProducer, processTracksRun3PbPb, "Process tracks in PbPB collisions", false);
308+
291309
// process tracks and v0s
292310
void processTracksV0sRun3pp(consumeddata::Run3PpCollisions::iterator const& col,
293311
o2::aod::BCsWithTimestamps const& bcs,
@@ -304,6 +322,21 @@ struct FemtoProducer {
304322
};
305323
PROCESS_SWITCH(FemtoProducer, processTracksV0sRun3pp, "Process tracks and v0s", false);
306324

325+
void processTracksV0sRun3PbPb(consumeddata::Run3PbPbCollisions::iterator const& col,
326+
o2::aod::BCsWithTimestamps const& bcs,
327+
consumeddata::Run3FullPidTracks const& tracks,
328+
consumeddata::Run3Vzeros const& v0s)
329+
{
330+
if (!processCollisions<modes::System::kPbPb_Run3>(col, bcs, tracks)) {
331+
return;
332+
}
333+
auto tracksWithItsPid = o2::soa::Attach<consumeddata::Run3FullPidTracks, o2::aod::pidits::ITSNSigmaEl, o2::aod::pidits::ITSNSigmaPi, o2::aod::pidits::ITSNSigmaKa,
334+
o2::aod::pidits::ITSNSigmaPr, o2::aod::pidits::ITSNSigmaDe, o2::aod::pidits::ITSNSigmaTr, o2::aod::pidits::ITSNSigmaHe>(tracks);
335+
processTracks<modes::System::kPbPb_Run3>(col, tracksWithItsPid);
336+
processV0s<modes::System::kPbPb_Run3>(col, tracks, v0s);
337+
};
338+
PROCESS_SWITCH(FemtoProducer, processTracksV0sRun3PbPb, "Process tracks and v0s in PbPB collisions", false);
339+
307340
// process tracks and kinks
308341
void processTracksKinksRun3pp(consumeddata::Run3PpCollisions::iterator const& col,
309342
o2::aod::BCsWithTimestamps const& bcs,
@@ -374,6 +407,21 @@ struct FemtoProducer {
374407
}
375408
PROCESS_SWITCH(FemtoProducer, processTracksRun3ppMc, "Provide reconstructed and generated Tracks", false);
376409

410+
void processTracksRun3PbPbMc(consumeddata::Run3PbPbMcRecoCollisions::iterator const& col,
411+
consumeddata::Run3PbPbMcGenCollisions const& mcCols,
412+
o2::aod::BCsWithTimestamps const& bcs,
413+
consumeddata::Run3McRecoTracks const& tracks,
414+
consumeddata::Run3McGenParticles const& mcParticles)
415+
{
416+
if (!processMcCollisions<modes::System::kPbPb_Run3_MC>(col, mcCols, bcs, tracks, mcParticles)) {
417+
return;
418+
}
419+
auto tracksWithItsPid = o2::soa::Attach<consumeddata::Run3McRecoTracks, o2::aod::pidits::ITSNSigmaEl, o2::aod::pidits::ITSNSigmaPi, o2::aod::pidits::ITSNSigmaKa,
420+
o2::aod::pidits::ITSNSigmaPr, o2::aod::pidits::ITSNSigmaDe, o2::aod::pidits::ITSNSigmaTr, o2::aod::pidits::ITSNSigmaHe>(tracks);
421+
processMcTracks<modes::System::kPbPb_Run3_MC>(col, mcCols, tracks, tracksWithItsPid, mcParticles);
422+
}
423+
PROCESS_SWITCH(FemtoProducer, processTracksRun3PbPbMc, "Provide reconstructed and generated Tracks in PbPb collisions", false);
424+
377425
// process monte carlo tracks and v0s
378426
void processTracksV0sRun3ppMc(consumeddata::Run3PpMcRecoCollisions::iterator const& col,
379427
consumeddata::Run3PpMcGenCollisions const& mcCols,
@@ -392,6 +440,23 @@ struct FemtoProducer {
392440
}
393441
PROCESS_SWITCH(FemtoProducer, processTracksV0sRun3ppMc, "Provide reconstructed and generated tracks and v0s", false);
394442

443+
void processTracksV0sRun3PbPbMc(consumeddata::Run3PbPbMcRecoCollisions::iterator const& col,
444+
consumeddata::Run3PbPbMcGenCollisions const& mcCols,
445+
o2::aod::BCsWithTimestamps const& bcs,
446+
consumeddata::Run3McRecoTracks const& tracks,
447+
consumeddata::Run3RecoVzeros const& v0s,
448+
consumeddata::Run3McGenParticles const& mcParticles)
449+
{
450+
if (!processMcCollisions<modes::System::kPbPb_Run3_MC>(col, mcCols, bcs, tracks, mcParticles)) {
451+
return;
452+
}
453+
auto tracksWithItsPid = o2::soa::Attach<consumeddata::Run3McRecoTracks, o2::aod::pidits::ITSNSigmaEl, o2::aod::pidits::ITSNSigmaPi, o2::aod::pidits::ITSNSigmaKa,
454+
o2::aod::pidits::ITSNSigmaPr, o2::aod::pidits::ITSNSigmaDe, o2::aod::pidits::ITSNSigmaTr, o2::aod::pidits::ITSNSigmaHe>(tracks);
455+
processMcTracks<modes::System::kPbPb_Run3_MC>(col, mcCols, tracks, tracksWithItsPid, mcParticles);
456+
processMcV0s<modes::System::kPbPb_Run3_MC>(col, mcCols, tracks, v0s, mcParticles);
457+
}
458+
PROCESS_SWITCH(FemtoProducer, processTracksV0sRun3PbPbMc, "Provide reconstructed and generated tracks and v0s in PbPb collisions", false);
459+
395460
// process monte carlo tracks and kinks
396461
void processTracksKinksRun3ppMc(consumeddata::Run3PpMcRecoCollisions::iterator const& col,
397462
consumeddata::Run3PpMcGenCollisions const& mcCols,

PWGDQ/Core/HistogramsLibrary.cxx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1971,6 +1971,15 @@ void o2::aod::dqhistograms::DefineHistograms(HistogramManager* hm, const char* h
19711971
if (subGroupStr.Contains("correlation-emu")) {
19721972
hm->AddHistogram(histClass, "DeltaPhiPair2_DeltaEtaPair2", "", false, 600, -o2::constants::math::PIHalf, 1.5 * o2::constants::math::PI, VarManager::kDeltaPhiPair2, 350, 1.5, 5.0, VarManager::kDeltaEtaPair2);
19731973
hm->AddHistogram(histClass, "DeltaPhiPair2_Pt", "", false, 600, -o2::constants::math::PIHalf, 1.5 * o2::constants::math::PI, VarManager::kDeltaPhiPair2, 200, 0.0, 20.0, VarManager::kPt);
1974+
// 4D correlation map: (Delta phi_pair, Delta eta_pair, p_T^{e}, p_T^{mu}). Per-track pT axes use kPt1/kPt2,
1975+
// which FillPair populates for SE and FillPairME (patched in this PR) populates for ME. Stored as THnSparse so
1976+
// running with many MC-matched hist classes (track cut x muon cut x signal x QA variant) does not blow the
1977+
// 1 GB TBufferFile limit during the final ROOT serialization.
1978+
int varsEmu4D[4] = {VarManager::kDeltaPhiPair2, VarManager::kDeltaEtaPair2, VarManager::kPt1, VarManager::kPt2};
1979+
int binsEmu4D[4] = {60, 35, 20, 20};
1980+
double xminEmu4D[4] = {-o2::constants::math::PIHalf, 1.5, 0.0, 0.0};
1981+
double xmaxEmu4D[4] = {1.5 * o2::constants::math::PI, 5.0, 20.0, 20.0};
1982+
hm->AddHistogram(histClass, "DeltaPhiPair2_DeltaEtaPair2_PtE_PtMu", "", 4, varsEmu4D, binsEmu4D, xminEmu4D, xmaxEmu4D, nullptr, -1, kTRUE);
19741983
}
19751984
if (subGroupStr.Contains("dielectrons")) {
19761985
if (subGroupStr.Contains("prefilter")) {

PWGDQ/Core/MCSignalLibrary.cxx

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -459,6 +459,30 @@ MCSignal* o2::aod::dqmcsignals::GetMCSignal(const char* name)
459459
signal = new MCSignal(name, "Electron-muon pair", {electron, muon}, {-1, -1});
460460
return signal;
461461
}
462+
if (!nameStr.compare("emuFromOpenHFhadron")) {
463+
MCProng electron(2, {11, 902}, {true, true}, {false, false}, {0, 0}, {0, 0}, {false, false});
464+
electron.SetSourceBit(0, MCProng::kPhysicalPrimary);
465+
MCProng muon(2, {13, 902}, {true, true}, {false, false}, {0, 0}, {0, 0}, {false, false});
466+
muon.SetSourceBit(0, MCProng::kPhysicalPrimary);
467+
signal = new MCSignal(name, "e and mu each from an open charm or beauty hadron decay", {electron, muon}, {-1, -1});
468+
return signal;
469+
}
470+
if (!nameStr.compare("emuFromOpenCharmHadron")) {
471+
MCProng electron(2, {11, 402}, {true, true}, {false, false}, {0, 0}, {0, 0}, {false, false});
472+
electron.SetSourceBit(0, MCProng::kPhysicalPrimary);
473+
MCProng muon(2, {13, 402}, {true, true}, {false, false}, {0, 0}, {0, 0}, {false, false});
474+
muon.SetSourceBit(0, MCProng::kPhysicalPrimary);
475+
signal = new MCSignal(name, "e and mu each from an open charm hadron decay", {electron, muon}, {-1, -1});
476+
return signal;
477+
}
478+
if (!nameStr.compare("emuFromOpenBeautyHadron")) {
479+
MCProng electron(2, {11, 502}, {true, true}, {false, false}, {0, 0}, {0, 0}, {false, false});
480+
electron.SetSourceBit(0, MCProng::kPhysicalPrimary);
481+
MCProng muon(2, {13, 502}, {true, true}, {false, false}, {0, 0}, {0, 0}, {false, false});
482+
muon.SetSourceBit(0, MCProng::kPhysicalPrimary);
483+
signal = new MCSignal(name, "e and mu each from an open beauty hadron decay", {electron, muon}, {-1, -1});
484+
return signal;
485+
}
462486
if (!nameStr.compare("dielectronFromPC")) {
463487
MCProng prong(2, {11, 22}, {true, true}, {false, false}, {0, 0}, {0, 0}, {false, false});
464488
signal = new MCSignal(name, "dielectron from a photon conversion", {prong, prong}, {1, 1});

PWGDQ/Core/VarManager.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3998,6 +3998,14 @@ void VarManager::FillPairME(T1 const& t1, T2 const& t2, float* values)
39983998
values[kPhi] = v12.Phi() > 0 ? v12.Phi() : v12.Phi() + 2. * M_PI;
39993999
values[kRap] = -v12.Rapidity();
40004000

4001+
// Per-track quantities so ME histograms can use kPt1/kPt2/kEta1/kEta2/kPhi1/kPhi2 just like SE FillPair does.
4002+
values[kPt1] = t1.pt();
4003+
values[kEta1] = t1.eta();
4004+
values[kPhi1] = t1.phi();
4005+
values[kPt2] = t2.pt();
4006+
values[kEta2] = t2.eta();
4007+
values[kPhi2] = t2.phi();
4008+
40014009
if (fgUsedVars[kDeltaPhiPair2]) {
40024010
double phipair2ME = v1.Phi() - v2.Phi();
40034011
if (phipair2ME > 3 * TMath::Pi() / 2) {

0 commit comments

Comments
 (0)