2 #include "AliFlowVZEROResults.h"
5 ClassImp(AliFlowVZEROResults);
7 AliFlowVZEROResults::AliFlowVZEROResults(const char *name,const Int_t nvar,const Int_t* binVar) :
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"))
16 for(Int_t i=0;i < GetNvar();i++){
17 (*fNbinVar)[i] = binVar[i];
20 for(Int_t i=0; i<GetNvar();i++){
21 new((*fNameVar)[i]) TNamed("","");
25 AliFlowVZEROResults::AliFlowVZEROResults() :
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"))
36 AliFlowVZEROResults::~AliFlowVZEROResults(){
37 for(Int_t i=fNameVar->GetEntries();i>0;i--){
38 delete fNameVar->At(i-1);
39 fNameVar->RemoveAt(i-1);
42 for(Int_t i=fV2->GetEntries();i>0;i--){
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);
58 for(Int_t i=fV2->GetEntries();i>0;i--){
67 fNbinVar = new TArrayI(0);
68 fXmin = new TArrayF(0);
69 fXmax = new TArrayF(0);
73 AliFlowVZEROResults::AliFlowVZEROResults(const AliFlowVZEROResults &old) :
78 fNameVar(new TClonesArray("TNamed")),
79 fV2(new TClonesArray("TProfile"))
82 fNbinVar = new TArrayI(old.GetNvar());
83 fXmin = new TArrayF(old.GetNvar());
84 fXmax = new TArrayF(old.GetNvar());
86 for(Int_t i=0; i<old.GetNhistos();i++){
87 new((*fV2)[i]) TProfile(*((TProfile *) old.GetV2(i)));
90 for(Int_t i=0; i<old.GetNvar();i++){
91 new((*fNameVar)[i]) TNamed(old.GetVarName(i),old.GetVarName(i));
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];
102 AliFlowVZEROResults& AliFlowVZEROResults::operator=(const AliFlowVZEROResults &old){
105 printf("different\n");
108 for(Int_t i=0; i<old.GetNhistos();i++){
109 new((*fV2)[i]) TProfile(*((TProfile *) old.GetV2(i)));
112 fNbinVar = new TArrayI(old.GetNvar());
113 fXmin = new TArrayF(old.GetNvar());
114 fXmax = new TArrayF(old.GetNvar());
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];
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));
130 Int_t AliFlowVZEROResults::GetNspecies() const{
131 Int_t n = fV2->GetEntries();
133 for(Int_t i=0;i < GetNvar();i++){
140 void AliFlowVZEROResults::AddSpecies(const char *name,Int_t nXbin,const Double_t *bin){
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);
150 printf("AddSpecies: NOTHING DONE\n");
155 for(Int_t i=0;i < GetNvar();i++){
156 ncomb *= (*fNbinVar)[i];
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);
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];
173 new((*fV2)[GetNhistos()]) TProfile(nameHisto,title,nXbin,bin);
174 ((TProfile *) GetV2(GetNhistos()-1))->GetXaxis()->SetTitle("p_{t} (GeV/c)");
175 ((TProfile *) GetV2(GetNhistos()-1))->GetYaxis()->SetTitle("v_{2}");
179 Int_t AliFlowVZEROResults::Add(const AliFlowVZEROResults *oth){
180 if(GetNhistos() == oth->GetNhistos()){
181 for(Int_t i=0;i < GetNhistos();i++){
182 GetV2(i)->Add(oth->GetV2(i));
187 printf("ADD error: number of objects is different (%i != %i)\n",GetNhistos(),oth->GetNhistos());
192 void AliFlowVZEROResults::SetVarRange(Int_t ivar,Float_t xMin,Float_t xMax){
197 else{ // to avoid different range among the histos
198 printf("Ranges should be set before to define the species\nNOTHING DONE\n");
203 void AliFlowVZEROResults::Fill(Int_t species,Float_t pt,Float_t v2,Float_t x[]){
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]);
213 histo += ncomb * ibin;
214 ncomb *= (*fNbinVar)[i];
216 histo += species*ncomb;
217 DirectFill(histo,pt,v2);
220 TProfile *AliFlowVZEROResults::GetV2(Int_t species,Float_t x[]) const{
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]);
230 histo += ncomb * ibin;
231 ncomb *= (*fNbinVar)[i];
233 histo += species*ncomb;
240 TProfile *AliFlowVZEROResults::GetV2(Int_t species,Float_t xMin[],Float_t xMax[]) const{
245 for(Int_t i=0;i < GetNvar();i++){
246 ncomb *= (*fNbinVar)[i];
249 TProfile *htemplate = GetV2(species*ncomb);
250 TProfile *temp = new TProfile(*htemplate);
251 temp->SetName("histo");
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));
267 temp->SetTitle(title);
269 for(Int_t i=species*ncomb;i < (species+1)*ncomb;i++){
270 Bool_t kGood = kTRUE;
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;
281 Int_t ibin = ncombTemp%(*fNbinVar)[j];
282 ncombTemp /= (*fNbinVar)[j];
284 if(ibin < imin || ibin > imax){
290 if(kGood) temp->Add(GetV2(i));
295 return GetV2(species);
297 TProfile *AliFlowVZEROResults::GetV2reweight(Int_t species,Float_t xMin[],Float_t xMax[],Int_t varRW,Float_t rw[]) const{
302 for(Int_t i=0;i < GetNvar();i++){
303 ncomb *= (*fNbinVar)[i];
306 TProfile *htemplate = GetV2(species*ncomb);
307 TProfile *temp = new TProfile(*htemplate);
308 temp->SetName("histo");
310 snprintf(title,300,"%i",species);
311 for(Int_t i=0;i < GetNvar();i++){
312 Int_t imin = GetBin(i,xMin[i]);
313 if(imin < 0) imin = 0;
314 else if(imin >= (*fNbinVar)[i]) imin = (*fNbinVar)[i]-1;
315 Int_t imax = GetBin(i,xMax[i]);
316 if(imax < imin) imax = imin;
317 else if(imax >= (*fNbinVar)[i]) imax = (*fNbinVar)[i]-1;
318 snprintf(title2,300,"%s",title);
319 snprintf(title,300,"%s_%04.1f<%s<%04.1f",title2,
320 (*fXmin)[i] + ((*fXmax)[i]-(*fXmin)[i])/(*fNbinVar)[i]*imin,
321 fNameVar->At(i)->GetName(),
322 (*fXmin)[i] + ((*fXmax)[i]-(*fXmin)[i])/(*fNbinVar)[i]*(imax+1));
324 temp->SetTitle(title);
326 for(Int_t i=species*ncomb;i < (species+1)*ncomb;i++){
327 Bool_t kGood = kTRUE;
332 for(Int_t j=0;j < GetNvar();j++){
333 Int_t imin = GetBin(j,xMin[j]);
334 if(imin < 0) imin = 0;
335 else if(imin >= (*fNbinVar)[j]) imin = (*fNbinVar)[j]-1;
336 Int_t imax = GetBin(j,xMax[j]);
337 if(imax < imin) imax = imin;
338 else if(imax >= (*fNbinVar)[j]) imax = (*fNbinVar)[j]-1;
340 Int_t ibin = ncombTemp%(*fNbinVar)[j];
341 ncombTemp /= (*fNbinVar)[j];
343 if(j == varRW) currentBin = ibin;
345 if(ibin < imin || ibin > imax){
351 if(kGood) temp->Add(GetV2(i),rw[currentBin]);
356 return GetV2(species);
360 Long64_t AliFlowVZEROResults::Merge(TCollection* list){
363 if (list->IsEmpty()) return 0;
365 TList *listObj = new TList();
366 listObj->AddAll(list);
368 for(Int_t i=0;i < listObj->GetEntries();i++){
369 AliFlowVZEROResults *obj = (AliFlowVZEROResults *) listObj->At(i);