@@ -24,180 +24,180 @@ namespace o2::analysis
2424{
2525namespace hf_flow_utils
2626{
27- enum QvecEstimator { FV0A = 0 ,
28- FT0M,
29- FT0A,
30- FT0C,
31- TPCPos,
32- TPCNeg,
33- TPCTot };
34-
35- // / Compute the delta psi in the range [0, pi/harmonic]
36- // / \param psi1 is the first angle
37- // / \param psi2 is the second angle
38- // / \param harmonic is the harmonic
39- // / \note Ported from AliAnalysisTaskSECharmHadronvn::GetDeltaPsiSubInRange
40- float getDeltaPsiInRange (float psi1, float psi2, int harmonic)
41- {
42- float deltaPsi = psi1 - psi2;
43- deltaPsi = RecoDecay::constrainAngle (deltaPsi, -o2::constants::math::PI / harmonic, harmonic);
44- return deltaPsi;
45- }
46-
47- // / Get the Q vector
48- template <typename T>
49- concept HasQvecFT0A = requires (T collision) {
50- collision.qvecFT0ARe ();
51- collision.qvecFT0AIm ();
52- };
53-
54- template <typename T>
55- concept HasQvecFT0C = requires (T collision) {
56- collision.qvecFT0CRe ();
57- collision.qvecFT0CIm ();
58- };
59-
60- template <typename T>
61- concept HasQvecFT0M = requires (T collision) {
62- collision.qvecFT0MRe ();
63- collision.qvecFT0MIm ();
64- };
65-
66- template <typename T>
67- concept HasQvecFV0A = requires (T collision) {
68- collision.qvecFV0ARe ();
69- collision.qvecFV0AIm ();
70- };
71-
72- template <typename T>
73- concept HasQvecTPCpos = requires (T collision) {
74- collision.qvecBPosRe ();
75- collision.qvecBPosIm ();
76- };
77-
78- template <typename T>
79- concept HasQvecTPCneg = requires (T collision) {
80- collision.qvecBNegRe ();
81- collision.qvecBNegIm ();
82- };
83-
84- template <typename T>
85- concept HasQvecTPCtot = requires (T collision) {
86- collision.qvecBTotRe ();
87- collision.qvecBTotIm ();
88- };
89-
90- // / Get the Q vector using FT0A estimator
91- // / \param collision is the collision
92- // / \return Q vector of the collision
93- template <HasQvecFT0A TCollision>
94- std::array<float , 3 > getQvec (const TCollision& collision)
95- {
96- return std::array<float , 3 >{collision.qvecFT0ARe (), collision.qvecFT0AIm (), collision.sumAmplFT0A ()};
97- }
98-
99- // / Get the Q vector using FT0C estimator
100- // / \param collision is the collision
101- // / \return Q vector of the collision
102- template <HasQvecFT0C TCollision>
103- std::array<float , 3 > getQvec (const TCollision& collision)
104- {
105- return std::array<float , 3 >{collision.qvecFT0CRe (), collision.qvecFT0CIm (), collision.sumAmplFT0C ()};
106- }
107-
108- // / Get the Q vector using FT0C estimator
109- // / \param collision is the collision
110- // / \return Q vector of the collision
111- template <HasQvecFT0M TCollision>
112- std::array<float , 3 > getQvec (const TCollision& collision)
113- {
114- return std::array<float , 3 >{collision.qvecFT0MRe (), collision.qvecFT0MIm (), collision.sumAmplFT0M ()};
115- }
116-
117- // / Get the Q vector using FV0A estimator
118- // / \param collision is the collision
119- // / \return Q vector of the collision
120- template <HasQvecFV0A TCollision>
121- std::array<float , 3 > getQvec (const TCollision& collision)
122- {
123- return std::array<float , 3 >{collision.qvecFV0ARe (), collision.qvecFV0AIm (), collision.sumAmplFV0A ()};
124- }
125-
126- // / Get the Q vector using TPCpos estimator
127- // / \param collision is the collision
128- // / \return Q vector of the collision
129- template <HasQvecTPCpos TCollision>
130- std::array<float , 3 > getQvec (const TCollision& collision)
131- {
132- return std::array<float , 3 >{collision.qvecBPosRe (), collision.qvecBPosIm (), collision.nTrkBPos ()};
133- }
134-
135- // / Get the Q vector using TPCneg estimator
136- // / \param collision is the collision
137- // / \return Q vector of the collision
138- template <HasQvecTPCneg TCollision>
139- std::array<float , 3 > getQvec (const TCollision& collision)
140- {
141- return std::array<float , 3 >{collision.qvecBNegRe (), collision.qvecBNegIm (), collision.nTrkBNeg ()};
142- }
143-
144- // / Get the Q vector using TPCtot estimator
145- // / \param collision is the collision
146- // / \return Q vector of the collision
147- template <HasQvecTPCtot TCollision>
148- std::array<float , 3 > getQvec (const TCollision& collision)
149- {
150- return std::array<float , 3 >{collision.qvecBTotRe (), collision.qvecBTotIm (), collision.nTrkBTot ()};
151- }
152-
153- // / Get the Q vector choosing your favourite estimator
154- // / \param collision is the collision with the Q vector information
155- // / \param qvecEst is the chosen Q-vector estimator
156- template <typename TCollision>
157- std::array<float , 3 > getQvec (TCollision const & collision, const int qvecEst)
158- {
159- switch (qvecEst) {
160- case QvecEstimator::FV0A:
161- if constexpr (HasQvecFV0A<TCollision>) {
162- return std::array<float , 3 >{collision.qvecFV0ARe (), collision.qvecFV0AIm (), collision.sumAmplFV0A ()};
163- }
164- break ;
165- case QvecEstimator::FT0A:
166- if constexpr (HasQvecFT0A<TCollision>) {
167- return std::array<float , 3 >{collision.qvecFT0ARe (), collision.qvecFT0AIm (), collision.sumAmplFT0A ()};
168- }
169- break ;
170- case QvecEstimator::FT0C:
171- if constexpr (HasQvecFT0C<TCollision>) {
172- return std::array<float , 3 >{collision.qvecFT0CRe (), collision.qvecFT0CIm (), collision.sumAmplFT0C ()};
173- }
174- break ;
175- case QvecEstimator::FT0M:
176- if constexpr (HasQvecFT0M<TCollision>) {
177- return std::array<float , 3 >{collision.qvecFT0MRe (), collision.qvecFT0MIm (), collision.sumAmplFT0M ()};
178- }
179- break ;
180- case QvecEstimator::TPCPos:
181- if constexpr (HasQvecTPCpos<TCollision>) {
182- return std::array<float , 3 >{collision.qvecBPosRe (), collision.qvecBPosIm (), static_cast <float >(collision.nTrkBPos ())};
183- }
184- break ;
185- case QvecEstimator::TPCNeg:
186- if constexpr (HasQvecTPCneg<TCollision>) {
187- return std::array<float , 3 >{collision.qvecBNegRe (), collision.qvecBNegIm (), static_cast <float >(collision.nTrkBNeg ())};
188- }
189- break ;
190- case QvecEstimator::TPCTot:
191- if constexpr (HasQvecTPCtot<TCollision>) {
192- return std::array<float , 3 >{collision.qvecBTotRe (), collision.qvecBTotIm (), static_cast <float >(collision.nTrkBTot ())};
193- }
194- break ;
195- default :
196- LOGP (fatal, " Q-vector estimator not valid. Please choose between FV0A, FT0M, FT0A, FT0C, TPCPos, TPCNeg, TPCTot" );
197- break ;
198- }
199- return std::array<float , 3 >{-999 .f , -999 .f , -999 .f };
27+ enum QvecEstimator { FV0A = 0 ,
28+ FT0M,
29+ FT0A,
30+ FT0C,
31+ TPCPos,
32+ TPCNeg,
33+ TPCTot };
34+
35+ // / Compute the delta psi in the range [0, pi/harmonic]
36+ // / \param psi1 is the first angle
37+ // / \param psi2 is the second angle
38+ // / \param harmonic is the harmonic
39+ // / \note Ported from AliAnalysisTaskSECharmHadronvn::GetDeltaPsiSubInRange
40+ float getDeltaPsiInRange (float psi1, float psi2, int harmonic)
41+ {
42+ float deltaPsi = psi1 - psi2;
43+ deltaPsi = RecoDecay::constrainAngle (deltaPsi, -o2::constants::math::PI / harmonic, harmonic);
44+ return deltaPsi;
45+ }
46+
47+ // / Get the Q vector
48+ template <typename T>
49+ concept HasQvecFT0A = requires (T collision) {
50+ collision.qvecFT0ARe ();
51+ collision.qvecFT0AIm ();
52+ };
53+
54+ template <typename T>
55+ concept HasQvecFT0C = requires (T collision) {
56+ collision.qvecFT0CRe ();
57+ collision.qvecFT0CIm ();
58+ };
59+
60+ template <typename T>
61+ concept HasQvecFT0M = requires (T collision) {
62+ collision.qvecFT0MRe ();
63+ collision.qvecFT0MIm ();
64+ };
65+
66+ template <typename T>
67+ concept HasQvecFV0A = requires (T collision) {
68+ collision.qvecFV0ARe ();
69+ collision.qvecFV0AIm ();
70+ };
71+
72+ template <typename T>
73+ concept HasQvecTPCpos = requires (T collision) {
74+ collision.qvecBPosRe ();
75+ collision.qvecBPosIm ();
76+ };
77+
78+ template <typename T>
79+ concept HasQvecTPCneg = requires (T collision) {
80+ collision.qvecBNegRe ();
81+ collision.qvecBNegIm ();
82+ };
83+
84+ template <typename T>
85+ concept HasQvecTPCtot = requires (T collision) {
86+ collision.qvecBTotRe ();
87+ collision.qvecBTotIm ();
88+ };
89+
90+ // / Get the Q vector using FT0A estimator
91+ // / \param collision is the collision
92+ // / \return Q vector of the collision
93+ template <HasQvecFT0A TCollision>
94+ std::array<float , 3 > getQvec (const TCollision& collision)
95+ {
96+ return std::array<float , 3 >{collision.qvecFT0ARe (), collision.qvecFT0AIm (), collision.sumAmplFT0A ()};
97+ }
98+
99+ // / Get the Q vector using FT0C estimator
100+ // / \param collision is the collision
101+ // / \return Q vector of the collision
102+ template <HasQvecFT0C TCollision>
103+ std::array<float , 3 > getQvec (const TCollision& collision)
104+ {
105+ return std::array<float , 3 >{collision.qvecFT0CRe (), collision.qvecFT0CIm (), collision.sumAmplFT0C ()};
106+ }
107+
108+ // / Get the Q vector using FT0C estimator
109+ // / \param collision is the collision
110+ // / \return Q vector of the collision
111+ template <HasQvecFT0M TCollision>
112+ std::array<float , 3 > getQvec (const TCollision& collision)
113+ {
114+ return std::array<float , 3 >{collision.qvecFT0MRe (), collision.qvecFT0MIm (), collision.sumAmplFT0M ()};
115+ }
116+
117+ // / Get the Q vector using FV0A estimator
118+ // / \param collision is the collision
119+ // / \return Q vector of the collision
120+ template <HasQvecFV0A TCollision>
121+ std::array<float , 3 > getQvec (const TCollision& collision)
122+ {
123+ return std::array<float , 3 >{collision.qvecFV0ARe (), collision.qvecFV0AIm (), collision.sumAmplFV0A ()};
124+ }
125+
126+ // / Get the Q vector using TPCpos estimator
127+ // / \param collision is the collision
128+ // / \return Q vector of the collision
129+ template <HasQvecTPCpos TCollision>
130+ std::array<float , 3 > getQvec (const TCollision& collision)
131+ {
132+ return std::array<float , 3 >{collision.qvecBPosRe (), collision.qvecBPosIm (), collision.nTrkBPos ()};
133+ }
134+
135+ // / Get the Q vector using TPCneg estimator
136+ // / \param collision is the collision
137+ // / \return Q vector of the collision
138+ template <HasQvecTPCneg TCollision>
139+ std::array<float , 3 > getQvec (const TCollision& collision)
140+ {
141+ return std::array<float , 3 >{collision.qvecBNegRe (), collision.qvecBNegIm (), collision.nTrkBNeg ()};
142+ }
143+
144+ // / Get the Q vector using TPCtot estimator
145+ // / \param collision is the collision
146+ // / \return Q vector of the collision
147+ template <HasQvecTPCtot TCollision>
148+ std::array<float , 3 > getQvec (const TCollision& collision)
149+ {
150+ return std::array<float , 3 >{collision.qvecBTotRe (), collision.qvecBTotIm (), collision.nTrkBTot ()};
151+ }
152+
153+ // / Get the Q vector choosing your favourite estimator
154+ // / \param collision is the collision with the Q vector information
155+ // / \param qvecEst is the chosen Q-vector estimator
156+ template <typename TCollision>
157+ std::array<float , 3 > getQvec (TCollision const & collision, const int qvecEst)
158+ {
159+ switch (qvecEst) {
160+ case QvecEstimator::FV0A:
161+ if constexpr (HasQvecFV0A<TCollision>) {
162+ return std::array<float , 3 >{collision.qvecFV0ARe (), collision.qvecFV0AIm (), collision.sumAmplFV0A ()};
163+ }
164+ break ;
165+ case QvecEstimator::FT0A:
166+ if constexpr (HasQvecFT0A<TCollision>) {
167+ return std::array<float , 3 >{collision.qvecFT0ARe (), collision.qvecFT0AIm (), collision.sumAmplFT0A ()};
168+ }
169+ break ;
170+ case QvecEstimator::FT0C:
171+ if constexpr (HasQvecFT0C<TCollision>) {
172+ return std::array<float , 3 >{collision.qvecFT0CRe (), collision.qvecFT0CIm (), collision.sumAmplFT0C ()};
173+ }
174+ break ;
175+ case QvecEstimator::FT0M:
176+ if constexpr (HasQvecFT0M<TCollision>) {
177+ return std::array<float , 3 >{collision.qvecFT0MRe (), collision.qvecFT0MIm (), collision.sumAmplFT0M ()};
178+ }
179+ break ;
180+ case QvecEstimator::TPCPos:
181+ if constexpr (HasQvecTPCpos<TCollision>) {
182+ return std::array<float , 3 >{collision.qvecBPosRe (), collision.qvecBPosIm (), static_cast <float >(collision.nTrkBPos ())};
183+ }
184+ break ;
185+ case QvecEstimator::TPCNeg:
186+ if constexpr (HasQvecTPCneg<TCollision>) {
187+ return std::array<float , 3 >{collision.qvecBNegRe (), collision.qvecBNegIm (), static_cast <float >(collision.nTrkBNeg ())};
188+ }
189+ break ;
190+ case QvecEstimator::TPCTot:
191+ if constexpr (HasQvecTPCtot<TCollision>) {
192+ return std::array<float , 3 >{collision.qvecBTotRe (), collision.qvecBTotIm (), static_cast <float >(collision.nTrkBTot ())};
193+ }
194+ break ;
195+ default :
196+ LOGP (fatal, " Q-vector estimator not valid. Please choose between FV0A, FT0M, FT0A, FT0C, TPCPos, TPCNeg, TPCTot" );
197+ break ;
200198 }
199+ return std::array<float , 3 >{-999 .f , -999 .f , -999 .f };
200+ }
201201} // namespace hf_flow_utils
202202} // namespace o2::analysis
203203
0 commit comments