@@ -123,16 +123,17 @@ struct Filter2Prong {
123123 } grpV0;
124124
125125 struct : ConfigurableGroup {
126+ O2_DEFINE_CONFIGURABLE (storeLooseTightforphi, bool , true , " Store also loose and tight phi candidates for systematics" );
126127 O2_DEFINE_CONFIGURABLE (ImMinInvMassPhiMeson, float , 0 .98f , " Minimum invariant mass Phi meson (GeV)" );
127128 O2_DEFINE_CONFIGURABLE (ImMaxInvMassPhiMeson, float , 1 .07f , " Maximum invariant mass Phi meson (GeV)" );
128129 O2_DEFINE_CONFIGURABLE (ITSPIDSelection, bool , true , " PID ITS" );
129130 O2_DEFINE_CONFIGURABLE (ITSPIDPthreshold, float , 1.0 , " Momentum threshold for ITS PID (GeV/c) (only used if ITSPIDSelection is true)" );
130131 O2_DEFINE_CONFIGURABLE (lowITSPIDNsigma, float , 3.0 , " lower cut on PID nsigma for ITS" );
131132 O2_DEFINE_CONFIGURABLE (highITSPIDNsigma, float , 3.0 , " higher cut on PID nsigma for ITS" );
132133 O2_DEFINE_CONFIGURABLE (ITSclusterPhiMeson, int , 5 , " Minimum number of ITS cluster for phi meson track" );
133- O2_DEFINE_CONFIGURABLE (TPCCrossedRowsPhiMeson, int , 80 , " Minimum number of TPC Crossed Rows for phi meson track" );
134- O2_DEFINE_CONFIGURABLE (cutDCAxyPhiMeson, float , 0. 1 , " Maximum DCAxy for phi meson track " );
135- O2_DEFINE_CONFIGURABLE (cutDCAzPhiMeson, float , 0. 1 , " Maximum DCAz for phi meson track " );
134+ O2_DEFINE_CONFIGURABLE (TPCCrossedRowsPhiMeson, std::vector< int >, (std::vector< int >{ 70 , 80 , 90 }), " Minimum number of TPC Crossed Rows for phi meson track (Loose, Default, Tight) " );
135+ O2_DEFINE_CONFIGURABLE (cutDCAxyPhiMeson, std::vector< float >, (std::vector< float >{ 0.12 , 0. 1 , 0.08 }), " Maximum DCAxy for phi meson tracks (Loose, Default, Tight) " );
136+ O2_DEFINE_CONFIGURABLE (cutDCAzPhiMeson, std::vector< float >, (std::vector< float >{ 0.12 , 0. 1 , 0.08 }), " Maximum DCAz for phi meson tracks (Loose, Default, Tight) " );
136137 O2_DEFINE_CONFIGURABLE (cutEtaPhiMeson, float , 0.8 , " Maximum eta for phi meson track" );
137138 O2_DEFINE_CONFIGURABLE (cutPTPhiMeson, float , 0.15 , " Maximum pt for phi meson track" );
138139 O2_DEFINE_CONFIGURABLE (isDeepAngle, bool , true , " Flag for applying deep angle" );
@@ -318,7 +319,18 @@ struct Filter2Prong {
318319 template <typename T>
319320 bool selectionTrack (const T& candidate)
320321 {
321- if (candidate.isGlobalTrack () && candidate.isPVContributor () && candidate.itsNCls () >= grpPhi.ITSclusterPhiMeson && candidate.tpcNClsCrossedRows () > grpPhi.TPCCrossedRowsPhiMeson && std::abs (candidate.dcaXY ()) <= grpPhi.cutDCAxyPhiMeson && std::abs (candidate.dcaZ ()) <= grpPhi.cutDCAzPhiMeson && std::abs (candidate.eta ()) <= grpPhi.cutEtaPhiMeson && candidate.pt () >= grpPhi.cutPTPhiMeson ) {
322+ if (candidate.isGlobalTrack () && candidate.isPVContributor () && candidate.itsNCls () >= grpPhi.ITSclusterPhiMeson && std::abs (candidate.eta ()) <= grpPhi.cutEtaPhiMeson && candidate.pt () >= grpPhi.cutPTPhiMeson ) {
323+ return true ;
324+ }
325+ return false ;
326+ }
327+
328+ template <typename T>
329+ bool selectionSys (const T& candidate, bool isLoose, bool isTight)
330+ {
331+ const int indexCut = isLoose ? 0 : (isTight ? 2 : 1 );
332+
333+ if (std::abs (candidate.dcaXY ()) <= grpPhi.cutDCAxyPhiMeson .value [indexCut] && std::abs (candidate.dcaZ ()) <= grpPhi.cutDCAzPhiMeson .value [indexCut] && candidate.tpcNClsCrossedRows () > grpPhi.TPCCrossedRowsPhiMeson .value [indexCut]) {
322334 return true ;
323335 }
324336 return false ;
@@ -735,8 +747,24 @@ struct Filter2Prong {
735747 cftrack1.globalIndex (), cftrack2.globalIndex (), s.pt (), s.eta (), phi, s.M (), aod::cf2prongtrack::PhiToKKPID2);
736748 }
737749 if (selectionPID3 (p1) && selectionPID3 (p2)) {
738- output2ProngTracks (cfcollisions.begin ().globalIndex (),
739- cftrack1.globalIndex (), cftrack2.globalIndex (), s.pt (), s.eta (), phi, s.M (), aod::cf2prongtrack::PhiToKKPID3);
750+ if (selectionSys (p1, false , false ) && selectionSys (p2, false , false )) // default
751+ {
752+ output2ProngTracks (cfcollisions.begin ().globalIndex (),
753+ cftrack1.globalIndex (), cftrack2.globalIndex (), s.pt (), s.eta (), phi, s.M (), aod::cf2prongtrack::PhiToKKPID3);
754+ }
755+ if (grpPhi.storeLooseTightforphi ) // store also loose and tight K0s
756+ {
757+ if (selectionSys (p1, true , false ) && selectionSys (p2, true , false )) // loose
758+ {
759+ output2ProngTracks (cfcollisions.begin ().globalIndex (),
760+ cftrack1.globalIndex (), cftrack2.globalIndex (), s.pt (), s.eta (), phi, s.M (), aod::cf2prongtrack::PhiToKKPID3Loose);
761+ }
762+ if (selectionSys (p1, false , true ) && selectionSys (p2, false , true )) // tight
763+ {
764+ output2ProngTracks (cfcollisions.begin ().globalIndex (),
765+ cftrack1.globalIndex (), cftrack2.globalIndex (), s.pt (), s.eta (), phi, s.M (), aod::cf2prongtrack::PhiToKKPID3Tight);
766+ }
767+ }
740768 }
741769 } // end of loop over second track
742770 } // end of loop over first track
0 commit comments