@@ -140,11 +140,13 @@ struct TreeWriterTpcV0 {
140140 TRandom3* fRndm = new TRandom3(0 );
141141
142142 using Trks = soa::Join<aod::Tracks, aod::V0Bits, aod::TracksExtra, aod::pidTPCFullEl, aod::pidTPCFullPi, aod::pidTPCFullKa, aod::pidTPCFullPr, aod::pidTOFFullEl, aod::pidTOFFullPi, aod::pidTOFFullKa, aod::pidTOFFullPr, aod::TrackSelection>;
143- using TrksWithDEdxCorrection = soa::Join<aod::Tracks, aod::V0Bits, aod::TracksExtra, aod::pidTPCFullEl, aod::pidTPCFullPi, aod::pidTPCFullKa, aod::pidTPCFullPr, aod::pidTOFFullEl, aod::pidTOFFullPi, aod::pidTOFFullKa, aod::pidTOFFullPr, aod::TrackSelection , aod::DEdxsCorrected>;
143+ using TrksWithDEdxCorrection = soa::Join<Trks , aod::DEdxsCorrected>;
144144 using Colls = soa::Join<aod::Collisions, aod::Mults, aod::EvSels>;
145145 using MyBCTable = soa::Join<aod::BCsWithTimestamps, aod::BCTFinfoTable>;
146146 using V0sWithID = soa::Join<aod::V0Datas, aod::V0MapID, aod::V0TOFNSigmas>;
147147 using CascsWithID = soa::Join<aod::CascDatas, aod::CascMapID, aod::CascTOFNSigmas>;
148+ using TrksTmo = soa::Join<Trks, aod::TrackToTmo>;
149+ using TrksTmoWithDEdxCorrection = soa::Join<Trks, aod::DEdxsCorrected, aod::TrackToTmo>;
148150
149151 Preslice<V0sWithID> perCollisionV0s = aod::v0data::collisionId;
150152 Preslice<CascsWithID> perCollisionCascs = aod::cascdata::collisionId;
@@ -233,7 +235,7 @@ struct TreeWriterTpcV0 {
233235 }
234236
235237 template <bool DoUseCorrectedDeDx, int ModeId, typename T, typename C, typename V0Casc>
236- void fillSkimmedV0Table (V0Casc const & v0casc, T const & track, aod::TracksQA const & trackQA, const bool existTrkQA, C const & collision, const float nSigmaTPC, const float nSigmaTOF, const float nSigmaITS, const float dEdxExp, const o2::track::PID::ID id, const int runnumber, const double dwnSmplFactor, const float hadronicRate, const int bcGlobalIndex, const int bcTimeFrameId, const int bcBcInTimeFrame)
238+ void fillSkimmedV0Table (V0Casc const & v0casc, T const & track, aod::TracksQA const & trackQA, const bool existTrkQA, C const & collision, const float nSigmaTPC, const float nSigmaTOF, const float nSigmaITS, const float dEdxExp, const o2::track::PID::ID id, const int runnumber, const double dwnSmplFactor, const float hadronicRate, const int bcGlobalIndex, const int bcTimeFrameId, const int bcBcInTimeFrame, const occupancyValues& occValues )
237239 {
238240 const double ncl = track.tpcNClsFound ();
239241 const double nclPID = track.tpcNClsFindableMinusPID ();
@@ -356,6 +358,16 @@ struct TreeWriterTpcV0 {
356358 existTrkQA ? trackQA.tpcdEdxTot1R () : UndefValueInt,
357359 existTrkQA ? trackQA.tpcdEdxTot2R () : UndefValueInt,
358360 existTrkQA ? trackQA.tpcdEdxTot3R () : UndefValueInt,
361+ occValues.tmoPrimUnfm80 ,
362+ occValues.tmoFV0AUnfm80 ,
363+ occValues.tmoFT0AUnfm80 ,
364+ occValues.tmoFT0CUnfm80 ,
365+ occValues.tmoRT0V0PrimUnfm80 ,
366+ occValues.twmoPrimUnfm80 ,
367+ occValues.twmoFV0AUnfm80 ,
368+ occValues.twmoFT0AUnfm80 ,
369+ occValues.twmoFT0CUnfm80 ,
370+ occValues.twmoRT0V0PrimUnfm80 ,
359371 existTrkQA ? trackQA.tpcdEdxNorm () : UndefValueFloat);
360372 }
361373 }
@@ -436,7 +448,11 @@ struct TreeWriterTpcV0 {
436448 const bool passNSigmaTofCut = std::fabs (daughter.tofNSigma ) < daughter.nSigmaTofDauTrack || std::fabs (daughter.tofNSigma - NSigmaTofUnmatched) < NSigmaTofUnmatchedEqualityTolerance;
437449 const bool passMatchTofRequirement = !daughter.rejectNoTofDauTrack || std::fabs (daughter.tofNSigma - NSigmaTofUnmatched) > NSigmaTofUnmatchedEqualityTolerance;
438450 if (passTrackSelection && passDownsamplig && passNSigmaTofCut && passMatchTofRequirement) {
439- fillSkimmedV0Table<IsCorrectedDeDx, ModeId>(mother, dauTrack, trackQAInstance, existTrkQA, collision, daughter.tpcNSigma , daughter.tofNSigma , daughter.itsNSigma , daughter.tpcExpSignal , daughter.id , runnumber, daughter.dwnSmplFactor , hadronicRate, bcGlobalIndex, bcTimeFrameId, bcBcInTimeFrame);
451+ occupancyValues occValues{};
452+ if constexpr (ModeId == ModeWithTrkQA) {
453+ evaluateOccupancyVariables (dauTrack, occValues);
454+ }
455+ fillSkimmedV0Table<IsCorrectedDeDx, ModeId>(mother, dauTrack, trackQAInstance, existTrkQA, collision, daughter.tpcNSigma , daughter.tofNSigma , daughter.itsNSigma , daughter.tpcExpSignal , daughter.id , runnumber, daughter.dwnSmplFactor , hadronicRate, bcGlobalIndex, bcTimeFrameId, bcBcInTimeFrame, occValues);
440456 }
441457 };
442458
@@ -539,24 +555,26 @@ struct TreeWriterTpcV0 {
539555 PROCESS_SWITCH (TreeWriterTpcV0, processWithdEdxTrQAWithCorrecteddEdx, " Standard V0 Samples with dEdx from Track QA for PID with corrected dEdx" , false );
540556
541557 void processWithTrQA (Colls const & collisions,
542- Trks const & myTracks,
558+ TrksTmo const & myTracks,
543559 V0sWithID const & myV0s,
544560 CascsWithID const & myCascs,
545561 MyBCTable const &,
546- aod::TracksQAVersion const & tracksQA)
562+ aod::TracksQAVersion const & tracksQA,
563+ TrackMeanOccs const &)
547564 {
548- runV0<false , ModeWithTrkQA, Trks , MyBCTable>(collisions, myTracks, myV0s, myCascs, tracksQA);
565+ runV0<false , ModeWithTrkQA, TrksTmo , MyBCTable>(collisions, myTracks, myV0s, myCascs, tracksQA);
549566 }
550567 PROCESS_SWITCH (TreeWriterTpcV0, processWithTrQA, " Standard V0 Samples with Track QA for PID" , false );
551568
552569 void processWithTrQAWithCorrecteddEdx (Colls const & collisions,
553- TrksWithDEdxCorrection const & myTracks,
570+ TrksTmoWithDEdxCorrection const & myTracks,
554571 V0sWithID const & myV0s,
555572 CascsWithID const & myCascs,
556573 MyBCTable const &,
557- aod::TracksQAVersion const & tracksQA)
574+ aod::TracksQAVersion const & tracksQA,
575+ TrackMeanOccs const &)
558576 {
559- runV0<true , ModeWithTrkQA, TrksWithDEdxCorrection , MyBCTable>(collisions, myTracks, myV0s, myCascs, tracksQA);
577+ runV0<true , ModeWithTrkQA, TrksTmoWithDEdxCorrection , MyBCTable>(collisions, myTracks, myV0s, myCascs, tracksQA);
560578 }
561579 PROCESS_SWITCH (TreeWriterTpcV0, processWithTrQAWithCorrecteddEdx, " Standard V0 Samples with Track QA for PID with corrected dEdx" , false );
562580
@@ -646,17 +664,16 @@ struct TreeWriterTpcTof {
646664 aod::pidTOFFullEl, aod::pidTOFFullPi, aod::pidTOFFullKa,
647665 aod::pidTOFFullPr, aod::pidTOFFullDe, aod::pidTOFFullTr,
648666 aod::TrackSelection>;
649- using TrksWithDEdxCorrection = soa::Join<aod::Tracks, aod::TracksExtra,
650- aod::pidTPCFullEl, aod::pidTPCFullPi, aod::pidTPCFullKa,
651- aod::pidTPCFullPr, aod::pidTPCFullDe, aod::pidTPCFullTr,
652- aod::pidTOFFullEl, aod::pidTOFFullPi, aod::pidTOFFullKa,
653- aod::pidTOFFullPr, aod::pidTOFFullDe, aod::pidTOFFullTr,
654- aod::TrackSelection, aod::DEdxsCorrected>;
667+ using TrksWithDEdxCorrection = soa::Join<Trks, aod::DEdxsCorrected>;
655668 using Colls = soa::Join<aod::Collisions, aod::Mults, aod::EvSels>;
656669 using MyBCTable = soa::Join<aod::BCsWithTimestamps, aod::BCTFinfoTable>;
670+ using TrksTmo = soa::Join<Trks, aod::TrackToTmo>;
671+ using TrksTmoWithDEdxCorrection = soa::Join<Trks, aod::DEdxsCorrected, aod::TrackToTmo>;
657672
658673 Preslice<Trks> perCollisionTracks = aod::track::collisionId;
659674 Preslice<TrksWithDEdxCorrection> perCollisionTracksWithCorrecteddEdx = aod::track::collisionId;
675+ Preslice<TrksTmo> perCollisionTracksTmo = aod::track::collisionId;
676+ Preslice<TrksTmoWithDEdxCorrection> perCollisionTracksTmoWithCorrecteddEdx = aod::track::collisionId;
660677
661678 void init (o2::framework::InitContext&)
662679 {
@@ -671,7 +688,7 @@ struct TreeWriterTpcTof {
671688 }
672689
673690 template <bool DoCorrectDeDx, int ModeId, typename T, typename C>
674- void fillSkimmedTpcTofTable (T const & track, aod::TracksQA const & trackQA, const bool existTrkQA, C const & collision, const float nSigmaTPC, const float nSigmaTOF, const float nSigmaITS, const float dEdxExp, const o2::track::PID::ID id, const int runnumber, const double dwnSmplFactor, const double hadronicRate, const int bcGlobalIndex, const int bcTimeFrameId, const int bcBcInTimeFrame)
691+ void fillSkimmedTpcTofTable (T const & track, aod::TracksQA const & trackQA, const bool existTrkQA, C const & collision, const float nSigmaTPC, const float nSigmaTOF, const float nSigmaITS, const float dEdxExp, const o2::track::PID::ID id, const int runnumber, const double dwnSmplFactor, const double hadronicRate, const int bcGlobalIndex, const int bcTimeFrameId, const int bcBcInTimeFrame, const occupancyValues& occValues )
675692 {
676693 const double ncl = track.tpcNClsFound ();
677694 const double nclPID = track.tpcNClsFindableMinusPID ();
@@ -769,13 +786,23 @@ struct TreeWriterTpcTof {
769786 existTrkQA ? trackQA.tpcdEdxTot1R () : UndefValueInt,
770787 existTrkQA ? trackQA.tpcdEdxTot2R () : UndefValueInt,
771788 existTrkQA ? trackQA.tpcdEdxTot3R () : UndefValueInt,
789+ occValues.tmoPrimUnfm80 ,
790+ occValues.tmoFV0AUnfm80 ,
791+ occValues.tmoFT0AUnfm80 ,
792+ occValues.tmoFT0CUnfm80 ,
793+ occValues.tmoRT0V0PrimUnfm80 ,
794+ occValues.twmoPrimUnfm80 ,
795+ occValues.twmoFV0AUnfm80 ,
796+ occValues.twmoFT0AUnfm80 ,
797+ occValues.twmoFT0CUnfm80 ,
798+ occValues.twmoRT0V0PrimUnfm80 ,
772799 existTrkQA ? trackQA.tpcdEdxNorm () : UndefValueFloat);
773800 }
774801 }
775802 } // / fillSkimmedTpcTofTable
776803
777- template <bool IsCorrectedDeDx, int ModeId, typename TrksType, typename BCType, typename TrkQAType>
778- void runTof (Colls const & collisions, TrksType const & myTracks, TrkQAType const & tracksQA, Preslice<TrksType> const & perCollisionTracksType)
804+ template <bool IsCorrectedDeDx, int ModeId, typename TrksType, typename BCType, typename TrkQAType, typename TMOType >
805+ void runTof (Colls const & collisions, TrksType const & myTracks, TrkQAType const & tracksQA, Preslice<TrksType> const & perCollisionTracksType, TMOType const & trackMeanOccs )
779806 {
780807 constexpr bool IsWithTrackQa = ModeId != ModeStandard;
781808
@@ -792,9 +819,13 @@ struct TreeWriterTpcTof {
792819 if (!isEventSelected (collision, applyEvSel)) {
793820 continue ;
794821 }
795- const auto & tracksWithITSPid = soa::Attach<TrksType,
796- aod::pidits::ITSNSigmaPi, aod::pidits::ITSNSigmaKa, aod::pidits::ITSNSigmaPr,
797- aod::pidits::ITSNSigmaDe, aod::pidits::ITSNSigmaTr>(tracks);
822+ auto tracksWithITSPid = soa::Attach<TrksType,
823+ aod::pidits::ITSNSigmaPi, aod::pidits::ITSNSigmaKa, aod::pidits::ITSNSigmaPr,
824+ aod::pidits::ITSNSigmaDe, aod::pidits::ITSNSigmaTr>(tracks);
825+
826+ if constexpr (ModeId == ModeWithTrkQA) {
827+ tracksWithITSPid.bindExternalIndices (&trackMeanOccs);
828+ }
798829
799830 const auto & bc = collision.bc_as <BCType>();
800831 const int runnumber = bc.runNumber ();
@@ -838,12 +869,17 @@ struct TreeWriterTpcTof {
838869
839870 TofTrack tofPion (false , UndefValueDouble, maxMomTPCOnlyPi, trk.tpcNSigmaPi (), nSigmaTPCOnlyPi, downsamplingTsalisPions, MassPiPlus, trk.tofNSigmaPi (), trk.itsNSigmaPi (), trk.tpcExpSignalPi (tpcSignalGeneric<IsCorrectedDeDx>(trk)), PidPion, dwnSmplFactorPi, nSigmaTofTpctofPi, nSigmaTpcTpctofPi);
840871
872+ occupancyValues occValues;
873+ if constexpr (ModeId == ModeWithTrkQA) {
874+ evaluateOccupancyVariables (trk, occValues);
875+ }
876+
841877 for (const auto & tofTrack : {&tofTriton, &tofDeuteron, &tofProton, &tofKaon, &tofPion}) {
842878 if ((!tofTrack->isApplyHardCutOnly || trk.tpcInnerParam () < tofTrack->maxMomHardCutOnly ) &&
843879 ((trk.tpcInnerParam () <= tofTrack->maxMomTPCOnly && std::fabs (tofTrack->tpcNSigma ) < tofTrack->nSigmaTPCOnly ) ||
844880 (trk.tpcInnerParam () > tofTrack->maxMomTPCOnly && std::fabs (tofTrack->tofNSigma ) < tofTrack->nSigmaTofTpctof && std::fabs (tofTrack->tpcNSigma ) < tofTrack->nSigmaTpcTpctof )) &&
845881 downsampleTsalisCharged (fRndm , trk.pt (), tofTrack->downsamplingTsalis , tofTrack->mass , sqrtSNN)) {
846- fillSkimmedTpcTofTable<IsCorrectedDeDx, ModeId>(trk, trackQA, existTrkQA, collision, tofTrack->tpcNSigma , tofTrack->tofNSigma , tofTrack->itsNSigma , tofTrack->tpcExpSignal , tofTrack->pid , runnumber, tofTrack->dwnSmplFactor , hadronicRate, bcGlobalIndex, bcTimeFrameId, bcBcInTimeFrame);
882+ fillSkimmedTpcTofTable<IsCorrectedDeDx, ModeId>(trk, trackQA, existTrkQA, collision, tofTrack->tpcNSigma , tofTrack->tofNSigma , tofTrack->itsNSigma , tofTrack->tpcExpSignal , tofTrack->pid , runnumber, tofTrack->dwnSmplFactor , hadronicRate, bcGlobalIndex, bcTimeFrameId, bcBcInTimeFrame, occValues );
847883 }
848884 }
849885 } // / Loop tracks
@@ -854,15 +890,15 @@ struct TreeWriterTpcTof {
854890 Trks const & myTracks,
855891 aod::BCsWithTimestamps const &)
856892 {
857- runTof<false , ModeStandard, Trks, aod::BCsWithTimestamps>(collisions, myTracks, static_cast <TObject*>(nullptr ), perCollisionTracks);
893+ runTof<false , ModeStandard, Trks, aod::BCsWithTimestamps>(collisions, myTracks, static_cast <TObject*>(nullptr ), perCollisionTracks, static_cast <TObject*>( nullptr ) );
858894 }
859895 PROCESS_SWITCH (TreeWriterTpcTof, processStandard, " Standard Samples for PID" , true );
860896
861897 void processStandardWithCorrecteddEdx (Colls const & collisions,
862898 TrksWithDEdxCorrection const & myTracks,
863899 aod::BCsWithTimestamps const &)
864900 {
865- runTof<true , ModeStandard, TrksWithDEdxCorrection, aod::BCsWithTimestamps>(collisions, myTracks, static_cast <TObject*>(nullptr ), perCollisionTracksWithCorrecteddEdx);
901+ runTof<true , ModeStandard, TrksWithDEdxCorrection, aod::BCsWithTimestamps>(collisions, myTracks, static_cast <TObject*>(nullptr ), perCollisionTracksWithCorrecteddEdx, static_cast <TObject*>( nullptr ) );
866902 }
867903 PROCESS_SWITCH (TreeWriterTpcTof, processStandardWithCorrecteddEdx, " Standard Samples for PID with corrected dEdx" , false );
868904
@@ -871,7 +907,7 @@ struct TreeWriterTpcTof {
871907 aod::BCsWithTimestamps const &,
872908 aod::TracksQAVersion const & tracksQA)
873909 {
874- runTof<false , ModeWithdEdxTrkQA, Trks, aod::BCsWithTimestamps>(collisions, myTracks, tracksQA, perCollisionTracks);
910+ runTof<false , ModeWithdEdxTrkQA, Trks, aod::BCsWithTimestamps>(collisions, myTracks, tracksQA, perCollisionTracks, static_cast <TObject*>( nullptr ) );
875911 }
876912 PROCESS_SWITCH (TreeWriterTpcTof, processWithdEdxTrQA, " Samples for PID with TrackQA info" , false );
877913
@@ -880,25 +916,27 @@ struct TreeWriterTpcTof {
880916 aod::BCsWithTimestamps const &,
881917 aod::TracksQAVersion const & tracksQA)
882918 {
883- runTof<true , ModeWithdEdxTrkQA, TrksWithDEdxCorrection, aod::BCsWithTimestamps>(collisions, myTracks, tracksQA, perCollisionTracksWithCorrecteddEdx);
919+ runTof<true , ModeWithdEdxTrkQA, TrksWithDEdxCorrection, aod::BCsWithTimestamps>(collisions, myTracks, tracksQA, perCollisionTracksWithCorrecteddEdx, static_cast <TObject*>( nullptr ) );
884920 }
885921 PROCESS_SWITCH (TreeWriterTpcTof, processWithdEdxTrQAWithCorrecteddEdx, " Samples for PID with TrackQA info with corrected dEdx" , false );
886922
887923 void processWithTrQA (Colls const & collisions,
888- Trks const & myTracks,
924+ TrksTmo const & myTracks,
889925 MyBCTable const &,
890- aod::TracksQAVersion const & tracksQA)
926+ aod::TracksQAVersion const & tracksQA,
927+ TrackMeanOccs const & trackMeanOccs)
891928 {
892- runTof<false , ModeWithTrkQA, Trks , MyBCTable>(collisions, myTracks, tracksQA, perCollisionTracks );
929+ runTof<false , ModeWithTrkQA, TrksTmo , MyBCTable>(collisions, myTracks, tracksQA, perCollisionTracksTmo, trackMeanOccs );
893930 }
894931 PROCESS_SWITCH (TreeWriterTpcTof, processWithTrQA, " Samples for PID with TrackQA info" , false );
895932
896933 void processWithTrQAWithCorrecteddEdx (Colls const & collisions,
897- TrksWithDEdxCorrection const & myTracks,
934+ TrksTmoWithDEdxCorrection const & myTracks,
898935 MyBCTable const &,
899- aod::TracksQAVersion const & tracksQA)
936+ aod::TracksQAVersion const & tracksQA,
937+ TrackMeanOccs const & trackMeanOccs)
900938 {
901- runTof<true , ModeWithTrkQA, TrksWithDEdxCorrection , MyBCTable>(collisions, myTracks, tracksQA, perCollisionTracksWithCorrecteddEdx );
939+ runTof<true , ModeWithTrkQA, TrksTmoWithDEdxCorrection , MyBCTable>(collisions, myTracks, tracksQA, perCollisionTracksTmoWithCorrecteddEdx, trackMeanOccs );
902940 }
903941 PROCESS_SWITCH (TreeWriterTpcTof, processWithTrQAWithCorrecteddEdx, " Samples for PID with TrackQA info with correced dEdx" , false );
904942
0 commit comments