@@ -126,6 +126,7 @@ struct HStrangeCorrelation {
126126 Configurable<bool > applyNewMCSelection{" applyNewMCSelection" , false , " apply new MC Generated selection" };
127127 Configurable<bool > doSeparateFT0Prediction{" doSeparateFT0Prediction" , false , " separate FT0M to FT0A and FT0C in prediction process" };
128128 Configurable<bool > useCentralityinPrediction{" useCentralityinPrediction" , false , " if true, use centrality instead of multiplisity" };
129+ Configurable<bool > doMirroringInDelataEta{" doMirroringInDelataEta" , false , " if true, fill only positive delta eta and mirror the negative side in post processing, Adjust the delta axis!" };
129130 } masterConfigurations;
130131
131132 // master analysis switches
@@ -204,13 +205,19 @@ struct HStrangeCorrelation {
204205 Configurable<bool > checksRequireTPCChi2{" checksRequireTPCChi2" , false , " require TPC chi2 per cluster for trigger and associated primary tracks" };
205206 Configurable<bool > requireClusterInITS{" requireClusterInITS" , false , " require cluster in ITS for V0 and cascade daughter tracks" };
206207 Configurable<int > minITSClustersForDaughterTracks{" minITSClustersForDaughterTracks" , 1 , " Minimum number of ITS clusters for V0 daughter tracks" };
208+ Configurable<bool > requireDCAzCut{" requireDCAzCut" , false , " require DCAz cut for trigger and associated primary tracks" };
207209
208210 // --- Trigger: DCA variation from basic formula: |DCAxy| < 0.004f + (0.013f / pt)
209211 Configurable<float > dcaXYconstant{" dcaXYconstant" , 0.004 , " [0] in |DCAxy| < [0]+[1]/pT" };
210212 Configurable<float > dcaXYpTdep{" dcaXYpTdep" , 0.013 , " [1] in |DCAxy| < [0]+[1]/pT" };
211213 // --- Assoc track: DCA variation from basic formula: |DCAxy| < 0.004f + (0.013f / pt)
212214 Configurable<float > dcaXYconstantAssoc{" dcaXYconstantAssoc" , 0.004 , " [0] in |DCAxy| < [0]+[1]/pT" };
213215 Configurable<float > dcaXYpTdepAssoc{" dcaXYpTdepAssoc" , 0.013 , " [1] in |DCAxy| < [0]+[1]/pT" };
216+
217+ Configurable<float > dcaZconstant{" dcaZconstant" , 0.004 , " [0] in |DCAz| < [0]+[1]/pT" };
218+ Configurable<float > dcaZpTdep{" dcaZpTdep" , 0.013 , " [1] in |DCAz| < [0]+[1]/pT" };
219+ Configurable<float > dcaZconstantAssoc{" dcaZconstantAssoc" , 0.004 , " [0] in |DCAz| < [0]+[1]/pT" };
220+ Configurable<float > dcaZpTdepAssoc{" dcaZpTdepAssoc" , 0.013 , " [1] in |DCAz| < [0]+[1]/pT" };
214221 Configurable<int > dEdxCompatibility{" dEdxCompatibility" , 1 , " 0: loose, 1: normal, 2: tight. Defined in HStrangeCorrelationFilter" };
215222 } trackSelection;
216223 struct : ConfigurableGroup {
@@ -594,6 +601,10 @@ struct HStrangeCorrelation {
594601 if (std::abs (track.dcaXY ()) > trackSelection.dcaXYconstant + trackSelection.dcaXYpTdep * std::abs (track.signed1Pt ())) {
595602 return false ;
596603 }
604+ // systematic variations: trigger DCAz
605+ if (trackSelection.requireDCAzCut && std::abs (track.dcaZ ()) > trackSelection.dcaZconstant + trackSelection.dcaZpTdep * std::abs (track.signed1Pt ())) {
606+ return false ;
607+ }
597608 if (track.pt () > axisRanges[3 ][1 ] || track.pt () < axisRanges[3 ][0 ]) {
598609 return false ;
599610 }
@@ -627,6 +638,10 @@ struct HStrangeCorrelation {
627638 if (std::abs (track.dcaXY ()) > trackSelection.dcaXYconstantAssoc + trackSelection.dcaXYpTdepAssoc * std::abs (track.signed1Pt ())) {
628639 return false ;
629640 }
641+ // systematic variations: trigger DCAz
642+ if (trackSelection.requireDCAzCut && std::abs (track.dcaZ ()) > trackSelection.dcaZconstantAssoc + trackSelection.dcaZpTdepAssoc * std::abs (track.signed1Pt ())) {
643+ return false ;
644+ }
630645 if (track.pt () > axisRanges[2 ][1 ] || track.pt () < axisRanges[2 ][0 ]) {
631646 return false ;
632647 }
@@ -905,6 +920,9 @@ struct HStrangeCorrelation {
905920 if (efficiencyFlags.applyEfficiencyPropagation ) {
906921 totalEffUncert = std::sqrt (std::pow (efficiencyTrigg * efficiencyError, 2 ) + std::pow (efficiencyTriggError * efficiency, 2 ));
907922 }
923+ if (masterConfigurations.doMirroringInDelataEta ) {
924+ deltaeta = std::abs (deltaeta);
925+ }
908926 double binFillThn[6 ] = {deltaphi, deltaeta, ptassoc, pttrigger, pvz, mult};
909927 if (TESTBIT (doCorrelation, Index) && (!efficiencyFlags.applyEfficiencyCorrection || efficiency != 0 ) && (masterConfigurations.doPPAnalysis || (TESTBIT (selMap, Index) && TESTBIT (selMap, Index + 3 )))) {
910928 if (assocCandidate.compatible (Index, trackSelection.dEdxCompatibility ) && (!masterConfigurations.doMCassociation || assocCandidate.mcTrue (Index)) && (!doAssocPhysicalPrimary || assocCandidate.mcPhysicalPrimary ()) && !mixing && -massWindowConfigurations.maxBgNSigma < assocCandidate.invMassNSigma (Index) && assocCandidate.invMassNSigma (Index) < -massWindowConfigurations.minBgNSigma ) {
@@ -1025,6 +1043,9 @@ struct HStrangeCorrelation {
10251043 if (efficiencyFlags.applyEfficiencyPropagation ) {
10261044 totalEffUncert = std::sqrt (std::pow (efficiencyTrigg * efficiencyAssocError, 2 ) + std::pow (efficiencyTriggError * efficiencyAssoc, 2 ));
10271045 }
1046+ if (masterConfigurations.doMirroringInDelataEta ) {
1047+ deltaeta = std::abs (deltaeta);
1048+ }
10281049 double binFillThn[6 ] = {deltaphi, deltaeta, ptassoc, pttrigger, pvz, mult};
10291050 static_for<0 , 2 >([&](auto i) {
10301051 constexpr int Index = i.value ;
@@ -1243,6 +1264,9 @@ struct HStrangeCorrelation {
12431264 if (efficiencyFlags.applyEfficiencyPropagation ) {
12441265 totalEffUncert = std::sqrt (std::pow (efficiencyTrigg * efficiencyError, 2 ) + std::pow (efficiencyTriggError * efficiency, 2 ));
12451266 }
1267+ if (masterConfigurations.doMirroringInDelataEta ) {
1268+ deltaeta = std::abs (deltaeta);
1269+ }
12461270 double binFillThn[6 ] = {deltaphi, deltaeta, ptassoc, pttrigger, pvz, mult};
12471271 if (TESTBIT (doCorrelation, Index + 3 ) && (!efficiencyFlags.applyEfficiencyCorrection || efficiency != 0 ) && (masterConfigurations.doPPAnalysis || (TESTBIT (cascselMap, Index) && TESTBIT (cascselMap, Index + 4 ) && TESTBIT (cascselMap, Index + 8 ) && TESTBIT (cascselMap, Index + 12 )))) {
12481272 if (assocCandidate.compatible (Index, trackSelection.dEdxCompatibility ) && (!masterConfigurations.doMCassociation || assocCandidate.mcTrue (Index)) && (!doAssocPhysicalPrimary || assocCandidate.mcPhysicalPrimary ()) && !mixing && -massWindowConfigurations.maxBgNSigma < assocCandidate.invMassNSigma (Index) && assocCandidate.invMassNSigma (Index) < -massWindowConfigurations.minBgNSigma ) {
@@ -1326,6 +1350,9 @@ struct HStrangeCorrelation {
13261350 if (efficiencyFlags.applyEfficiencyPropagation ) {
13271351 totalEffUncert = std::sqrt (std::pow (efficiencyTrigg * efficiencyAssocError, 2 ) + std::pow (efficiencyTriggError * efficiencyAssoc, 2 ));
13281352 }
1353+ if (masterConfigurations.doMirroringInDelataEta ) {
1354+ deltaeta = std::abs (deltaeta);
1355+ }
13291356 double binFillThn[6 ] = {deltaphi, deltaeta, ptassoc, pttrigger, pvz, mult};
13301357 static_for<0 , 3 >([&](auto i) {
13311358 constexpr int Index = i.value ;
@@ -1483,6 +1510,9 @@ struct HStrangeCorrelation {
14831510 totalEffUncert = std::sqrt (std::pow (efficiencyTrigger * efficiencyUncertainty, 2 ) + std::pow (efficiencyTriggerError * efficiency, 2 ));
14841511 totalPurityUncert = std::sqrt (std::pow (purityTrigger * purityUncertainty, 2 ) + std::pow (purity * purityTriggerError, 2 ));
14851512 }
1513+ if (masterConfigurations.doMirroringInDelataEta ) {
1514+ deltaeta = std::abs (deltaeta);
1515+ }
14861516 double binFillThn[6 ] = {deltaphi, deltaeta, ptassoc, pttrigger, pvz, mult};
14871517 double deltaPhiStar = calculateAverageDeltaPhiStar (triggForDeltaPhiStar, assocForDeltaPhiStar, bField);
14881518 if (!mixing) {
0 commit comments