]>
Commit | Line | Data |
---|---|---|
f7054664 | 1 | #include<stdio.h> |
2 | #include "AliFlowVZEROResults.h" | |
3 | ||
4 | ||
5 | ClassImp(AliFlowVZEROResults); | |
6 | ||
7 | AliFlowVZEROResults::AliFlowVZEROResults(const char *name,const Int_t nvar,const Int_t* binVar) : | |
8 | TNamed(name,name), | |
9 | fNbinVar(new TArrayI(nvar)), | |
10 | fXmin(new TArrayF(nvar)), | |
11 | fXmax(new TArrayF(nvar)), | |
12 | fNameVar(new TClonesArray("TNamed")), | |
13 | fV2(new TClonesArray("TProfile")) | |
14 | { | |
15 | ||
16 | for(Int_t i=0;i < GetNvar();i++){ | |
17 | (*fNbinVar)[i] = binVar[i]; | |
18 | } | |
19 | ||
20 | for(Int_t i=0; i<GetNvar();i++){ | |
21 | new((*fNameVar)[i]) TNamed("",""); | |
22 | } | |
23 | } | |
24 | ||
25 | AliFlowVZEROResults::AliFlowVZEROResults() : | |
26 | TNamed("v2","v2"), | |
27 | fNbinVar(new TArrayI(0)), | |
28 | fXmin(new TArrayF(0)), | |
29 | fXmax(new TArrayF(0)), | |
30 | fNameVar(new TClonesArray("TNamed")), | |
31 | fV2(new TClonesArray("TProfile")) | |
32 | { | |
33 | ||
34 | } | |
35 | ||
36 | AliFlowVZEROResults::~AliFlowVZEROResults(){ | |
37 | for(Int_t i=fNameVar->GetEntries();i>0;i--){ | |
38 | delete fNameVar->At(i-1); | |
39 | fNameVar->RemoveAt(i-1); | |
40 | } | |
41 | ||
42 | for(Int_t i=fV2->GetEntries();i>0;i--){ | |
43 | delete fV2->At(i-1); | |
44 | fV2->RemoveAt(i-1); | |
45 | } | |
46 | ||
47 | delete fNbinVar; | |
48 | delete fXmin; | |
49 | delete fXmax; | |
50 | } | |
51 | ||
52 | void AliFlowVZEROResults::Reset(){ | |
53 | for(Int_t i=fNameVar->GetEntries();i>0;i--){ | |
54 | delete fNameVar->At(i-1); | |
55 | fNameVar->RemoveAt(i-1); | |
56 | } | |
57 | ||
58 | for(Int_t i=fV2->GetEntries();i>0;i--){ | |
59 | delete fV2->At(i-1); | |
60 | fV2->RemoveAt(i-1); | |
61 | } | |
62 | ||
63 | delete fNbinVar; | |
64 | delete fXmin; | |
65 | delete fXmax; | |
66 | ||
67 | fNbinVar = new TArrayI(0); | |
68 | fXmin = new TArrayF(0); | |
69 | fXmax = new TArrayF(0); | |
70 | ||
71 | } | |
72 | ||
73 | AliFlowVZEROResults::AliFlowVZEROResults(const AliFlowVZEROResults &old) : | |
74 | TNamed(old), | |
75 | fNbinVar(NULL), | |
76 | fXmin(NULL), | |
77 | fXmax(NULL), | |
78 | fNameVar(new TClonesArray("TNamed")), | |
79 | fV2(new TClonesArray("TProfile")) | |
80 | { | |
81 | ||
82 | fNbinVar = new TArrayI(old.GetNvar()); | |
83 | fXmin = new TArrayF(old.GetNvar()); | |
84 | fXmax = new TArrayF(old.GetNvar()); | |
85 | ||
86 | for(Int_t i=0; i<old.GetNhistos();i++){ | |
87 | new((*fV2)[i]) TProfile(*((TProfile *) old.GetV2(i))); | |
88 | } | |
89 | ||
90 | for(Int_t i=0; i<old.GetNvar();i++){ | |
91 | new((*fNameVar)[i]) TNamed(old.GetVarName(i),old.GetVarName(i)); | |
92 | } | |
93 | ||
94 | for(Int_t i=0;i < GetNvar();i++){ | |
95 | (*fNbinVar)[i] = (*old.fNbinVar)[i]; | |
96 | (*fXmin)[i] = (*old.fXmin)[i]; | |
97 | (*fXmax)[i] = (*old.fXmax)[i]; | |
98 | } | |
99 | ||
100 | } | |
101 | ||
102 | AliFlowVZEROResults& AliFlowVZEROResults::operator=(const AliFlowVZEROResults &old){ | |
103 | ||
104 | if(this != &old){ | |
105 | printf("different\n"); | |
106 | } | |
107 | ||
108 | for(Int_t i=0; i<old.GetNhistos();i++){ | |
109 | new((*fV2)[i]) TProfile(*((TProfile *) old.GetV2(i))); | |
110 | } | |
111 | ||
112 | fNbinVar = new TArrayI(old.GetNvar()); | |
113 | fXmin = new TArrayF(old.GetNvar()); | |
114 | fXmax = new TArrayF(old.GetNvar()); | |
115 | ||
116 | for(Int_t i=0;i < old.GetNvar();i++){ | |
117 | (*fNbinVar)[i] = (*old.fNbinVar)[i]; | |
118 | (*fXmin)[i] = (*old.fXmin)[i]; | |
119 | (*fXmax)[i] = (*old.fXmax)[i]; | |
120 | } | |
121 | ||
122 | fNameVar = new TClonesArray("TNamed"); | |
123 | for(Int_t i=0; i<old.GetNvar();i++){ | |
124 | new((*fNameVar)[i]) TNamed(old.GetVarName(i),old.GetVarName(i)); | |
125 | } | |
126 | ||
127 | return *this; | |
128 | } | |
129 | ||
130 | Int_t AliFlowVZEROResults::GetNspecies() const{ | |
131 | Int_t n = fV2->GetEntries(); | |
132 | ||
133 | for(Int_t i=0;i < GetNvar();i++){ | |
134 | n /= (*fNbinVar)[i]; | |
135 | } | |
136 | ||
137 | return n; | |
138 | } | |
139 | ||
140 | void AliFlowVZEROResults::AddSpecies(const char *name,Int_t nXbin,const Double_t *bin){ | |
141 | ||
142 | Bool_t kErr = kFALSE; | |
143 | for(Int_t i=0;i < GetNvar();i++){ // check the var ranges are set properly | |
144 | if((*fNbinVar)[i] < 1 || (*fXmin)[i] >= (*fXmax)[i]){ | |
145 | printf("var ranges are not set properly for variable %i please chek it before to define the species\n",i); | |
146 | kErr = kTRUE; | |
147 | } | |
148 | } | |
149 | if(kErr){ | |
150 | printf("AddSpecies: NOTHING DONE\n"); | |
151 | return; | |
152 | } | |
153 | ||
154 | Int_t ncomb = 1; | |
155 | for(Int_t i=0;i < GetNvar();i++){ | |
156 | ncomb *= (*fNbinVar)[i]; | |
157 | } | |
158 | ||
159 | char nameHisto[200]; | |
160 | char title[200]; | |
161 | for(Int_t i=0; i < ncomb;i++){ | |
162 | sprintf(nameHisto,"%s_%s_%i",GetName(),name,i); | |
163 | sprintf(title,"%s",name); | |
164 | Int_t ncombTemp = i; | |
165 | for(Int_t j=0;j < GetNvar();j++){ | |
166 | Int_t ibin = ncombTemp%(*fNbinVar)[j]; | |
167 | sprintf(title,"%s_%04.1f<%s<%04.1f",title,(*fXmin)[j] + ((*fXmax)[j]-(*fXmin)[j])/(*fNbinVar)[j]*ibin,fNameVar->At(j)->GetName(),(*fXmin)[j] + ((*fXmax)[j]-(*fXmin)[j])/(*fNbinVar)[j]*(ibin+1)); | |
168 | ncombTemp /= (*fNbinVar)[j]; | |
169 | } | |
170 | ||
171 | new((*fV2)[GetNhistos()]) TProfile(nameHisto,title,nXbin,bin); | |
172 | ((TProfile *) GetV2(GetNhistos()-1))->GetXaxis()->SetTitle("p_{t} (GeV/c)"); | |
173 | ((TProfile *) GetV2(GetNhistos()-1))->GetYaxis()->SetTitle("v_{2}"); | |
174 | } | |
175 | } | |
176 | ||
177 | Int_t AliFlowVZEROResults::Add(const AliFlowVZEROResults *oth){ | |
178 | if(GetNhistos() == oth->GetNhistos()){ | |
179 | for(Int_t i=0;i < GetNhistos();i++){ | |
180 | GetV2(i)->Add(oth->GetV2(i)); | |
181 | } | |
182 | return 0; | |
183 | } | |
184 | else{ | |
185 | printf("ADD error: number of objects is different (%i != %i)\n",GetNhistos(),oth->GetNhistos()); | |
186 | return 1; | |
187 | } | |
188 | } | |
189 | ||
190 | void AliFlowVZEROResults::SetVarRange(Int_t ivar,Float_t xMin,Float_t xMax){ | |
191 | if(!GetNhistos()){ | |
192 | (*fXmin)[ivar]=xMin; | |
193 | (*fXmax)[ivar]=xMax; | |
194 | } | |
195 | else{ // to avoid different range among the histos | |
196 | printf("Ranges should be set before to define the species\nNOTHING DONE\n"); | |
197 | } | |
198 | ||
199 | } | |
200 | ||
201 | void AliFlowVZEROResults::Fill(Int_t species,Float_t pt,Float_t v2,Float_t x[]){ | |
202 | Int_t ncomb = 1; | |
203 | Int_t histo = 1; | |
204 | ||
205 | for(Int_t i=0;i < GetNvar();i++){ | |
206 | Int_t ibin = GetBin(i,x[i]); | |
207 | if(ibin < 0 || ibin >= (*fNbinVar)[i]){ | |
208 | printf("%i) %i not good w.r.t. %i (%f) (%f,%f)\n",i,ibin,(*fNbinVar)[i],x[i],(*fXmin)[i],(*fXmax)[i]); | |
209 | return; | |
210 | } | |
211 | histo += ncomb * ibin; | |
212 | ncomb *= (*fNbinVar)[i]; | |
213 | } | |
214 | histo += species*ncomb; | |
215 | DirectFill(histo,pt,v2); | |
216 | }; | |
217 | ||
218 | TProfile *AliFlowVZEROResults::GetV2(Int_t species,Float_t x[]) const{ | |
219 | Int_t ncomb = 1; | |
220 | Int_t histo = 1; | |
221 | ||
222 | for(Int_t i=0;i < GetNvar();i++){ | |
223 | Int_t ibin = GetBin(i,x[i]); | |
224 | if(ibin < 0 || ibin >= (*fNbinVar)[i]){ | |
225 | printf("%i) %i not good w.r.t. %i (%f) (%f,%f)\n",i,ibin,(*fNbinVar)[i],x[i],(*fXmin)[i],(*fXmax)[i]); | |
226 | return NULL; | |
227 | } | |
228 | histo += ncomb * ibin; | |
229 | ncomb *= (*fNbinVar)[i]; | |
230 | } | |
231 | histo += species*ncomb; | |
232 | ||
233 | ||
234 | return GetV2(histo); | |
235 | ||
236 | } | |
237 | ||
238 | TProfile *AliFlowVZEROResults::GetV2(Int_t species,Float_t xMin[],Float_t xMax[]) const{ | |
239 | if(GetNvar()){ | |
240 | char title[200]; | |
241 | Int_t ncomb = 1; | |
242 | for(Int_t i=0;i < GetNvar();i++){ | |
243 | ncomb *= (*fNbinVar)[i]; | |
244 | } | |
245 | ||
246 | TProfile *htemplate = GetV2(species*ncomb); | |
247 | TProfile *temp = new TProfile(*htemplate); | |
248 | temp->SetName("histo"); | |
249 | temp->Reset(); | |
250 | sprintf(title,"%i_",species); | |
251 | for(Int_t i=0;i < GetNvar();i++){ | |
252 | Int_t imin = GetBin(i,xMin[i]); | |
253 | if(imin < 0) imin = 0; | |
254 | else if(imin >= (*fNbinVar)[i]) imin = (*fNbinVar)[i]-1; | |
255 | Int_t imax = GetBin(i,xMax[i]); | |
256 | if(imax < imin) imax = imin; | |
257 | else if(imax >= (*fNbinVar)[i]) imax = (*fNbinVar)[i]-1; | |
258 | sprintf(title,"%s_%04.1f<%s<%04.1f",title, | |
259 | (*fXmin)[i] + ((*fXmax)[i]-(*fXmin)[i])/(*fNbinVar)[i]*imin, | |
260 | fNameVar->At(i)->GetName(), | |
261 | (*fXmin)[i] + ((*fXmax)[i]-(*fXmin)[i])/(*fNbinVar)[i]*(imax+1)); | |
262 | } | |
263 | temp->SetTitle(title); | |
264 | ||
265 | for(Int_t i=species*ncomb;i < (species+1)*ncomb;i++){ | |
266 | Bool_t kGood = kTRUE; | |
267 | ||
268 | Int_t ncombTemp = i; | |
269 | for(Int_t j=0;j < GetNvar();j++){ | |
270 | Int_t imin = GetBin(j,xMin[j]); | |
271 | if(imin < 0) imin = 0; | |
272 | else if(imin >= (*fNbinVar)[j]) imin = (*fNbinVar)[j]-1; | |
273 | Int_t imax = GetBin(j,xMax[j]); | |
274 | if(imax < imin) imax = imin; | |
275 | else if(imax >= (*fNbinVar)[j]) imax = (*fNbinVar)[j]-1; | |
276 | ||
277 | Int_t ibin = ncombTemp%(*fNbinVar)[j]; | |
278 | ncombTemp /= (*fNbinVar)[j]; | |
279 | ||
280 | if(ibin < imin || ibin > imax){ | |
281 | kGood = kFALSE; | |
282 | j = GetNvar(); | |
283 | } | |
284 | } | |
285 | ||
286 | if(kGood) temp->Add(GetV2(i)); | |
287 | } | |
288 | return temp; | |
289 | } | |
290 | ||
291 | return GetV2(species); | |
292 | } | |
293 | ||
294 | Long64_t AliFlowVZEROResults::Merge(TCollection* list){ | |
295 | Long64_t res=0; | |
296 | if (!list) return 0; | |
297 | if (list->IsEmpty()) return 0; | |
298 | ||
299 | for(Int_t i=0;i < GetNhistos();i++){ | |
300 | res = GetV2(i)->Merge(list); | |
301 | } | |
302 | return res; | |
303 | } |