Skip to content

Commit 10955de

Browse files
authored
[PWGLF] Update hStrangeCorrelationFilter.cxx (#13636)
1 parent 49f0778 commit 10955de

File tree

1 file changed

+74
-107
lines changed

1 file changed

+74
-107
lines changed

PWGLF/TableProducer/Strangeness/hStrangeCorrelationFilter.cxx

Lines changed: 74 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -63,13 +63,19 @@ struct HStrangeCorrelationFilter {
6363
Configurable<float> strangedEdxNSigmaLoose{"strangedEdxNSigmaLoose", 5, "Nsigmas for strange decay daughters"};
6464
Configurable<float> strangedEdxNSigma{"strangedEdxNSigma", 4, "Nsigmas for strange decay daughters"};
6565
Configurable<float> strangedEdxNSigmaTight{"strangedEdxNSigmaTight", 3, "Nsigmas for strange decay daughters"};
66+
Configurable<std::string> zorroMask{"zorroMask", "", "zorro trigger class to select on (empty: none)"};
6667

6768
// used for event selections in Pb-Pb
6869
Configurable<int> cfgCutOccupancyHigh{"cfgCutOccupancyHigh", 3000, "High cut on TPC occupancy"};
6970
Configurable<int> cfgCutOccupancyLow{"cfgCutOccupancyLow", 0, "Low cut on TPC occupancy"};
7071

71-
// event filtering
72-
Configurable<std::string> zorroMask{"zorroMask", "", "zorro trigger class to select on (empty: none)"};
72+
struct : ConfigurableGroup {
73+
// event filtering
74+
Configurable<float> zVertexCut{"zVertexCut", 10, "Cut on PV position"};
75+
Configurable<bool> selectINELgtZERO{"selectINELgtZERO", true, "select INEL>0 events"};
76+
Configurable<bool> requireAllGoodITSLayers{"requireAllGoodITSLayers", false, " require that in the event all ITS are good"};
77+
} eventSelections;
78+
7379
struct : ConfigurableGroup {
7480
// Trigger particle selections in phase space
7581
Configurable<float> triggerEtaMin{"triggerEtaMin", -0.8, "triggeretamin"};
@@ -123,21 +129,17 @@ struct HStrangeCorrelationFilter {
123129
Configurable<float> dcaXYpTdep{"dcaXYpTdep", 0.013, "[1] in |DCAxy| < [0]+[1]/pT"};
124130

125131
// cascade selections
126-
Configurable<float> cascadeSettingCospa{"cascadeSettingCospa", 0.95, "cascadeSettingCospa"};
127-
Configurable<float> cascadeSettingDcacascdau{"cascadeSettingDcacascdau", 1.0, "cascadeSettingDcacascdau"};
128-
Configurable<float> cascadeSettingDcabachtopv{"cascadeSettingDcabachtopv", 0.1, "cascadeSettingDcabachtopv"};
129-
Configurable<float> cascadeSettingCascradius{"cascadeSettingCascradius", 0.5, "cascadeSettingCascradius"};
130-
Configurable<float> cascadeSettingV0masswindow{"cascadeSettingV0masswindow", 0.01, "cascadeSettingV0masswindow"};
131-
Configurable<float> cascadeSettingMindcav0topv{"cascadeSettingMindcav0topv", 0.01, "cascadeSettingMindcav0topv"};
132+
Configurable<float> cascCospa{"cascCospa", 0.95, "cascCospa"};
133+
Configurable<float> cascRadius{"cascRadius", 0.5, "cascRadius"};
134+
Configurable<float> dcaCascdau{"dcaCascdau", 1.0, "dcaCascdau"};
135+
Configurable<float> dcaBachtopv{"dcaBachtopv", 0.1, "dcaBachtopv"};
136+
Configurable<float> cascV0masswindow{"cascV0masswindow", 0.01, "cascV0masswindow"};
137+
Configurable<float> cascMindcav0topv{"cascMindcav0topv", 0.01, "cascMindcav0topv"};
132138
} systCuts;
133139
struct : ConfigurableGroup {
134140
// cascade selections in PbPb
135-
Configurable<float> cascCospa{"cascCospa", 0.95, "cascCospa"};
136141
Configurable<float> cascDcacascdau{"cascDcacascdau", 1.0, "cascDcacascdau"};
137142
Configurable<float> cascDcabachtopv{"cascDcabachtopv", 0.1, "cascDcabachtopv"};
138-
Configurable<float> cascRadius{"cascRadius", 0.5, "cascRadius"};
139-
Configurable<float> cascV0masswindow{"cascV0masswindow", 0.01, "cascV0masswindow"};
140-
Configurable<float> cascMindcav0topv{"cascMindcav0topv", 0.01, "cascMindcav0topv"};
141143
Configurable<float> bachBaryonCosPA{"bachBaryonCosPA", 0.9999, "Bachelor baryon CosPA"};
142144
Configurable<float> bachBaryonDCAxyToPV{"bachBaryonDCAxyToPV", 0.08, "DCA bachelor baryon to PV"};
143145
Configurable<float> dcaBaryonToPV{"dcaBaryonToPV", 0.05, "DCA of baryon doughter track To PV"};
@@ -178,7 +180,7 @@ struct HStrangeCorrelationFilter {
178180
Filter preFilterV0 = nabs(aod::v0data::dcapostopv) > systCuts.dcaPostopv&&
179181
nabs(aod::v0data::dcanegtopv) > systCuts.dcaNegtopv&& aod::v0data::dcaV0daughters < systCuts.dcaV0dau;
180182
Filter preFilterCascade =
181-
nabs(aod::cascdata::dcapostopv) > systCuts.dcaPostopv&& nabs(aod::cascdata::dcanegtopv) > systCuts.dcaNegtopv&& nabs(aod::cascdata::dcabachtopv) > systCuts.cascadeSettingDcabachtopv&& aod::cascdata::dcaV0daughters < systCuts.dcaV0dau&& aod::cascdata::dcacascdaughters < systCuts.cascadeSettingCospa;
183+
nabs(aod::cascdata::dcapostopv) > systCuts.dcaPostopv&& nabs(aod::cascdata::dcanegtopv) > systCuts.dcaNegtopv&& nabs(aod::cascdata::dcabachtopv) > systCuts.dcaBachtopv&& aod::cascdata::dcaV0daughters < systCuts.dcaV0dau&& aod::cascdata::dcacascdaughters < systCuts.dcaCascdau;
182184

183185
// using V0LinkedTagged = soa::Join<aod::V0sLinked, aod::V0Tags>;
184186
// using CascadesLinkedTagged = soa::Join<aod::CascadesLinked, aod::CascTags>;
@@ -310,6 +312,38 @@ struct HStrangeCorrelationFilter {
310312
LOG(info) << "parameters now loaded for " << mRunNumber;
311313
}
312314

315+
// this function allows for all event selections to be done in a modular way
316+
template <typename TCollision>
317+
bool isCollisionSelected(TCollision const& collision)
318+
{
319+
// ________________________________________________
320+
// Perform basic event selection
321+
if (!collision.sel8()) {
322+
return false;
323+
}
324+
if (std::abs(collision.posZ()) > eventSelections.zVertexCut) {
325+
return false;
326+
}
327+
if (collision.centFT0M() > 100 || collision.centFT0M() < 0) {
328+
return false;
329+
}
330+
if (!collision.isInelGt0() && eventSelections.selectINELgtZERO) {
331+
return false;
332+
}
333+
if (!collision.selection_bit(aod::evsel::kIsGoodITSLayersAll) && eventSelections.requireAllGoodITSLayers) {
334+
return false;
335+
}
336+
if (zorroMask.value != "") {
337+
auto bc = collision.template bc_as<aod::BCsWithTimestamps>();
338+
initCCDB(bc);
339+
bool zorroSelected = zorro.isSelected(collision.template bc_as<aod::BCsWithTimestamps>().globalBC()); /// Just let Zorro do the accounting
340+
if (!zorroSelected) {
341+
return false;
342+
}
343+
}
344+
return true;
345+
}
346+
313347
// more event selections in Pb-Pb
314348
template <typename TCollision>
315349
bool isCollisionSelectedPbPb(TCollision collision)
@@ -446,7 +480,7 @@ struct HStrangeCorrelationFilter {
446480
if (std::abs(casc.bachBaryonDCAxyToPV()) > MorePbPbsystCuts.bachBaryonDCAxyToPV)
447481
return false;
448482
// casccosPA
449-
if (casc.casccosPA(pvx, pvy, pvz) < MorePbPbsystCuts.cascCospa)
483+
if (casc.casccosPA(pvx, pvy, pvz) < systCuts.cascCospa)
450484
return false;
451485
// dcacascdaughters
452486
float ptDepCut = MorePbPbsystCuts.dcaCacsDauPar0;
@@ -463,7 +497,7 @@ struct HStrangeCorrelationFilter {
463497
if (std::abs(casc.dcav0topv(pvx, pvy, pvz)) < MorePbPbsystCuts.cascdcaV0ToPV)
464498
return false;
465499
// cascradius
466-
if (casc.cascradius() < MorePbPbsystCuts.cascRadius)
500+
if (casc.cascradius() < systCuts.cascRadius)
467501
return false;
468502
// v0radius
469503
if (casc.v0radius() < MorePbPbsystCuts.cascv0RadiusMin)
@@ -478,26 +512,14 @@ struct HStrangeCorrelationFilter {
478512
}
479513

480514
// for real data processing
481-
void processTriggers(soa::Join<aod::Collisions, aod::EvSels>::iterator const& collision, soa::Filtered<FullTracks> const& tracks, aod::BCsWithTimestamps const&)
515+
void processTriggers(soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Ms, aod::CentFT0Cs, aod::PVMults>::iterator const& collision, soa::Filtered<FullTracks> const& tracks, aod::BCsWithTimestamps const&)
482516
{
483517
// Load parameters for sideband subtraction
484518
auto bc = collision.bc_as<aod::BCsWithTimestamps>();
485519
initParametersFromCCDB(bc);
486-
// Perform basic event selection
487-
if (!collision.sel8()) {
520+
if (((doPPAnalysis && !isCollisionSelected(collision))) || (!doPPAnalysis && !isCollisionSelectedPbPb(collision))) {
488521
return;
489522
}
490-
// No need to correlate stuff that's in far collisions
491-
if (std::abs(collision.posZ()) > 10.0) {
492-
return;
493-
}
494-
if (zorroMask.value != "") {
495-
initCCDB(bc);
496-
bool zorroSelected = zorro.isSelected(collision.bc_as<aod::BCsWithTimestamps>().globalBC()); /// Just let Zorro do the accounting
497-
if (!zorroSelected) {
498-
return;
499-
}
500-
}
501523

502524
/// _________________________________________________
503525
/// Step 1: Populate table with trigger tracks
@@ -514,26 +536,14 @@ struct HStrangeCorrelationFilter {
514536
}
515537

516538
// for MC processing
517-
void processTriggersMC(soa::Join<aod::Collisions, aod::EvSels>::iterator const& collision, soa::Filtered<FullTracksMC> const& tracks, aod::McParticles const&, aod::BCsWithTimestamps const&)
539+
void processTriggersMC(soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Ms, aod::CentFT0Cs, aod::PVMults>::iterator const& collision, soa::Filtered<FullTracksMC> const& tracks, aod::McParticles const&, aod::BCsWithTimestamps const&)
518540
{
519541
// Load parameters for sideband subtraction
520542
auto bc = collision.bc_as<aod::BCsWithTimestamps>();
521543
initParametersFromCCDB(bc);
522-
// Perform basic event selection
523-
if (!collision.sel8()) {
524-
return;
525-
}
526-
// No need to correlate stuff that's in far collisions
527-
if (std::abs(collision.posZ()) > 10.0) {
544+
if (((doPPAnalysis && !isCollisionSelected(collision))) || (!doPPAnalysis && !isCollisionSelectedPbPb(collision))) {
528545
return;
529546
}
530-
if (zorroMask.value != "") {
531-
initCCDB(bc);
532-
bool zorroSelected = zorro.isSelected(collision.bc_as<aod::BCsWithTimestamps>().globalBC()); /// Just let Zorro do the accounting
533-
if (!zorroSelected) {
534-
return;
535-
}
536-
}
537547

538548
/// _________________________________________________
539549
/// Step 1: Populate table with trigger tracks
@@ -671,28 +681,13 @@ struct HStrangeCorrelationFilter {
671681
}
672682
}
673683

674-
void processV0s(soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Ms, aod::CentFT0Cs>::iterator const& collision, DauTracks const&, soa::Filtered<V0DatasWithoutTrackX> const& V0s, aod::BCsWithTimestamps const&)
684+
void processV0s(soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Ms, aod::CentFT0Cs, aod::PVMults>::iterator const& collision, DauTracks const&, soa::Filtered<V0DatasWithoutTrackX> const& V0s, aod::BCsWithTimestamps const&)
675685
{
676686
auto bc = collision.bc_as<aod::BCsWithTimestamps>();
677687
double cent = doPPAnalysis ? collision.centFT0M() : collision.centFT0C();
678-
// Perform basic event selection
679-
if (!collision.sel8()) {
680-
return;
681-
}
682-
// No need to correlate stuff that's in far collisions
683-
if (std::abs(collision.posZ()) > 10.0) {
688+
if (((doPPAnalysis && !isCollisionSelected(collision))) || (!doPPAnalysis && !isCollisionSelectedPbPb(collision))) {
684689
return;
685690
}
686-
if (zorroMask.value != "") {
687-
initCCDB(bc);
688-
bool zorroSelected = zorro.isSelected(collision.bc_as<aod::BCsWithTimestamps>().globalBC()); /// Just let Zorro do the accounting
689-
if (!zorroSelected) {
690-
return;
691-
}
692-
}
693-
if (!doPPAnalysis && !isCollisionSelectedPbPb(collision))
694-
return;
695-
696691
/// _________________________________________________
697692
/// Populate table with associated V0s
698693
for (auto const& v0 : V0s) {
@@ -826,27 +821,13 @@ struct HStrangeCorrelationFilter {
826821
}
827822
}
828823

829-
void processV0sMC(soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Ms, aod::CentFT0Cs>::iterator const& collision, DauTracksMC const&, soa::Filtered<V0DatasWithoutTrackXMC> const& V0s, aod::McParticles const&, aod::BCsWithTimestamps const&)
824+
void processV0sMC(soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Ms, aod::CentFT0Cs, aod::PVMults>::iterator const& collision, DauTracksMC const&, soa::Filtered<V0DatasWithoutTrackXMC> const& V0s, aod::McParticles const&, aod::BCsWithTimestamps const&)
830825
{
831826
double cent = doPPAnalysis ? collision.centFT0M() : collision.centFT0C();
832827
auto bc = collision.bc_as<aod::BCsWithTimestamps>();
833-
// Perform basic event selection
834-
if (!collision.sel8()) {
835-
return;
836-
}
837-
// No need to correlate stuff that's in far collisions
838-
if (std::abs(collision.posZ()) > 10.0) {
828+
if (((doPPAnalysis && !isCollisionSelected(collision))) || (!doPPAnalysis && !isCollisionSelectedPbPb(collision))) {
839829
return;
840830
}
841-
if (zorroMask.value != "") {
842-
initCCDB(bc);
843-
bool zorroSelected = zorro.isSelected(collision.bc_as<aod::BCsWithTimestamps>().globalBC()); /// Just let Zorro do the accounting
844-
if (!zorroSelected) {
845-
return;
846-
}
847-
}
848-
if (!doPPAnalysis && !isCollisionSelectedPbPb(collision))
849-
return;
850831
/// _________________________________________________
851832
/// Populate table with associated V0s
852833

@@ -993,27 +974,13 @@ struct HStrangeCorrelationFilter {
993974
}
994975
}
995976

996-
void processCascades(soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Ms, aod::CentFT0Cs>::iterator const& collision, DauTracks const&, soa::Filtered<V0DatasWithoutTrackX> const& /*V0s*/, soa::Filtered<aod::CascDatas> const& Cascades, aod::BCsWithTimestamps const&)
977+
void processCascades(soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Ms, aod::CentFT0Cs, aod::PVMults>::iterator const& collision, DauTracks const&, soa::Filtered<V0DatasWithoutTrackX> const& /*V0s*/, soa::Filtered<aod::CascDatas> const& Cascades, aod::BCsWithTimestamps const&)
997978
{
998979
double cent = doPPAnalysis ? collision.centFT0M() : collision.centFT0C();
999980
auto bc = collision.bc_as<aod::BCsWithTimestamps>();
1000-
// Perform basic event selection
1001-
if (!collision.sel8()) {
1002-
return;
1003-
}
1004-
// No need to correlate stuff that's in far collisions
1005-
if (std::abs(collision.posZ()) > 10.0) {
981+
if (((doPPAnalysis && !isCollisionSelected(collision))) || (!doPPAnalysis && !isCollisionSelectedPbPb(collision))) {
1006982
return;
1007983
}
1008-
if (zorroMask.value != "") {
1009-
initCCDB(bc);
1010-
bool zorroSelected = zorro.isSelected(collision.bc_as<aod::BCsWithTimestamps>().globalBC()); /// Just let Zorro do the accounting
1011-
if (!zorroSelected) {
1012-
return;
1013-
}
1014-
}
1015-
if (!doPPAnalysis && !isCollisionSelectedPbPb(collision))
1016-
return;
1017984
/// _________________________________________________
1018985
/// Step 3: Populate table with associated Cascades
1019986
for (auto const& casc : Cascades) {
@@ -1023,6 +990,12 @@ struct HStrangeCorrelationFilter {
1023990
if (casc.pt() > systCuts.assocPtCutMax || casc.pt() < systCuts.assocPtCutMin) {
1024991
continue;
1025992
}
993+
if (doPPAnalysis && (casc.v0cosPA(collision.posX(), collision.posY(), collision.posZ()) < systCuts.v0Cospa ||
994+
casc.casccosPA(collision.posX(), collision.posY(), collision.posZ()) < systCuts.cascCospa ||
995+
casc.cascradius() < systCuts.cascRadius ||
996+
std::abs(casc.dcav0topv(collision.posX(), collision.posY(), collision.posZ())) < systCuts.cascMindcav0topv ||
997+
std::abs(casc.mLambda() - o2::constants::physics::MassLambda0) > systCuts.cascV0masswindow))
998+
continue;
1026999
auto bachTrackCast = casc.bachelor_as<DauTracks>();
10271000
auto posTrackCast = casc.posTrack_as<DauTracks>();
10281001
auto negTrackCast = casc.negTrack_as<DauTracks>();
@@ -1171,27 +1144,14 @@ struct HStrangeCorrelationFilter {
11711144
}
11721145
}
11731146

1174-
void processCascadesMC(soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Ms, aod::CentFT0Cs>::iterator const& collision, DauTracks const&, soa::Filtered<V0DatasWithoutTrackXMC> const& /*V0s*/, soa::Filtered<CascDatasMC> const& Cascades, aod::McParticles const&, aod::BCsWithTimestamps const&)
1147+
void processCascadesMC(soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Ms, aod::CentFT0Cs, aod::PVMults>::iterator const& collision, DauTracks const&, soa::Filtered<V0DatasWithoutTrackXMC> const& /*V0s*/, soa::Filtered<CascDatasMC> const& Cascades, aod::McParticles const&, aod::BCsWithTimestamps const&)
11751148
{
11761149
double cent = doPPAnalysis ? collision.centFT0M() : collision.centFT0C();
11771150
auto bc = collision.bc_as<aod::BCsWithTimestamps>();
11781151
// Perform basic event selection
1179-
if (!collision.sel8()) {
1152+
if (((doPPAnalysis && !isCollisionSelected(collision))) || (!doPPAnalysis && !isCollisionSelectedPbPb(collision))) {
11801153
return;
11811154
}
1182-
// No need to correlate stuff that's in far collisions
1183-
if (std::abs(collision.posZ()) > 10.0) {
1184-
return;
1185-
}
1186-
if (zorroMask.value != "") {
1187-
initCCDB(bc);
1188-
bool zorroSelected = zorro.isSelected(collision.bc_as<aod::BCsWithTimestamps>().globalBC()); /// Just let Zorro do the accounting
1189-
if (!zorroSelected) {
1190-
return;
1191-
}
1192-
}
1193-
if (!doPPAnalysis && !isCollisionSelectedPbPb(collision))
1194-
return;
11951155
/// _________________________________________________
11961156
/// Step 3: Populate table with associated Cascades
11971157
for (auto const& casc : Cascades) {
@@ -1201,6 +1161,13 @@ struct HStrangeCorrelationFilter {
12011161
if (casc.pt() > systCuts.assocPtCutMax || casc.pt() < systCuts.assocPtCutMin) {
12021162
continue;
12031163
}
1164+
if (doPPAnalysis && (casc.v0cosPA(collision.posX(), collision.posY(), collision.posZ()) < systCuts.v0Cospa ||
1165+
casc.casccosPA(collision.posX(), collision.posY(), collision.posZ()) < systCuts.cascCospa ||
1166+
casc.cascradius() < systCuts.cascRadius ||
1167+
std::abs(casc.dcav0topv(collision.posX(), collision.posY(), collision.posZ())) < systCuts.cascMindcav0topv ||
1168+
std::abs(casc.mLambda() - o2::constants::physics::MassLambda0) > systCuts.cascV0masswindow))
1169+
continue;
1170+
12041171
auto bachTrackCast = casc.bachelor_as<DauTracks>();
12051172
auto posTrackCast = casc.posTrack_as<DauTracks>();
12061173
auto negTrackCast = casc.negTrack_as<DauTracks>();

0 commit comments

Comments
 (0)