@@ -533,7 +533,8 @@ struct TreeWriterTpcV0 {
533533
534534 Preslice<Trks> perCollisionTracks = aod::track::collisionId;
535535 Preslice<V0sWithID> perCollisionV0s = aod::v0data::collisionId;
536- void processWithdEdxTrQA (Colls const & collisions, Trks const & myTracks, V0sWithID const & myV0s, aod::BCsWithTimestamps const &, aod::TracksQAVersion const & tracksQA)
536+ Preslice<CascsWithID> perCollisionCascs = aod::cascdata::collisionId;
537+ void processWithdEdxTrQA (Colls const & collisions, Trks const & myTracks, V0sWithID const & myV0s, CascsWithID const & myCascs, aod::BCsWithTimestamps const &, aod::TracksQAVersion const & tracksQA)
537538 {
538539 std::vector<int64_t > labelTrack2TrackQA;
539540 labelTrack2TrackQA.clear ();
@@ -546,6 +547,7 @@ struct TreeWriterTpcV0 {
546547 for (const auto & collision : collisions) {
547548 auto tracks = myTracks.sliceBy (perCollisionTracks, collision.globalIndex ());
548549 auto v0s = myV0s.sliceBy (perCollisionV0s, collision.globalIndex ());
550+ auto cascs = myCascs.sliceBy (perCollisionCascs, collision.globalIndex ());
549551 // / Check event slection
550552 if (!isEventSelected (collision, tracks)) {
551553 continue ;
@@ -621,12 +623,37 @@ struct TreeWriterTpcV0 {
621623 }
622624 }
623625 }
626+
627+ // / Loop over cascade candidates
628+ for (const auto & casc : cascs) {
629+ auto bachTrack = casc.bachelor_as <Trks>();
630+ if (casc.cascaddid () == kUndef ) {
631+ continue ;
632+ }
633+
634+ aod::TracksQA bachTrackQA;
635+ bool existBachTrkQA;
636+ if (labelTrack2TrackQA[bachTrack.globalIndex ()] != -1 ) {
637+ bachTrackQA = tracksQA.iteratorAt (labelTrack2TrackQA[bachTrack.globalIndex ()]);
638+ existBachTrkQA = true ;
639+ } else {
640+ bachTrackQA = tracksQA.iteratorAt (0 );
641+ existBachTrkQA = false ;
642+ }
643+
644+ // Omega and antiomega
645+ if (static_cast <bool >(bachTrack.pidbit () & (1 << kOmega )) || static_cast <bool >(bachTrack.pidbit () & (1 << kAntiOmega ))) {
646+ if (downsampleTsalisCharged (bachTrack.pt (), downsamplingTsalisKaons, sqrtSNN, o2::track::pid_constants::sMasses [o2::track::PID::Kaon], maxPt4dwnsmplTsalisKaons)) {
647+ fillSkimmedV0TableWithdEdxTrQA (casc, bachTrack, bachTrackQA, existBachTrkQA, collision, bachTrack.tpcNSigmaKa (), bachTrack.tofNSigmaKa (), bachTrack.tpcExpSignalKa (bachTrack.tpcSignal ()), o2::track::PID::Kaon, runnumber, dwnSmplFactor_Ka, hadronicRate);
648+ }
649+ }
650+ }
624651 }
625652 } // / process with dEdx from TrackQA
626653 PROCESS_SWITCH (TreeWriterTpcV0, processWithdEdxTrQA, " Standard V0 Samples with dEdx from Track QA for PID" , false );
627654
628655 Preslice<TrksWithDEdxCorrection> perCollisionTracksWithNewDEdx = aod::track::collisionId;
629- void processWithdEdxTrQAWithCorrecteddEdx (Colls const & collisions, TrksWithDEdxCorrection const & myTracks, V0sWithID const & myV0s, aod::BCsWithTimestamps const &, aod::TracksQAVersion const & tracksQA)
656+ void processWithdEdxTrQAWithCorrecteddEdx (Colls const & collisions, TrksWithDEdxCorrection const & myTracks, V0sWithID const & myV0s, CascsWithID const & myCascs, aod::BCsWithTimestamps const &, aod::TracksQAVersion const & tracksQA)
630657 {
631658 std::vector<int64_t > labelTrack2TrackQA;
632659 labelTrack2TrackQA.clear ();
@@ -639,6 +666,7 @@ struct TreeWriterTpcV0 {
639666 for (const auto & collision : collisions) {
640667 auto tracks = myTracks.sliceBy (perCollisionTracksWithNewDEdx, collision.globalIndex ());
641668 auto v0s = myV0s.sliceBy (perCollisionV0s, collision.globalIndex ());
669+ auto cascs = myCascs.sliceBy (perCollisionCascs, collision.globalIndex ());
642670 // / Check event slection
643671 if (!isEventSelected (collision, tracks)) {
644672 continue ;
@@ -714,11 +742,36 @@ struct TreeWriterTpcV0 {
714742 }
715743 }
716744 }
745+
746+ // / Loop over cascade candidates
747+ for (const auto & casc : cascs) {
748+ auto bachTrack = casc.bachelor_as <TrksWithDEdxCorrection>();
749+ if (casc.cascaddid () == kUndef ) {
750+ continue ;
751+ }
752+
753+ aod::TracksQA bachTrackQA;
754+ bool existBachTrkQA;
755+ if (labelTrack2TrackQA[bachTrack.globalIndex ()] != -1 ) {
756+ bachTrackQA = tracksQA.iteratorAt (labelTrack2TrackQA[bachTrack.globalIndex ()]);
757+ existBachTrkQA = true ;
758+ } else {
759+ bachTrackQA = tracksQA.iteratorAt (0 );
760+ existBachTrkQA = false ;
761+ }
762+
763+ // Omega and antiomega
764+ if (static_cast <bool >(bachTrack.pidbit () & (1 << kOmega )) || static_cast <bool >(bachTrack.pidbit () & (1 << kAntiOmega ))) {
765+ if (downsampleTsalisCharged (bachTrack.pt (), downsamplingTsalisKaons, sqrtSNN, o2::track::pid_constants::sMasses [o2::track::PID::Kaon], maxPt4dwnsmplTsalisKaons)) {
766+ fillSkimmedV0TableWithdEdxTrQA<true >(casc, bachTrack, bachTrackQA, existBachTrkQA, collision, bachTrack.tpcNSigmaKa (), bachTrack.tofNSigmaKa (), bachTrack.tpcExpSignalKa (bachTrack.tpcSignal ()), o2::track::PID::Kaon, runnumber, dwnSmplFactor_Ka, hadronicRate);
767+ }
768+ }
769+ }
717770 }
718771 } // / process with dEdx from TrackQA
719772 PROCESS_SWITCH (TreeWriterTpcV0, processWithdEdxTrQAWithCorrecteddEdx, " Standard V0 Samples with dEdx from Track QA for PID with corrected dEdx" , false );
720773
721- void processWithTrQA (Colls const & collisions, Trks const & myTracks, V0sWithID const & myV0s, MyBCTable const &, aod::TracksQAVersion const & tracksQA)
774+ void processWithTrQA (Colls const & collisions, Trks const & myTracks, V0sWithID const & myV0s, CascsWithID const & myCascs, MyBCTable const &, aod::TracksQAVersion const & tracksQA)
722775 {
723776 std::vector<int64_t > labelTrack2TrackQA;
724777 labelTrack2TrackQA.clear ();
@@ -731,6 +784,7 @@ struct TreeWriterTpcV0 {
731784 for (const auto & collision : collisions) {
732785 auto tracks = myTracks.sliceBy (perCollisionTracks, collision.globalIndex ());
733786 auto v0s = myV0s.sliceBy (perCollisionV0s, collision.globalIndex ());
787+ auto cascs = myCascs.sliceBy (perCollisionCascs, collision.globalIndex ());
734788 // / Check event slection
735789 if (!isEventSelected (collision, tracks)) {
736790 continue ;
@@ -809,11 +863,36 @@ struct TreeWriterTpcV0 {
809863 }
810864 }
811865 }
866+
867+ // / Loop over cascade candidates
868+ for (const auto & casc : cascs) {
869+ auto bachTrack = casc.bachelor_as <Trks>();
870+ if (casc.cascaddid () == kUndef ) {
871+ continue ;
872+ }
873+
874+ aod::TracksQA bachTrackQA;
875+ bool existBachTrkQA;
876+ if (labelTrack2TrackQA[bachTrack.globalIndex ()] != -1 ) {
877+ bachTrackQA = tracksQA.iteratorAt (labelTrack2TrackQA[bachTrack.globalIndex ()]);
878+ existBachTrkQA = true ;
879+ } else {
880+ bachTrackQA = tracksQA.iteratorAt (0 );
881+ existBachTrkQA = false ;
882+ }
883+
884+ // Omega and antiomega
885+ if (static_cast <bool >(bachTrack.pidbit () & (1 << kOmega )) || static_cast <bool >(bachTrack.pidbit () & (1 << kAntiOmega ))) {
886+ if (downsampleTsalisCharged (bachTrack.pt (), downsamplingTsalisKaons, sqrtSNN, o2::track::pid_constants::sMasses [o2::track::PID::Kaon], maxPt4dwnsmplTsalisKaons)) {
887+ fillSkimmedV0TableWithTrQA (casc, bachTrack, bachTrackQA, existBachTrkQA, collision, bachTrack.tpcNSigmaKa (), bachTrack.tofNSigmaKa (), bachTrack.tpcExpSignalKa (bachTrack.tpcSignal ()), o2::track::PID::Kaon, runnumber, dwnSmplFactor_Ka, hadronicRate, bcGlobalIndex, bcTimeFrameId, bcBcInTimeFrame);
888+ }
889+ }
890+ }
812891 }
813892 } // / process with TrackQA
814893 PROCESS_SWITCH (TreeWriterTpcV0, processWithTrQA, " Standard V0 Samples with Track QA for PID" , false );
815894
816- void processWithTrQAWithCorrecteddEdx (Colls const & collisions, TrksWithDEdxCorrection const & myTracks, V0sWithID const & myV0s, MyBCTable const &, aod::TracksQAVersion const & tracksQA)
895+ void processWithTrQAWithCorrecteddEdx (Colls const & collisions, TrksWithDEdxCorrection const & myTracks, V0sWithID const & myV0s, CascsWithID const & myCascs, MyBCTable const &, aod::TracksQAVersion const & tracksQA)
817896 {
818897 std::vector<int64_t > labelTrack2TrackQA;
819898 labelTrack2TrackQA.clear ();
@@ -826,6 +905,7 @@ struct TreeWriterTpcV0 {
826905 for (const auto & collision : collisions) {
827906 auto tracks = myTracks.sliceBy (perCollisionTracksWithNewDEdx, collision.globalIndex ());
828907 auto v0s = myV0s.sliceBy (perCollisionV0s, collision.globalIndex ());
908+ auto cascs = myCascs.sliceBy (perCollisionCascs, collision.globalIndex ());
829909 // / Check event slection
830910 if (!isEventSelected (collision, tracks)) {
831911 continue ;
@@ -904,6 +984,31 @@ struct TreeWriterTpcV0 {
904984 }
905985 }
906986 }
987+
988+ // / Loop over cascade candidates
989+ for (const auto & casc : cascs) {
990+ auto bachTrack = casc.bachelor_as <TrksWithDEdxCorrection>();
991+ if (casc.cascaddid () == kUndef ) {
992+ continue ;
993+ }
994+
995+ aod::TracksQA bachTrackQA;
996+ bool existBachTrkQA;
997+ if (labelTrack2TrackQA[bachTrack.globalIndex ()] != -1 ) {
998+ bachTrackQA = tracksQA.iteratorAt (labelTrack2TrackQA[bachTrack.globalIndex ()]);
999+ existBachTrkQA = true ;
1000+ } else {
1001+ bachTrackQA = tracksQA.iteratorAt (0 );
1002+ existBachTrkQA = false ;
1003+ }
1004+
1005+ // Omega and antiomega
1006+ if (static_cast <bool >(bachTrack.pidbit () & (1 << kOmega )) || static_cast <bool >(bachTrack.pidbit () & (1 << kAntiOmega ))) {
1007+ if (downsampleTsalisCharged (bachTrack.pt (), downsamplingTsalisKaons, sqrtSNN, o2::track::pid_constants::sMasses [o2::track::PID::Kaon], maxPt4dwnsmplTsalisKaons)) {
1008+ fillSkimmedV0TableWithTrQA<true >(casc, bachTrack, bachTrackQA, existBachTrkQA, collision, bachTrack.tpcNSigmaKa (), bachTrack.tofNSigmaKa (), bachTrack.tpcExpSignalKa (bachTrack.tpcSignal ()), o2::track::PID::Kaon, runnumber, dwnSmplFactor_Ka, hadronicRate, bcGlobalIndex, bcTimeFrameId, bcBcInTimeFrame);
1009+ }
1010+ }
1011+ }
9071012 }
9081013 } // / process with TrackQA
9091014 PROCESS_SWITCH (TreeWriterTpcV0, processWithTrQAWithCorrecteddEdx, " Standard V0 Samples with Track QA for PID with corrected dEdx" , false );
0 commit comments