Skip to content

Commit fa20bfd

Browse files
committed
added new process function to analyze MC reco with truth info
1 parent e5d918e commit fa20bfd

1 file changed

Lines changed: 44 additions & 2 deletions

File tree

‎PWGUD/Tasks/upcRhoAnalysis.cxx‎

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,7 @@ struct UpcRhoAnalysis {
270270

271271
void init(o2::framework::InitContext& context)
272272
{
273-
if (context.mOptions.get<bool>("processSGdata") || context.mOptions.get<bool>("processDGdata")) {
273+
if (context.mOptions.get<bool>("processSGdata") || context.mOptions.get<bool>("processDGdata") || context.mOptions.get<bool>("processMcRecoWithTruth")) {
274274
// QA
275275
// collisions
276276
rQC.add("QC/collisions/all/hPosXY", ";vertex #it{x} (cm);vertex #it{y} (cm);counts", kTH2D, {{2000, -0.1, 0.1}, {2000, -0.1, 0.1}});
@@ -394,7 +394,7 @@ struct UpcRhoAnalysis {
394394
rSystem.addClone("system/selected/AnAn/", "system/selected/XnXn/");
395395
}
396396

397-
if (context.mOptions.get<bool>("processMCdata") || context.mOptions.get<bool>("processMCdataWithBCs")) {
397+
if (context.mOptions.get<bool>("processMCdata") || context.mOptions.get<bool>("processMCdataWithBCs") || context.mOptions.get<bool>("processMcRecoWithTruth")) {
398398
// MC
399399
// collisions
400400
rMC.add("MC/collisions/hPosXY", ";vertex #it{x} (cm);vertex #it{y} (cm);counts", kTH2D, {{2000, -0.1, 0.1}, {2000, -0.1, 0.1}});
@@ -1267,6 +1267,48 @@ struct UpcRhoAnalysis {
12671267
}
12681268
PROCESS_SWITCH(UpcRhoAnalysis, processResolution, "check resolution of kinematic variables", false);
12691269

1270+
void processMcRecoWithTruth(soa::Join<aod::UDCollisions, aod::UDCollisionsSels, aod::UDCollisionSelExtras, aod::UDZdcsReduced, aod::SGCollisions, aod::UDMcCollsLabels>::iterator const& collision, soa::Join<aod::UDTracks, aod::UDTracksExtra, aod::UDTracksDCA, aod::UDTracksPID, aod::UDTracksFlags, aod::UDMcTrackLabels> const& tracks, aod::UDMcCollisions const&, aod::UDMcParticles const&)
1271+
{
1272+
// basically just runs the analysis as for normal data but also accesses the MC truth information for the tracks and collisions
1273+
auto mcCollision = collision.udMcCollision();
1274+
const int runIndex = -1; // we don't care here
1275+
if (cutGapSide && collision.gapSide() != gapSide)
1276+
return;
1277+
if (!collisionPassesCuts(collision, runIndex)) // apply collision cuts
1278+
return;
1279+
1280+
std::vector<decltype(tracks.begin())> recoTracks; // store selected tracks
1281+
std::vector<decltype(tracks.begin().udMcParticle())> trueTracks;
1282+
for (const auto& track : tracks) {
1283+
fillTrackQcHistos<0>(track); // fill QC histograms before cuts
1284+
1285+
if (!trackPassesCuts(track, runIndex)) // apply track cuts
1286+
continue;
1287+
recoTracks.push_back(track);
1288+
if (track.has_udMcParticle())
1289+
trueTracks.push_back(track.udMcParticle());
1290+
}
1291+
if (static_cast<int>(recoTracks.size()) != nExpectedPions || static_cast<int>(trueTracks.size()) != nExpectedPions) // further consider only two pion systems
1292+
return;
1293+
if (applyPid && !tracksPassPID(recoTracks)) // apply PID cut before creating derived data if desired
1294+
return;
1295+
1296+
auto leadingTruePion = momentum(trueTracks[0].px(), trueTracks[0].py(), trueTracks[0].pz()) > momentum(trueTracks[1].px(), trueTracks[1].py(), trueTracks[1].pz()) ? trueTracks[0] : trueTracks[1];
1297+
auto subleadingTruePion = (leadingTruePion == trueTracks[0]) ? trueTracks[1] : trueTracks[0];
1298+
auto leadingRecoPion = momentum(recoTracks[0].px(), recoTracks[0].py(), recoTracks[0].pz()) > momentum(recoTracks[1].px(), recoTracks[1].py(), recoTracks[1].pz()) ? recoTracks[0] : recoTracks[1];
1299+
auto subleadingRecoPion = (leadingRecoPion == recoTracks[0]) ? recoTracks[1] : recoTracks[0];
1300+
1301+
resolutionTree(mcCollision.posX(), mcCollision.posY(), mcCollision.posZ(),
1302+
collision.posX(), collision.posY(), collision.posZ(),
1303+
collision.totalFT0AmplitudeA(), collision.totalFT0AmplitudeC(), collision.totalFV0AmplitudeA(), collision.totalFDDAmplitudeA(), collision.totalFDDAmplitudeC(),
1304+
collision.timeFT0A(), collision.timeFT0C(), collision.timeFV0A(), collision.timeFDDA(), collision.timeFDDC(),
1305+
leadingTruePion.pdgCode() / std::abs(leadingTruePion.pdgCode()), pt(leadingTruePion.px(), leadingTruePion.py()), eta(leadingTruePion.px(), leadingTruePion.py(), leadingTruePion.pz()), phi(leadingTruePion.px(), leadingTruePion.py()),
1306+
pt(leadingRecoPion.px(), leadingRecoPion.py()), eta(leadingRecoPion.px(), leadingRecoPion.py(), leadingRecoPion.pz()), phi(leadingRecoPion.px(), leadingRecoPion.py()),
1307+
subleadingTruePion.pdgCode() / std::abs(subleadingTruePion.pdgCode()), pt(subleadingTruePion.px(), subleadingTruePion.py()), eta(subleadingTruePion.px(), subleadingTruePion.py(), subleadingTruePion.pz()), phi(subleadingTruePion.px(), subleadingTruePion.py()),
1308+
pt(subleadingRecoPion.px(), subleadingRecoPion.py()), eta(subleadingRecoPion.px(), subleadingRecoPion.py(), subleadingRecoPion.pz()), phi(subleadingRecoPion.px(), subleadingRecoPion.py()));
1309+
}
1310+
PROCESS_SWITCH(UpcRhoAnalysis, processMcRecoWithTruth, "process MC reco with access to MC truth", false);
1311+
12701312
void processCollisionRecoCheck(aod::UDMcCollision const& /* mcCollision */, soa::SmallGroups<soa::Join<aod::UDMcCollsLabels, aod::UDCollisions>> const& collisions)
12711313
{
12721314
checkNumberOfCollisionReconstructions(collisions);

0 commit comments

Comments
 (0)