]>
Commit | Line | Data |
---|---|---|
97e94238 | 1 | /* Copyright (C) 2007 Christian Holm Christensen <cholm@nbi.dk> |
2 | * | |
3 | * This library is free software; you can redistribute it and/or | |
4 | * modify it under the terms of the GNU Lesser General Public License | |
5 | * as published by the Free Software Foundation; either version 2.1 of | |
6 | * the License, or (at your option) any later version. | |
7 | * | |
8 | * This library is distributed in the hope that it will be useful, but | |
9 | * WITHOUT ANY WARRANTY; without even the implied warranty of | |
10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
11 | * Lesser General Public License for more details. | |
12 | * | |
13 | * You should have received a copy of the GNU Lesser General Public | |
14 | * License along with this library; if not, write to the Free Software | |
15 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 | |
16 | * USA | |
17 | */ | |
39eefe19 | 18 | /** @file |
19 | @brief Implementation of a Harmonic class */ | |
97e94238 | 20 | //____________________________________________________________________ |
21 | // | |
22 | // Calculate the nth order harmonic. | |
23 | // Input is the phis of the observations, | |
24 | // and the resolution of the event plane. | |
25 | // The class derives from AliFMDFlowStat to easy calculating the mean | |
26 | // and the square variance of the harmonic. | |
39eefe19 | 27 | #include "flow/AliFMDFlowHarmonic.h" |
28 | #include "flow/AliFMDFlowUtil.h" | |
9b98d361 | 29 | #include <TBrowser.h> |
30 | #include <iostream> | |
39eefe19 | 31 | // #include <cmath> |
32 | ||
33 | //==================================================================== | |
9b98d361 | 34 | AliFMDFlowHarmonic::AliFMDFlowHarmonic(UShort_t n) |
35 | : fOrder(n), | |
36 | fPhi("phi", "#varphi-#Psi", 40, 0, 2*TMath::Pi()), | |
37 | fNPhi("nphi",Form("%d(#varphi-#Psi)",n),40,0,2*TMath::Pi()), | |
38 | fWeight("weight", Form("cos(%d(#varphi-#Psi))", n), 100, -1, 1), | |
39 | fContrib("contrib", Form("(#varphi-#psi) vs cos(%d(#varphi-#Psi))", n), | |
40 | 40, 0, 2 * TMath::Pi(), 100, -1, 1) | |
41 | { | |
42 | fContrib.SetDirectory(0); | |
43 | fContrib.Sumw2(); | |
44 | fContrib.SetXTitle("#varphi-#Psi"); | |
45 | fContrib.SetYTitle(Form("cos(%d(#varphi-#Psi))", n)); | |
46 | fPhi.SetDirectory(0); | |
47 | fPhi.Sumw2(); | |
48 | fPhi.SetXTitle("#varphi-#Psi"); | |
49 | fNPhi.SetDirectory(0); | |
50 | fNPhi.Sumw2(); | |
51 | fNPhi.SetXTitle(Form("%d(#varphi-#Psi)", n)); | |
52 | fWeight.SetDirectory(0); | |
53 | fWeight.Sumw2(); | |
54 | fWeight.SetXTitle(Form("cos(%d(#varphi-#Psi))", n)); | |
55 | fWeight.SetYTitle("#sum_iw_i"); | |
56 | } | |
57 | ||
58 | //____________________________________________________________________ | |
97e94238 | 59 | AliFMDFlowHarmonic::AliFMDFlowHarmonic(const AliFMDFlowHarmonic& o) |
60 | : AliFMDFlowStat(o), | |
9b98d361 | 61 | fOrder(o.fOrder), |
62 | fPhi(o.fPhi), | |
63 | fNPhi(o.fNPhi), | |
64 | fWeight(o.fWeight), | |
65 | fContrib(o.fContrib) | |
97e94238 | 66 | { |
67 | // Copy constructor | |
68 | // Parameters: | |
69 | // o Object to copy from | |
9b98d361 | 70 | fContrib.SetDirectory(0); |
71 | fContrib.Sumw2(); | |
72 | fContrib.SetXTitle(Form("w_{i}cos(%d(#varphi-#Psi))", fOrder)); | |
73 | fPhi.SetDirectory(0); | |
74 | fPhi.SetXTitle("#varphi-#Psi"); | |
75 | fPhi.Sumw2(); | |
76 | fNPhi.SetDirectory(0); | |
77 | fNPhi.SetXTitle(Form("%d(#varphi-#Psi)", fOrder)); | |
78 | fNPhi.Sumw2(); | |
79 | fWeight.SetDirectory(0); | |
80 | fWeight.Sumw2(); | |
81 | fWeight.SetXTitle(Form("cos(%d(#varphi-#Psi))", fOrder)); | |
82 | fWeight.SetYTitle("#sum_iw_i"); | |
97e94238 | 83 | } |
84 | ||
85 | //____________________________________________________________________ | |
86 | AliFMDFlowHarmonic& | |
87 | AliFMDFlowHarmonic::operator=(const AliFMDFlowHarmonic& o) | |
88 | { | |
89 | // Assignment operator | |
90 | // Parameters: | |
91 | // o Object to assign from | |
92 | // Return reference to this object. | |
93 | AliFMDFlowStat::operator=(o); | |
94 | fOrder = o.fOrder; | |
9b98d361 | 95 | |
96 | fContrib.Reset(); | |
97 | fContrib.Add(&o.fContrib); | |
98 | fPhi.Reset(); | |
99 | fPhi.Add(&o.fPhi); | |
100 | fNPhi.Reset(); | |
101 | fNPhi.Add(&o.fNPhi); | |
102 | fWeight.Reset(); | |
103 | fWeight.Add(&o.fWeight); | |
97e94238 | 104 | return *this; |
105 | } | |
106 | ||
107 | //____________________________________________________________________ | |
39eefe19 | 108 | void |
9b98d361 | 109 | AliFMDFlowHarmonic::Browse(TBrowser* b) |
110 | { | |
111 | // Browse this object | |
112 | // Parameters | |
113 | // b Browser to use | |
114 | // Return | |
115 | // nothing | |
116 | b->Add(&fContrib); | |
117 | b->Add(&fPhi); | |
118 | b->Add(&fNPhi); | |
119 | b->Add(&fWeight); | |
120 | } | |
121 | ||
122 | //____________________________________________________________________ | |
123 | void | |
124 | AliFMDFlowHarmonic::Add(Double_t phi, Double_t psi, Double_t weight) | |
39eefe19 | 125 | { |
97e94238 | 126 | // Add a data point. |
127 | // Parameters: | |
9b98d361 | 128 | // phi Angle of this observation. |
129 | // psi Event plane of this observation | |
130 | // weight The weight of this observation | |
39eefe19 | 131 | Double_t a = NormalizeAngle(fOrder * (phi - psi)); |
9b98d361 | 132 | Double_t cosa = TMath::Cos(a); |
133 | Double_t contrib = cosa; // weight * cosa; | |
39eefe19 | 134 | AliFMDFlowStat::Add(contrib); |
9b98d361 | 135 | fPhi.Fill(NormalizeAngle(phi-psi)); |
136 | fNPhi.Fill(a); | |
137 | fWeight.Fill(cosa, weight); | |
138 | fContrib.Fill(a/*NormalizeAngle(phi-psi)*/,contrib); | |
39eefe19 | 139 | } |
140 | //____________________________________________________________________ | |
141 | Double_t | |
142 | AliFMDFlowHarmonic::Value(Double_t r, Double_t er2, Double_t& e2) const | |
143 | { | |
144 | // The corrected value is given by | |
145 | // | |
146 | // v_n^obs | |
147 | // v_n = ------- | |
148 | // R | |
149 | // | |
150 | // where | |
151 | // | |
152 | // 1 | |
153 | // v_n^obs = - \sum_i(cos(n(\phi_i - \Psi))) | |
154 | // N | |
155 | // | |
156 | // and R is the resolution | |
157 | // | |
158 | // The error on the corrected value is given by | |
159 | // | |
160 | // dv_n dv_n | |
161 | // d^2v_n = (--------)^2 d^2v_n^obs + (----)^2 d^2R | |
162 | // dv_n^obs dR | |
163 | // | |
164 | // d^2v_n^obs R^2 + d^2R v_n^obs^2 | |
165 | // = ------------------------------- | |
166 | // R^4 | |
167 | // | |
168 | Double_t a = fAverage; | |
169 | Double_t v = a / r; | |
9b98d361 | 170 | if (fN != 0) { |
171 | Double_t s = fSqVar / fN; | |
172 | e2 = (s * r * r + er2 * a * a) / pow(r, 4); | |
173 | } | |
174 | else e2 = 0; | |
39eefe19 | 175 | return v; |
176 | } | |
9b98d361 | 177 | //____________________________________________________________________ |
178 | void | |
6ce810fc | 179 | AliFMDFlowHarmonic::Print(Option_t* /*option*/) const |
9b98d361 | 180 | { |
181 | Double_t e2, er2 = 1, r = 1; | |
182 | Double_t v = Value(r, er2, e2); | |
183 | std::cout << v << " +/- " << e2 << std::endl; | |
184 | ||
185 | } | |
186 | ||
39eefe19 | 187 | //____________________________________________________________________ |
188 | // | |
189 | // EOF | |
190 | // |