1010// or submit itself to any jurisdiction.
1111// / \author Nicolo' Jacazio <nicolo.jacazio@cern.ch>, CERN
1212// / \author David Dobrigkeit Chinellato <david.dobrigkeit.chinellato@cern.ch>, UNICAMP/CERN
13+ // / \brief Centrality producer for ALICE3
14+ // / \file alice3Centrality.cxx
1315
1416#include " Common/DataModel/Centrality.h"
1517#include " Common/DataModel/TrackSelectionTables.h"
2527#include < Framework/InitContext.h>
2628#include < Framework/OutputObjHeader.h>
2729#include < Framework/runDataProcessing.h>
30+ #include < Framework/Expressions.h>
2831
2932#include < TH1.h>
3033#include < TString.h>
@@ -36,63 +39,60 @@ using namespace o2;
3639using namespace o2 ::framework;
3740using namespace o2 ::framework::expressions;
3841
39- struct ALICE3Centrality {
42+ constexpr float DefaultMult = 10000 .0f ;
43+
44+ struct Alice3Centrality {
4045 Produces<aod::CentRun2V0Ms> cent;
4146 Service<o2::ccdb::BasicCCDBManager> ccdb;
4247
4348 HistogramRegistry histos{" Histos" , {}, OutputObjHandlingPolicy::AnalysisObject};
44- Configurable<float > MinEta{" MinEta" , -4 .0f , " Minimum eta in range" };
45- Configurable<float > MaxEta{" MaxEta" , 4 .0f , " Maximum eta in range" };
46- Configurable<float > MaxMult{" MaxMult" , 10000 .f , " Maximum multiplicity in range" };
47- Configurable<float > MaxDCA{" MaxDCA" , 0 .0025f , " Max DCAxy and DCAz for counted tracks" };
48- Configurable<std::string> url{" ccdb-url" , " http://alice-ccdb.cern.ch" , " url of the ccdb repository" };
49+ Configurable<int64_t > ccdbNoLaterThan{" ccdbNoLaterThan" , 1 , " latest acceptable timestamp of creation for the object" };
50+ Configurable<float > minEta{" minEta" , -4 .0f , " Minimum eta in range" };
51+ Configurable<float > maxEta{" maxEta" , 4 .0f , " Maximum eta in range" };
52+ Configurable<float > maxMult{" maxMult" , 10000 .0f , " Maximum multiplicity in range" };
53+ Configurable<float > maxDCA{" maxDCA" , 0 .0025f , " Max DCAxy and DCAz for counted tracks" };
54+ Configurable<float > vtxZ{" vtxZ" , 10 .0f , " Max event vertex z position allowed" };
55+ Configurable<int > minNumContrib{" minNumContrib" , 1 , " Minimum required number of primary vertex contributors" };
56+ Configurable<std::string> ccdbUrl{" ccdbUrl" , " http://alice-ccdb.cern.ch" , " url of the ccdb repository" };
57+
58+ Filter trackFilter = (aod::track::eta >= minEta) && (aod::track::eta <= maxEta) && (nabs(aod::track::dcaXY) <= maxDCA) && (nabs(aod::track::dcaZ) <= maxDCA);
4959
5060 bool centralityLoaded = false ;
5161 TH1D * hCumMultALICE3 = nullptr ;
5262
5363 void init (InitContext&)
5464 {
55- const AxisSpec axisMult{MaxMult .value > 10000 . f ? 10000 : (int )MaxMult , 0 , MaxMult , " Reconstructed tracks" };
65+ const AxisSpec axisMult{maxMult .value > DefaultMult ? ( int )DefaultMult : (int )maxMult , 0 , maxMult , " Reconstructed tracks" };
5666 const AxisSpec axisCent{150 , 0 , 150 , " Percentile" };
57- TString tit = Form (" %.3f < #it{#eta} < %.3f" , MinEta .value , MaxEta .value );
67+ TString tit = Form (" %.3f < #it{#eta} < %.3f" , minEta .value , maxEta .value );
5868 histos.add (" centrality/numberOfTracks" , tit, kTH1D , {axisMult});
5969 histos.add (" centrality/centralityDistribution" , " Centrality test" , kTH1D , {axisCent});
6070
61- ccdb->setURL (url .value );
71+ ccdb->setURL (ccdbUrl .value );
6272 ccdb->setCaching (true );
6373 ccdb->setLocalObjectValidityChecking ();
6474 }
6575
66- int nevs = 0 ;
67- void process (const o2::aod::Collision& collision, const soa::Join<aod::Tracks, aod::TracksDCA>& tracks)
76+ void process (const o2::aod::Collision& collision, const soa::Filtered<soa::Join<aod::Tracks, aod::TracksDCA>>& tracks)
6877 {
6978 if (!centralityLoaded) {
70- hCumMultALICE3 = ccdb->getForTimeStamp <TH1D >(" Analysis/ALICE3/Centrality" , 1 );
79+ hCumMultALICE3 = ccdb->getForTimeStamp <TH1D >(" Analysis/ALICE3/Centrality" , ccdbNoLaterThan. value );
7180 centralityLoaded = true ;
7281 LOGF (info, " ALICE 3 centrality calibration loaded!" );
7382 }
7483
75- int nTracks = 0 ;
76- if (collision.numContrib () < 1 ) {
84+ if (collision.numContrib () < minNumContrib.value ) {
7785 histos.fill (HIST (" centrality/centralityDistribution" ), 101 );
7886 cent (101 );
7987 return ;
8088 }
81- if (fabs (collision.posZ ()) > 10 ) {
89+ if (std:: fabs (collision.posZ ()) > vtxZ. value ) {
8290 histos.fill (HIST (" centrality/centralityDistribution" ), 102 );
8391 cent (102 );
8492 return ;
8593 }
86- for (const auto & track : tracks) {
87- if (track.eta () < MinEta || track.eta () > MaxEta) {
88- continue ;
89- }
90- if (abs (track.dcaXY ()) > MaxDCA || abs (track.dcaZ ()) > MaxDCA) {
91- continue ;
92- }
93- nTracks++;
94- }
95- LOG (info) << nevs++ << " ) Event " << collision.globalIndex () << " has " << nTracks << " tracks" ;
94+
95+ const auto nTracks = tracks.size ();
9696 histos.fill (HIST (" centrality/numberOfTracks" ), nTracks);
9797
9898 float centALICE3 = hCumMultALICE3->GetBinContent (hCumMultALICE3->FindBin (nTracks));
@@ -103,5 +103,5 @@ struct ALICE3Centrality {
103103
104104WorkflowSpec defineDataProcessing (ConfigContext const & cfgc)
105105{
106- return WorkflowSpec{adaptAnalysisTask<ALICE3Centrality >(cfgc, TaskName{ " alice3-centrality " } )};
106+ return WorkflowSpec{adaptAnalysisTask<Alice3Centrality >(cfgc)};
107107}
0 commit comments