2727#include " Common/DataModel/EventSelection.h"
2828#include " Common/DataModel/Centrality.h"
2929#include " Common/DataModel/Multiplicity.h"
30+ #include " Common/DataModel/McCollisionExtra.h"
3031#include " Common/Core/TrackSelection.h"
3132#include " Framework/StaticFor.h"
3233#include " Common/Core/TrackSelectionDefaults.h"
@@ -487,24 +488,31 @@ struct tofSpectra {
487488 histos.add (hpt_den_str[i].data (), pTCharge[i], kTHnSparseD , {ptAxis, multAxis, etaAxis});
488489 histos.add (hpt_den_mat[i].data (), pTCharge[i], kTHnSparseD , {ptAxis, multAxis, etaAxis});
489490
491+ histos.add (hpt_den_prm_recoev[i].data (), pTCharge[i], kTHnSparseD , {ptAxis, multAxis, etaAxis});
492+ histos.add (hpt_den_prm_evsel[i].data (), pTCharge[i], kTHnSparseD , {ptAxis, multAxis, etaAxis});
493+ histos.add (hpt_den_prm_goodev[i].data (), pTCharge[i], kTHnSparseD , {ptAxis, multAxis, etaAxis});
494+ histos.add (hpt_den_prm_mcgoodev[i].data (), pTCharge[i], kTHnSparseD , {ptAxis, multAxis, etaAxis});
495+ histos.add (hpt_den_prm_mcbadev[i].data (), pTCharge[i], kTHnSparseD , {ptAxis, multAxis, etaAxis});
490496 // ***************************************************************************************
491497 } else {
492498 histos.add (hpt_num_prm[i].data (), pTCharge[i], kTH1D , {ptAxis});
499+ histos.add (hpt_num_str[i].data (), pTCharge[i], kTH1D , {ptAxis});
500+ histos.add (hpt_num_mat[i].data (), pTCharge[i], kTH1D , {ptAxis});
501+
493502 histos.add (hpt_numtof_prm[i].data (), pTCharge[i], kTH1D , {ptAxis});
494503 histos.add (hpt_numtof_str[i].data (), pTCharge[i], kTH1D , {ptAxis});
495504 histos.add (hpt_numtof_mat[i].data (), pTCharge[i], kTH1D , {ptAxis});
496- histos.add (hpt_num_str[i].data (), pTCharge[i], kTH1D , {ptAxis});
497- histos.add (hpt_num_mat[i].data (), pTCharge[i], kTH1D , {ptAxis});
505+
498506 histos.add (hpt_den_prm[i].data (), pTCharge[i], kTH1D , {ptAxis});
499507 histos.add (hpt_den_str[i].data (), pTCharge[i], kTH1D , {ptAxis});
500508 histos.add (hpt_den_mat[i].data (), pTCharge[i], kTH1D , {ptAxis});
501- }
502509
503- histos.add (hpt_den_prm_recoev[i].data (), pTCharge[i], kTH1D , {ptAxis});
504- histos.add (hpt_den_prm_evsel[i].data (), pTCharge[i], kTH1D , {ptAxis});
505- histos.add (hpt_den_prm_goodev[i].data (), pTCharge[i], kTH1D , {ptAxis});
506- histos.add (hpt_den_prm_mcgoodev[i].data (), pTCharge[i], kTH1D , {ptAxis});
507- histos.add (hpt_den_prm_mcbadev[i].data (), pTCharge[i], kTH1D , {ptAxis});
510+ histos.add (hpt_den_prm_recoev[i].data (), pTCharge[i], kTH1D , {ptAxis});
511+ histos.add (hpt_den_prm_evsel[i].data (), pTCharge[i], kTH1D , {ptAxis});
512+ histos.add (hpt_den_prm_goodev[i].data (), pTCharge[i], kTH1D , {ptAxis});
513+ histos.add (hpt_den_prm_mcgoodev[i].data (), pTCharge[i], kTH1D , {ptAxis});
514+ histos.add (hpt_den_prm_mcbadev[i].data (), pTCharge[i], kTH1D , {ptAxis});
515+ }
508516
509517 histos.add (hdcaxyprm[i].data (), pTCharge[i], kTH2D , {ptAxis, dcaXyAxis});
510518 histos.add (hdcazprm[i].data (), pTCharge[i], kTH2D , {ptAxis, dcaZAxis});
@@ -516,6 +524,12 @@ struct tofSpectra {
516524 histos.add (hdcaxyprmgoodevs[i].data (), pTCharge[i], kTH2D , {ptAxis, dcaXyAxis});
517525 histos.add (hdcazprmgoodevs[i].data (), pTCharge[i], kTH2D , {ptAxis, dcaZAxis});
518526 }
527+
528+ // Mismatched info
529+ histos.add (hpt_mism_its_prm[i].data (), pTCharge[i], kTH1D , {ptAxis});
530+ histos.add (hpt_mism_tpc_prm[i].data (), pTCharge[i], kTH1D , {ptAxis});
531+ histos.add (hpt_mism_trd_prm[i].data (), pTCharge[i], kTH1D , {ptAxis});
532+ histos.add (hpt_mism_tof_prm[i].data (), pTCharge[i], kTH1D , {ptAxis});
519533 }
520534 }
521535 // Print output histograms statistics
@@ -1017,6 +1031,46 @@ struct tofSpectra {
10171031 return true ;
10181032 }
10191033
1034+ template <typename ParticleType>
1035+ bool isMismatchedTrack (const ParticleType& track, const int detector)
1036+ {
1037+ switch (detector) {
1038+ case 0 : // ITS
1039+ for (int i = 0 ; i < 7 ; i++) {
1040+ if (track.mcMask () & 1 << i) {
1041+ return true ;
1042+ }
1043+ }
1044+ return false ;
1045+ break ;
1046+ case 1 : // TPC
1047+ for (int i = 7 ; i < 10 ; i++) {
1048+ if (track.mcMask () & 1 << i) {
1049+ return true ;
1050+ }
1051+ }
1052+ break ;
1053+ case 2 : // TRD
1054+ if (track.mcMask () & 1 << 10 ) {
1055+ return true ;
1056+ }
1057+ return false ;
1058+ break ;
1059+ case 3 : // TOF
1060+ if (track.mcMask () & 1 << 11 ) {
1061+ return true ;
1062+ }
1063+ return false ;
1064+ break ;
1065+ default : // All
1066+ if (track.mcMask () & 1 << 15 ) {
1067+ return true ;
1068+ }
1069+ return false ;
1070+ }
1071+ return false ;
1072+ }
1073+
10201074 using CollisionCandidate = soa::Join<aod::Collisions, aod::EvSels, aod::TPCMults, aod::PVMults, aod::MultZeqs, aod::CentFV0As, aod::CentFT0Ms, aod::CentFT0As, aod::CentFT0Cs>;
10211075 using TrackCandidates = soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksDCA,
10221076 aod::pidEvTimeFlags, aod::TrackSelection, aod::TOFSignal>;
@@ -1295,6 +1349,20 @@ struct tofSpectra {
12951349 histos.fill (HIST (hpt_numtof_prm[i]), track.pt ());
12961350 }
12971351 }
1352+
1353+ // Filling mismatched info for primary tracks
1354+ if (isMismatchedTrack (track, 0 )) {
1355+ histos.fill (HIST (hpt_mism_its_prm[i]), track.pt ());
1356+ }
1357+ if (isMismatchedTrack (track, 1 )) {
1358+ histos.fill (HIST (hpt_mism_tpc_prm[i]), track.pt ());
1359+ }
1360+ if (isMismatchedTrack (track, 2 )) {
1361+ histos.fill (HIST (hpt_mism_trd_prm[i]), track.pt ());
1362+ }
1363+ if (isMismatchedTrack (track, 3 )) {
1364+ histos.fill (HIST (hpt_mism_tof_prm[i]), track.pt ());
1365+ }
12981366 }
12991367 }
13001368
@@ -1363,7 +1431,7 @@ struct tofSpectra {
13631431 return ;
13641432 }
13651433
1366- const float multiplicity = collision. centFT0C ( );
1434+ const float multiplicity = getMultiplicity (collision );
13671435 if (!mcParticle.isPhysicalPrimary ()) {
13681436 if (mcParticle.getProcess () == 4 ) {
13691437 if (makeTHnSparseChoice) {
@@ -1452,15 +1520,29 @@ struct tofSpectra {
14521520 return ;
14531521 }
14541522
1523+ const float multiplicity = getMultiplicity (collision);
1524+
14551525 if (mcParticle.isPhysicalPrimary ()) {
14561526 if (collision.sel8 ()) {
14571527 if (abs (collision.posZ ()) < cfgCutVertex) {
1458- histos.fill (HIST (hpt_den_prm_goodev[i]), mcParticle.pt ());
1528+ if (makeTHnSparseChoice) {
1529+ histos.fill (HIST (hpt_den_prm_goodev[i]), mcParticle.pt (), multiplicity, mcParticle.eta ());
1530+ } else {
1531+ histos.fill (HIST (hpt_den_prm_goodev[i]), mcParticle.pt ());
1532+ }
14591533 } else {
1460- histos.fill (HIST (hpt_den_prm_evsel[i]), mcParticle.pt ());
1534+ if (makeTHnSparseChoice) {
1535+ histos.fill (HIST (hpt_den_prm_evsel[i]), mcParticle.pt (), multiplicity, mcParticle.eta ());
1536+ } else {
1537+ histos.fill (HIST (hpt_den_prm_evsel[i]), mcParticle.pt ());
1538+ }
14611539 }
14621540 } else {
1463- histos.fill (HIST (hpt_den_prm_recoev[i]), mcParticle.pt ());
1541+ if (makeTHnSparseChoice) {
1542+ histos.fill (HIST (hpt_den_prm_recoev[i]), mcParticle.pt (), multiplicity, mcParticle.eta ());
1543+ } else {
1544+ histos.fill (HIST (hpt_den_prm_recoev[i]), mcParticle.pt ());
1545+ }
14641546 }
14651547 }
14661548 }
@@ -1565,6 +1647,9 @@ struct tofSpectra {
15651647 if (!track.collision_as <CollisionCandidateMC>().sel8 ()) {
15661648 continue ;
15671649 }
1650+ if (removeTFBorder && !track.collision_as <CollisionCandidateMC>().selection_bit (aod::evsel::kNoTimeFrameBorder )) {
1651+ continue ;
1652+ }
15681653 if (!passesCutWoDCA (track)) {
15691654 continue ;
15701655 }
0 commit comments