1414// /
1515// / \author Joachim C. K. B. Hansen, Lund University
1616
17+ #include < string>
18+
1719#include " Framework/ASoA.h"
1820#include " Framework/AnalysisDataModel.h"
1921#include " Framework/AnalysisTask.h"
@@ -42,6 +44,7 @@ struct JetSpectraEseTask {
4244 ConfigurableAxis binJetPt{" binJetPt" , {200 , 0 ., 200 .}, " " };
4345 ConfigurableAxis bindPhi{" bindPhi" , {100 , -TMath::Pi () - 1 , TMath::Pi () + 1 }, " " };
4446 ConfigurableAxis binESE{" binESE" , {100 , 0 , 100 }, " " };
47+ ConfigurableAxis binCos{" binCos" , {100 , -1.05 , 1.05 }, " " };
4548
4649 Configurable<float > jetPtMin{" jetPtMin" , 5.0 , " minimum jet pT cut" };
4750 Configurable<float > jetR{" jetR" , 0.2 , " jet resolution parameter" };
@@ -58,6 +61,8 @@ struct JetSpectraEseTask {
5861 AxisSpec dPhiAxis = {bindPhi, " #Delta#phi" };
5962 AxisSpec eseAxis = {binESE, " #it{q}_{2}" };
6063
64+ AxisSpec cosAxis = {binCos, " " };
65+
6166 HistogramRegistry registry{" registry" , {}, OutputObjHandlingPolicy::AnalysisObject, false , false };
6267
6368 int eventSelection = -1 ;
@@ -73,16 +78,30 @@ struct JetSpectraEseTask {
7378 switch (fColSwitch ) {
7479 case 0 :
7580 LOGF (info, " JetSpectraEseTask::init() - using data" );
76- registry.add (" h_collisions" , " event status;event status;entries" , {HistType::kTH1F , {{10 , 0.0 , 10.0 }}});
77- registry.add (" h_jet_pt" , " jet pT;#it{p}_{T,jet} (GeV/#it{c});entries" , {HistType::kTH1F , {{jetPtAxis}}});
78- registry.add (" h_jet_pt_bkgsub" , " jet pT background sub;#it{p}_{T,jet} (GeV/#it{c});entries" , {HistType::kTH1F , {{jetPtAxis}}});
79- registry.add (" h_jet_eta" , " jet #eta;#eta_{jet};entries" , {HistType::kTH1F , {{100 , -1.0 , 1.0 }}});
80- registry.add (" h_jet_phi" , " jet #phi;#phi_{jet};entries" , {HistType::kTH1F , {{80 , -1.0 , 7 .}}});
81- registry.add (" h_rho" , " ;#rho;entries" , {HistType::kTH1F , {{100 , 0 , 200 .}}});
82- registry.add (" h_jet_area" , " ;area_{jet};entries" , {HistType::kTH1F , {{100 , 0 , 10 .}}});
83- registry.add (" h_Psi2" , " #Psi_{2};entries;" , {HistType::kTH1F , {{150 , -2.5 , 2.5 }}});
84- registry.add (" h_dPhi" , " #Delta#phi;entries;" , {HistType::kTH1F , {{dPhiAxis}}});
85- registry.add (" jet_pt_dPhi_q2" , " " , {HistType::kTH3F , {{jetPtAxis}, {dPhiAxis}, {eseAxis}}});
81+ registry.add (" hEventCounter" , " event status;event status;entries" , {HistType::kTH1F , {{10 , 0.0 , 10.0 }}});
82+ registry.add (" hJetPt" , " jet pT;#it{p}_{T,jet} (GeV/#it{c});entries" , {HistType::kTH1F , {{jetPtAxis}}});
83+ registry.add (" hJetPt_bkgsub" , " jet pT background sub;#it{p}_{T,jet} (GeV/#it{c});entries" , {HistType::kTH1F , {{jetPtAxis}}});
84+ registry.add (" hJetEta" , " jet #eta;#eta_{jet};entries" , {HistType::kTH1F , {{100 , -1.0 , 1.0 }}});
85+ registry.add (" hJetPhi" , " jet #phi;#phi_{jet};entries" , {HistType::kTH1F , {{80 , -1.0 , 7 .}}});
86+ registry.add (" hRho" , " ;#rho;entries" , {HistType::kTH1F , {{100 , 0 , 200 .}}});
87+ registry.add (" hJetArea" , " ;area_{jet};entries" , {HistType::kTH1F , {{100 , 0 , 10 .}}});
88+ registry.add (" hdPhi" , " #Delta#phi;entries;" , {HistType::kTH1F , {{dPhiAxis}}});
89+ registry.add (" hJetPtdPhiq2" , " " , {HistType::kTH3F , {{jetPtAxis}, {dPhiAxis}, {eseAxis}}});
90+ registry.add (" hPsi2FT0C" , " ;Centrality; #Psi_{2}" , {HistType::kTH2F , {{100 , 0 , 100 }, {150 , -2.5 , 2.5 }}});
91+ registry.add (" hPsi2FT0A" , " ;Centrality; #Psi_{2}" , {HistType::kTH2F , {{100 , 0 , 100 }, {150 , -2.5 , 2.5 }}});
92+ registry.add (" hPsi2FV0A" , " ;Centrality; #Psi_{2}" , {HistType::kTH2F , {{100 , 0 , 100 }, {150 , -2.5 , 2.5 }}});
93+ registry.add (" hPsi2TPCpos" , " ;Centrality; #Psi_{2}" , {HistType::kTH2F , {{100 , 0 , 100 }, {150 , -2.5 , 2.5 }}});
94+ registry.add (" hPsi2TPCneg" , " ;Centrality; #Psi_{2}" , {HistType::kTH2F , {{100 , 0 , 100 }, {150 , -2.5 , 2.5 }}});
95+ registry.add (" hCosPsi2FT0CmFT0A" , " ;Centrality;cos(2(#Psi_{2}^{FT0C}-#Psi_{2}^{FT0A}));#it{q}_{2}" , {HistType::kTH3F , {{100 , 0 , 100 }, {cosAxis}, {eseAxis}}});
96+ registry.add (" hCosPsi2FT0CmFV0A" , " ;Centrality;cos(2(#Psi_{2}^{FT0C}-#Psi_{2}^{FV0A}));#it{q}_{2}" , {HistType::kTH3F , {{100 , 0 , 100 }, {cosAxis}, {eseAxis}}});
97+ registry.add (" hCosPsi2FV0AmFT0A" , " ;Centrality;cos(2(#Psi_{2}^{FT0C}-#Psi_{2}^{FV0A}));#it{q}_{2}" , {HistType::kTH3F , {{100 , 0 , 100 }, {cosAxis}, {eseAxis}}});
98+ registry.add (" hCosPsi2FT0AmFT0C" , " ;Centrality;cos(2(#Psi_{2}^{FT0A}-#Psi_{2}^{FT0C}));#it{q}_{2}" , {HistType::kTH3F , {{100 , 0 , 100 }, {cosAxis}, {eseAxis}}});
99+ registry.add (" hCosPsi2FT0AmFV0A" , " ;Centrality;cos(2(#Psi_{2}^{FT0C}-#Psi_{2}^{FV0A}));#it{q}_{2}" , {HistType::kTH3F , {{100 , 0 , 100 }, {cosAxis}, {eseAxis}}});
100+ registry.add (" hCosPsi2FV0AmFT0C" , " ;Centrality;cos(2(#Psi_{2}^{FV0A}-#Psi_{2}^{FT0C}));#it{q}_{2}" , {HistType::kTH3F , {{100 , 0 , 100 }, {cosAxis}, {eseAxis}}});
101+ registry.add (" hCosPsi2TPCposmTPCneg" , " ;Centrality;cos(2(#Psi_{2}^{TPCpos}-#Psi_{2}^{TPCneg}));#it{q}_{2}" , {HistType::kTH3F , {{100 , 0 , 100 }, {cosAxis}, {eseAxis}}});
102+ registry.add (" hCosPsi2TPCposmFV0A" , " ;Centrality;cos(2(#Psi_{2}^{TPCpos}-#Psi_{2}^{FV0A}));#it{q}_{2}" , {HistType::kTH3F , {{100 , 0 , 100 }, {cosAxis}, {eseAxis}}});
103+ registry.add (" hCosPsi2TPCnegmFV0A" , " ;Centrality;cos(2(#Psi_{2}^{TPCneg}-#Psi_{2}^{FV0A}));#it{q}_{2}" , {HistType::kTH3F , {{100 , 0 , 100 }, {cosAxis}, {eseAxis}}});
104+
86105 break ;
87106 case 1 :
88107 LOGF (info, " JetSpectraEseTask::init() - using MC" );
@@ -109,47 +128,47 @@ struct JetSpectraEseTask {
109128 Filter mcCollisionFilter = nabs(aod::jmccollision::posZ) < vertexZCut;
110129
111130 void processESEDataCharged (soa::Join<aod::JetCollisions, aod::JCollisionPIs, aod::BkgChargedRhos>::iterator const & collision,
112- soa::Join<aod::Collisions, aod::CentFT0Cs, aod::QvectorFT0CVecs, aod::QPercentileFT0Cs , aod::FEseCols > const &,
131+ soa::Join<aod::Collisions, aod::CentFT0Cs, aod::QvectorFT0CVecs, aod::QvectorFT0AVecs , aod::QvectorFV0AVecs, aod::QvectorTPCposVecs, aod::QvectorTPCnegVecs, aod::QPercentileFT0Cs > const &,
113132 soa::Filtered<aod::ChargedJets> const & jets,
114133 aod::JetTracks const & tracks)
115134 {
116135 float counter{0 .5f };
117- registry.fill (HIST (" h_collisions" ), counter++);
118- auto originalCollision = collision.collision_as <soa::Join<aod::Collisions, aod::CentFT0Cs, aod::QvectorFT0CVecs, aod::QPercentileFT0Cs, aod::FEseCols>>();
119- if (originalCollision.fESECOL ()[0 ] != 1 )
120- return ;
121- registry.fill (HIST (" h_collisions" ), counter++);
136+ registry.fill (HIST (" hEventCounter" ), counter++);
137+ const auto originalCollision = collision.collision_as <soa::Join<aod::Collisions, aod::CentFT0Cs, aod::QvectorFT0CVecs, aod::QvectorFT0AVecs, aod::QvectorFV0AVecs, aod::QvectorTPCposVecs, aod::QvectorTPCnegVecs, aod::QPercentileFT0Cs>>();
138+ registry.fill (HIST (" hEventCounter" ), counter++);
122139 if (originalCollision.centFT0C () < CentRange->at (0 ) || originalCollision.centFT0C () > CentRange->at (1 ))
123140 return ;
124- registry.fill (HIST (" h_collisions" ), counter++);
125- auto vPsi2 = 1 / 2.0 * TMath::ATan2 (originalCollision.qvecFT0CImVec ()[0 ], originalCollision.qvecFT0CReVec ()[0 ]);
126- auto qPerc = originalCollision.qPERCFT0C ();
141+ registry.fill (HIST (" hEventCounter" ), counter++);
142+
143+ const auto vPsi2 = procEP (originalCollision);
144+ const auto qPerc = originalCollision.qPERCFT0C ();
145+ if (qPerc[0 ] < 0 )
146+ return ;
147+ registry.fill (HIST (" hEventCounter" ), counter++);
148+
127149 if (!jetderiveddatautilities::selectCollision (collision, eventSelection))
128150 return ;
129151
130- registry.fill (HIST (" h_collisions " ), counter++);
152+ registry.fill (HIST (" hEventCounter " ), counter++);
131153
132154 if (!isAcceptedLeadTrack (tracks))
133155 return ;
134156
135- registry.fill (HIST (" h_collisions " ), counter++);
136- registry.fill (HIST (" h_rho " ), collision.rho ());
157+ registry.fill (HIST (" hEventCounter " ), counter++);
158+ registry.fill (HIST (" hRho " ), collision.rho ());
137159 for (auto const & jet : jets) {
138160 float jetpT_bkgsub = jet.pt () - (collision.rho () * jet.area ());
139- registry.fill (HIST (" h_jet_pt" ), jet.pt ());
140- registry.fill (HIST (" h_jet_pt_bkgsub" ), jetpT_bkgsub);
141- registry.fill (HIST (" h_jet_eta" ), jet.eta ());
142- registry.fill (HIST (" h_jet_phi" ), jet.phi ());
143- registry.fill (HIST (" h_Psi2" ), vPsi2);
144- registry.fill (HIST (" h_jet_area" ), jet.area ());
161+ registry.fill (HIST (" hJetPt" ), jet.pt ());
162+ registry.fill (HIST (" hJetPt_bkgsub" ), jetpT_bkgsub);
163+ registry.fill (HIST (" hJetEta" ), jet.eta ());
164+ registry.fill (HIST (" hJetPhi" ), jet.phi ());
165+ registry.fill (HIST (" hJetArea" ), jet.area ());
145166
146167 float dPhi = RecoDecay::constrainAngle (jet.phi () - vPsi2, -o2::constants::math::PI);
147- registry.fill (HIST (" h_dPhi" ), dPhi);
148- if (qPerc[0 ] < 0 )
149- continue ;
150- registry.fill (HIST (" jet_pt_dPhi_q2" ), jetpT_bkgsub, dPhi, qPerc[0 ]);
168+ registry.fill (HIST (" hdPhi" ), dPhi);
169+ registry.fill (HIST (" hJetPtdPhiq2" ), jetpT_bkgsub, dPhi, qPerc[0 ]); /* check the dphi */
151170 }
152- registry.fill (HIST (" h_collisions " ), counter++);
171+ registry.fill (HIST (" hEventCounter " ), counter++);
153172 }
154173 PROCESS_SWITCH (JetSpectraEseTask, processESEDataCharged, " process ese collisions" , true );
155174
@@ -211,6 +230,50 @@ struct JetSpectraEseTask {
211230 else
212231 return true ;
213232 }
233+
234+ template <typename qVectors>
235+ float procEP (qVectors const & vec)
236+ {
237+ const auto epFT0A = 1 / 2.0 * TMath::ATan2 (vec.qvecFT0AImVec ()[0 ], vec.qvecFT0AReVec ()[0 ]);
238+ const auto epFV0A = 1 / 2.0 * std::atan2 (vec.qvecFV0AImVec ()[0 ], vec.qvecFV0AReVec ()[0 ]);
239+ const auto epFT0C = 1 / 2.0 * std::atan2 (vec.qvecFT0CImVec ()[0 ], vec.qvecFT0CReVec ()[0 ]);
240+ const auto epTPCpos = 1 / 2.0 * std::atan2 (vec.qvecTPCposImVec ()[0 ], vec.qvecTPCposReVec ()[0 ]);
241+ const auto epTPCneg = 1 / 2.0 * std::atan2 (vec.qvecTPCnegImVec ()[0 ], vec.qvecTPCnegReVec ()[0 ]);
242+
243+ registry.fill (HIST (" hPsi2FT0C" ), vec.centFT0C (), epFT0C);
244+ registry.fill (HIST (" hPsi2FT0A" ), vec.centFT0C (), epFT0A);
245+ registry.fill (HIST (" hPsi2FV0A" ), vec.centFT0C (), epFV0A);
246+ registry.fill (HIST (" hPsi2TPCpos" ), vec.centFT0C (), epTPCpos);
247+ registry.fill (HIST (" hPsi2TPCneg" ), vec.centFT0C (), epTPCneg);
248+
249+ const auto cosPsi2FT0CmFT0A = cosPsiXY (epFT0C, epFT0A);
250+ const auto cosPsi2FT0CmFV0A = cosPsiXY (epFT0C, epFV0A);
251+ const auto cosPsi2FV0AmFT0A = cosPsiXY (epFV0A, epFT0A);
252+ const auto cosPsi2FT0AmFT0C = cosPsiXY (epFT0A, epFT0C);
253+ const auto cosPsi2FT0AmFV0A = cosPsiXY (epFT0A, epFV0A);
254+ const auto cosPsi2FV0AmFT0C = cosPsiXY (epFV0A, epFT0C);
255+ const auto cosPsi2TPCposmTPCneg = cosPsiXY (epTPCpos, epTPCneg);
256+ const auto cosPsi2TPCposmFV0A = cosPsiXY (epTPCpos, epFV0A);
257+ const auto cosPsi2TPCnegmFV0A = cosPsiXY (epTPCneg, epFV0A);
258+
259+ registry.fill (HIST (" hCosPsi2FT0CmFT0A" ), vec.centFT0C (), cosPsi2FT0CmFT0A, vec.qPERCFT0C ()[0 ]);
260+ registry.fill (HIST (" hCosPsi2FT0CmFV0A" ), vec.centFT0C (), cosPsi2FT0CmFV0A, vec.qPERCFT0C ()[0 ]);
261+ registry.fill (HIST (" hCosPsi2FV0AmFT0A" ), vec.centFT0C (), cosPsi2FV0AmFT0A, vec.qPERCFT0C ()[0 ]);
262+ registry.fill (HIST (" hCosPsi2FT0AmFT0C" ), vec.centFT0C (), cosPsi2FT0AmFT0C, vec.qPERCFT0C ()[0 ]);
263+ registry.fill (HIST (" hCosPsi2FT0AmFV0A" ), vec.centFT0C (), cosPsi2FT0AmFV0A, vec.qPERCFT0C ()[0 ]);
264+ registry.fill (HIST (" hCosPsi2FV0AmFT0C" ), vec.centFT0C (), cosPsi2FV0AmFT0C, vec.qPERCFT0C ()[0 ]);
265+ registry.fill (HIST (" hCosPsi2TPCposmTPCneg" ), vec.centFT0C (), cosPsi2TPCposmTPCneg, vec.qPERCFT0C ()[0 ]);
266+ registry.fill (HIST (" hCosPsi2TPCposmFV0A" ), vec.centFT0C (), cosPsi2TPCposmFV0A, vec.qPERCFT0C ()[0 ]);
267+ registry.fill (HIST (" hCosPsi2TPCnegmFV0A" ), vec.centFT0C (), cosPsi2TPCnegmFV0A, vec.qPERCFT0C ()[0 ]);
268+
269+ return epFT0A;
270+ }
271+
272+ template <typename Psi>
273+ float cosPsiXY (Psi const & psiX, Psi const & psiY)
274+ {
275+ return std::cos (2.0 * (psiX - psiY));
276+ }
214277};
215278
216279WorkflowSpec defineDataProcessing (ConfigContext const & cfgc) { return WorkflowSpec{adaptAnalysisTask<JetSpectraEseTask>(cfgc)}; }
0 commit comments