@@ -425,6 +425,11 @@ struct tofSpectra {
425425 histos.add (hpt_den_prm[i].data (), pTCharge[i], kTH1D , {ptAxis});
426426 histos.add (hpt_den_str[i].data (), pTCharge[i], kTH1D , {ptAxis});
427427 histos.add (hpt_den_mat[i].data (), pTCharge[i], kTH1D , {ptAxis});
428+ histos.add (hpt_den_prm_recoev[i].data (), pTCharge[i], kTH1D , {ptAxis});
429+ histos.add (hpt_den_prm_evsel[i].data (), pTCharge[i], kTH1D , {ptAxis});
430+ histos.add (hpt_den_prm_goodev[i].data (), pTCharge[i], kTH1D , {ptAxis});
431+ histos.add (hpt_den_prm_mcgoodev[i].data (), pTCharge[i], kTH1D , {ptAxis});
432+ histos.add (hpt_den_prm_mcbadev[i].data (), pTCharge[i], kTH1D , {ptAxis});
428433
429434 histos.add (hdcaxyprm[i].data (), pTCharge[i], kTH2D , {ptAxis, dcaXyAxis});
430435 histos.add (hdcazprm[i].data (), pTCharge[i], kTH2D , {ptAxis, dcaZAxis});
@@ -1135,6 +1140,160 @@ struct tofSpectra {
11351140 }
11361141 }
11371142
1143+ template <std::size_t i, typename ParticleType>
1144+ void fillParticleHistograms_MCRecoEvs (ParticleType const & mcParticle, CollisionCandidateMC::iterator const & collision)
1145+ {
1146+
1147+ switch (i) {
1148+ case 0 :
1149+ case Np:
1150+ if (doprocessFullEl == false && doprocessLfFullEl == false ) {
1151+ return ;
1152+ }
1153+ break ;
1154+ case 1 :
1155+ case Np + 1 :
1156+ if (doprocessFullMu == false && doprocessLfFullMu == false ) {
1157+ return ;
1158+ }
1159+ break ;
1160+ case 2 :
1161+ case Np + 2 :
1162+ if (doprocessFullPi == false && doprocessLfFullPi == false ) {
1163+ return ;
1164+ }
1165+ break ;
1166+ case 3 :
1167+ case Np + 3 :
1168+ if (doprocessFullKa == false && doprocessLfFullKa == false ) {
1169+ return ;
1170+ }
1171+ break ;
1172+ case 4 :
1173+ case Np + 4 :
1174+ if (doprocessFullPr == false && doprocessLfFullPr == false ) {
1175+ return ;
1176+ }
1177+ break ;
1178+ case 5 :
1179+ case Np + 5 :
1180+ if (doprocessFullDe == false && doprocessLfFullDe == false ) {
1181+ return ;
1182+ }
1183+ break ;
1184+ case 6 :
1185+ case Np + 6 :
1186+ if (doprocessFullTr == false && doprocessLfFullTr == false ) {
1187+ return ;
1188+ }
1189+ break ;
1190+ case 7 :
1191+ case Np + 7 :
1192+ if (doprocessFullHe == false && doprocessLfFullHe == false ) {
1193+ return ;
1194+ }
1195+ break ;
1196+ case 8 :
1197+ case Np + 8 :
1198+ if (doprocessFullAl == false && doprocessLfFullAl == false ) {
1199+ return ;
1200+ }
1201+ break ;
1202+ }
1203+
1204+ if (mcParticle.pdgCode () != PDGs[i]) {
1205+ return ;
1206+ }
1207+
1208+ if (mcParticle.isPhysicalPrimary ()) {
1209+ if (collision.sel8 ()) {
1210+ if (abs (collision.posZ ()) < cfgCutVertex) {
1211+ histos.fill (HIST (hpt_den_prm_goodev[i]), mcParticle.pt ());
1212+ } else {
1213+ histos.fill (HIST (hpt_den_prm_evsel[i]), mcParticle.pt ());
1214+ }
1215+ } else {
1216+ histos.fill (HIST (hpt_den_prm_recoev[i]), mcParticle.pt ());
1217+ }
1218+ }
1219+ }
1220+
1221+ template <std::size_t i, typename ParticleType>
1222+ void fillParticleHistograms_MCGenEvs (ParticleType const & mcParticle, aod::McCollision const & mcCollision)
1223+ {
1224+
1225+ switch (i) {
1226+ case 0 :
1227+ case Np:
1228+ if (doprocessFullEl == false && doprocessLfFullEl == false ) {
1229+ return ;
1230+ }
1231+ break ;
1232+ case 1 :
1233+ case Np + 1 :
1234+ if (doprocessFullMu == false && doprocessLfFullMu == false ) {
1235+ return ;
1236+ }
1237+ break ;
1238+ case 2 :
1239+ case Np + 2 :
1240+ if (doprocessFullPi == false && doprocessLfFullPi == false ) {
1241+ return ;
1242+ }
1243+ break ;
1244+ case 3 :
1245+ case Np + 3 :
1246+ if (doprocessFullKa == false && doprocessLfFullKa == false ) {
1247+ return ;
1248+ }
1249+ break ;
1250+ case 4 :
1251+ case Np + 4 :
1252+ if (doprocessFullPr == false && doprocessLfFullPr == false ) {
1253+ return ;
1254+ }
1255+ break ;
1256+ case 5 :
1257+ case Np + 5 :
1258+ if (doprocessFullDe == false && doprocessLfFullDe == false ) {
1259+ return ;
1260+ }
1261+ break ;
1262+ case 6 :
1263+ case Np + 6 :
1264+ if (doprocessFullTr == false && doprocessLfFullTr == false ) {
1265+ return ;
1266+ }
1267+ break ;
1268+ case 7 :
1269+ case Np + 7 :
1270+ if (doprocessFullHe == false && doprocessLfFullHe == false ) {
1271+ return ;
1272+ }
1273+ break ;
1274+ case 8 :
1275+ case Np + 8 :
1276+ if (doprocessFullAl == false && doprocessLfFullAl == false ) {
1277+ return ;
1278+ }
1279+ break ;
1280+ }
1281+
1282+ if (mcParticle.pdgCode () != PDGs[i]) {
1283+ return ;
1284+ }
1285+
1286+ if (mcParticle.isPhysicalPrimary ()) {
1287+ if (abs (mcCollision.posZ ()) < cfgCutVertex) {
1288+ histos.fill (HIST (hpt_den_prm_mcgoodev[i]), mcParticle.pt ());
1289+ } else {
1290+ histos.fill (HIST (hpt_den_prm_mcbadev[i]), mcParticle.pt ());
1291+ }
1292+ }
1293+ }
1294+
1295+ Preslice<aod::McParticles> perMCCol = aod::mcparticle::mcCollisionId;
1296+ SliceCache cache;
11381297 void processMC (soa::Join<aod::Tracks, aod::TracksExtra,
11391298 aod::TracksDCA, aod::McTrackLabels,
11401299 aod::pidTOFFullPi, aod::pidTOFFullKa, aod::pidTOFFullPr,
@@ -1147,7 +1306,7 @@ struct tofSpectra {
11471306 histos.fill (HIST (" MC/GenRecoCollisions" ), 0.5 , mcCollisions.size ());
11481307 histos.fill (HIST (" MC/GenRecoCollisions" ), 1.5 , collisions.size ());
11491308 // LOGF(info, "Enter processMC!");
1150- for (auto & track : tracks) {
1309+ for (const auto & track : tracks) {
11511310 if (!track.has_collision ()) {
11521311 if (track.sign () > 0 ) {
11531312 histos.fill (HIST (" MC/no_collision/pos" ), track.pt ());
@@ -1174,20 +1333,46 @@ struct tofSpectra {
11741333 });
11751334 }
11761335
1177- for (auto & mcParticle : mcParticles) {
1336+ for (const auto & mcParticle : mcParticles) {
11781337 // if (std::abs(mcParticle.eta()) > cfgCutEta) {
11791338 // continue;
11801339 // }
11811340 if (std::abs (mcParticle.y ()) > cfgCutY) {
11821341 continue ;
11831342 }
1184- if (!mcParticle.isPhysicalPrimary ()) {
1185- continue ;
1186- }
11871343 static_for<0 , 17 >([&](auto i) {
11881344 fillParticleHistograms_MC<i>(mcParticle);
11891345 });
11901346 }
1347+
1348+ // Loop on reconstructed collisions
1349+ for (const auto & collision : collisions) {
1350+ if (!collision.has_mcCollision ()) {
1351+ continue ;
1352+ }
1353+ const auto & particlesInCollision = mcParticles.sliceByCached (aod::mcparticle::mcCollisionId, collision.mcCollision ().globalIndex (), cache);
1354+ for (const auto & mcParticle : particlesInCollision) {
1355+ if (std::abs (mcParticle.y ()) > cfgCutY) {
1356+ continue ;
1357+ }
1358+ static_for<0 , 17 >([&](auto i) {
1359+ fillParticleHistograms_MCRecoEvs<i>(mcParticle, collision);
1360+ });
1361+ }
1362+ }
1363+
1364+ // Loop on generated collisions
1365+ for (const auto & mcCollision : mcCollisions) {
1366+ const auto & particlesInCollision = mcParticles.sliceByCached (aod::mcparticle::mcCollisionId, mcCollision.globalIndex (), cache);
1367+ for (const auto & mcParticle : particlesInCollision) {
1368+ if (std::abs (mcParticle.y ()) > cfgCutY) {
1369+ continue ;
1370+ }
1371+ static_for<0 , 17 >([&](auto i) {
1372+ fillParticleHistograms_MCGenEvs<i>(mcParticle, mcCollision);
1373+ });
1374+ }
1375+ }
11911376 }
11921377 PROCESS_SWITCH (tofSpectra, processMC, " Process MC" , false );
11931378
0 commit comments