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], pTCharge[i], kTH1D , {ptAxis});
530+ histos.add (hpt_mism_tpc_prm[i], pTCharge[i], kTH1D , {ptAxis});
531+ histos.add (hpt_mism_trd_prm[i], pTCharge[i], kTH1D , {ptAxis});
532+ histos.add (hpt_mism_tof_prm[i], pTCharge[i], kTH1D , {ptAxis});
519533 }
520534 }
521535 // Print output histograms statistics
@@ -1017,6 +1031,45 @@ 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+ }
1072+
10201073 using CollisionCandidate = soa::Join<aod::Collisions, aod::EvSels, aod::TPCMults, aod::PVMults, aod::MultZeqs, aod::CentFV0As, aod::CentFT0Ms, aod::CentFT0As, aod::CentFT0Cs>;
10211074 using TrackCandidates = soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksDCA,
10221075 aod::pidEvTimeFlags, aod::TrackSelection, aod::TOFSignal>;
@@ -1295,6 +1348,20 @@ struct tofSpectra {
12951348 histos.fill (HIST (hpt_numtof_prm[i]), track.pt ());
12961349 }
12971350 }
1351+
1352+ // Filling mismatched info for primary tracks
1353+ if (isMismatchedTrack (track, 0 )) {
1354+ histos.fill (HIST (hpt_mism_its_prm[i]), track.pt ());
1355+ }
1356+ if (isMismatchedTrack (track, 1 )) {
1357+ histos.fill (HIST (hpt_mism_tpc_prm[i]), track.pt ());
1358+ }
1359+ if (isMismatchedTrack (track, 2 )) {
1360+ histos.fill (HIST (hpt_mism_trd_prm[i]), track.pt ());
1361+ }
1362+ if (isMismatchedTrack (track, 3 )) {
1363+ histos.fill (HIST (hpt_mism_tof_prm[i]), track.pt ());
1364+ }
12981365 }
12991366 }
13001367
@@ -1363,7 +1430,7 @@ struct tofSpectra {
13631430 return ;
13641431 }
13651432
1366- const float multiplicity = collision. centFT0C ( );
1433+ const float multiplicity = getMultiplicity (collision );
13671434 if (!mcParticle.isPhysicalPrimary ()) {
13681435 if (mcParticle.getProcess () == 4 ) {
13691436 if (makeTHnSparseChoice) {
@@ -1452,15 +1519,29 @@ struct tofSpectra {
14521519 return ;
14531520 }
14541521
1522+ const float multiplicity = getMultiplicity (collision);
1523+
14551524 if (mcParticle.isPhysicalPrimary ()) {
14561525 if (collision.sel8 ()) {
14571526 if (abs (collision.posZ ()) < cfgCutVertex) {
1458- histos.fill (HIST (hpt_den_prm_goodev[i]), mcParticle.pt ());
1527+ if (makeTHnSparseChoice) {
1528+ histos.fill (HIST (hpt_den_prm_goodev[i]), mcParticle.pt (), multiplicity, mcParticle.eta ());
1529+ } else {
1530+ histos.fill (HIST (hpt_den_prm_goodev[i]), mcParticle.pt ());
1531+ }
14591532 } else {
1460- histos.fill (HIST (hpt_den_prm_evsel[i]), mcParticle.pt ());
1533+ if (makeTHnSparseChoice) {
1534+ histos.fill (HIST (hpt_den_prm_evsel[i]), mcParticle.pt (), multiplicity, mcParticle.eta ());
1535+ } else {
1536+ histos.fill (HIST (hpt_den_prm_evsel[i]), mcParticle.pt ());
1537+ }
14611538 }
14621539 } else {
1463- histos.fill (HIST (hpt_den_prm_recoev[i]), mcParticle.pt ());
1540+ if (makeTHnSparseChoice) {
1541+ histos.fill (HIST (hpt_den_prm_recoev[i]), mcParticle.pt (), multiplicity, mcParticle.eta ());
1542+ } else {
1543+ histos.fill (HIST (hpt_den_prm_recoev[i]), mcParticle.pt ());
1544+ }
14641545 }
14651546 }
14661547 }
@@ -1565,6 +1646,9 @@ struct tofSpectra {
15651646 if (!track.collision_as <CollisionCandidateMC>().sel8 ()) {
15661647 continue ;
15671648 }
1649+ if (removeTFBorder && !track.collision_as <CollisionCandidateMC>().selection_bit (aod::evsel::kNoTimeFrameBorder )) {
1650+ continue ;
1651+ }
15681652 if (!passesCutWoDCA (track)) {
15691653 continue ;
15701654 }
0 commit comments