Skip to content

Commit 4a95243

Browse files
fix information on the collision in mc
1 parent ac6942c commit 4a95243

1 file changed

Lines changed: 64 additions & 14 deletions

File tree

PWGLF/TableProducer/Nuspex/he3HadronFemto.cxx

Lines changed: 64 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,28 @@ constexpr std::array<double, 3> kHePidTrkPParamsHeDefault = {0., 0., 0.};
202202

203203
} // namespace
204204

205+
struct CollisionInfo {
206+
int64_t collisionID = -1;
207+
uint32_t selectionFlags = 0;
208+
float posZ = -999.f;
209+
int numContributors = -1;
210+
float centFT0C = -999.f;
211+
int multFT0C = -1;
212+
float occupancy = -999.f;
213+
214+
template <typename Collision>
215+
void fillFromCollision(const Collision& collision, uint32_t collisionSelectionFlag)
216+
{
217+
collisionID = collision.globalIndex();
218+
selectionFlags = collisionSelectionFlag;
219+
posZ = collision.posZ();
220+
numContributors = collision.numContrib();
221+
centFT0C = collision.centFT0C();
222+
multFT0C = collision.multFT0C();
223+
occupancy = collision.trackOccupancyInTimeRange();
224+
}
225+
};
226+
205227
struct He3HadCandidate {
206228

207229
[[nodiscard]] float recoPtHe3() const { return signHe3 * std::hypot(momHe3[0], momHe3[1]); }
@@ -378,6 +400,8 @@ struct he3HadronFemto {
378400
o2::aod::ITSResponse mResponseITS;
379401

380402
std::vector<bool> mGoodCollisions;
403+
std::vector<bool> mRecoMcCollisions;
404+
std::vector<int> mMcCollisionIdToRecoCollisionId;
381405
std::vector<uint32_t> mCollisionSelectionFlags;
382406
std::vector<SVCand> mTrackPairs;
383407
o2::vertexing::DCAFitterN<2> mFitter;
@@ -603,20 +627,32 @@ struct he3HadronFemto {
603627
bool selectCollision(const Tcollision& collision, const aod::BCsWithTimestamps&, uint32_t& collisionSelectionFlag)
604628
{
605629
mQaRegistry.fill(HIST("hEvents"), 0);
630+
if constexpr (isMC) {
631+
if (collision.has_mcCollision()) {
632+
mMcCollisionIdToRecoCollisionId[collision.mcCollisionId()] = collision.globalIndex();
633+
}
634+
}
606635

607636
auto bc = collision.template bc_as<aod::BCsWithTimestamps>();
608637
initCCDB(bc);
609638

610639
if (!nuclei::eventSelection(collision, mQaRegistry, settingEventSelections, cutSettings.settingCutVertex, collisionSelectionFlag)) {
611640
return false;
612641
}
642+
613643
if (settingSkimmedProcessing) {
614644
bool zorroSelected = mZorro.isSelected(collision.template bc_as<aod::BCsWithTimestamps>().globalBC());
615645
if (zorroSelected) {
616646
mQaRegistry.fill(HIST("hEvents"), 2);
617647
}
618648
}
619649

650+
if constexpr (isMC) {
651+
if (collision.has_mcCollision()) {
652+
mRecoMcCollisions[collision.mcCollisionId()] = true;
653+
}
654+
}
655+
620656
mQaRegistry.fill(HIST("hEvents"), 1);
621657
mQaRegistry.fill(HIST("hNcontributor"), collision.numContrib());
622658
mQaRegistry.fill(HIST("hCentralityFT0A"), collision.centFT0A());
@@ -1048,10 +1084,8 @@ struct he3HadronFemto {
10481084
}
10491085
}
10501086

1051-
template <typename Tcoll>
1052-
void fillTable(const He3HadCandidate& he3Hadcand, const Tcoll& collision, bool isMC = false)
1087+
void fillTable(const He3HadCandidate& he3Hadcand, const CollisionInfo& collisionInfo, bool isMC = false)
10531088
{
1054-
const uint32_t collisionSelectionFlag = mCollisionSelectionFlags[he3Hadcand.collisionID];
10551089
outputDataTable(
10561090
he3Hadcand.recoPtHe3(), he3Hadcand.recoEtaHe3(), he3Hadcand.recoPhiHe3(),
10571091
he3Hadcand.recoPtHad(), he3Hadcand.recoEtaHad(), he3Hadcand.recoPhiHad(),
@@ -1072,9 +1106,9 @@ struct he3HadronFemto {
10721106
he3Hadcand.l4PtMC, he3Hadcand.l4MassMC, he3Hadcand.flags);
10731107
}
10741108
outputMultiplicityTable(
1075-
collision.globalIndex(), collisionSelectionFlag, collision.posZ(),
1076-
collision.numContrib(), collision.centFT0C(), collision.multFT0C(),
1077-
collision.trackOccupancyInTimeRange());
1109+
collisionInfo.collisionID, collisionInfo.selectionFlags, collisionInfo.posZ,
1110+
collisionInfo.numContributors, collisionInfo.centFT0C, collisionInfo.multFT0C,
1111+
collisionInfo.occupancy);
10781112
outputQaTable(
10791113
he3Hadcand.trackIDHe3, he3Hadcand.trackIDHad, he3Hadcand.massTOFHe3,
10801114
he3Hadcand.pidtrkHad, he3Hadcand.sharedClustersHad);
@@ -1125,7 +1159,9 @@ struct he3HadronFemto {
11251159
}
11261160
fillHistograms(he3Hadcand);
11271161
auto collision = collisions.rawIteratorAt(he3Hadcand.collisionID);
1128-
fillTable(he3Hadcand, collision, /*isMC*/ false);
1162+
CollisionInfo collisionInfo;
1163+
collisionInfo.fillFromCollision(collision, mCollisionSelectionFlags[he3Hadcand.collisionID]);
1164+
fillTable(he3Hadcand, collisionInfo, /*isMC*/ false);
11291165
}
11301166
}
11311167

@@ -1219,8 +1255,15 @@ struct he3HadronFemto {
12191255
He3HadCandidate he3Hadcand;
12201256
fillCandidateInfoMC(mcHe3, mcHad, he3Hadcand);
12211257
fillMotherInfoMC(mcHe3, mcHad, mcParticle, he3Hadcand);
1222-
auto collision = collisions.rawIteratorAt(he3Hadcand.collisionID);
1223-
fillTable(he3Hadcand, collision, /*isMC*/ true);
1258+
1259+
const auto mcCollisionId = mcParticle.mcCollisionId();
1260+
const auto collisionId = mMcCollisionIdToRecoCollisionId[mcCollisionId];
1261+
CollisionInfo collisionInfo;
1262+
if (collisionId >= 0) {
1263+
auto collision = collisions.rawIteratorAt(collisionId);
1264+
collisionInfo.fillFromCollision(collision, mCollisionSelectionFlags[collisionId]);
1265+
}
1266+
fillTable(he3Hadcand, collisionInfo, /*isMC*/ true);
12241267
}
12251268
}
12261269
}
@@ -1287,12 +1330,16 @@ struct he3HadronFemto {
12871330
}
12881331
PROCESS_SWITCH(he3HadronFemto, processMixedEvent, "Process Mixed event", false);
12891332

1290-
void processMC(const CollisionsFullMC& collisions, const aod::BCsWithTimestamps& bcs, const TrackCandidatesMC& tracks, const aod::McParticles& mcParticles)
1333+
void processMC(const CollisionsFullMC& collisions, const aod::McCollisions& mcCollisions, const aod::BCsWithTimestamps& bcs, const TrackCandidatesMC& tracks, const aod::McParticles& mcParticles)
12911334
{
12921335
std::vector<unsigned int> filledMothers;
12931336

12941337
mGoodCollisions.clear();
12951338
mGoodCollisions.resize(collisions.size(), false);
1339+
mRecoMcCollisions.clear();
1340+
mRecoMcCollisions.resize(mcCollisions.size(), false);
1341+
mMcCollisionIdToRecoCollisionId.clear();
1342+
mMcCollisionIdToRecoCollisionId.resize(mcCollisions.size(), -1);
12961343
mCollisionSelectionFlags.clear();
12971344
mCollisionSelectionFlags.resize(collisions.size(), 0);
12981345

@@ -1383,9 +1430,11 @@ struct he3HadronFemto {
13831430
fillMotherInfoMC(mctrackHe3, mctrackHad, motherParticle, he3Hadcand);
13841431
filledMothers.push_back(motherParticle.globalIndex());
13851432
}
1386-
13871433
fillHistograms(he3Hadcand, /*isMc*/ true);
1388-
fillTable(he3Hadcand, collision, /*isMC*/ true);
1434+
1435+
CollisionInfo collisionInfo;
1436+
collisionInfo.fillFromCollision(collision, collisionSelectionFlag);
1437+
fillTable(he3Hadcand, collisionInfo, /*isMC*/ true);
13891438
}
13901439
}
13911440

@@ -1532,9 +1581,10 @@ struct he3HadronFemto {
15321581
int biggestNContribs = -1;
15331582

15341583
for (const auto& col : collisions) {
1535-
1584+
15361585
uint32_t collisionSelectionFlag = 0;
1537-
if (!selectCollision</*isMC*/ true>(col, bcs, collisionSelectionFlag)) {
1586+
// isMC == true only fills the collision vectors, which are not used in this workflow
1587+
if (!selectCollision</*isMC*/ false>(col, bcs, collisionSelectionFlag)) {
15381588
continue;
15391589
}
15401590

0 commit comments

Comments
 (0)