Since it contains fixes of coding rule violations, all classes are involved. Further...
[u/mrichter/AliRoot.git] / PWG3 / hfe / AliHFEcollection.cxx
1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 *                                                                        *
4 * Author: The ALICE Off-line Project.                                    *
5 * Contributors are mentioned in the code where appropriate.              *
6 *                                                                        *
7 * Permission to use, copy, modify and distribute this software and its   *
8 * documentation strictly for non-commercial purposes is hereby granted   *
9 * without fee, provided that the above copyright notice appears in all   *
10 * copies and that both the copyright notice and this permission notice   *
11 * appear in the supporting documentation. The authors make no claims     *
12 * about the suitability of this software for any purpose. It is          *
13 * provided "as is" without express or implied warranty.                  *
14 **************************************************************************/
15
16 #include <iostream>
17
18 #include <TH1F.h>
19 #include <TH2F.h>
20 #include <TList.h>
21 #include <TString.h>
22 #include <TBrowser.h>
23 #include <TIterator.h>
24
25 #include "AliLog.h"
26 #include "AliHFEcollection.h"
27
28 using namespace std;
29
30
31 ClassImp(AliHFEcollection)
32
33 //___________________________________________________________________
34 AliHFEcollection::AliHFEcollection():
35   TNamed()
36   , fListE(0x0)
37 {
38   //
39   // default constructor
40   //
41
42   fListE = new TList();
43   if(!fListE){
44     AliError("Initialization of the list failed");
45   }
46   else{
47     // list is owner of the objects. Once list is deleted, the objects
48     // it contains will be deleted too
49     fListE->SetOwner(kTRUE);
50   }
51   //Printf("%s:%d,%p",(char*)__FILE__,__LINE__,fInstance);
52   
53 }
54 //___________________________________________________________________
55 AliHFEcollection::AliHFEcollection(char* name, char* title):
56   TNamed(name, title)
57   , fListE(0x0)
58 {
59  
60   //
61   // constructor
62   //
63  
64   fListE = new TList();
65   if(!fListE){
66     AliError("Initialization of the list failed");
67   }
68   else{
69     // list is owner of the objects. Once list is deleted, the objects
70     // it contains will be deleted too
71     fListE->SetOwner(kTRUE);
72   }
73 }
74 //___________________________________________________________________
75 AliHFEcollection::AliHFEcollection(const AliHFEcollection &c) :
76   TNamed(c)
77   , fListE(0x0)
78 {
79
80   //
81   // copy operator
82   // 
83   
84   c.Copy(*this);
85 }
86 //___________________________________________________________________
87 AliHFEcollection &AliHFEcollection::operator=(const AliHFEcollection &ref)
88 {
89   //
90   // Assignment operator
91   //
92   
93   if(this != &ref){
94     ref.Copy(*this);
95   }
96   return *this;
97 }
98 //___________________________________________________________________
99 void AliHFEcollection::Copy(TObject &ref) const {
100   //
101   // Performs the copying of the object
102   //
103   AliHFEcollection &target = dynamic_cast<AliHFEcollection &>(ref);
104
105   target.fListE = fListE;          
106 }
107 //___________________________________________________________________
108 AliHFEcollection::~AliHFEcollection(){
109   AliInfo("DESTRUCTOR");
110 }
111 //___________________________________________________________________
112 Bool_t AliHFEcollection::CreateTH1F(const char* name, const char* title, Int_t nBin, Float_t nMin, Float_t nMax){
113   
114   if(!fListE){
115     AliError("No TList pointer ! ");
116     return kFALSE;
117   }
118   else{
119     fListE->Add(new TH1F(name, title, nBin, nMin, nMax));
120     return CheckObject(name);
121   }
122 }
123 //___________________________________________________________________
124 Bool_t AliHFEcollection::CreateTH2F(const char* name, const char* title, Int_t nBinX, Float_t nMinX, Float_t nMaxX, Int_t nBinY, Float_t nMinY, Float_t nMaxY){
125   
126   if(!fListE){
127     AliError("No TList pointer ! ");
128     return kFALSE;
129   }
130   fListE->Add(new TH2F(name, title, nBinX, nMinX, nMaxX, nBinY, nMinY, nMaxY));
131   return CheckObject(name); 
132 }
133 //___________________________________________________________________
134 Bool_t AliHFEcollection::CreateTH1Fvector1(Int_t X, const char* name, const char* title, Int_t nBin, Float_t nMin, Float_t nMax){
135
136   // create a 1 dimensional array of size [X]
137   
138   if(!fListE){
139     AliError("No TList pointer ! ");
140     return kFALSE;
141   }
142   if(X <=0){
143     AliError("can not create array with negative or zero size ");
144     return kFALSE;
145   }
146   TString hname;
147   for(Int_t i=0; i<X; ++i){
148     hname = "";
149     hname.Append(Form("%s_[%d]", name, i));
150     //cout<<" -D: name: "<<name.str().c_str()<<endl;
151     //cout<<" -D: nBin: "<<_nBin<<" ,Min: "<<_nMin<<" , Max: "<<_nMax<<endl;
152     CreateTH1F(hname.Data(), title, nBin, nMin, nMax);
153     if(!CheckObject(hname.Data())){
154       AliError(Form("Not possible to create object: ", hname.Data()));
155       return kFALSE;
156     }    
157   }
158   return kTRUE;  
159 }
160 //___________________________________________________________________
161 Bool_t AliHFEcollection::CreateTH2Fvector1(Int_t X, const char* name, const char* title, Int_t nBinX, Float_t nMinX, Float_t nMaxX, Int_t nBinY, Float_t nMinY, Float_t nMaxY){
162
163   // create a 1 dimensinal array of TH2F histograms with size [X]
164   if(!fListE){
165     AliError("No TList pointer !");
166     return kFALSE;
167   }
168   if(X <=0){
169     AliError("can not create array with negative or zero size ");
170     return kFALSE;
171   }
172   TString hname;
173   for(Int_t i=0; i<X; ++i){
174     hname = "";
175     hname.Append(Form("%s_[%d]", name, i));
176     //cout<<" -D: name: "<<name<<endl;
177     //cout<<" -D: nBin: "<<_nBin<<" ,Min: "<<_nMin<<" , Max: "<<_nMax<<endl;
178     CreateTH2F(hname.Data(), title, nBinX, nMinX, nMaxX, nBinY, nMinY, nMaxY);
179     if(!CheckObject(hname.Data())){
180       AliError(Form("Not possible to create object: %s", hname.Data()));
181       return kFALSE;
182     }    
183   }
184   return kTRUE;  
185 }
186 //___________________________________________________________________
187 Bool_t AliHFEcollection::CreateTH1Fvector2(Int_t X, Int_t Y, const char* name, const char* title, Int_t nBin, Float_t nMin, Float_t nMax){
188
189   // create a 2 dimensional array of histograms of size [X, Y]
190   if(!fListE){
191     AliError("No TList pointer ! ");
192     return kFALSE;
193   }
194   if(X <=0 || Y <=0){
195     AliError("can not create array with negative or zero size ");
196     return kFALSE;
197   }
198   TString hname;
199   for(Int_t i=0; i<X; ++i){
200     for(Int_t j=0; j<Y; ++j){
201       hname = "";
202       hname.Append(Form("%s_[%d][%d]", name, i, j));
203       //cout<<" -D: name: "<<name.str().c_str()<<endl;
204       //cout<<" -D: nBin: "<<_nBin<<" ,Min: "<<_nMin<<" , Max: "<<_nMax<<endl;
205       CreateTH1F(hname.Data(), title, nBin, nMin, nMax);
206       if(!CheckObject(hname.Data())){
207               AliError(Form("Not possible to create object: %s", hname.Data()));
208               return kFALSE;
209       }
210     }
211   }
212   return kTRUE;
213   
214   
215 }
216 //___________________________________________________________________
217 TObject* AliHFEcollection::Get(const char* name, Int_t X){
218   
219   TString hname = name;
220   hname.Append(Form("_[%d]", X));
221   if(!CheckObject(hname.Data())){
222     AliError("No such object found in the list");
223     return 0x0;
224   }
225   else{
226     return Get(hname.Data());
227   }
228 }
229 //___________________________________________________________________
230 TObject* AliHFEcollection::Get(const char* name, Int_t X, Int_t Y){
231   
232   TString hname = name;
233   hname.Append(Form("_[%d][%d]", X, Y));
234   if(!CheckObject(hname.Data())){
235     AliError("No such object found in the list");
236     AliError(Form("name: %s", hname.Data()));
237     return 0x0;
238   }
239   else{
240     return Get(hname.Data());
241   }
242 }
243 //___________________________________________________________________
244 Bool_t AliHFEcollection::CheckObject(const char* name){
245
246   // check wheter the creation of the histogram was succesfull
247   
248   if(!fListE){
249     AliError("No TList pointer ! ");
250     return kFALSE;
251   }
252   
253   if(!fListE->FindObject(name)){
254     AliError("Creating or Finding the object failed");
255     return kFALSE;
256   }
257   return kTRUE;
258 }
259 //___________________________________________________________________
260 TObject* AliHFEcollection::Get(const char* name){ 
261   return fListE->FindObject(name); 
262 }
263 //___________________________________________________________________
264 Long64_t AliHFEcollection::Merge(TCollection *list){
265
266   if(!fListE){
267     AliError("AliHFEcollection::Merge : No TList pointer ! ");
268     return 0;
269   }
270
271   return fListE->Merge(list);
272   
273 }
274 //____________________________________________________________________
275 void AliHFEcollection::Browse(TBrowser *b)
276 {
277    // Browse the content of the directory.
278
279    if (b) {
280       TObject *obj = 0;
281       TIter nextin(fListE);
282
283       //Add objects that are only in memory
284       while ((obj = nextin())) {
285          b->Add(obj, obj->GetName());
286       }
287    }
288 }