@@ -123,6 +123,8 @@ struct HStrangeCorrelationFilter {
123123 Configurable<bool > assocRequireITS{" assocRequireITS" , true , " require ITS signal in assoc tracks" };
124124 Configurable<int > triggerMaxTPCSharedClusters{" triggerMaxTPCSharedClusters" , 200 , " maximum number of shared TPC clusters (inclusive)" };
125125 Configurable<bool > triggerRequireL0{" triggerRequireL0" , false , " require ITS L0 cluster for trigger" };
126+ Configurable<bool > requireClusterInITS{" requireClusterInITS" , false , " require cluster in ITS for V0 and cascade daughter tracks" };
127+ Configurable<int > minITSClustersForDaughterTracks{" minITSClustersForDaughterTracks" , 1 , " Minimum number of ITS clusters for V0 daughter tracks" };
126128
127129 // Associated pion identification
128130 Configurable<float > pionMinBayesProb{" pionMinBayesProb" , 0.95 , " minimal Bayesian probability for pion ID" };
@@ -143,6 +145,7 @@ struct HStrangeCorrelationFilter {
143145 Configurable<float > dcaPostopv{" dcaPostopv" , 0.06 , " DCA Pos To PV" };
144146 Configurable<float > dcaBaryonToPV{" dcaBaryonToPV" , 0.2 , " DCA of baryon daughter track To PV" };
145147 Configurable<float > dcaMesonToPV{" dcaMesonToPV" , 0.05 , " DCA of meson daughter track To PV" };
148+ Configurable<float > dcaDaugToPVForK0s{" dcaDaugToPVForK0s" , 0 , " DCA of K0s daughter tracks To PV" };
146149 Configurable<float > v0RadiusMin{" v0RadiusMin" , 0.5 , " v0radius" };
147150 Configurable<float > v0RadiusMax{" v0RadiusMax" , 200 , " v0radius" };
148151
@@ -764,9 +767,12 @@ struct HStrangeCorrelationFilter {
764767 continue ;
765768 if (posdau.tpcNClsCrossedRows () < trackSelections.minTPCNCrossedRows )
766769 continue ;
770+ if (trackSelections.requireClusterInITS && (posdau.itsNCls () < trackSelections.minITSClustersForDaughterTracks || negdau.itsNCls () < trackSelections.minITSClustersForDaughterTracks ))
771+ continue ;
767772
773+ float dcaDauCutForK0s = v0Selection.dcaDaugToPVForK0s == 0 ? v0Selection.dcaMesonToPV : v0Selection.dcaDaugToPVForK0s ;
768774 bool isGoodK0Short = (v0.distovertotmom (collision.posX (), collision.posY (), collision.posZ ()) * o2::constants::physics::MassK0Short < v0Selection.lifetimecutK0S &&
769- std::abs (v0.dcapostopv ()) > v0Selection. dcaMesonToPV && std::abs (v0.dcanegtopv ()) > v0Selection. dcaMesonToPV &&
775+ std::abs (v0.dcapostopv ()) > dcaDauCutForK0s && std::abs (v0.dcanegtopv ()) > dcaDauCutForK0s &&
770776 v0.qtarm () * v0Selection.armPodCut > std::abs (v0.alpha ()));
771777 bool isGoodLambda = (v0.distovertotmom (collision.posX (), collision.posY (), collision.posZ ()) * o2::constants::physics::MassLambda0 < v0Selection.lifetimecutLambda &&
772778 std::abs (v0.dcapostopv ()) > v0Selection.dcaBaryonToPV && std::abs (v0.dcanegtopv ()) > v0Selection.dcaMesonToPV );
@@ -890,9 +896,12 @@ struct HStrangeCorrelationFilter {
890896 continue ;
891897 if (posdau.tpcNClsCrossedRows () < trackSelections.minTPCNCrossedRows )
892898 continue ;
899+ if (trackSelections.requireClusterInITS && (posdau.itsNCls () < trackSelections.minITSClustersForDaughterTracks || negdau.itsNCls () < trackSelections.minITSClustersForDaughterTracks ))
900+ continue ;
893901
902+ float dcaDauCutForK0s = v0Selection.dcaDaugToPVForK0s == 0 ? v0Selection.dcaMesonToPV : v0Selection.dcaDaugToPVForK0s ;
894903 bool isGoodK0Short = v0.distovertotmom (collision.posX (), collision.posY (), collision.posZ ()) * o2::constants::physics::MassK0Short < v0Selection.lifetimecutK0S &&
895- std::abs (v0.dcapostopv ()) > v0Selection. dcaMesonToPV && std::abs (v0.dcanegtopv ()) > v0Selection. dcaMesonToPV &&
904+ std::abs (v0.dcapostopv ()) > dcaDauCutForK0s && std::abs (v0.dcanegtopv ()) > dcaDauCutForK0s &&
896905 v0.qtarm () * v0Selection.armPodCut > std::abs (v0.alpha ());
897906 bool isGoodLambda = v0.distovertotmom (collision.posX (), collision.posY (), collision.posZ ()) * o2::constants::physics::MassLambda0 < v0Selection.lifetimecutLambda &&
898907 std::abs (v0.dcapostopv ()) > v0Selection.dcaBaryonToPV && std::abs (v0.dcanegtopv ()) > v0Selection.dcaMesonToPV ;
@@ -1035,6 +1044,8 @@ struct HStrangeCorrelationFilter {
10351044 continue ;
10361045 if (!doPPAnalysis && !cascadeSelectedPbPb (casc, collision.posX (), collision.posY (), collision.posZ ()))
10371046 continue ;
1047+ if (trackSelections.requireClusterInITS && (posTrackCast.itsNCls () < trackSelections.minITSClustersForDaughterTracks || negTrackCast.itsNCls () < trackSelections.minITSClustersForDaughterTracks || bachTrackCast.itsNCls () < trackSelections.minITSClustersForDaughterTracks ))
1048+ continue ;
10381049
10391050 bool isGoodNegCascadePbPb = std::abs (casc.dcabachtopv ()) > cascSelection.dcaBachToPV && std::abs (casc.dcapostopv ()) > cascSelection.cascDcaBaryonToPV &&
10401051 std::abs (casc.dcanegtopv ()) > cascSelection.cascDcaMesonToPV ;
@@ -1192,6 +1203,8 @@ struct HStrangeCorrelationFilter {
11921203 continue ;
11931204 if (!doPPAnalysis && !cascadeSelectedPbPb (casc, collision.posX (), collision.posY (), collision.posZ ()))
11941205 continue ;
1206+ if (trackSelections.requireClusterInITS && (posTrackCast.itsNCls () < trackSelections.minITSClustersForDaughterTracks || negTrackCast.itsNCls () < trackSelections.minITSClustersForDaughterTracks || bachTrackCast.itsNCls () < trackSelections.minITSClustersForDaughterTracks ))
1207+ continue ;
11951208 bool isGoodNegCascadePbPb = (std::abs (casc.dcabachtopv ()) > cascSelection.dcaBachToPV && std::abs (casc.dcapostopv ()) > cascSelection.cascDcaBaryonToPV &&
11961209 std::abs (casc.dcanegtopv ()) > cascSelection.cascDcaMesonToPV );
11971210 bool isGoodPosCascadePbPb = (std::abs (casc.dcabachtopv ()) > cascSelection.dcaBachToPV && std::abs (casc.dcapostopv ()) > cascSelection.cascDcaMesonToPV &&
0 commit comments