]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG/FLOW/Tasks/AliFlowVZEROQA.cxx
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWG / FLOW / Tasks / AliFlowVZEROQA.cxx
CommitLineData
243fbce7 1#include<stdio.h>
2#include "AliFlowVZEROQA.h"
3#include "TList.h"
4
5ClassImp(AliFlowVZEROQA);
6
7AliFlowVZEROQA::AliFlowVZEROQA(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 fQA(new TClonesArray("TH2F"))
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
25AliFlowVZEROQA::AliFlowVZEROQA() :
26 TNamed("qa","qa"),
27 fNbinVar(new TArrayI(0)),
28 fXmin(new TArrayF(0)),
29 fXmax(new TArrayF(0)),
30 fNameVar(new TClonesArray("TNamed")),
31 fQA(new TClonesArray("TH2F"))
32{
33
34}
35
36AliFlowVZEROQA::~AliFlowVZEROQA(){
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=fQA->GetEntries();i>0;i--){
43 delete fQA->At(i-1);
44 fQA->RemoveAt(i-1);
45 }
46
47 delete fNbinVar;
48 delete fXmin;
49 delete fXmax;
50}
51
52void AliFlowVZEROQA::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=fQA->GetEntries();i>0;i--){
59 delete fQA->At(i-1);
60 fQA->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
73AliFlowVZEROQA::AliFlowVZEROQA(const AliFlowVZEROQA &old) :
74 TNamed(old),
75 fNbinVar(NULL),
76 fXmin(NULL),
77 fXmax(NULL),
78 fNameVar(new TClonesArray("TNamed")),
79 fQA(new TClonesArray("TH2F"))
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((*fQA)[i]) TH2F(*((TH2F *) old.GetQA(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
102AliFlowVZEROQA& AliFlowVZEROQA::operator=(const AliFlowVZEROQA &old){
103
104 if(this != &old){
105 printf("different\n");
106 }
107
108 for(Int_t i=0; i<old.GetNhistos();i++){
109 new((*fQA)[i]) TH2F(*((TH2F *) old.GetQA(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
130Int_t AliFlowVZEROQA::GetNspecies() const{
131 Int_t n = fQA->GetEntries();
132
133 for(Int_t i=0;i < GetNvar();i++){
134 n /= (*fNbinVar)[i];
135 }
136
137 return n;
138}
139
140void AliFlowVZEROQA::AddSpecies(const char *name,Int_t nXbin,const Double_t *xbin,Int_t nYbin,const Double_t *ybin){
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[300];
161 char title2[300];
162 for(Int_t i=0; i < ncomb;i++){
163 snprintf(nameHisto,200,"%s_%s_%i",GetName(),name,i);
164 snprintf(title,300,"%s",name);
165 Int_t ncombTemp = i;
166 for(Int_t j=0;j < GetNvar();j++){
167 Int_t ibin = ncombTemp%(*fNbinVar)[j];
168 snprintf(title2,300,"%s",title);
169 snprintf(title,300,"%s_%04.1f<%s<%04.1f",title2,(*fXmin)[j] + ((*fXmax)[j]-(*fXmin)[j])/(*fNbinVar)[j]*ibin,fNameVar->At(j)->GetName(),(*fXmin)[j] + ((*fXmax)[j]-(*fXmin)[j])/(*fNbinVar)[j]*(ibin+1));
170 ncombTemp /= (*fNbinVar)[j];
171 }
172
173 new((*fQA)[GetNhistos()]) TH2F(nameHisto,title,nXbin,xbin,nYbin,ybin);
174 ((TH2F *) GetQA(GetNhistos()-1))->GetXaxis()->SetTitle("N_{#sigma}^{TPC}");
175 ((TH2F *) GetQA(GetNhistos()-1))->GetYaxis()->SetTitle("N_{#sigma}^{TOF}");
176 }
177}
178
179Int_t AliFlowVZEROQA::Add(const AliFlowVZEROQA *oth){
180 if(GetNhistos() == oth->GetNhistos()){
181 for(Int_t i=0;i < GetNhistos();i++){
182 GetQA(i)->Add(oth->GetQA(i));
183 }
184 return 0;
185 }
186 else{
187 printf("ADD error: number of objects is different (%i != %i)\n",GetNhistos(),oth->GetNhistos());
188 return 1;
189 }
190}
191
192void AliFlowVZEROQA::SetVarRange(Int_t ivar,Float_t xMin,Float_t xMax){
193 if(!GetNhistos()){
194 (*fXmin)[ivar]=xMin;
195 (*fXmax)[ivar]=xMax;
196 }
197 else{ // to avoid different range among the histos
198 printf("Ranges should be set before to define the species\nNOTHING DONE\n");
199 }
200
201}
202
203void AliFlowVZEROQA::Fill(Int_t species,Float_t var1,Float_t var2,Float_t x[]){
204 Int_t ncomb = 1;
205 Int_t histo = 0;
206
207 for(Int_t i=0;i < GetNvar();i++){
208 Int_t ibin = GetBin(i,x[i]);
209 if(ibin < 0 || ibin >= (*fNbinVar)[i]){
210 printf("%i) %i not good w.r.t. %i (%f) (%f,%f)\n",i,ibin,(*fNbinVar)[i],x[i],(*fXmin)[i],(*fXmax)[i]);
211 return;
212 }
213 histo += ncomb * ibin;
214 ncomb *= (*fNbinVar)[i];
215 }
216 histo += species*ncomb;
217 DirectFill(histo,var1,var2);
218 };
219
220TH2F *AliFlowVZEROQA::GetQA(Int_t species,Float_t x[]) const{
221 Int_t ncomb = 1;
222 Int_t histo = 0;
223
224 for(Int_t i=0;i < GetNvar();i++){
225 Int_t ibin = GetBin(i,x[i]);
226 if(ibin < 0 || ibin >= (*fNbinVar)[i]){
227 printf("%i) %i not good w.r.t. %i (%f) (%f,%f)\n",i,ibin,(*fNbinVar)[i],x[i],(*fXmin)[i],(*fXmax)[i]);
228 return NULL;
229 }
230 histo += ncomb * ibin;
231 ncomb *= (*fNbinVar)[i];
232 }
233 histo += species*ncomb;
234
235
236 return GetQA(histo);
237
238}
239
240TH2F *AliFlowVZEROQA::GetQA(Int_t species,Float_t xMin[],Float_t xMax[]) const{
241 if(GetNvar()){
242 char title[300];
243 char title2[300];
244 Int_t ncomb = 1;
245 for(Int_t i=0;i < GetNvar();i++){
246 ncomb *= (*fNbinVar)[i];
247 }
248
249 TH2F *htemplate = GetQA(species*ncomb);
250 TH2F *temp = new TH2F(*htemplate);
251 temp->SetName("histo");
252 temp->Reset();
253 snprintf(title,300,"%i",species);
254 for(Int_t i=0;i < GetNvar();i++){
255 Int_t imin = GetBin(i,xMin[i]);
256 if(imin < 0) imin = 0;
257 else if(imin >= (*fNbinVar)[i]) imin = (*fNbinVar)[i]-1;
258 Int_t imax = GetBin(i,xMax[i]);
259 if(imax < imin) imax = imin;
260 else if(imax >= (*fNbinVar)[i]) imax = (*fNbinVar)[i]-1;
261 snprintf(title2,300,"%s",title);
262 snprintf(title,300,"%s_%04.1f<%s<%04.1f",title2,
263 (*fXmin)[i] + ((*fXmax)[i]-(*fXmin)[i])/(*fNbinVar)[i]*imin,
264 fNameVar->At(i)->GetName(),
265 (*fXmin)[i] + ((*fXmax)[i]-(*fXmin)[i])/(*fNbinVar)[i]*(imax+1));
266 }
267 temp->SetTitle(title);
268
269 for(Int_t i=species*ncomb;i < (species+1)*ncomb;i++){
270 Bool_t kGood = kTRUE;
271
272 Int_t ncombTemp = i;
273 for(Int_t j=0;j < GetNvar();j++){
274 Int_t imin = GetBin(j,xMin[j]);
275 if(imin < 0) imin = 0;
276 else if(imin >= (*fNbinVar)[j]) imin = (*fNbinVar)[j]-1;
277 Int_t imax = GetBin(j,xMax[j]);
278 if(imax < imin) imax = imin;
279 else if(imax >= (*fNbinVar)[j]) imax = (*fNbinVar)[j]-1;
280
281 Int_t ibin = ncombTemp%(*fNbinVar)[j];
282 ncombTemp /= (*fNbinVar)[j];
283
284 if(ibin < imin || ibin > imax){
285 kGood = kFALSE;
286 j = GetNvar();
287 }
288 }
289
290 if(kGood) temp->Add(GetQA(i));
291 }
292 return temp;
293 }
294
295 return GetQA(species);
296}
297
298Long64_t AliFlowVZEROQA::Merge(TCollection* list){
299 Long64_t res=0;
300 if (!list) return 0;
301 if (list->IsEmpty()) return 0;
302
303 TList *listObj = new TList();
304 listObj->AddAll(list);
305
306 for(Int_t i=0;i < listObj->GetEntries();i++){
307 AliFlowVZEROQA *obj = (AliFlowVZEROQA *) listObj->At(i);
308 Add(obj);
309 res++;
310 }
311 return res;
312}