@@ -30,171 +30,39 @@ using namespace o2;
3030using namespace o2 ::framework;
3131using namespace o2 ::framework::expressions;
3232
33- static constexpr float cfgPairCutDefaults[1 ][5 ] = {{-1 , -1 , -1 , -1 , -1 }};
34-
3533struct firstcorrelations {
36- // Declare configurables for correlations
37- Configurable<float > cfgZVtxCut = {" zvtxcut" , 7.0 , " Vertex z cut. Default 7 cm" };
38- Configurable<float > cfgPtCutMin = {" minpt" , 0.2 , " Minimum accepted track pT. Default 0.2 GeV" };
39- Configurable<float > cfgPtCutMax = {" maxpt" , 10.0 , " Maximum accepted track pT. Default 5.0 GeV" };
40- Configurable<float > cfgEtaCut = {" etacut" , 0.8 , " Eta cut. Default 0.8" };
41- Configurable<LabeledArray<float >> cfgPairCut{" cfgPairCut" ,
42- {cfgPairCutDefaults[0 ],
43- 5 ,
44- {" Photon" , " K0" , " Lambda" , " Phi" , " Rho" }},
45- " Pair cuts on various particles" };
46- // Configurable<float> cfgTwoTrackCut{"cfgTwoTrackCut", -1, {"Two track cut"}};
47- ConfigurableAxis axisVertex{" axisVertex" , {7 , -7 , 7 }, " vertex axis for histograms" };
48- ConfigurableAxis axisDeltaPhi{" axisDeltaPhi" , {72 , -constants::math::PIHalf, constants::math::PIHalf * 3 }, " delta phi axis for histograms" };
49- ConfigurableAxis axisDeltaEta{" axisDeltaEta" , {40 , -2 , 2 }, " delta eta axis for histograms" };
50- ConfigurableAxis axisPtTrigger{" axisPtTrigger" , {VARIABLE_WIDTH , 0.5 , 1.0 , 1.5 , 2.0 , 3.0 , 4.0 , 6.0 , 10.0 }, " pt trigger axis for histograms" };
51- ConfigurableAxis axisPtAssoc{" axisPtAssoc" , {VARIABLE_WIDTH , 0.5 , 1.0 , 1.5 , 2.0 , 3.0 , 4.0 , 6.0 }, " pt associated axis for histograms" };
52- ConfigurableAxis axisMultiplicity{" axisMultiplicity" , {VARIABLE_WIDTH , 0 , 5 , 10 , 20 , 30 , 40 , 50 , 100.1 }," multiplicity / centrality axis for histograms" };
53- ConfigurableAxis axisVertexEfficiency{" axisVertexEfficiency" , {10 , -10 , 10 }, " vertex axis for efficiency histograms" };
54- ConfigurableAxis axisEtaEfficiency{" axisEtaEfficiency" , {20 , -1.0 , 1.0 }, " eta axis for efficiency histograms" };
55- ConfigurableAxis axisPtEfficiency{" axisPtEfficiency" , {VARIABLE_WIDTH , 0.5 , 0.6 , 0.7 , 0.8 , 0.9 , 1.0 , 1.25 , 1.5 , 1.75 , 2.0 , 2.25 ,2.5 , 2.75 , 3.0 , 3.25 , 3.5 , 3.75 , 4.0 , 4.5 , 5.0 , 6.0 , 7.0 , 8.0 }, " pt axis for efficiency histograms" };
56-
57- // Output definitions
58- OutputObj<CorrelationContainer> same{" sameEvent" };
59- OutputObj<CorrelationContainer> mixed{" mixedEvent" };
60- HistogramRegistry histos{" histos" , {}, OutputObjHandlingPolicy::AnalysisObject};
61- PairCuts mPairCuts ;
62- bool doPairCuts = false ;
63-
6434 void init (InitContext&)
6535 {
6636 LOGF (info, " Starting init" );
6737
68- histos.add (" yields" , " multiplicity/centrality vs pT vs eta" , {HistType::kTH3F , {{100 , 0 , 100 , " /multiplicity/centrality" }, {40 , 0 , 20 , " p_{T}" }, {100 , -2 , 2 , " #eta" }}});
69- histos.add (" etaphi" , " multiplicity/centrality vs eta vs phi" , {HistType::kTH3F , {{100 , 0 , 100 , " multiplicity/centrality" }, {100 , -2 , 2 , " #eta" }, {200 , 0 , 2 * M_PI , " #varphi" }}});
70-
71- const int maxMixBin = axisMultiplicity->size () * axisVertex->size ();
72- histos.add (" eventcount" , " bin" , {HistType::kTH1F , {{maxMixBin + 2 , -2.5 , -0.5 + maxMixBin, " bin" }}});
73- mPairCuts .SetHistogramRegistry (&histos);
74- if (cfgPairCut->get (" Photon" ) > 0 || cfgPairCut->get (" K0" ) > 0 || cfgPairCut->get (" Lambda" ) > 0 ||
75- cfgPairCut->get (" Phi" ) > 0 || cfgPairCut->get (" Rho" ) > 0 ) {
76- mPairCuts .SetPairCut (PairCuts::Photon, cfgPairCut->get (" Photon" ));
77- mPairCuts .SetPairCut (PairCuts::K0 , cfgPairCut->get (" K0" ));
78- mPairCuts .SetPairCut (PairCuts::Lambda, cfgPairCut->get (" Lambda" ));
79- mPairCuts .SetPairCut (PairCuts::Phi, cfgPairCut->get (" Phi" ));
80- mPairCuts .SetPairCut (PairCuts::Rho, cfgPairCut->get (" Rho" ));
81- doPairCuts = true ;
82- }
83-
84- std::vector<AxisSpec> corrAxis = {{axisDeltaEta, " #Delta#eta" },
85- {axisPtAssoc, " p_{T} (GeV/c)" },
86- {axisPtTrigger, " p_{T} (GeV/c)" },
87- {axisMultiplicity, " multiplicity / centrality" },
88- {axisDeltaPhi, " #Delta#varphi (rad)" },
89- {axisVertex, " z-vtx (cm)" }};
90- std::vector<AxisSpec> effAxis = {{axisEtaEfficiency, " #eta" },
91- {axisEtaEfficiency, " #eta" },
92- {axisPtEfficiency, " p_{T} (GeV/c)" },
93- {axisVertexEfficiency, " z-vtx (cm)" }};
94- same.setObject (new CorrelationContainer (" sameEvent" , " sameEvent" , corrAxis, effAxis, {}));
95- mixed.setObject (new CorrelationContainer (" mixedEvent" , " mixedEvent" , corrAxis, effAxis, {}));
9638 LOGF (info, " Finishing init" );
9739 }
9840
99- std::vector<double > vtxBinsEdges{VARIABLE_WIDTH , -7 .0f , -5 .0f , -3 .0f , -1 .0f , 1 .0f , 3 .0f , 5 .0f , 7 .0f };
100- std::vector<double > multBinsEdges{VARIABLE_WIDTH , 0 .0f , 5 .0f , 10 .0f , 20 .0f , 30 .0f , 40 .0f , 50 .0f , 100 .0f };
101- SliceCache cache;
102-
103- ColumnBinningPolicy<aod::collision::PosZ, aod::cent::CentRun2V0M> bindingOnVtxAndMult{{vtxBinsEdges, multBinsEdges}, true }; // true is for ’ignore overflows’ (true by default)
104-
105- SameKindPair<soa::Filtered<soa::Join<aod::Collisions, aod::EvSels, aod::CentRun2V0Ms>>,
106- soa::Filtered<soa::Join<aod::Tracks, aod::TrackSelection>>,
107- ColumnBinningPolicy<aod::collision::PosZ, aod::cent::CentRun2V0M>>
108- pair{bindingOnVtxAndMult, 10 , -1 , &cache}; // indicates that 5 events should be mixed and under/overflow (-1) to be ignored
109-
110- Filter collisionZVtxFilter = nabs(aod::collision::posZ) < cfgZVtxCut;
111- Filter trackFilter = (nabs(aod::track::eta) < cfgEtaCut) && (aod::track::pt > cfgPtCutMin) && (aod::track::pt < cfgPtCutMax) && (requireGlobalTrackInFilter() || (aod::track::isGlobalTrackSDD == (uint8_t ) true ));
112-
11341 template <typename TCollision, typename TTracks>
114- void fillQA (TCollision collision, float centrality, TTracks tracks)
42+ void fillQA (TCollision /* collision*/ , float /* centrality*/ , TTracks /* tracks*/ )
11543 {
116- for (auto & track: tracks) {
117- histos.fill (HIST (" yields" ), centrality, track.pt (), track.eta ());
118- histos.fill (HIST (" etaphi" ), centrality, track.eta (), track.phi ());
119- }
12044 }
12145
12246 template <typename TTarget, typename TCollision>
123- bool fillCollision (TTarget target, TCollision collision, float centrality)
47+ bool fillCollision (TTarget /* target*/ , TCollision /* collision*/ , float /* centrality*/ )
12448 {
125- target->fillEvent (centrality, CorrelationContainer::kCFStepAll );
126-
127- if (!collision.alias_bit (kINT7 ) || !collision.sel7 ()){
128- return false ;
129- }
130-
131- target->fillEvent (centrality, CorrelationContainer::kCFStepReconstructed );
13249 return true ;
13350 }
13451
13552 template <typename TTarget, typename TTracks>
136- void fillCorrelations (TTarget target, TTracks tracks1, TTracks tracks2, float centrality, float posZ)
53+ void fillCorrelations (TTarget /* target*/ , TTracks /* tracks1*/ , TTracks /* tracks2*/ , float /* centrality*/ , float /* posZ*/ )
13754 {
138- for (auto & track1 : tracks1) {
139- target->getTriggerHist ()->Fill (CorrelationContainer::kCFStepReconstructed , track1.pt (), centrality, posZ, 1.0 );
140- for (auto & track2 : tracks2) {
141- if (track1 == track2) {
142- continue ;
143- }
144- if (doPairCuts && mPairCuts .conversionCuts (track1, track2)) {
145- continue ;
146- }
147- float deltaPhi = track1.phi () - track2.phi ();
148- if (deltaPhi > 1 .5f * PI ) {
149- deltaPhi -= TwoPI;
150- }
151- if (deltaPhi < -PIHalf) {
152- deltaPhi += TwoPI;
153- }
154- target->getPairHist ()->Fill (CorrelationContainer::kCFStepReconstructed ,track1.eta () - track2.eta (), track2.pt (), track1.pt (), centrality, deltaPhi, posZ,1.0 );
155- }
156- }
15755 }
15856
159- void processSame (soa::Filtered<soa::Join<aod::Collisions, aod::EvSels, aod::CentRun2V0Ms>>::iterator const & collision, soa::Filtered<soa::Join<aod::Tracks, aod::TrackSelection>> const & tracks )
57+ void processSame ()
16058 {
161- const auto centrality = collision.centRun2V0M ();
162- if (fillCollision (same, collision, centrality) == false ) {
163- return ;
164- }
165- LOGF (info, " Filling same events" );
166- histos.fill (HIST (" eventcount" ), -2 );
167- fillQA (collision, centrality, tracks);
168- fillCorrelations (same, tracks, tracks, centrality, collision.posZ ());
16959 }
17060
171- PROCESS_SWITCH (firstcorrelations, processSame, " Process same event" , true );
172-
173- void processMixed (soa::Filtered<soa::Join<aod::Collisions, aod::EvSels, aod::CentRun2V0Ms>>::iterator const & collisions, soa::Filtered<soa::Join<aod::Tracks, aod::TrackSelection>> const & tracks)
61+ void processMixed ()
17462 {
175- for (auto & [collision1, tracks1, collision2, tracks2] : pair) {
176- if (fillCollision (mixed, collision1, collision1.centRun2V0M ()) == false ) {
177- continue ;
178- }
179- LOGF (info, " Filling mixed events" );
180- histos.fill (HIST (" eventcount" ), bindingOnVtxAndMult.getBin ({collision1.posZ (), collision1.centRun2V0M ()}));
181- fillCorrelations (mixed, tracks1, tracks2, collision1.centRun2V0M (), collision1.posZ ());
182- }
18363 }
184-
185- PROCESS_SWITCH (firstcorrelations, processMixed, " Process mixed events" , true );
186-
187- void process (soa::Join<aod::Collisions, aod::EvSels, aod::CentRun2V0Ms>::iterator const & collision, aod::Tracks const & tracks)
64+ void process (aod::Collision const &, aod::Tracks const &)
18865 {
189- LOGF (info, " Received %d collisions" , collision.size ());
190-
191- const auto centrality = collision.centRun2V0M ();
192-
193- if (fillCollision (same, collision, centrality) == false ) {
194- return ;
195- }
196- histos.fill (HIST (" eventcount" ), -2 );
197- fillQA (collision, centrality, tracks);
19866 }
19967};
20068
@@ -203,4 +71,4 @@ WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
20371 return WorkflowSpec{
20472 adaptAnalysisTask<firstcorrelations>(cfgc),
20573 };
206- }
74+ }
0 commit comments