@@ -114,6 +114,7 @@ struct K892analysispbpb {
114114 Configurable<bool > cTPClowpt{" cTPClowpt" , true , " apply TPC at low pt" };
115115 Configurable<bool > cTOFonlyHighpt{" cTOFonlyHighpt" , false , " apply TOF only at high pt" };
116116 Configurable<bool > cTOFandTPCHighpt{" cTOFandTPCHighpt" , false , " apply TOF and TPC at high pt" };
117+ Configurable<bool > circularCut{" circularCut" , false , " apply TOF and TPC circular cut (applied only if cTOFandTPCHighpt is true)" };
117118
118119 // rotational bkg
119120 Configurable<int > cfgNoRotations{" cfgNoRotations" , 3 , " Number of rotations per pair for rotbkg" };
@@ -409,10 +410,16 @@ struct K892analysispbpb {
409410
410411 } else if (cTOFandTPCHighpt) {
411412
412- if (candidate.hasTOF () && std::abs (candidate.tofNSigmaKa ()) <= cMaxTOFnSigmaKaon && candidate.hasTPC () && std::abs (candidate.tpcNSigmaKa ()) <= cMaxTPCnSigmaKaon) { // tof and tpc cut
413- return true ;
414- }
413+ if (circularCut) {
414+
415+ if (candidate.hasTOF () && candidate.hasTPC () && std::sqrt (std::pow (candidate.tpcNSigmaKa (), 2 ) + std::pow (candidate.tofNSigmaKa (), 2 )) <= cMaxTPCnSigmaKaon) // tof and tpc circular cut
416+ return true ;
415417
418+ } else {
419+
420+ if (candidate.hasTOF () && std::abs (candidate.tofNSigmaKa ()) <= cMaxTOFnSigmaKaon && candidate.hasTPC () && std::abs (candidate.tpcNSigmaKa ()) <= cMaxTPCnSigmaKaon) // tof and tpc cut
421+ return true ;
422+ }
416423 } else {
417424
418425 if (candidate.hasTPC () && std::abs (candidate.tpcNSigmaKa ()) <= cMaxTPCnSigmaKaon) { // tpc cut, tof when available
@@ -447,8 +454,15 @@ struct K892analysispbpb {
447454
448455 } else if (cTOFandTPCHighpt) {
449456
450- if (candidate.hasTOF () && std::abs (candidate.tofNSigmaPi ()) <= cMaxTOFnSigmaPion && candidate.hasTPC () && std::abs (candidate.tpcNSigmaPi ()) <= cMaxTPCnSigmaPion) { // tof and tpc cut
451- return true ;
457+ if (circularCut) {
458+
459+ if (candidate.hasTOF () && candidate.hasTPC () && std::sqrt (std::pow (candidate.tpcNSigmaPi (), 2 ) + std::pow (candidate.tofNSigmaPi (), 2 )) <= cMaxTPCnSigmaPion) // tof and tpc circular cut
460+ return true ;
461+
462+ } else {
463+
464+ if (candidate.hasTOF () && std::abs (candidate.tofNSigmaPi ()) <= cMaxTOFnSigmaPion && candidate.hasTPC () && std::abs (candidate.tpcNSigmaPi ()) <= cMaxTPCnSigmaPion) // tof and tpc cut
465+ return true ;
452466 }
453467
454468 } else {
@@ -838,47 +852,59 @@ struct K892analysispbpb {
838852
839853 Preslice<aod::Tracks> trackPerCollision = aod::track::collisionId;
840854
841- template <bool IsMC, bool IsMix, bool IsRot, bool IsRun2, typename CollisionType, typename TracksType>
855+ template <bool IsMC, bool IsMix, bool IsRot, bool IsRun2, bool isLikeSig, typename CollisionType, typename TracksType>
842856 void callFillHistoswithPartitions (const CollisionType& collision1, const TracksType&, const CollisionType& collision2, const TracksType&)
843857 {
844858 if (cTPClowpt) {
845859 // +-
846860 auto candPosPitpc = posPitpc->sliceByCached (aod::track::collisionId, collision1.globalIndex (), cache);
847861 auto candNegKatpc = negKatpc->sliceByCached (aod::track::collisionId, collision2.globalIndex (), cache);
848862
849- fillHistograms<IsMC, IsMix, IsRot, IsRun2>(collision1, candPosPitpc, candNegKatpc);
850-
851863 // -+
852864 auto candNegPitpc = negPitpc->sliceByCached (aod::track::collisionId, collision1.globalIndex (), cache);
853865 auto candPosKatpc = posKatpc->sliceByCached (aod::track::collisionId, collision2.globalIndex (), cache);
854866
855- fillHistograms<IsMC, IsMix, IsRot, IsRun2>(collision1, candNegPitpc, candPosKatpc);
867+ if constexpr (!isLikeSig) {
868+ fillHistograms<IsMC, IsMix, IsRot, IsRun2>(collision1, candPosPitpc, candNegKatpc);
869+ fillHistograms<IsMC, IsMix, IsRot, IsRun2>(collision1, candNegPitpc, candPosKatpc);
870+ } else {
871+ fillHistograms<IsMC, IsMix, IsRot, IsRun2>(collision1, candPosPitpc, candPosKatpc);
872+ fillHistograms<IsMC, IsMix, IsRot, IsRun2>(collision1, candNegPitpc, candNegKatpc);
873+ }
856874
857875 } else if (cTOFandTPCHighpt) {
858876 // +-
859877 auto candPosPitoftpc = posPitoftpc->sliceByCached (aod::track::collisionId, collision1.globalIndex (), cache);
860878 auto candNegKatoftpc = negKatoftpc->sliceByCached (aod::track::collisionId, collision2.globalIndex (), cache);
861879
862- fillHistograms<IsMC, IsMix, IsRot, IsRun2>(collision1, candPosPitoftpc, candNegKatoftpc);
863-
864880 // -+
865881 auto candNegPitoftpc = negPitoftpc->sliceByCached (aod::track::collisionId, collision1.globalIndex (), cache);
866882 auto candPosKatoftpc = posKatoftpc->sliceByCached (aod::track::collisionId, collision2.globalIndex (), cache);
867883
868- fillHistograms<IsMC, IsMix, IsRot, IsRun2>(collision1, candNegPitoftpc, candPosKatoftpc);
884+ if constexpr (!isLikeSig) {
885+ fillHistograms<IsMC, IsMix, IsRot, IsRun2>(collision1, candPosPitoftpc, candNegKatoftpc);
886+ fillHistograms<IsMC, IsMix, IsRot, IsRun2>(collision1, candNegPitoftpc, candPosKatoftpc);
887+ } else {
888+ fillHistograms<IsMC, IsMix, IsRot, IsRun2>(collision1, candPosPitoftpc, candPosKatoftpc);
889+ fillHistograms<IsMC, IsMix, IsRot, IsRun2>(collision1, candNegPitoftpc, candNegKatoftpc);
890+ }
869891
870892 } else if (cTOFonlyHighpt) {
871893 // +-
872894 auto candPosPitof = posPitof->sliceByCached (aod::track::collisionId, collision1.globalIndex (), cache);
873895 auto candNegKatof = negKatof->sliceByCached (aod::track::collisionId, collision2.globalIndex (), cache);
874896
875- fillHistograms<IsMC, IsMix, IsRot, IsRun2>(collision1, candPosPitof, candNegKatof);
876-
877897 // -+
878898 auto candNegPitof = negPitof->sliceByCached (aod::track::collisionId, collision1.globalIndex (), cache);
879899 auto candPosKatof = posKatof->sliceByCached (aod::track::collisionId, collision2.globalIndex (), cache);
880900
881- fillHistograms<IsMC, IsMix, IsRot, IsRun2>(collision1, candNegPitof, candPosKatof);
901+ if constexpr (!isLikeSig) {
902+ fillHistograms<IsMC, IsMix, IsRot, IsRun2>(collision1, candPosPitof, candNegKatof);
903+ fillHistograms<IsMC, IsMix, IsRot, IsRun2>(collision1, candNegPitof, candPosKatof);
904+ } else {
905+ fillHistograms<IsMC, IsMix, IsRot, IsRun2>(collision1, candPosPitof, candPosKatof);
906+ fillHistograms<IsMC, IsMix, IsRot, IsRun2>(collision1, candNegPitof, candNegKatof);
907+ }
882908 }
883909 }
884910
@@ -898,8 +924,8 @@ struct K892analysispbpb {
898924 histos.fill (HIST (" TestME/hCollisionIndexSameE" ), collision.globalIndex ());
899925 histos.fill (HIST (" TestME/hnTrksSameE" ), tracks.size ());
900926 }
901- // <IsMC, IsMix, IsRot, IsRun2>
902- callFillHistoswithPartitions<false , false , false , false >(collision, tracks, collision, tracks);
927+ // <IsMC, IsMix, IsRot, IsRun2, isLikeSig >
928+ callFillHistoswithPartitions<false , false , false , false , false >(collision, tracks, collision, tracks);
903929 }
904930 PROCESS_SWITCH (K892analysispbpb, processSameEvent, " Process Same event" , true );
905931
@@ -918,8 +944,8 @@ struct K892analysispbpb {
918944 histos.fill (HIST (" TestME/hnTrksSameE" ), tracks.size ());
919945 }
920946
921- // <IsMC, IsMix, IsRot, IsRun2>
922- callFillHistoswithPartitions<false , false , false , true >(collision, tracks, collision, tracks);
947+ // <IsMC, IsMix, IsRot, IsRun2, isLikeSig >
948+ callFillHistoswithPartitions<false , false , false , true , false >(collision, tracks, collision, tracks);
923949 }
924950 PROCESS_SWITCH (K892analysispbpb, processSameEventRun2, " Process Same event Run2" , false );
925951
@@ -929,8 +955,8 @@ struct K892analysispbpb {
929955 if (!myEventSelections (collision))
930956 return ;
931957
932- // <IsMC, IsMix, IsRot, IsRun2>
933- callFillHistoswithPartitions<false , false , true , false >(collision, tracks, collision, tracks);
958+ // <IsMC, IsMix, IsRot, IsRun2, isLikeSig >
959+ callFillHistoswithPartitions<false , false , true , false , false >(collision, tracks, collision, tracks);
934960 }
935961 PROCESS_SWITCH (K892analysispbpb, processRotationalBkg, " Process Rotational Background" , false );
936962
@@ -945,6 +971,17 @@ struct K892analysispbpb {
945971 }
946972 PROCESS_SWITCH (K892analysispbpb, processRotationalBkgMC, " Process Rotational Background MC" , false );
947973
974+ void processLikeSign (EventCandidates::iterator const & collision, TrackCandidates const & tracks, aod::BCs const &)
975+ {
976+
977+ if (!myEventSelections (collision))
978+ return ;
979+
980+ // <IsMC, IsMix, IsRot, IsRun2, isLikeSig>
981+ callFillHistoswithPartitions<false , false , false , false , true >(collision, tracks, collision, tracks);
982+ }
983+ PROCESS_SWITCH (K892analysispbpb, processLikeSign, " Process Like Sign" , false );
984+
948985 void processMixedEvent (EventCandidates const & collisions, TrackCandidates const & tracks)
949986 {
950987 auto tracksTuple = std::make_tuple (tracks);
@@ -966,8 +1003,8 @@ struct K892analysispbpb {
9661003 histos.fill (HIST (" TestME/hnTrksMixedE" ), tracks1.size ());
9671004 }
9681005
969- // <IsMC, IsMix, IsRot, IsRun2>
970- callFillHistoswithPartitions<false , true , false , false >(collision1, tracks1, collision2, tracks2);
1006+ // <IsMC, IsMix, IsRot, IsRun2, isLikeSig >
1007+ callFillHistoswithPartitions<false , true , false , false , false >(collision1, tracks1, collision2, tracks2);
9711008 }
9721009 }
9731010 PROCESS_SWITCH (K892analysispbpb, processMixedEvent, " Process Mixed event" , true );
@@ -991,8 +1028,8 @@ struct K892analysispbpb {
9911028 histos.fill (HIST (" TestME/hnTrksMixedE" ), tracks1.size ());
9921029 }
9931030
994- // <IsMC, IsMix, IsRot, IsRun2>
995- callFillHistoswithPartitions<false , true , false , true >(collision1, tracks1, collision2, tracks2);
1031+ // <IsMC, IsMix, IsRot, IsRun2, isLikeSig >
1032+ callFillHistoswithPartitions<false , true , false , true , false >(collision1, tracks1, collision2, tracks2);
9961033 }
9971034 }
9981035 PROCESS_SWITCH (K892analysispbpb, processMixedEventRun2, " Process Mixed event Run2" , false );
0 commit comments