@@ -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