Skip to content

Commit 6b7c99a

Browse files
authored
[PWGDQ] Improvements to UPC D0 MC analysis (AliceO2Group#10992)
1 parent 70efa5b commit 6b7c99a

File tree

3 files changed

+168
-57
lines changed

3 files changed

+168
-57
lines changed

PWGDQ/Core/MCSignalLibrary.cxx

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1471,12 +1471,29 @@ MCSignal* o2::aod::dqmcsignals::GetMCSignal(const char* name)
14711471
signal = new MCSignal(name, "D0", {prong}, {-1});
14721472
return signal;
14731473
}
1474+
if (!nameStr.compare("nonPromptD0")) {
1475+
MCProng prong(2, {Pdg::kD0, 503}, {true, true}, {false, false}, {0, 0}, {0, 0}, {false, false});
1476+
signal = new MCSignal(name, "Non-prompt D0", {prong}, {-1});
1477+
return signal;
1478+
}
1479+
if (!nameStr.compare("D0FS")) {
1480+
MCProng prong(1, {Pdg::kD0}, {true}, {false}, {0}, {0}, {false});
1481+
prong.SetSourceBit(0, MCProng::kHEPMCFinalState);
1482+
signal = new MCSignal(name, "D0", {prong}, {-1});
1483+
return signal;
1484+
}
14741485
if (!nameStr.compare("KPiFromD0")) {
14751486
MCProng prongKaon(2, {321, Pdg::kD0}, {true, true}, {false, false}, {0, 0}, {0, 0}, {false, false});
14761487
MCProng prongPion(2, {211, Pdg::kD0}, {true, true}, {false, false}, {0, 0}, {0, 0}, {false, false});
14771488
signal = new MCSignal(name, "Kaon and pion pair from D0", {prongKaon, prongPion}, {1, 1});
14781489
return signal;
14791490
}
1491+
if (!nameStr.compare("KPiFromD0Reflected")) {
1492+
MCProng prongFalseKaon(2, {211, Pdg::kD0}, {true, true}, {false, false}, {0, 0}, {0, 0}, {false, false});
1493+
MCProng prongFalsePion(2, {321, Pdg::kD0}, {true, true}, {false, false}, {0, 0}, {0, 0}, {false, false});
1494+
signal = new MCSignal(name, "Kaon and pion pair from D0 with reflected mass assumption", {prongFalseKaon, prongFalsePion}, {1, 1});
1495+
return signal;
1496+
}
14801497
if (!nameStr.compare("Dcharged")) {
14811498
MCProng prong(1, {Pdg::kDPlus}, {true}, {false}, {0}, {0}, {false});
14821499
signal = new MCSignal(name, "D+/-", {prong}, {-1});

PWGDQ/TableProducer/tableMakerMC_withAssoc.cxx

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
// The skimmed MC stack includes the MC truth particles corresponding to the list of user specified MC signals (see MCsignal.h)
1717
// and the MC truth particles corresponding to the reconstructed tracks selected by the specified track cuts on reconstructed data.
1818

19+
#include <cstdint>
1920
#include <iostream>
2021
#include <map>
2122
#include <string>
@@ -86,6 +87,7 @@ using MyMuonsWithCov = soa::Join<aod::FwdTracks, aod::FwdTracksCov, aod::McFwdTr
8687

8788
using MyEvents = soa::Join<aod::Collisions, aod::EvSels, aod::McCollisionLabels>;
8889
using MyEventsWithMults = soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::MultsExtra, aod::McCollisionLabels>;
90+
using MyEventsWithMultsAndRapidityGapFilter = soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::MultsExtra, aod::McCollisionLabels, aod::DQRapidityGapFilter>;
8991
using MyEventsWithCent = soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Cs, aod::McCollisionLabels>;
9092
using MyEventsWithCentAndMults = soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Cs, aod::Mults, aod::MultsExtra, aod::McCollisionLabels>;
9193
using MFTTrackLabeled = soa::Join<o2::aod::MFTTracks, aod::McMFTTrackLabels>;
@@ -95,6 +97,7 @@ constexpr static uint32_t gkEventFillMap = VarManager::ObjTypes::BC | VarManager
9597
constexpr static uint32_t gkEventFillMapWithMults = VarManager::ObjTypes::BC | VarManager::ObjTypes::Collision | VarManager::ObjTypes::CollisionMult | VarManager::ObjTypes::CollisionMultExtra;
9698
// constexpr static uint32_t gkEventFillMapWithCent = VarManager::ObjTypes::BC | VarManager::ObjTypes::Collision | VarManager::ObjTypes::CollisionCent;
9799
constexpr static uint32_t gkEventFillMapWithCentAndMults = VarManager::ObjTypes::BC | VarManager::ObjTypes::Collision | VarManager::ObjTypes::CollisionCent | VarManager::CollisionMult | VarManager::CollisionMultExtra;
100+
constexpr static uint32_t gkEventFillMapWithMultsRapidityGapFilter = VarManager::ObjTypes::BC | VarManager::ObjTypes::Collision | VarManager::ObjTypes::CollisionMult | VarManager::ObjTypes::CollisionMultExtra | VarManager::ObjTypes::RapidityGapFilter;
98101
// constexpr static uint32_t gkEventMCFillMap = VarManager::ObjTypes::CollisionMC;
99102
// constexpr static uint32_t gkTrackFillMap = VarManager::ObjTypes::Track | VarManager::ObjTypes::TrackExtra | VarManager::ObjTypes::TrackDCA | VarManager::ObjTypes::TrackSelection | VarManager::ObjTypes::TrackPID;
100103
constexpr static uint32_t gkTrackFillMapWithCov = VarManager::ObjTypes::Track | VarManager::ObjTypes::TrackExtra | VarManager::ObjTypes::TrackDCA | VarManager::ObjTypes::TrackSelection | VarManager::ObjTypes::TrackCov | VarManager::ObjTypes::TrackPID;
@@ -236,7 +239,7 @@ struct TableMakerMC {
236239
{
237240
// Check whether barrel or muon are enabled
238241
bool isProcessBCenabled = context.mOptions.get<bool>("processPP");
239-
bool isBarrelEnabled = (context.mOptions.get<bool>("processPP") || context.mOptions.get<bool>("processPPBarrelOnly") || context.mOptions.get<bool>("processPbPbBarrelOnly"));
242+
bool isBarrelEnabled = (context.mOptions.get<bool>("processPP") || context.mOptions.get<bool>("processPPBarrelOnly") || context.mOptions.get<bool>("processPbPbBarrelOnly") || context.mOptions.get<bool>("processPbPbWithFilterBarrelOnly"));
240243
bool isMuonEnabled = (context.mOptions.get<bool>("processPP") || context.mOptions.get<bool>("processPPMuonOnlyBasic") || context.mOptions.get<bool>("processPPMuonOnly") || context.mOptions.get<bool>("processPbPbMuonOnly"));
241244
// Make sure at least one process function is enabled
242245
if (!(isProcessBCenabled || isBarrelEnabled || isMuonEnabled)) {
@@ -553,6 +556,13 @@ struct TableMakerMC {
553556
}
554557
(reinterpret_cast<TH2I*>(fStatsList->At(0)))->Fill(1.0, static_cast<float>(o2::aod::evsel::kNsel));
555558

559+
// apply the event filter
560+
if constexpr ((TEventFillMap & VarManager::ObjTypes::RapidityGapFilter) > 0) {
561+
if (!collision.eventFilter()) {
562+
continue;
563+
}
564+
}
565+
556566
auto bc = collision.template bc_as<BCsWithTimestamps>();
557567
// store the selection decisions
558568
uint64_t tag = static_cast<uint64_t>(0);
@@ -562,6 +572,10 @@ struct TableMakerMC {
562572
if (bcEvSel.globalIndex() != bc.globalIndex()) {
563573
tag |= (static_cast<uint64_t>(1) << 0);
564574
}
575+
// Put the 8 first bits of the event filter in the last 8 bits of the tag
576+
if constexpr ((TEventFillMap & VarManager::ObjTypes::RapidityGapFilter) > 0) {
577+
tag |= (collision.eventFilter() << 56);
578+
}
565579

566580
// Compute BC and event quantities and fill histograms
567581
VarManager::ResetValues(0, VarManager::kNEventWiseVariables);
@@ -602,16 +616,25 @@ struct TableMakerMC {
602616
event(tag, bc.runNumber(), collision.posX(), collision.posY(), collision.posZ(), collision.numContrib(), collision.collisionTime(), collision.collisionTimeRes());
603617
if constexpr ((TEventFillMap & VarManager::ObjTypes::CollisionMult) > 0) {
604618
multTPC = collision.multTPC();
605-
multFV0A = collision.multFV0A();
606619
multFV0C = collision.multFV0C();
607-
multFT0A = collision.multFT0A();
608-
multFT0C = collision.multFT0C();
609-
multFDDA = collision.multFDDA();
610-
multFDDC = collision.multFDDC();
611620
multZNA = collision.multZNA();
612621
multZNC = collision.multZNC();
613622
multTracklets = collision.multTracklets();
614623
multTracksPV = collision.multNTracksPV();
624+
if constexpr ((TEventFillMap & VarManager::ObjTypes::RapidityGapFilter) > 0) {
625+
// Use the FIT signals from the nearest BC with FIT amplitude above threshold
626+
multFV0A = collision.newBcMultFV0A();
627+
multFT0A = collision.newBcMultFT0A();
628+
multFT0C = collision.newBcMultFT0C();
629+
multFDDA = collision.newBcMultFDDA();
630+
multFDDC = collision.newBcMultFDDC();
631+
} else {
632+
multFV0A = collision.multFV0A();
633+
multFT0A = collision.multFT0A();
634+
multFT0C = collision.multFT0C();
635+
multFDDA = collision.multFDDA();
636+
multFDDC = collision.multFDDC();
637+
}
615638
}
616639
if constexpr ((TEventFillMap & VarManager::ObjTypes::CollisionCent) > 0) {
617640
centFT0C = collision.centFT0C();
@@ -1338,6 +1361,13 @@ struct TableMakerMC {
13381361
fullSkimming<gkEventFillMapWithCentAndMults, gkTrackFillMapWithCov, 0u, 0u>(collisions, bcs, tracksBarrel, nullptr, nullptr, trackAssocs, nullptr, nullptr, mcCollisions, mcParticles);
13391362
}
13401363

1364+
void processPbPbWithFilterBarrelOnly(MyEventsWithMultsAndRapidityGapFilter const& collisions, aod::BCsWithTimestamps const& bcs,
1365+
MyBarrelTracksWithCov const& tracksBarrel, aod::TrackAssoc const& trackAssocs,
1366+
aod::McCollisions const& mcCollisions, aod::McParticles const& mcParticles)
1367+
{
1368+
fullSkimming<gkEventFillMapWithMultsRapidityGapFilter, gkTrackFillMapWithCov, 0u, 0u>(collisions, bcs, tracksBarrel, nullptr, nullptr, trackAssocs, nullptr, nullptr, mcCollisions, mcParticles);
1369+
}
1370+
13411371
void processPbPbMuonOnly(MyEventsWithCentAndMults const& collisions, aod::BCsWithTimestamps const& bcs,
13421372
MyMuonsWithCov const& tracksMuon, MFTTrackLabeled const& mftTracks,
13431373
aod::FwdTrackAssoc const& fwdTrackAssocs, aod::MFTTrackAssoc const& mftAssocs,
@@ -1363,6 +1393,7 @@ struct TableMakerMC {
13631393
PROCESS_SWITCH(TableMakerMC, processPPMuonOnly, "Produce only muon skims, pp settings", false);
13641394
PROCESS_SWITCH(TableMakerMC, processPbPb, "Produce both barrel and muon skims, PbPb settings", false);
13651395
PROCESS_SWITCH(TableMakerMC, processPbPbBarrelOnly, "Produce only barrel skims, PbPb settings", false);
1396+
PROCESS_SWITCH(TableMakerMC, processPbPbWithFilterBarrelOnly, "Produce only barrel skims, pp settings with rapidity gap filter ", false);
13661397
PROCESS_SWITCH(TableMakerMC, processPbPbMuonOnly, "Produce only muon skims, PbPb settings", false);
13671398
PROCESS_SWITCH(TableMakerMC, processOnlyBCs, "Analyze the BCs to store sampled lumi", false);
13681399
};

0 commit comments

Comments
 (0)