3131// / O2Physics
3232#include " Common/Core/trackUtilities.h"
3333#include " Common/DataModel/PIDResponse.h"
34+ #include " Common/DataModel/PIDResponseITS.h"
3435#include " Common/DataModel/TrackSelectionTables.h"
3536#include " PWGLF/DataModel/LFStrangenessTables.h"
3637#include " PWGDQ/DataModel/ReducedInfoTables.h"
@@ -326,7 +327,6 @@ struct TreeWriterTpcV0 {
326327 for (const auto & collision : collisions) {
327328 auto tracks = myTracks.sliceBy (perCollisionTracks, collision.globalIndex ());
328329 auto v0s = myV0s.sliceBy (perCollisionV0s, collision.globalIndex ());
329-
330330 // / Check event slection
331331 if (!isEventSelected (collision, tracks)) {
332332 continue ;
@@ -342,7 +342,6 @@ struct TreeWriterTpcV0 {
342342 for (const auto & v0 : v0s) {
343343 auto posTrack = v0.posTrack_as <Trks>();
344344 auto negTrack = v0.negTrack_as <Trks>();
345-
346345 aod::TracksQA_002::iterator posTrackQA;
347346 aod::TracksQA_002::iterator negTrackQA;
348347 bool existPosTrkQA;
@@ -406,6 +405,9 @@ struct TreeWriterTpcV0 {
406405 }
407406 } // / process with TrackQA
408407 PROCESS_SWITCH (TreeWriterTpcV0, processWithTrQA, " Standard V0 Samples with Track QA for PID" , false );
408+ void processDummy (Colls const & ){}
409+ PROCESS_SWITCH (TreeWriterTpcV0, processDummy, " Dummy function" , false );
410+
409411}; // / struct TreeWriterTpcV0
410412
411413struct TreeWriterTPCTOF {
@@ -547,7 +549,7 @@ struct TreeWriterTPCTOF {
547549 };
548550 // / Function to fill trees
549551 template <typename T, typename TQA, typename C>
550- void fillSkimmedTPCTOFTableWithTrkQA (T const & track, TQA const & trackQA, bool existTrkQA, C const & collision, const float nSigmaTPC, const float nSigmaTOF, const float dEdxExp, const o2::track::PID::ID id, int runnumber, double dwnSmplFactor, double hadronicRate, int bcGlobalIndex, int bcTimeFrameId, int bcBcInTimeFrame)
552+ void fillSkimmedTPCTOFTableWithTrkQA (T const & track, TQA const & trackQA, bool existTrkQA, C const & collision, const float nSigmaTPC, const float nSigmaTOF, const float nSigmaITS, const float dEdxExp, const o2::track::PID::ID id, int runnumber, double dwnSmplFactor, double hadronicRate, int bcGlobalIndex, int bcTimeFrameId, int bcBcInTimeFrame)
551553 {
552554
553555 const double ncl = track.tpcNClsFound ();
@@ -575,6 +577,7 @@ struct TreeWriterTPCTOF {
575577 id,
576578 nSigmaTPC,
577579 nSigmaTOF,
580+ nSigmaITS,
578581 runnumber,
579582 trackocc,
580583 ft0occ,
@@ -675,6 +678,10 @@ struct TreeWriterTPCTOF {
675678 }
676679 for (const auto & collision : collisions) {
677680 auto tracks = myTracks.sliceBy (perCollisionTracks, collision.globalIndex ());
681+ auto tracksWithITSPid = soa::Attach<Trks,
682+ aod::pidits::ITSNSigmaEl, aod::pidits::ITSNSigmaMu, aod::pidits::ITSNSigmaPi,
683+ aod::pidits::ITSNSigmaKa, aod::pidits::ITSNSigmaPr, aod::pidits::ITSNSigmaDe,
684+ aod::pidits::ITSNSigmaTr, aod::pidits::ITSNSigmaHe, aod::pidits::ITSNSigmaAl>(tracks);
678685 // / Check event selection
679686 if (!isEventSelected (collision, tracks)) {
680687 continue ;
@@ -686,7 +693,8 @@ struct TreeWriterTPCTOF {
686693 const int bcTimeFrameId = bc.tfId ();
687694 const int bcBcInTimeFrame = bc.bcInTF ();
688695 rowTPCTOFTreeWithTrkQA.reserve (tracks.size ());
689- for (auto const & trk : tracks) {
696+ // for (auto const& trk : tracks) {
697+ for (auto const & trk : tracksWithITSPid) {
690698 if (!((trackSelection == 0 ) ||
691699 ((trackSelection == 1 ) && trk.isGlobalTrack ()) ||
692700 ((trackSelection == 2 ) && trk.isGlobalTrackWoPtEta ()) ||
@@ -695,6 +703,7 @@ struct TreeWriterTPCTOF {
695703 ((trackSelection == 5 ) && trk.isInAcceptanceTrack ()))) {
696704 continue ;
697705 }
706+
698707 // get the corresponding trackQA using labelTracks2TracKQA and get variables of interest
699708 aod::TracksQA_002::iterator trackQA;
700709 bool existTrkQA;
@@ -707,38 +716,41 @@ struct TreeWriterTPCTOF {
707716 }
708717 // / Fill tree for tritons
709718 if (trk.tpcInnerParam () < maxMomHardCutOnlyTr && trk.tpcInnerParam () <= maxMomTPCOnlyTr && std::abs (trk.tpcNSigmaTr ()) < nSigmaTPCOnlyTr && downsampleTsalisCharged (trk.pt (), downsamplingTsalisProtons, sqrtSNN, o2::track::pid_constants::sMasses [o2::track::PID::Triton])) {
710- fillSkimmedTPCTOFTableWithTrkQA (trk, trackQA, existTrkQA, collision, trk.tpcNSigmaTr (), trk.tofNSigmaTr (), trk.tpcExpSignalTr (trk.tpcSignal ()), o2::track::PID::Triton, runnumber, dwnSmplFactor_Tr, hadronicRate, bcGlobalIndex, bcTimeFrameId, bcBcInTimeFrame);
719+ fillSkimmedTPCTOFTableWithTrkQA (trk, trackQA, existTrkQA, collision, trk.tpcNSigmaTr (), trk.tofNSigmaTr (), trk.itsNSigmaTr (), trk. tpcExpSignalTr (trk.tpcSignal ()), o2::track::PID::Triton, runnumber, dwnSmplFactor_Tr, hadronicRate, bcGlobalIndex, bcTimeFrameId, bcBcInTimeFrame);
711720 } else if (trk.tpcInnerParam () < maxMomHardCutOnlyTr && trk.tpcInnerParam () > maxMomTPCOnlyTr && std::abs (trk.tofNSigmaTr ()) < nSigmaTOF_TPCTOF_Tr && std::abs (trk.tpcNSigmaTr ()) < nSigmaTPC_TPCTOF_Tr && downsampleTsalisCharged (trk.pt (), downsamplingTsalisProtons, sqrtSNN, o2::track::pid_constants::sMasses [o2::track::PID::Triton])) {
712- fillSkimmedTPCTOFTableWithTrkQA (trk, trackQA, existTrkQA, collision, trk.tpcNSigmaTr (), trk.tofNSigmaTr (), trk.tpcExpSignalTr (trk.tpcSignal ()), o2::track::PID::Triton, runnumber, dwnSmplFactor_Tr, hadronicRate, bcGlobalIndex, bcTimeFrameId, bcBcInTimeFrame);
721+ fillSkimmedTPCTOFTableWithTrkQA (trk, trackQA, existTrkQA, collision, trk.tpcNSigmaTr (), trk.tofNSigmaTr (), trk.itsNSigmaTr (), trk. tpcExpSignalTr (trk.tpcSignal ()), o2::track::PID::Triton, runnumber, dwnSmplFactor_Tr, hadronicRate, bcGlobalIndex, bcTimeFrameId, bcBcInTimeFrame);
713722 }
714723 // / Fill tree for deuterons
715724 if (trk.tpcInnerParam () < maxMomHardCutOnlyDe && trk.tpcInnerParam () <= maxMomTPCOnlyDe && std::abs (trk.tpcNSigmaDe ()) < nSigmaTPCOnlyDe && downsampleTsalisCharged (trk.pt (), downsamplingTsalisProtons, sqrtSNN, o2::track::pid_constants::sMasses [o2::track::PID::Deuteron])) {
716- fillSkimmedTPCTOFTableWithTrkQA (trk, trackQA, existTrkQA, collision, trk.tpcNSigmaDe (), trk.tofNSigmaDe (), trk.tpcExpSignalDe (trk.tpcSignal ()), o2::track::PID::Deuteron, runnumber, dwnSmplFactor_De, hadronicRate, bcGlobalIndex, bcTimeFrameId, bcBcInTimeFrame);
725+ fillSkimmedTPCTOFTableWithTrkQA (trk, trackQA, existTrkQA, collision, trk.tpcNSigmaDe (), trk.tofNSigmaDe (), trk.itsNSigmaDe (), trk. tpcExpSignalDe (trk.tpcSignal ()), o2::track::PID::Deuteron, runnumber, dwnSmplFactor_De, hadronicRate, bcGlobalIndex, bcTimeFrameId, bcBcInTimeFrame);
717726 } else if (trk.tpcInnerParam () < maxMomHardCutOnlyDe && trk.tpcInnerParam () > maxMomTPCOnlyDe && std::abs (trk.tofNSigmaDe ()) < nSigmaTOF_TPCTOF_De && std::abs (trk.tpcNSigmaDe ()) < nSigmaTPC_TPCTOF_De && downsampleTsalisCharged (trk.pt (), downsamplingTsalisProtons, sqrtSNN, o2::track::pid_constants::sMasses [o2::track::PID::Deuteron])) {
718- fillSkimmedTPCTOFTableWithTrkQA (trk, trackQA, existTrkQA, collision, trk.tpcNSigmaDe (), trk.tofNSigmaDe (), trk.tpcExpSignalDe (trk.tpcSignal ()), o2::track::PID::Deuteron, runnumber, dwnSmplFactor_De, hadronicRate, bcGlobalIndex, bcTimeFrameId, bcBcInTimeFrame);
727+ fillSkimmedTPCTOFTableWithTrkQA (trk, trackQA, existTrkQA, collision, trk.tpcNSigmaDe (), trk.tofNSigmaDe (), trk.itsNSigmaDe (), trk. tpcExpSignalDe (trk.tpcSignal ()), o2::track::PID::Deuteron, runnumber, dwnSmplFactor_De, hadronicRate, bcGlobalIndex, bcTimeFrameId, bcBcInTimeFrame);
719728 }
720729 // / Fill tree for protons
721730 if (trk.tpcInnerParam () <= maxMomTPCOnlyPr && std::abs (trk.tpcNSigmaPr ()) < nSigmaTPCOnlyPr && downsampleTsalisCharged (trk.pt (), downsamplingTsalisProtons, sqrtSNN, o2::track::pid_constants::sMasses [o2::track::PID::Proton])) {
722- fillSkimmedTPCTOFTableWithTrkQA (trk, trackQA, existTrkQA, collision, trk.tpcNSigmaPr (), trk.tofNSigmaPr (), trk.tpcExpSignalPr (trk.tpcSignal ()), o2::track::PID::Proton, runnumber, dwnSmplFactor_Pr, hadronicRate, bcGlobalIndex, bcTimeFrameId, bcBcInTimeFrame);
731+ fillSkimmedTPCTOFTableWithTrkQA (trk, trackQA, existTrkQA, collision, trk.tpcNSigmaPr (), trk.tofNSigmaPr (), trk.itsNSigmaPr (), trk. tpcExpSignalPr (trk.tpcSignal ()), o2::track::PID::Proton, runnumber, dwnSmplFactor_Pr, hadronicRate, bcGlobalIndex, bcTimeFrameId, bcBcInTimeFrame);
723732 } else if (trk.tpcInnerParam () > maxMomTPCOnlyPr && std::abs (trk.tofNSigmaPr ()) < nSigmaTOF_TPCTOF_Pr && std::abs (trk.tpcNSigmaPr ()) < nSigmaTPC_TPCTOF_Pr && downsampleTsalisCharged (trk.pt (), downsamplingTsalisProtons, sqrtSNN, o2::track::pid_constants::sMasses [o2::track::PID::Proton])) {
724- fillSkimmedTPCTOFTableWithTrkQA (trk, trackQA, existTrkQA, collision, trk.tpcNSigmaPr (), trk.tofNSigmaPr (), trk.tpcExpSignalPr (trk.tpcSignal ()), o2::track::PID::Proton, runnumber, dwnSmplFactor_Pr, hadronicRate, bcGlobalIndex, bcTimeFrameId, bcBcInTimeFrame);
733+ fillSkimmedTPCTOFTableWithTrkQA (trk, trackQA, existTrkQA, collision, trk.tpcNSigmaPr (), trk.tofNSigmaPr (), trk.itsNSigmaPr (), trk. tpcExpSignalPr (trk.tpcSignal ()), o2::track::PID::Proton, runnumber, dwnSmplFactor_Pr, hadronicRate, bcGlobalIndex, bcTimeFrameId, bcBcInTimeFrame);
725734 }
726735 // / Fill tree for kaons
727736 if (trk.tpcInnerParam () < maxMomHardCutOnlyKa && trk.tpcInnerParam () <= maxMomTPCOnlyKa && std::abs (trk.tpcNSigmaKa ()) < nSigmaTPCOnlyKa && downsampleTsalisCharged (trk.pt (), downsamplingTsalisKaons, sqrtSNN, o2::track::pid_constants::sMasses [o2::track::PID::Kaon])) {
728- fillSkimmedTPCTOFTableWithTrkQA (trk, trackQA, existTrkQA, collision, trk.tpcNSigmaKa (), trk.tofNSigmaKa (), trk.tpcExpSignalKa (trk.tpcSignal ()), o2::track::PID::Kaon, runnumber, dwnSmplFactor_Ka, hadronicRate, bcGlobalIndex, bcTimeFrameId, bcBcInTimeFrame);
737+ fillSkimmedTPCTOFTableWithTrkQA (trk, trackQA, existTrkQA, collision, trk.tpcNSigmaKa (), trk.tofNSigmaKa (), trk.itsNSigmaKa (), trk. tpcExpSignalKa (trk.tpcSignal ()), o2::track::PID::Kaon, runnumber, dwnSmplFactor_Ka, hadronicRate, bcGlobalIndex, bcTimeFrameId, bcBcInTimeFrame);
729738 } else if (trk.tpcInnerParam () < maxMomHardCutOnlyKa && trk.tpcInnerParam () > maxMomTPCOnlyKa && std::abs (trk.tofNSigmaKa ()) < nSigmaTOF_TPCTOF_Ka && std::abs (trk.tpcNSigmaKa ()) < nSigmaTPC_TPCTOF_Ka && downsampleTsalisCharged (trk.pt (), downsamplingTsalisKaons, sqrtSNN, o2::track::pid_constants::sMasses [o2::track::PID::Kaon])) {
730- fillSkimmedTPCTOFTableWithTrkQA (trk, trackQA, existTrkQA, collision, trk.tpcNSigmaKa (), trk.tofNSigmaKa (), trk.tpcExpSignalKa (trk.tpcSignal ()), o2::track::PID::Kaon, runnumber, dwnSmplFactor_Ka, hadronicRate, bcGlobalIndex, bcTimeFrameId, bcBcInTimeFrame);
739+ fillSkimmedTPCTOFTableWithTrkQA (trk, trackQA, existTrkQA, collision, trk.tpcNSigmaKa (), trk.tofNSigmaKa (), trk.itsNSigmaKa (), trk. tpcExpSignalKa (trk.tpcSignal ()), o2::track::PID::Kaon, runnumber, dwnSmplFactor_Ka, hadronicRate, bcGlobalIndex, bcTimeFrameId, bcBcInTimeFrame);
731740 }
732741 // / Fill tree pions
733742 if (trk.tpcInnerParam () <= maxMomTPCOnlyPi && std::abs (trk.tpcNSigmaPi ()) < nSigmaTPCOnlyPi && downsampleTsalisCharged (trk.pt (), downsamplingTsalisPions, sqrtSNN, o2::track::pid_constants::sMasses [o2::track::PID::Pion])) {
734- fillSkimmedTPCTOFTableWithTrkQA (trk, trackQA, existTrkQA, collision, trk.tpcNSigmaPi (), trk.tofNSigmaPi (), trk.tpcExpSignalPi (trk.tpcSignal ()), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi, hadronicRate, bcGlobalIndex, bcTimeFrameId, bcBcInTimeFrame);
743+ fillSkimmedTPCTOFTableWithTrkQA (trk, trackQA, existTrkQA, collision, trk.tpcNSigmaPi (), trk.tofNSigmaPi (), trk.itsNSigmaPi (), trk. tpcExpSignalPi (trk.tpcSignal ()), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi, hadronicRate, bcGlobalIndex, bcTimeFrameId, bcBcInTimeFrame);
735744 } else if (trk.tpcInnerParam () > maxMomTPCOnlyPi && std::abs (trk.tofNSigmaPi ()) < nSigmaTOF_TPCTOF_Pi && std::abs (trk.tpcNSigmaPi ()) < nSigmaTPC_TPCTOF_Pi && downsampleTsalisCharged (trk.pt (), downsamplingTsalisPions, sqrtSNN, o2::track::pid_constants::sMasses [o2::track::PID::Pion])) {
736- fillSkimmedTPCTOFTableWithTrkQA (trk, trackQA, existTrkQA, collision, trk.tpcNSigmaPi (), trk.tofNSigmaPi (), trk.tpcExpSignalPi (trk.tpcSignal ()), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi, hadronicRate, bcGlobalIndex, bcTimeFrameId, bcBcInTimeFrame);
745+ fillSkimmedTPCTOFTableWithTrkQA (trk, trackQA, existTrkQA, collision, trk.tpcNSigmaPi (), trk.tofNSigmaPi (), trk.itsNSigmaPi (), trk. tpcExpSignalPi (trk.tpcSignal ()), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi, hadronicRate, bcGlobalIndex, bcTimeFrameId, bcBcInTimeFrame);
737746 }
738747 } // / Loop tracks
739748 }
740749 } // / process
741750 PROCESS_SWITCH (TreeWriterTPCTOF, processWithTrQA, " Samples for PID with TrackQA info" , false );
751+ void processDummy (Colls const & ){}
752+ PROCESS_SWITCH (TreeWriterTPCTOF, processDummy, " Dummy function" , false );
753+
742754}; // / struct TreeWriterTPCTOF
743755WorkflowSpec defineDataProcessing (ConfigContext const & cfgc)
744756{
0 commit comments