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"
2022#include < Framework/AnalysisHelpers.h>
2123#include < Framework/AnalysisTask.h>
2224#include < Framework/Configurable.h>
25+ #include < Framework/Expressions.h>
2326#include < Framework/HistogramRegistry.h>
2427#include < Framework/HistogramSpec.h>
2528#include < Framework/InitContext.h>
3033#include < TString.h>
3134
3235#include < cmath>
36+ #include < cstdint>
3337#include < cstdlib>
38+ #include < string>
3439
3540using namespace o2 ;
3641using namespace o2 ::framework;
3742using namespace o2 ::framework::expressions;
3843
39- struct ALICE3Centrality {
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 > maxDCA{" maxDCA" , 0 .0025f , " Max DCAxy and DCAz for counted tracks" };
53+ Configurable<float > vtxZ{" vtxZ" , 10 .0f , " Max event vertex z position allowed" };
54+ Configurable<int > minNumContrib{" minNumContrib" , 1 , " Minimum required number of primary vertex contributors" };
55+ Configurable<std::string> ccdbUrl{" ccdbUrl" , " http://alice-ccdb.cern.ch" , " url of the ccdb repository" };
56+ Configurable<std::string> ccdbPath{" ccdbPath" , " Analysis/ALICE3/Centrality" , " path to the ccdb object" };
57+
58+ ConfigurableAxis axisMult{" axisMult" , {10000 , 0 , 10000 }, " Reconstructed tracks" };
59+ ConfigurableAxis axisCent{" axisCent" , {150 , 0 , 150 }, " Percentile" };
60+
61+ Filter trackFilter = (aod::track::eta >= minEta) && (aod::track::eta <= maxEta) && (nabs(aod::track::dcaXY) <= maxDCA) && (nabs(aod::track::dcaZ) <= maxDCA);
4962
5063 bool centralityLoaded = false ;
5164 TH1D * hCumMultALICE3 = nullptr ;
5265
5366 void init (InitContext&)
5467 {
55- const AxisSpec axisMult{MaxMult.value > 10000 .f ? 10000 : (int )MaxMult, 0 , MaxMult, " Reconstructed tracks" };
56- const AxisSpec axisCent{150 , 0 , 150 , " Percentile" };
57- TString tit = Form (" %.3f < #it{#eta} < %.3f" , MinEta.value , MaxEta.value );
68+ TString tit = Form (" %.3f < #it{#eta} < %.3f" , minEta.value , maxEta.value );
5869 histos.add (" centrality/numberOfTracks" , tit, kTH1D , {axisMult});
5970 histos.add (" centrality/centralityDistribution" , " Centrality test" , kTH1D , {axisCent});
6071
61- ccdb->setURL (url .value );
72+ ccdb->setURL (ccdbUrl .value );
6273 ccdb->setCaching (true );
6374 ccdb->setLocalObjectValidityChecking ();
6475 }
6576
66- int nevs = 0 ;
67- void process (const o2::aod::Collision& collision, const soa::Join<aod::Tracks, aod::TracksDCA>& tracks)
77+ void process (const o2::aod::Collision& collision, const soa::Filtered<soa::Join<aod::Tracks, aod::TracksDCA>>& tracks)
6878 {
6979 if (!centralityLoaded) {
70- hCumMultALICE3 = ccdb->getForTimeStamp <TH1D >(" Analysis/ALICE3/Centrality " , 1 );
80+ hCumMultALICE3 = ccdb->getForTimeStamp <TH1D >(ccdbPath. value , ccdbNoLaterThan. value );
7181 centralityLoaded = true ;
7282 LOGF (info, " ALICE 3 centrality calibration loaded!" );
7383 }
7484
75- int nTracks = 0 ;
76- if (collision.numContrib () < 1 ) {
85+ if (collision.numContrib () < minNumContrib.value ) {
7786 histos.fill (HIST (" centrality/centralityDistribution" ), 101 );
7887 cent (101 );
7988 return ;
8089 }
81- if (fabs (collision.posZ ()) > 10 ) {
90+ if (std:: fabs (collision.posZ ()) > vtxZ. value ) {
8291 histos.fill (HIST (" centrality/centralityDistribution" ), 102 );
8392 cent (102 );
8493 return ;
8594 }
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" ;
95+
96+ const auto nTracks = tracks.size ();
9697 histos.fill (HIST (" centrality/numberOfTracks" ), nTracks);
9798
9899 float centALICE3 = hCumMultALICE3->GetBinContent (hCumMultALICE3->FindBin (nTracks));
@@ -103,5 +104,5 @@ struct ALICE3Centrality {
103104
104105WorkflowSpec defineDataProcessing (ConfigContext const & cfgc)
105106{
106- return WorkflowSpec{adaptAnalysisTask<ALICE3Centrality >(cfgc, TaskName{ " alice3-centrality " } )};
107+ return WorkflowSpec{adaptAnalysisTask<Alice3Centrality >(cfgc)};
107108}
0 commit comments