4545#include " Common/Core/trackUtilities.h"
4646#include " Common/Core/TrackSelection.h"
4747
48+ #include " EventFiltering/Zorro.h"
49+ #include " EventFiltering/ZorroSummary.h"
50+
4851#include " CommonConstants/PhysicsConstants.h"
4952
5053#include " ReconstructionDataFormats/Track.h"
@@ -68,6 +71,9 @@ struct lambdalambda {
6871 using TrackCandidates = soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksDCA, aod::TrackSelection, aod::pidTPCFullPi, aod::pidTPCFullPr>;
6972 using V0TrackCandidate = aod::V0Datas;
7073
74+ Zorro zorro;
75+ OutputObj<ZorroSummary> zorroSummary{" zorroSummary" };
76+
7177 HistogramRegistry histos{
7278 " histos" ,
7379 {},
@@ -136,6 +142,9 @@ struct lambdalambda {
136142 Configurable<int > cfgNRotBkg{" cfgNRotBkg" , 10 , " the number of rotational backgrounds" };
137143 Configurable<int > cfgNoMixedEvents{" cfgNoMixedEvents" , 10 , " Number of mixed events per event" };
138144
145+ Configurable<bool > cfgSkimmedProcessing{" cfgSkimmedProcessing" , false , " Enable processing of skimmed data" };
146+ Configurable<std::string> triggerName{" triggerName" , " fLambdaLambda" , " Software trigger name" };
147+
139148 ConfigurableAxis massAxis{" massAxis" , {110 , 2.22 , 2.33 }, " Invariant mass axis" };
140149 ConfigurableAxis ptAxis{" ptAxis" , {VARIABLE_WIDTH, 0.2 , 0.5 , 1.0 , 1.5 , 2.0 , 2.5 , 3.0 , 4.0 , 5.0 , 6.5 , 8.0 , 10.0 , 100.0 }, " Transverse momentum bins" };
141150 ConfigurableAxis centAxis{" centAxis" , {VARIABLE_WIDTH, 0 , 10 , 20 , 50 , 100 }, " Centrality interval" };
@@ -157,8 +166,20 @@ struct lambdalambda {
157166 bool IsTriggered;
158167 bool IsSelected;
159168
169+ void initCCDB (aod::BCsWithTimestamps::iterator const & bc)
170+ {
171+ if (cfgSkimmedProcessing) {
172+ zorro.initCCDB (ccdb.service , bc.runNumber (), bc.timestamp (), triggerName.value );
173+ zorro.populateHistRegistry (histos, bc.runNumber ());
174+ }
175+ }
176+
160177 void init (o2::framework::InitContext&)
161178 {
179+ if (cfgSkimmedProcessing) {
180+ zorroSummary.setObject (zorro.getZorroSummary ());
181+ }
182+
162183 AxisSpec centQaAxis = {80 , 0.0 , 80.0 };
163184 AxisSpec PVzQaAxis = {300 , -15.0 , 15.0 };
164185 AxisSpec combAxis = {3 , -0.5 , 2.5 };
@@ -506,8 +527,15 @@ struct lambdalambda {
506527 histos.fill (HIST (" QA/CentDist" ), centrality, 1.0 );
507528 histos.fill (HIST (" QA/PVzDist" ), collision.posZ (), 1.0 );
508529
530+ auto bc = collision.bc_as <aod::BCsWithTimestamps>();
531+ if (cfgSkimmedProcessing) {
532+ initCCDB (bc);
533+ if (!zorro.isSelected (collision.template bc_as <aod::BCsWithTimestamps>().globalBC ())) {
534+ return ;
535+ }
536+ }
537+
509538 if (cfgEffCor) {
510- auto bc = collision.bc_as <aod::BCsWithTimestamps>();
511539 EffMap = ccdb->getForTimeStamp <TProfile2D>(cfgEffCorPath.value , bc.timestamp ());
512540 }
513541 FillHistograms (collision, collision, V0s, V0s);
@@ -520,26 +548,39 @@ struct lambdalambda {
520548 PROCESS_SWITCH (lambdalambda, processDataSame, " Process Event for same data" , true );
521549
522550 SliceCache cache;
523- using BinningTypeVertexContributor = ColumnBinningPolicy<aod::collision::PosZ, aod::cent::CentFT0M>;
551+ using BinningType = ColumnBinningPolicy<aod::collision::PosZ, aod::cent::CentFT0M>;
552+ BinningType colBinning{{vertexAxis, centAxis}, true };
524553
554+ Preslice<aod::V0Datas> tracksPerCollisionV0 = aod::v0data::collisionId;
525555 void processDataMixed (EventCandidates const & collisions,
526- TrackCandidates const & /* tracks*/ , aod::V0Datas const & V0s)
556+ TrackCandidates const & /* tracks*/ , aod::V0Datas const & V0s, aod::BCsWithTimestamps const & )
527557 {
528- auto tracksTuple = std::make_tuple (V0s);
529- BinningTypeVertexContributor binningOnPositions{{vertexAxis, centAxis}, true };
530- SameKindPair<EventCandidates, V0TrackCandidate, BinningTypeVertexContributor> pair{binningOnPositions, cfgNoMixedEvents, -1 , collisions, tracksTuple, &cache};
531- for (auto & [c1, tracks1, c2, tracks2] : pair) {
532- if (cfgCentEst == 1 ) {
533- centrality = c1.centFT0C ();
534- } else if (cfgCentEst == 2 ) {
535- centrality = c1.centFT0M ();
558+ int currentRun = -1 ;
559+ for (auto & [c1, c2] : selfCombinations (colBinning, cfgNoMixedEvents, -1 , collisions, collisions)) {
560+ if (c1.index () == c2.index ()) continue ;
561+
562+ auto bc1 = c1.bc_as <aod::BCsWithTimestamps>();
563+ auto bc2 = c2.bc_as <aod::BCsWithTimestamps>();
564+
565+ if (bc1.runNumber () != bc2.runNumber () ) continue ;
566+
567+ if (bc1.runNumber () != currentRun) {
568+ if (cfgSkimmedProcessing) {
569+ initCCDB (bc1);
570+ if (!zorro.isSelected (bc1.globalBC ()) || !zorro.isSelected (bc2.globalBC ())) {
571+ continue ;
572+ }
573+ }
536574 }
575+
576+ centrality = c1.centFT0M ();
537577 if (!eventSelected (c1))
538578 continue ;
539579 if (!eventSelected (c2))
540580 continue ;
541- if (c1.bcId () == c2.bcId ())
542- continue ;
581+
582+ auto tracks1 = V0s.sliceBy (tracksPerCollisionV0, c1.globalIndex ());
583+ auto tracks2 = V0s.sliceBy (tracksPerCollisionV0, c2.globalIndex ());
543584
544585 FillHistograms (c1, c2, tracks1, tracks2);
545586 }
0 commit comments