2727#include " Framework/ASoAHelpers.h"
2828#include " Common/DataModel/Multiplicity.h"
2929#include " Common/DataModel/Centrality.h"
30+ #include " CCDB/BasicCCDBManager.h"
3031#include " TF1.h"
3132
33+ #include " EventFiltering/Zorro.h"
34+ #include " EventFiltering/ZorroSummary.h"
35+
3236using namespace o2 ;
3337using namespace o2 ::framework;
3438using namespace o2 ::framework::expressions;
@@ -37,6 +41,8 @@ using namespace o2::framework::expressions;
3741#define bitcheck (var, nbit ) ((var) & (1 << (nbit)))
3842
3943struct hstrangecorrelationfilter {
44+ Service<o2::ccdb::BasicCCDBManager> ccdb;
45+
4046 HistogramRegistry histos{" Histos" , {}, OutputObjHandlingPolicy::AnalysisObject};
4147
4248 // Operational
@@ -45,6 +51,9 @@ struct hstrangecorrelationfilter {
4551 Configurable<float > strangedEdxNSigma{" strangedEdxNSigma" , 4 , " Nsigmas for strange decay daughters" };
4652 Configurable<float > strangedEdxNSigmaTight{" strangedEdxNSigmaTight" , 3 , " Nsigmas for strange decay daughters" };
4753
54+ // event filtering
55+ Configurable<std::string> zorroMask{" zorroMask" , " " , " zorro trigger class to select on (empty: none)" };
56+
4857 // Trigger particle selections in phase space
4958 Configurable<float > triggerEtaMin{" triggerEtaCutMin" , -0.8 , " triggeretamin" };
5059 Configurable<float > triggerEtaMax{" triggerEtaCutMax" , 0.8 , " triggeretamax" };
@@ -125,10 +134,6 @@ struct hstrangecorrelationfilter {
125134 Filter preFilterCascade =
126135 nabs (aod::cascdata::dcapostopv) > dcaPostopv&& nabs(aod::cascdata::dcanegtopv) > dcaNegtopv&& nabs(aod::cascdata::dcabachtopv) > cascadesetting_dcabachtopv&& aod::cascdata::dcaV0daughters < dcaV0dau&& aod::cascdata::dcacascdaughters < cascadesetting_dcacascdau;
127136
128- // histogram defined with HistogramRegistry
129- HistogramRegistry registry{
130- " registry" ,
131- {}};
132137 using V0LinkedTagged = soa::Join<aod::V0sLinked, aod::V0Tags>;
133138 using CascadesLinkedTagged = soa::Join<aod::CascadesLinked, aod::CascTags>;
134139 using DauTracks = soa::Join<aod::Tracks, aod::TracksExtra, aod::pidTPCFullPi, aod::pidTPCFullKa, aod::pidTPCFullPr, aod::TracksDCA>;
@@ -152,8 +157,15 @@ struct hstrangecorrelationfilter {
152157 TF1* fOmegaMean = new TF1(" fomegaMean" , " [0]+[1]*x+[2]*TMath::Exp(-[3]*x)" );
153158 TF1* fOmegaWidth = new TF1(" fomegaWidth" , " [0]+[1]*x+[2]*TMath::Exp(-[3]*x)" );
154159
160+ Zorro zorro;
161+ OutputObj<ZorroSummary> zorroSummary{" zorroSummary" };
162+ int mRunNumber ;
163+
155164 void init (InitContext const &)
156165 {
166+ zorroSummary.setObject (zorro.getZorroSummary ());
167+ mRunNumber = -1 ;
168+
157169 fK0Mean ->SetParameters (massParsK0Mean->at (0 ), massParsK0Mean->at (1 ), massParsK0Mean->at (2 ), massParsK0Mean->at (3 ));
158170 fK0Width ->SetParameters (massParsK0Width->at (0 ), massParsK0Width->at (1 ), massParsK0Width->at (2 ), massParsK0Width->at (3 ));
159171 fLambdaMean ->SetParameters (massParsLambdaMean->at (0 ), massParsLambdaMean->at (1 ), massParsLambdaMean->at (2 ), massParsLambdaMean->at (3 ));
@@ -172,6 +184,18 @@ struct hstrangecorrelationfilter {
172184 histos.add (" h3dMassOmegaPlus" , " h3dMassOmegaPlus" , kTH3F , {axisPtQA, axisOmegaMass, axisMult});
173185 }
174186
187+ void initCCDB (aod::BCsWithTimestamps::iterator const & bc)
188+ {
189+ if (mRunNumber == bc.runNumber ()) {
190+ return ;
191+ }
192+
193+ zorro.initCCDB (ccdb.service , bc.runNumber (), bc.timestamp (), zorroMask.value );
194+ zorro.populateHistRegistry (histos, bc.runNumber ());
195+
196+ mRunNumber = bc.runNumber ();
197+ }
198+
175199 // reco-level trigger quality checks (N.B.: DCA is filtered, not selected)
176200 template <class TTrack >
177201 bool isValidTrigger (TTrack track)
@@ -199,7 +223,7 @@ struct hstrangecorrelationfilter {
199223 }
200224
201225 // for real data processing
202- void processTriggers (soa::Join<aod::Collisions, aod::EvSels>::iterator const & collision, soa::Filtered<DauTracks> const & tracks)
226+ void processTriggers (soa::Join<aod::Collisions, aod::EvSels>::iterator const & collision, soa::Filtered<DauTracks> const & tracks, aod::BCsWithTimestamps const & )
203227 {
204228 // Perform basic event selection
205229 if (!collision.sel8 ()) {
@@ -209,6 +233,14 @@ struct hstrangecorrelationfilter {
209233 if (TMath::Abs (collision.posZ ()) > 10.0 ) {
210234 return ;
211235 }
236+ if (zorroMask.value != " " ) {
237+ auto bc = collision.bc_as <aod::BCsWithTimestamps>();
238+ initCCDB (bc);
239+ bool zorroSelected = zorro.isSelected (collision.bc_as <aod::BCsWithTimestamps>().globalBC ()); // / Just let Zorro do the accounting
240+ if (!zorroSelected) {
241+ return ;
242+ }
243+ }
212244
213245 // / _________________________________________________
214246 // / Step 1: Populate table with trigger tracks
@@ -224,7 +256,7 @@ struct hstrangecorrelationfilter {
224256 }
225257
226258 // for MC processing
227- void processTriggersMC (soa::Join<aod::Collisions, aod::EvSels>::iterator const & collision, soa::Filtered<DauTracksMC> const & tracks, aod::McParticles const &)
259+ void processTriggersMC (soa::Join<aod::Collisions, aod::EvSels>::iterator const & collision, soa::Filtered<DauTracksMC> const & tracks, aod::McParticles const &, aod::BCsWithTimestamps const & )
228260 {
229261 // Perform basic event selection
230262 if (!collision.sel8 ()) {
@@ -234,6 +266,14 @@ struct hstrangecorrelationfilter {
234266 if (TMath::Abs (collision.posZ ()) > 10.0 ) {
235267 return ;
236268 }
269+ if (zorroMask.value != " " ) {
270+ auto bc = collision.bc_as <aod::BCsWithTimestamps>();
271+ initCCDB (bc);
272+ bool zorroSelected = zorro.isSelected (collision.bc_as <aod::BCsWithTimestamps>().globalBC ()); // / Just let Zorro do the accounting
273+ if (!zorroSelected) {
274+ return ;
275+ }
276+ }
237277
238278 // / _________________________________________________
239279 // / Step 1: Populate table with trigger tracks
@@ -255,7 +295,7 @@ struct hstrangecorrelationfilter {
255295 }
256296 }
257297
258- void processAssocPions (soa::Join<aod::Collisions, aod::EvSels>::iterator const & collision, soa::Filtered<IDTracks> const & tracks)
298+ void processAssocPions (soa::Join<aod::Collisions, aod::EvSels>::iterator const & collision, soa::Filtered<IDTracks> const & tracks, aod::BCsWithTimestamps const & )
259299 {
260300 // Perform basic event selection
261301 if (!collision.sel8 ()) {
@@ -265,6 +305,14 @@ struct hstrangecorrelationfilter {
265305 if (TMath::Abs (collision.posZ ()) > 10.0 ) {
266306 return ;
267307 }
308+ if (zorroMask.value != " " ) {
309+ auto bc = collision.bc_as <aod::BCsWithTimestamps>();
310+ initCCDB (bc);
311+ bool zorroSelected = zorro.isSelected (collision.bc_as <aod::BCsWithTimestamps>().globalBC ()); // / Just let Zorro do the accounting
312+ if (!zorroSelected) {
313+ return ;
314+ }
315+ }
268316
269317 // / _________________________________________________
270318 // / Step 1: Populate table with trigger tracks
@@ -321,7 +369,7 @@ struct hstrangecorrelationfilter {
321369 }
322370 }
323371
324- void processAssocHadrons (soa::Join<aod::Collisions, aod::EvSels>::iterator const & collision, soa::Filtered<soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksDCA>> const & tracks)
372+ void processAssocHadrons (soa::Join<aod::Collisions, aod::EvSels>::iterator const & collision, soa::Filtered<soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksDCA>> const & tracks, aod::BCsWithTimestamps const & )
325373 {
326374 // Perform basic event selection
327375 if (!collision.sel8 ()) {
@@ -331,6 +379,14 @@ struct hstrangecorrelationfilter {
331379 if (TMath::Abs (collision.posZ ()) > 10.0 ) {
332380 return ;
333381 }
382+ if (zorroMask.value != " " ) {
383+ auto bc = collision.bc_as <aod::BCsWithTimestamps>();
384+ initCCDB (bc);
385+ bool zorroSelected = zorro.isSelected (collision.bc_as <aod::BCsWithTimestamps>().globalBC ()); // / Just let Zorro do the accounting
386+ if (!zorroSelected) {
387+ return ;
388+ }
389+ }
334390
335391 // / _________________________________________________
336392 // / Step 1: Populate table with trigger tracks
@@ -355,7 +411,7 @@ struct hstrangecorrelationfilter {
355411 }
356412 }
357413
358- void processV0s (soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Ms>::iterator const & collision, DauTracks const &, soa::Filtered<V0DatasWithoutTrackX> const & V0s, V0LinkedTagged const &)
414+ void processV0s (soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Ms>::iterator const & collision, DauTracks const &, soa::Filtered<V0DatasWithoutTrackX> const & V0s, V0LinkedTagged const &, aod::BCsWithTimestamps const & )
359415 {
360416 // Perform basic event selection
361417 if (!collision.sel8 ()) {
@@ -365,6 +421,15 @@ struct hstrangecorrelationfilter {
365421 if (TMath::Abs (collision.posZ ()) > 10.0 ) {
366422 return ;
367423 }
424+ if (zorroMask.value != " " ) {
425+ auto bc = collision.bc_as <aod::BCsWithTimestamps>();
426+ initCCDB (bc);
427+ bool zorroSelected = zorro.isSelected (collision.bc_as <aod::BCsWithTimestamps>().globalBC ()); // / Just let Zorro do the accounting
428+ if (!zorroSelected) {
429+ return ;
430+ }
431+ }
432+
368433 // / _________________________________________________
369434 // / Populate table with associated V0s
370435 for (auto const & v0 : V0s) {
@@ -437,7 +502,7 @@ struct hstrangecorrelationfilter {
437502 }
438503 }
439504 }
440- void processCascades (soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Ms>::iterator const & collision, DauTracks const &, soa::Filtered<V0DatasWithoutTrackX> const & /* V0s*/ , soa::Filtered<aod::CascDatas> const & Cascades, aod::V0sLinked const &, CascadesLinkedTagged const &)
505+ void processCascades (soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Ms>::iterator const & collision, DauTracks const &, soa::Filtered<V0DatasWithoutTrackX> const & /* V0s*/ , soa::Filtered<aod::CascDatas> const & Cascades, aod::V0sLinked const &, CascadesLinkedTagged const &, aod::BCsWithTimestamps const & )
441506 {
442507 // Perform basic event selection
443508 if (!collision.sel8 ()) {
@@ -447,6 +512,14 @@ struct hstrangecorrelationfilter {
447512 if (TMath::Abs (collision.posZ ()) > 10.0 ) {
448513 return ;
449514 }
515+ if (zorroMask.value != " " ) {
516+ auto bc = collision.bc_as <aod::BCsWithTimestamps>();
517+ initCCDB (bc);
518+ bool zorroSelected = zorro.isSelected (collision.bc_as <aod::BCsWithTimestamps>().globalBC ()); // / Just let Zorro do the accounting
519+ if (!zorroSelected) {
520+ return ;
521+ }
522+ }
450523 // / _________________________________________________
451524 // / Step 3: Populate table with associated Cascades
452525 for (auto const & casc : Cascades) {
0 commit comments