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,7 @@ 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 : tracksWithITSPid ) {
690697 if (!((trackSelection == 0 ) ||
691698 ((trackSelection == 1 ) && trk.isGlobalTrack ()) ||
692699 ((trackSelection == 2 ) && trk.isGlobalTrackWoPtEta ()) ||
@@ -707,38 +714,41 @@ struct TreeWriterTPCTOF {
707714 }
708715 // / Fill tree for tritons
709716 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);
717+ 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);
711718 } 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);
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);
713720 }
714721 // / Fill tree for deuterons
715722 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);
723+ 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);
717724 } 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);
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);
719726 }
720727 // / Fill tree for protons
721728 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);
729+ 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);
723730 } 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);
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);
725732 }
726733 // / Fill tree for kaons
727734 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);
735+ 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);
729736 } 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);
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);
731738 }
732739 // / Fill tree pions
733740 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);
741+ 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);
735742 } 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);
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);
737744 }
738745 } // / Loop tracks
739746 }
740747 } // / process
741748 PROCESS_SWITCH (TreeWriterTPCTOF, processWithTrQA, " Samples for PID with TrackQA info" , false );
749+ void processDummy (Colls const &) {}
750+ PROCESS_SWITCH (TreeWriterTPCTOF, processDummy, " Dummy function" , false );
751+
742752}; // / struct TreeWriterTPCTOF
743753WorkflowSpec defineDataProcessing (ConfigContext const & cfgc)
744754{
0 commit comments