Skip to content

Commit 8b098aa

Browse files
maciaccoalibuild
andauthored
[PWGLF] fill mini tables also for run 2 PbPb process function + fill table from a single function (#14076)
Co-authored-by: ALICE Action Bot <alibuild@cern.ch>
1 parent e035f8e commit 8b098aa

File tree

1 file changed

+115
-144
lines changed

1 file changed

+115
-144
lines changed

PWGLF/TableProducer/Nuspex/ebyeMaker.cxx

Lines changed: 115 additions & 144 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@ using namespace o2;
5454
using namespace o2::framework;
5555
using namespace o2::framework::expressions;
5656

57-
using TracksFull = soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksCov, aod::TOFSignal, aod::TOFEvTime>;
5857
using TracksFullPID = soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksCov, aod::TOFSignal, aod::TOFEvTime, aod::pidTOFPr>;
5958
using TracksFullIUPID = soa::Join<aod::TracksIU, aod::TracksExtra, aod::TracksCovIU, aod::TOFSignal, aod::TOFEvTime, aod::pidTOFPr>;
6059
using BCsWithRun2Info = soa::Join<aod::BCs, aod::Run2BCInfos, aod::Timestamps>;
@@ -258,6 +257,7 @@ struct EbyeMaker {
258257

259258
Configurable<LabeledArray<float>> cfgTrackSels{"cfgTrackSels", {kTrackSels, 1, 12, particleName, trackSelsNames}, "Track selections"};
260259
Configurable<LabeledArray<float>> cfgDcaSelsParam{"cfgDcaSelsParam", {kDcaSelsParam[0], 3, 3, dcaSelsNames, dcaParNames}, "DCA threshold settings"};
260+
Configurable<bool> fillMini{"fillMini", false, "fill mini tables"};
261261

262262
std::array<float, kNpart> ptMin;
263263
std::array<float, kNpart> ptTof;
@@ -267,7 +267,6 @@ struct EbyeMaker {
267267

268268
HistogramRegistry histos{"histos", {}, OutputObjHandlingPolicy::AnalysisObject};
269269

270-
Preslice<TracksFull> perCollisionTracksFull = o2::aod::track::collisionId;
271270
Preslice<TracksFullPID> perCollisionTracksFullPID = o2::aod::track::collisionId;
272271
Preslice<TracksFullIUPID> perCollisionTracksFullIUPID = o2::aod::track::collisionId;
273272
Preslice<aod::V0s> perCollisionV0 = o2::aod::v0::collisionId;
@@ -427,12 +426,40 @@ struct EbyeMaker {
427426
return static_cast<float>((track.tpcSignal() - expBethe) / expSigma);
428427
}
429428

430-
template <class T>
431-
float getOuterPID(T const& track)
429+
template <const bool isMc, class T>
430+
void fillTableMiniTrack(CandidateTrack& candidateTrack, T const& tk, float const& nSigmaITS = -999.f)
432431
{
433-
if (!(doprocessRun2 || doprocessMcRun2) && track.hasTOF() && track.pt() > antipPtTof)
434-
return track.tofNSigmaPr();
435-
return -999.f;
432+
int selMask = -1;
433+
if ((isMc && candidateTrack.isreco) || !isMc) {
434+
float outerPID = tk.pt() > antipPtTof ? tk.tofNSigmaPr() : -999.f;
435+
candidateTrack.itsnsigma = nSigmaITS;
436+
candidateTrack.outerPID = tk.pt() < antipPtTof ? candidateTrack.outerPID : outerPID;
437+
selMask = getTrackSelMask(candidateTrack);
438+
if (candidateTrack.outerPID < outerPIDMin)
439+
return;
440+
if (isMc && candidateTrack.pdgcodemoth > 0)
441+
selMask |= candidateTrack.pdgcodemoth;
442+
} else if (isMc && candidateTrack.pdgcodemoth > 0) {
443+
selMask = candidateTrack.pdgcodemoth;
444+
}
445+
if (isMc && selMask >= 0) {
446+
mcMiniTrkTable(
447+
miniCollTable.lastIndex(),
448+
candidateTrack.pt,
449+
static_cast<int8_t>(candidateTrack.eta * 100),
450+
selMask,
451+
candidateTrack.outerPID,
452+
candidateTrack.pdgcode > 0 ? candidateTrack.genpt : -candidateTrack.genpt,
453+
static_cast<int8_t>(candidateTrack.geneta * 100),
454+
candidateTrack.isreco);
455+
} else if (!isMc) {
456+
miniTrkTable(
457+
miniCollTable.lastIndex(),
458+
candidateTrack.pt,
459+
static_cast<int8_t>(candidateTrack.eta * 100),
460+
selMask,
461+
candidateTrack.outerPID);
462+
}
436463
}
437464

438465
template <class T>
@@ -523,8 +550,6 @@ struct EbyeMaker {
523550
{
524551
if (doprocessRun3 || doprocessMcRun3)
525552
return tracksAll.sliceBy(perCollisionTracksFullIUPID, collId);
526-
else if (doprocessRun2 || doprocessMcRun2)
527-
return tracksAll.sliceBy(perCollisionTracksFull, collId);
528553
else
529554
return tracksAll.sliceBy(perCollisionTracksFullPID, collId);
530555
}
@@ -912,27 +937,15 @@ struct EbyeMaker {
912937
fillRecoEvent(collision, tracks, v0TableThisCollision, centrality);
913938

914939
miniCollTable(static_cast<int8_t>(collision.posZ() * 10), 0x0, nTrackletsColl, centrality, nTracksColl);
915-
916940
for (auto& candidateTrack : candidateTracks[0]) { // o2-linter: disable=const-ref-in-for-loop (not a const ref)
917941
auto tk = tracks.rawIteratorAt(candidateTrack.globalIndex);
918-
float outerPID = getOuterPID(tk);
919-
candidateTrack.itsnsigma = -999.f;
920-
candidateTrack.outerPID = tk.pt() < antipPtTof ? candidateTrack.outerPID : outerPID;
921-
int selMask = getTrackSelMask(candidateTrack);
922-
if (candidateTrack.outerPID < outerPIDMin)
923-
continue;
924-
miniTrkTable(
925-
miniCollTable.lastIndex(),
926-
candidateTrack.pt,
927-
static_cast<int8_t>(candidateTrack.eta * 100),
928-
selMask,
929-
candidateTrack.outerPID);
942+
fillTableMiniTrack<false>(candidateTrack, tk);
930943
}
931944
}
932945
}
933946
PROCESS_SWITCH(EbyeMaker, processRun3, "process (Run 3)", false);
934947

935-
void processRun2(soa::Join<aod::Collisions, aod::EvSels, aod::CentRun2V0Ms, aod::CentRun2CL0s, aod::TrackletMults> const& collisions, TracksFull const& tracks, aod::V0s const& V0s, BCsWithRun2Info const&)
948+
void processRun2(soa::Join<aod::Collisions, aod::EvSels, aod::CentRun2V0Ms, aod::CentRun2CL0s, aod::TrackletMults> const& collisions, TracksFullPID const& tracks, aod::V0s const& V0s, BCsWithRun2Info const&)
936949
{
937950
for (const auto& collision : collisions) {
938951
auto bc = collision.bc_as<BCsWithRun2Info>();
@@ -974,32 +987,38 @@ struct EbyeMaker {
974987
histos.fill(HIST("QA/V0MvsCL0"), centralityCl0, centrality);
975988
histos.fill(HIST("QA/trackletsVsV0M"), centrality, multTracklets);
976989

977-
collisionEbyeTable(centrality, collision.posZ());
978-
979-
for (const auto& candidateV0 : candidateV0s) {
980-
lambdaEbyeTable(
981-
collisionEbyeTable.lastIndex(),
982-
candidateV0.pt,
983-
candidateV0.eta,
984-
candidateV0.mass,
985-
candidateV0.dcav0pv,
986-
candidateV0.dcav0daugh,
987-
candidateV0.cpa,
988-
candidateV0.globalIndexNeg,
989-
candidateV0.globalIndexPos);
990-
}
991-
992-
for (int iP{0}; iP < kNpart; ++iP) {
993-
for (const auto& candidateTrack : candidateTracks[iP]) { // deuterons + protons
994-
nucleiEbyeTable(
990+
if (fillMini) {
991+
miniCollTable(static_cast<int8_t>(collision.posZ() * 10), 0x0, nTrackletsColl, centrality, nTracksColl);
992+
for (auto& candidateTrack : candidateTracks[0]) { // o2-linter: disable=const-ref-in-for-loop (not a const ref)
993+
auto tk = tracks.rawIteratorAt(candidateTrack.globalIndex);
994+
fillTableMiniTrack<false>(candidateTrack, tk);
995+
}
996+
} else {
997+
collisionEbyeTable(centrality, collision.posZ());
998+
for (const auto& candidateV0 : candidateV0s) {
999+
lambdaEbyeTable(
9951000
collisionEbyeTable.lastIndex(),
996-
candidateTrack.pt,
997-
candidateTrack.eta,
998-
candidateTrack.mass,
999-
candidateTrack.dcapv,
1000-
candidateTrack.tpcncls,
1001-
candidateTrack.tpcnsigma,
1002-
candidateTrack.tofmass);
1001+
candidateV0.pt,
1002+
candidateV0.eta,
1003+
candidateV0.mass,
1004+
candidateV0.dcav0pv,
1005+
candidateV0.dcav0daugh,
1006+
candidateV0.cpa,
1007+
candidateV0.globalIndexNeg,
1008+
candidateV0.globalIndexPos);
1009+
}
1010+
for (int iP{0}; iP < kNpart; ++iP) {
1011+
for (const auto& candidateTrack : candidateTracks[iP]) { // deuterons + protons
1012+
nucleiEbyeTable(
1013+
collisionEbyeTable.lastIndex(),
1014+
candidateTrack.pt,
1015+
candidateTrack.eta,
1016+
candidateTrack.mass,
1017+
candidateTrack.dcapv,
1018+
candidateTrack.tpcncls,
1019+
candidateTrack.tpcnsigma,
1020+
candidateTrack.tofmass);
1021+
}
10031022
}
10041023
}
10051024
}
@@ -1047,24 +1066,13 @@ struct EbyeMaker {
10471066
if (triggerCut != 0x0 && (trigger & triggerCut) != triggerCut) {
10481067
continue;
10491068
}
1050-
miniCollTable(static_cast<int8_t>(collision.posZ() * 10), trigger, nTrackletsColl, centrality, nTracksColl);
10511069

1070+
miniCollTable(static_cast<int8_t>(collision.posZ() * 10), trigger, nTrackletsColl, centrality, nTracksColl);
10521071
for (auto& candidateTrack : candidateTracks[0]) { // o2-linter: disable=const-ref-in-for-loop (not a const ref)
10531072
auto tk = tracks.rawIteratorAt(candidateTrack.globalIndex);
1054-
float outerPID = getOuterPID(tk);
10551073
auto [itsSignal, nSigmaITS] = getITSSignal(tk, trackExtraRun2);
10561074
histos.fill(HIST("QA/itsSignal"), tk.p(), itsSignal);
1057-
candidateTrack.itsnsigma = nSigmaITS;
1058-
candidateTrack.outerPID = tk.pt() < antipPtTof ? candidateTrack.outerPID : outerPID;
1059-
int selMask = getTrackSelMask(candidateTrack);
1060-
if (candidateTrack.outerPID < outerPIDMin)
1061-
continue;
1062-
miniTrkTable(
1063-
miniCollTable.lastIndex(),
1064-
candidateTrack.pt,
1065-
static_cast<int8_t>(candidateTrack.eta * 100),
1066-
selMask,
1067-
candidateTrack.outerPID);
1075+
fillTableMiniTrack<false>(candidateTrack, tk, nSigmaITS);
10681076
}
10691077
}
10701078
}
@@ -1091,37 +1099,15 @@ struct EbyeMaker {
10911099
fillMcGen(mcParticles, mcLab, collision.mcCollisionId());
10921100

10931101
miniCollTable(static_cast<int8_t>(collision.posZ() * 10), nChPartGen, nTrackletsColl, centrality, nTracksColl);
1094-
10951102
for (auto& candidateTrack : candidateTracks[0]) { // o2-linter: disable=const-ref-in-for-loop (not a const ref)
1096-
int selMask = -1;
1097-
if (candidateTrack.isreco) {
1098-
auto tk = tracks.rawIteratorAt(candidateTrack.globalIndex);
1099-
float outerPID = getOuterPID(tk);
1100-
candidateTrack.itsnsigma = -999.f;
1101-
candidateTrack.outerPID = tk.pt() < antipPtTof ? candidateTrack.outerPID : outerPID;
1102-
selMask = getTrackSelMask(candidateTrack);
1103-
if (candidateTrack.pdgcodemoth > 0)
1104-
selMask |= candidateTrack.pdgcodemoth;
1105-
} else if (candidateTrack.pdgcodemoth > 0) {
1106-
selMask = candidateTrack.pdgcodemoth;
1107-
}
1108-
if (selMask < 0)
1109-
continue;
1110-
mcMiniTrkTable(
1111-
miniCollTable.lastIndex(),
1112-
candidateTrack.pt,
1113-
static_cast<int8_t>(candidateTrack.eta * 100),
1114-
selMask,
1115-
candidateTrack.outerPID,
1116-
candidateTrack.pdgcode > 0 ? candidateTrack.genpt : -candidateTrack.genpt,
1117-
static_cast<int8_t>(candidateTrack.geneta * 100),
1118-
candidateTrack.isreco);
1103+
auto tk = candidateTrack.isreco ? tracks.rawIteratorAt(candidateTrack.globalIndex) : tracks.rawIteratorAt(0);
1104+
fillTableMiniTrack<true>(candidateTrack, tk);
11191105
}
11201106
}
11211107
}
11221108
PROCESS_SWITCH(EbyeMaker, processMcRun3, "process MC (Run 3)", false);
11231109

1124-
void processMcRun2(soa::Join<aod::Collisions, aod::McCollisionLabels, aod::CentRun2V0Ms> const& collisions, aod::McCollisions const& /*mcCollisions*/, TracksFull const& tracks, aod::V0s const& V0s, aod::McParticles const& mcParticles, aod::McTrackLabels const& mcLab, BCsWithRun2Info const&)
1110+
void processMcRun2(soa::Join<aod::Collisions, aod::McCollisionLabels, aod::CentRun2V0Ms> const& collisions, aod::McCollisions const& /*mcCollisions*/, TracksFullPID const& tracks, aod::V0s const& V0s, aod::McParticles const& mcParticles, aod::McTrackLabels const& mcLab, BCsWithRun2Info const&)
11251111
{
11261112
for (const auto& collision : collisions) {
11271113
auto bc = collision.bc_as<BCsWithRun2Info>();
@@ -1143,40 +1129,46 @@ struct EbyeMaker {
11431129
fillMcEvent(collision, tracks, v0TableThisCollision, centrality, mcParticles, mcLab);
11441130
fillMcGen(mcParticles, mcLab, collision.mcCollisionId());
11451131

1146-
collisionEbyeTable(centrality, collision.posZ());
1147-
1148-
for (const auto& candidateV0 : candidateV0s) {
1149-
mcLambdaEbyeTable(
1150-
collisionEbyeTable.lastIndex(),
1151-
candidateV0.pt,
1152-
candidateV0.eta,
1153-
candidateV0.mass,
1154-
candidateV0.dcav0pv,
1155-
candidateV0.dcav0daugh,
1156-
candidateV0.cpa,
1157-
candidateV0.globalIndexNeg,
1158-
candidateV0.globalIndexPos,
1159-
candidateV0.genpt,
1160-
candidateV0.geneta,
1161-
candidateV0.pdgcode,
1162-
candidateV0.isreco);
1163-
}
1164-
1165-
for (int iP{0}; iP < kNpart; ++iP) {
1166-
for (const auto& candidateTrack : candidateTracks[iP]) { // deuterons + protons
1167-
mcNucleiEbyeTable(
1132+
if (fillMini) {
1133+
miniCollTable(static_cast<int8_t>(collision.posZ() * 10), nChPartGen, nTrackletsColl, centrality, nTracksColl);
1134+
for (auto& candidateTrack : candidateTracks[0]) { // o2-linter: disable=const-ref-in-for-loop (not a const ref)
1135+
auto tk = candidateTrack.isreco ? tracks.rawIteratorAt(candidateTrack.globalIndex) : tracks.rawIteratorAt(0);
1136+
fillTableMiniTrack<true>(candidateTrack, tk);
1137+
}
1138+
} else {
1139+
collisionEbyeTable(centrality, collision.posZ());
1140+
for (const auto& candidateV0 : candidateV0s) {
1141+
mcLambdaEbyeTable(
11681142
collisionEbyeTable.lastIndex(),
1169-
candidateTrack.pt,
1170-
candidateTrack.eta,
1171-
candidateTrack.mass,
1172-
candidateTrack.dcapv,
1173-
candidateTrack.tpcncls,
1174-
candidateTrack.tpcnsigma,
1175-
candidateTrack.tofmass,
1176-
candidateTrack.genpt,
1177-
candidateTrack.geneta,
1178-
candidateTrack.pdgcode,
1179-
candidateTrack.isreco);
1143+
candidateV0.pt,
1144+
candidateV0.eta,
1145+
candidateV0.mass,
1146+
candidateV0.dcav0pv,
1147+
candidateV0.dcav0daugh,
1148+
candidateV0.cpa,
1149+
candidateV0.globalIndexNeg,
1150+
candidateV0.globalIndexPos,
1151+
candidateV0.genpt,
1152+
candidateV0.geneta,
1153+
candidateV0.pdgcode,
1154+
candidateV0.isreco);
1155+
}
1156+
for (int iP{0}; iP < kNpart; ++iP) {
1157+
for (const auto& candidateTrack : candidateTracks[iP]) { // deuterons + protons
1158+
mcNucleiEbyeTable(
1159+
collisionEbyeTable.lastIndex(),
1160+
candidateTrack.pt,
1161+
candidateTrack.eta,
1162+
candidateTrack.mass,
1163+
candidateTrack.dcapv,
1164+
candidateTrack.tpcncls,
1165+
candidateTrack.tpcnsigma,
1166+
candidateTrack.tofmass,
1167+
candidateTrack.genpt,
1168+
candidateTrack.geneta,
1169+
candidateTrack.pdgcode,
1170+
candidateTrack.isreco);
1171+
}
11801172
}
11811173
}
11821174
}
@@ -1206,33 +1198,12 @@ struct EbyeMaker {
12061198
fillMcGen(mcParticles, mcLab, collision.mcCollisionId());
12071199

12081200
miniCollTable(static_cast<int8_t>(collision.posZ() * 10), nChPartGen, nTrackletsColl, centrality, nTracksColl);
1209-
12101201
for (auto& candidateTrack : candidateTracks[0]) { // o2-linter: disable=const-ref-in-for-loop (not a const ref)
1211-
int selMask = -1;
1212-
if (candidateTrack.isreco) {
1213-
auto tk = tracks.rawIteratorAt(candidateTrack.globalIndex);
1214-
float outerPID = getOuterPID(tk);
1215-
auto [itsSignal, nSigmaITS] = getITSSignal(tk, trackExtraRun2);
1202+
auto tk = candidateTrack.isreco ? tracks.rawIteratorAt(candidateTrack.globalIndex) : tracks.rawIteratorAt(0);
1203+
auto [itsSignal, nSigmaITS] = getITSSignal(tk, trackExtraRun2);
1204+
if (candidateTrack.isreco)
12161205
histos.fill(HIST("QA/itsSignal"), tk.p(), itsSignal);
1217-
candidateTrack.itsnsigma = nSigmaITS;
1218-
candidateTrack.outerPID = tk.pt() < antipPtTof ? candidateTrack.outerPID : outerPID;
1219-
selMask = getTrackSelMask(candidateTrack);
1220-
if (candidateTrack.pdgcodemoth > 0)
1221-
selMask |= candidateTrack.pdgcodemoth;
1222-
} else if (candidateTrack.pdgcodemoth > 0) {
1223-
selMask = candidateTrack.pdgcodemoth;
1224-
}
1225-
if (selMask < 0)
1226-
continue;
1227-
mcMiniTrkTable(
1228-
miniCollTable.lastIndex(),
1229-
candidateTrack.pt,
1230-
static_cast<int8_t>(candidateTrack.eta * 100),
1231-
selMask,
1232-
candidateTrack.outerPID,
1233-
candidateTrack.pdgcode > 0 ? candidateTrack.genpt : -candidateTrack.genpt,
1234-
static_cast<int8_t>(candidateTrack.geneta * 100),
1235-
candidateTrack.isreco);
1206+
fillTableMiniTrack<true>(candidateTrack, tk, nSigmaITS);
12361207
}
12371208
}
12381209
}

0 commit comments

Comments
 (0)