99// granted to it by virtue of its status as an Intergovernmental Organization
1010// or submit itself to any jurisdiction.
1111
12+ // / \file corrSparse.cxx
13+ // / \brief Provides a sparse with usefull two particle correlation info
14+ // / \author Thor Jensen ([email protected] )15+
1216#include < vector>
1317#include " Framework/runDataProcessing.h"
1418#include " Framework/AnalysisTask.h"
1519#include " Framework/AnalysisDataModel.h"
1620#include " Framework/ASoAHelpers.h"
1721#include " Framework/HistogramRegistry.h"
1822#include " Framework/RunningWorkflowInfo.h"
19- #include " Common/Core/RecoDecay.h"
2023#include " CommonConstants/MathConstants.h"
2124#include " Common/DataModel/EventSelection.h"
2225#include " Common/DataModel/TrackSelectionTables.h"
2326#include " Common/DataModel/Centrality.h"
2427#include " PWGCF/Core/CorrelationContainer.h"
2528#include " PWGCF/Core/PairCuts.h"
29+ #include " Common/Core/RecoDecay.h"
2630
2731using namespace o2 ;
2832using namespace o2 ::framework;
2933using namespace o2 ::framework::expressions;
3034
3135struct CorrSparse {
32- Configurable<float > cfgZVtxCut = {" zvtxcut" , 10.0 , " Vertex z cut. Default 10 cm" };
33- Configurable<float > cfgPtCutMin = {" minpt" , 0.2 , " Minimum accepted track pT. Default 0.2 GeV" };
34- Configurable<float > cfgPtCutMax = {" maxpt" , 5.0 , " Maximum accepted track pT. Default 5.0 GeV" };
35- Configurable<float > cfgEtaCut = {" etacut" , 0.8 , " Eta cut. Default 0.8" };
36- Configurable<float > cfgDCAzCut = {" dcacut" , 0.3 , " DCA z cut. Default 0.3 cm" };
37- Configurable<float > cfgDCAxyCut = {" dcacutxy" , 0.3 , " DCA xy cut. Default 0.2 cm" };
38- Configurable<float > cfgDCAxySigmaCut = {" dcacutxysigma" , 1 , " DCA xy sigma cut. Default 0.3" };
39- Configurable<float > cfgCutChi2prTPCcls = {" chi2cut" , 2.5 , " Chi2 cut. Default 2.5" };
36+ Configurable<float > cfgZVtxCut = {" cfgZVtxCut" , 10.0 , " Vertex z cut. Default 10 cm" };
37+ Configurable<float > cfgPtCutMin = {" cfgPtCutMin" , 0.2 , " Minimum accepted track pT. Default 0.2 GeV" };
38+ Configurable<float > cfgPtCutMax = {" cfgPtCutMax" , 5.0 , " Maximum accepted track pT. Default 5.0 GeV" };
39+ Configurable<float > cfgEtaCut = {" cfgEtaCut" , 0.8 , " Eta cut. Default 0.8" };
4040 ConfigurableAxis axisVertex{" axisVertex" , {7 , -7 , 7 }, " vertex axis for histograms" };
41- ConfigurableAxis axisDeltaPhi{" axisDeltaPhi" , {72 , -constants::math:: PIHalf, constants::math:: PIHalf * 3 }, " delta phi axis for histograms" };
41+ ConfigurableAxis axisDeltaPhi{" axisDeltaPhi" , {72 , -PIHalf, PIHalf * 3 }, " delta phi axis for histograms" };
4242 ConfigurableAxis axisDeltaEta{" axisDeltaEta" , {40 , -2 , 2 }, " delta eta axis for histograms" };
4343 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" };
4444 ConfigurableAxis axisPtAssoc{" axisPtAssoc" , {VARIABLE_WIDTH, 0.5 , 1.0 , 1.5 , 2.0 , 3.0 , 4.0 , 6.0 , 10.0 }, " pt associated axis for histograms" };
@@ -51,10 +51,15 @@ struct CorrSparse {
5151 {
5252 LOGF (info, " Starting init" );
5353 registry.add (" Yield" , " pT vs eta vs Nch" , {HistType::kTH3F , {{40 , 0 , 20 , " p_{T}" }, {100 , -2 , 2 , " #eta" }, {100 , 0 , 100 , " Nch" }}}); // check to see total number of tracks
54- registry.add (" etaphi_Trigger" , " eta vs phi vs Nch" , {HistType::kTH3F , {{100 , -2 , 2 , " #eta" }, {200 , 0 , 2 * M_PI , " #varphi" }, {100 , 0 , 100 , " Nch" }}});
54+ registry.add (" etaphi_Trigger" , " eta vs phi vs Nch" , {HistType::kTH3F , {{100 , -2 , 2 , " #eta" }, {200 , 0 , TwoPI , " #varphi" }, {100 , 0 , 100 , " Nch" }}});
5555
56+ // Make histograms to check the distributions after cuts
5657 registry.add (" deltaEta_deltaPhi_same" , " " , {HistType::kTH2D , {axisDeltaPhi, axisDeltaEta}}); // check to see the delta eta and delta phi distribution
5758 registry.add (" deltaEta_deltaPhi_mixed" , " " , {HistType::kTH2D , {axisDeltaPhi, axisDeltaEta}});
59+ registry.add (" Phi" , " Phi" , {HistType::kTH1D , {{72 , 0 , TwoPI, " Phi" }}});
60+ registry.add (" Eta" , " Eta" , {HistType::kTH1D , {{40 , -2 , 2 , " Eta" }}});
61+ registry.add (" pT" , " pT" , {HistType::kTH1D , {axisPtTrigger}});
62+ registry.add (" Nch" , " N_{ch}" , {HistType::kTH1D , {axisMultiplicity}});
5863
5964 registry.add (" Sparse_mixed" , " " , {HistType::kTHnSparseD , {{axisVertex, axisPtTrigger, axisPtAssoc, axisMultiplicity, axisDeltaPhi, axisDeltaEta}}}); // Make the output sparse
6065 registry.add (" Sparse_same" , " " , {HistType::kTHnSparseD , {{axisVertex, axisPtTrigger, axisPtAssoc, axisMultiplicity, axisDeltaPhi, axisDeltaEta}}});
@@ -63,12 +68,17 @@ struct CorrSparse {
6368 registry.add (" eventcount" , " bin" , {HistType::kTH1F , {{maxMixBin + 2 , -2.5 , -0.5 + maxMixBin, " bin" }}}); // histogram to see how many events are in the same and mixed event
6469 }
6570
71+ // fill multiple histograms
6672 template <typename TCollision, typename TTracks>
67- void fillYield (TCollision collision, float centrality, TTracks tracks) // function to fill the yield and etaphi histograms. (This is not needed can be removed)
73+ void fillYield (TCollision collision, float centrality, TTracks tracks) // function to fill the yield and etaphi histograms.
6874 {
69- for (auto & track1 : tracks) {
75+ registry.fill (HIST (" Nch" ), tracks.size ());
76+ for (auto const & track1 : tracks) {
7077 registry.fill (HIST (" Yield" ), track1.pt (), track1.eta (), track1.size ());
71- registry.fill (HIST (" etaphi_Trigger" ), track1.size (), track1.phi (), track1.eta ());
78+ registry.fill (HIST (" etaphi_Trigger" ), track1.eta (), track1.phi (), track1.size ());
79+ registry.fill (HIST (" Phi" ), track1.phi ());
80+ registry.fill (HIST (" Eta" ), track1.eta ());
81+ registry.fill (HIST (" pT" ), track1.pt ());
7282 }
7383 }
7484
@@ -94,9 +104,8 @@ struct CorrSparse {
94104 continue ;
95105 }
96106
97- float deltaPhi = track1.phi () - track2.phi ();
107+ float deltaPhi = RecoDecay::constrainAngle ( track1.phi () - track2.phi (), -PIHalf );
98108 float deltaEta = track1.eta () - track2.eta ();
99- RecoDecay::constrainAngle (deltaPhi, -PIHalf);
100109
101110 // fill the right sparse and histograms
102111 if (system == 1 ) {
@@ -110,21 +119,18 @@ struct CorrSparse {
110119 }
111120 }
112121
113- // make the filters and cuts. I was told not to include chi2 since its not needed for run 3 data.
122+ // make the filters and cuts.
114123
115124 Filter collisionFilter = nabs(aod::collision::posZ) < cfgZVtxCut;
116125
117- Filter trackFilter = (nabs(aod::track::eta) < cfgEtaCut) && (aod::track::pt > cfgPtCutMin) && (aod::track::pt < cfgPtCutMax) && ((requireGlobalTrackInFilter()) || (aod::track::isGlobalTrackSDD == (uint8_t ) true ))
118- // && (aod::track::tpcChi2NCl < cfgCutChi2prTPCcls)
119- && (nabs(aod::track::dcaZ) > cfgDCAzCut) && (cfgDCAxySigmaCut * (0 .0015f + 0 .005f / npow(aod::track::pt, 1 .1f )) < nabs(aod::track::dcaXY));
120- //
126+ Filter trackFilter = (nabs(aod::track::eta) < cfgEtaCut) && (aod::track::pt > cfgPtCutMin) && (aod::track::pt < cfgPtCutMax) && ((requireGlobalTrackInFilter()) || (aod::track::isGlobalTrackSDD == (uint8_t ) true ));
121127
122128 // define the filtered collisions and tracks
123- using aodCollisions = soa::Filtered<soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Cs>>;
124- using aodTracks = soa::Filtered<soa::Join<aod::Tracks, aod::TrackSelection, aod::TracksExtra, aod::TracksDCA>>;
125129
126- // process for the same event
127- void processSame (aodCollisions::iterator const & collision, aodTracks const & tracks)
130+ using AodCollisions = soa::Filtered<soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Cs>>;
131+ using AodTracks = soa::Filtered<soa::Join<aod::Tracks, aod::TrackSelection, aod::TracksExtra, aod::TracksDCA>>;
132+
133+ void processSame (AodCollisions::iterator const & collision, AodTracks const & tracks)
128134 {
129135 const auto centrality = collision.centFT0C ();
130136
@@ -141,15 +147,15 @@ struct CorrSparse {
141147
142148 ColumnBinningPolicy<aod::collision::PosZ, aod::cent::CentFT0C>
143149 bindingOnVtxAndMult{{vtxBinsEdges, multBinsEdges}, true }; // true is for 'ignore overflows' (true by default)
144- SameKindPair<aodCollisions ,
145- aodTracks ,
150+ SameKindPair<AodCollisions ,
151+ AodTracks ,
146152 ColumnBinningPolicy<aod::collision::PosZ, aod::cent::CentFT0C>>
147153 pair{bindingOnVtxAndMult, 5 , -1 , &cache}; // indicates that 5 events should be mixed and under/overflow (-1) to be ignored
148154
149155 // the process for filling the mixed events
150- void processMixed (aodCollisions & collisions, aodTracks const & tracks)
156+ void processMixed (AodCollisions const & collisions, AodTracks const & tracks)
151157 {
152- for (auto & [collision1, tracks1, collision2, tracks2] : pair) {
158+ for (auto const & [collision1, tracks1, collision2, tracks2] : pair) {
153159
154160 if (fillCollision (collision1, collision1.centFT0C ()) == false ) {
155161 continue ;
0 commit comments