@@ -199,8 +199,8 @@ struct taggingHFE {
199199 Configurable<float > cfg_max_chi2its{" cfg_max_chi2its" , 36.0 , " max chi2/NclsITS" };
200200 Configurable<int > cfg_min_ncluster_its{" cfg_min_ncluster_its" , 2 , " min ncluster its" };
201201 Configurable<int > cfg_min_ncluster_itsib{" cfg_min_ncluster_itsib" , 0 , " min ncluster itsib" };
202+ Configurable<int > cfg_itsib_type{" cfg_itsib_type" , 0 , " 0:free, 1:OR, 2:AND between 2 legs, else:free" };
202203 Configurable<float > cfg_min_dcaxy{" cfg_min_dcaxy" , 0.1 , " min dca XY for v0 legs in cm" };
203-
204204 Configurable<float > cfg_max_alpha_veto{" cfg_max_alpha_veto" , 0.95 , " max alpha for photon conversion rejection" };
205205 Configurable<float > cfg_max_qt_veto{" cfg_max_qt_veto" , 0.01 , " max qT for photon conversion rejection" };
206206
@@ -241,6 +241,12 @@ struct taggingHFE {
241241 Configurable<float > cfg_min_dcaxy_v0leg{" cfg_min_dcaxy_v0leg" , 0.1 , " min dca XY for v0 legs in cm" };
242242 Configurable<float > cfg_min_dcaxy_bachelor{" cfg_min_dcaxy_bachelor" , 0.05 , " min dca XY for bachelor in cm" };
243243 Configurable<float > cfg_min_dcaxy_v0{" cfg_min_dcaxy_v0" , 0.0 , " min dca XY for V0 in cm" };
244+
245+ Configurable<int > cfg_itsib_type{" cfg_itsib_type" , 0 , " 0:free, 1:OR, 2:AND between 2 legs, else:free" };
246+ Configurable<int > cfg_min_ncluster_its_v0leg{" cfg_min_ncluster_its_v0leg" , 2 , " min ncluster its" };
247+ Configurable<int > cfg_min_ncluster_itsib_v0leg{" cfg_min_ncluster_itsib_v0leg" , 0 , " min ncluster itsib" };
248+ Configurable<int > cfg_min_ncluster_its_bachelor{" cfg_min_ncluster_its_bachelor" , 2 , " min ncluster its" };
249+ Configurable<int > cfg_min_ncluster_itsib_bachelor{" cfg_min_ncluster_itsib_bachelor" , 0 , " min ncluster itsib" };
244250 } cascadeCut;
245251
246252 struct : ConfigurableGroup {
@@ -467,9 +473,11 @@ struct taggingHFE {
467473 fRegistry .add (" Cascade/hPt" , " pT of cascade;p_{T} (GeV/c)" , kTH1F , {{100 , 0 , 10 }}, false );
468474 fRegistry .add (" Cascade/hYPhi" , " rapidity vs. #varphi of cascade;#varphi (rad.);rapidity_{#Lambda}" , kTH2F , {{90 , 0 , 2 * M_PI}, {80 , -2 , +2 }}, false );
469475 fRegistry .add (" Cascade/hCosPA" , " cosPA;cosine of pointing angle" , kTH1F , {{100 , 0.9 , 1 }}, false );
476+ fRegistry .add (" Cascade/hLxy" , " decay length from PV;L_{xy} (cm)" , kTH1F , {{100 , 0 , 10 }}, false );
470477 fRegistry .add (" Cascade/hDCA2Legs" , " distance between 2 legs at PCA;distance between 2 legs (cm)" , kTH1F , {{100 , 0 , 1 }}, false );
471478 fRegistry .add (" Cascade/hV0CosPA" , " cosPA of V0 in cascade;cosine of pointing angle" , kTH1F , {{100 , 0.9 , 1 }}, false );
472479 fRegistry .add (" Cascade/hV0DCA2Legs" , " distance between 2 legs at PCA of V0 in cascade;distance between 2 legs (cm)" , kTH1F , {{100 , 0 , 1 }}, false );
480+ fRegistry .add (" Cascade/hV0Lxy" , " decay length from PV of V0;L_{xy} (cm)" , kTH1F , {{100 , 0 , 10 }}, false );
473481 fRegistry .add (" Cascade/hMassLambda" , " Lambda mass;m_{p#pi^{-}} (GeV/c^{2})" , kTH1F , {{100 , 1.08 , 1.18 }}, false );
474482 fRegistry .add (" Cascade/hMassXi" , " #Xi mass;m_{#Lambda#pi} (GeV/c^{2})" , kTH1F , {{100 , 1.27 , 1.37 }}, false );
475483 fRegistry .add (" Cascade/hMassOmega" , " #Omega mass;m_{#LambdaK} (GeV/c^{2})" , kTH1F , {{100 , 1.62 , 1.72 }}, false );
@@ -768,9 +776,10 @@ struct taggingHFE {
768776 return (cascadeCut.cfg_min_mass_Omega < cascade.mOmega () && cascade.mOmega () < cascadeCut.cfg_max_mass_Omega ) && (cascade.mXi () < cascadeCut.cfg_min_mass_Xi_veto || cascadeCut.cfg_max_mass_Xi_veto < cascade.mXi ());
769777 }
770778
771- template <bool isMC = true , typename TTrack>
779+ template <int trackType = 0 , bool isMC = true , typename TTrack>
772780 bool isSelectedV0Leg (TTrack const & track)
773781 {
782+ // trackType = 0:v0leg, 1:v0leg in cascade, 2:bachelor of cascade only for ITS requirements
774783 if constexpr (isMC) {
775784 if (!track.has_mcParticle ()) {
776785 return false ;
@@ -781,15 +790,21 @@ struct taggingHFE {
781790 return false ;
782791 }
783792
784- if (track.itsChi2NCl () > v0Cut.cfg_max_chi2its ) {
785- return false ;
786- }
787-
788- if (track.itsNCls () < v0Cut.cfg_min_ncluster_its ) {
789- return false ;
793+ if constexpr (trackType == 0 ) {
794+ if (track.itsNCls () < v0Cut.cfg_min_ncluster_its ) { // must be 2
795+ return false ;
796+ }
797+ } else if constexpr (trackType == 1 ) {
798+ if (track.itsNCls () < cascadeCut.cfg_min_ncluster_its_v0leg ) { // must be 2
799+ return false ;
800+ }
801+ } else if constexpr (trackType == 2 ) {
802+ if (track.itsNCls () < cascadeCut.cfg_min_ncluster_its_bachelor ) { // must be 2
803+ return false ;
804+ }
790805 }
791806
792- if (track.itsNClsInnerBarrel () < v0Cut.cfg_min_ncluster_itsib ) {
807+ if (track.itsChi2NCl () > v0Cut.cfg_max_chi2its ) {
793808 return false ;
794809 }
795810
@@ -816,6 +831,35 @@ struct taggingHFE {
816831 return true ;
817832 }
818833
834+ template <int typeSV, typename TTrack>
835+ bool checkITSibForV0Legs (TTrack const & t1, TTrack const & t2)
836+ {
837+ // typeSV = 0:v0, 1:cascade
838+ if constexpr (typeSV == 0 ) { // V0 legs
839+ if (v0Cut.cfg_itsib_type == 0 ) { // free
840+ return true ;
841+ } else if (v0Cut.cfg_itsib_type == 1 ) { // OR
842+ return t1.itsNClsInnerBarrel () >= v0Cut.cfg_min_ncluster_itsib || t2.itsNClsInnerBarrel () >= v0Cut.cfg_min_ncluster_itsib ;
843+ } else if (v0Cut.cfg_itsib_type == 2 ) { // AND
844+ return t1.itsNClsInnerBarrel () >= v0Cut.cfg_min_ncluster_itsib && t2.itsNClsInnerBarrel () >= v0Cut.cfg_min_ncluster_itsib ;
845+ } else {
846+ return true ;
847+ }
848+ } else if constexpr (typeSV == 1 ) { // V0 legs in cascade
849+ if (cascadeCut.cfg_itsib_type == 0 ) { // free
850+ return true ;
851+ } else if (cascadeCut.cfg_itsib_type == 1 ) { // OR
852+ return t1.itsNClsInnerBarrel () >= cascadeCut.cfg_min_ncluster_itsib_v0leg || t2.itsNClsInnerBarrel () >= cascadeCut.cfg_min_ncluster_itsib_v0leg ;
853+ } else if (cascadeCut.cfg_itsib_type == 2 ) { // AND
854+ return t1.itsNClsInnerBarrel () >= cascadeCut.cfg_min_ncluster_itsib_v0leg && t2.itsNClsInnerBarrel () >= cascadeCut.cfg_min_ncluster_itsib_v0leg ;
855+ } else {
856+ return true ;
857+ }
858+ } else {
859+ return true ;
860+ }
861+ }
862+
819863 template <typename TCollision>
820864 void fillEventHistograms (TCollision const & collision)
821865 {
@@ -879,8 +923,10 @@ struct taggingHFE {
879923 fRegistry .fill (HIST (" Cascade/hMassLambda" ), cascade.mLambda ());
880924 fRegistry .fill (HIST (" Cascade/hCosPA" ), cascade.casccosPA (collision.posX (), collision.posY (), collision.posZ ()));
881925 fRegistry .fill (HIST (" Cascade/hDCA2Legs" ), cascade.dcacascdaughters ());
926+ fRegistry .fill (HIST (" Cascade/hLxy" ), cascade.cascradius ());
882927 fRegistry .fill (HIST (" Cascade/hV0CosPA" ), cascade.v0cosPA (collision.posX (), collision.posY (), collision.posZ ()));
883928 fRegistry .fill (HIST (" Cascade/hV0DCA2Legs" ), cascade.dcaV0daughters ());
929+ fRegistry .fill (HIST (" Cascade/hV0Lxy" ), cascade.v0radius ());
884930
885931 if (cascade.sign () < 0 ) { // Xi- or Omega-
886932 if (isPionFromXi (collision, bachelor) && isProtonFromLambdaFromXi (collision, pos) && isPionFromLambdaFromXi (collision, neg)) {
@@ -1180,7 +1226,7 @@ struct taggingHFE {
11801226 if (pos.sign () * neg.sign () > 0 ) {
11811227 continue ;
11821228 }
1183- if (!isSelectedV0Leg (pos) || !isSelectedV0Leg (neg)) {
1229+ if (!isSelectedV0Leg< 0 , true > (pos) || !isSelectedV0Leg< 0 , true > (neg)) {
11841230 continue ;
11851231 }
11861232
@@ -1257,7 +1303,7 @@ struct taggingHFE {
12571303 continue ;
12581304 }
12591305
1260- if (!isSelectedV0Leg (pos) || !isSelectedV0Leg (neg) || !isSelectedV0Leg (bachelor)) {
1306+ if (!isSelectedV0Leg< 1 , true > (pos) || !isSelectedV0Leg< 1 , true > (neg) || !isSelectedV0Leg< 2 , true > (bachelor)) {
12611307 continue ;
12621308 }
12631309
@@ -1517,7 +1563,11 @@ struct taggingHFE {
15171563 for (const auto & v0 : v0s_per_coll) {
15181564 auto pos = v0.template posTrack_as <TTracks>();
15191565 auto neg = v0.template negTrack_as <TTracks>();
1520- if (!isSelectedV0Leg<isMC>(pos) || !isSelectedV0Leg<isMC>(neg)) {
1566+ if (!isSelectedV0Leg<0 , isMC>(pos) || !isSelectedV0Leg<0 , isMC>(neg)) {
1567+ continue ;
1568+ }
1569+
1570+ if (!checkITSibForV0Legs<0 >(pos, neg)) {
15211571 continue ;
15221572 }
15231573
@@ -1570,7 +1620,10 @@ struct taggingHFE {
15701620 continue ;
15711621 }
15721622
1573- if (!isSelectedV0Leg<isMC>(pos) || !isSelectedV0Leg<isMC>(neg) || !isSelectedV0Leg<isMC>(bachelor)) {
1623+ if (!isSelectedV0Leg<1 , isMC>(pos) || !isSelectedV0Leg<1 , isMC>(neg) || !isSelectedV0Leg<2 , isMC>(bachelor)) {
1624+ continue ;
1625+ }
1626+ if (!checkITSibForV0Legs<1 >(pos, neg)) {
15741627 continue ;
15751628 }
15761629
0 commit comments