]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG3/hfe/AliHFEcollection.cxx
Coding rules (Markus)
[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 // Collection class for histograms
17 // Stores either histograms or vectors of histograms
18 // 
19 // Author:
20 // Matus Kalisky  <matus.kalisky@cern.ch>
21 //
22
23 //#include <iostream>
24
25 #include <TH1F.h>
26 #include <TH2F.h>
27 #include <TList.h>
28 #include <TString.h>
29 #include <TBrowser.h>
30 #include <TIterator.h>
31
32 #include "AliLog.h"
33 #include "AliHFEcollection.h"
34
35 using namespace std;
36
37
38 ClassImp(AliHFEcollection)
39
40 //___________________________________________________________________
41 AliHFEcollection::AliHFEcollection():
42   TNamed()
43   , fListE(0x0)
44 {
45   //
46   // default constructor
47   //
48
49   fListE = new TList();
50   if(!fListE){
51     AliError("Initialization of the list failed");
52   }
53   else{
54     // list is owner of the objects. Once list is deleted, the objects
55     // it contains will be deleted too
56     fListE->SetOwner(kTRUE);
57   }
58   //Printf("%s:%d,%p",(char*)__FILE__,__LINE__,fInstance);
59   
60 }
61 //___________________________________________________________________
62 AliHFEcollection::AliHFEcollection(char* name, char* title):
63   TNamed(name, title)
64   , fListE(0x0)
65 {
66  
67   //
68   // constructor
69   //
70  
71   fListE = new TList();
72   if(!fListE){
73     AliError("Initialization of the list failed");
74   }
75   else{
76     // list is owner of the objects. Once list is deleted, the objects
77     // it contains will be deleted too
78     fListE->SetOwner(kTRUE);
79   }
80 }
81 //___________________________________________________________________
82 AliHFEcollection::AliHFEcollection(const AliHFEcollection &c) :
83   TNamed(c)
84   , fListE(0x0)
85 {
86
87   //
88   // copy operator
89   // 
90   
91   c.Copy(*this);
92 }
93 //___________________________________________________________________
94 AliHFEcollection &AliHFEcollection::operator=(const AliHFEcollection &ref)
95 {
96   //
97   // Assignment operator
98   //
99   
100   if(this != &ref){
101     ref.Copy(*this);
102   }
103   return *this;
104 }
105 //___________________________________________________________________
106 void AliHFEcollection::Copy(TObject &ref) const {
107   //
108   // Performs the copying of the object
109   //
110   AliHFEcollection &target = dynamic_cast<AliHFEcollection &>(ref);
111
112   target.fListE = fListE;          
113 }
114 //___________________________________________________________________
115 AliHFEcollection::~AliHFEcollection(){
116   //
117   // Destructor
118   //
119   AliInfo("DESTRUCTOR");
120 }
121 //___________________________________________________________________
122 Bool_t AliHFEcollection::CreateTH1F(const char* name, const char* title, Int_t nBin, Float_t nMin, Float_t nMax){
123   //
124   // Creates a TH1F histogram for the collection
125   //
126   if(!fListE){
127     AliError("No TList pointer ! ");
128     return kFALSE;
129   }
130   else{
131     fListE->Add(new TH1F(name, title, nBin, nMin, nMax));
132     return CheckObject(name);
133   }
134 }
135 //___________________________________________________________________
136 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){
137   //
138   // Creates a TH2F histogram for the collection
139   //
140   if(!fListE){
141     AliError("No TList pointer ! ");
142     return kFALSE;
143   }
144   fListE->Add(new TH2F(name, title, nBinX, nMinX, nMaxX, nBinY, nMinY, nMaxY));
145   return CheckObject(name); 
146 }
147 //___________________________________________________________________
148 Bool_t AliHFEcollection::CreateTH1Fvector1(Int_t X, const char* name, const char* title, Int_t nBin, Float_t nMin, Float_t nMax){
149   //
150   // create a 1 dimensional array of size [X]
151   //
152   if(!fListE){
153     AliError("No TList pointer ! ");
154     return kFALSE;
155   }
156   if(X <=0){
157     AliError("can not create array with negative or zero size ");
158     return kFALSE;
159   }
160   TString hname;
161   for(Int_t i=0; i<X; ++i){
162     hname = "";
163     hname.Append(Form("%s_[%d]", name, i));
164     //cout<<" -D: name: "<<name.str().c_str()<<endl;
165     //cout<<" -D: nBin: "<<_nBin<<" ,Min: "<<_nMin<<" , Max: "<<_nMax<<endl;
166     CreateTH1F(hname.Data(), title, nBin, nMin, nMax);
167     if(!CheckObject(hname.Data())){
168       AliError(Form("Not possible to create object: ", hname.Data()));
169       return kFALSE;
170     }    
171   }
172   return kTRUE;  
173 }
174 //___________________________________________________________________
175 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){
176   //
177   // create a 1 dimensinal array of TH2F histograms with size [X]
178   //
179   if(!fListE){
180     AliError("No TList pointer !");
181     return kFALSE;
182   }
183   if(X <=0){
184     AliError("can not create array with negative or zero size ");
185     return kFALSE;
186   }
187   TString hname;
188   for(Int_t i=0; i<X; ++i){
189     hname = "";
190     hname.Append(Form("%s_[%d]", name, i));
191     //cout<<" -D: name: "<<name<<endl;
192     //cout<<" -D: nBin: "<<_nBin<<" ,Min: "<<_nMin<<" , Max: "<<_nMax<<endl;
193     CreateTH2F(hname.Data(), title, nBinX, nMinX, nMaxX, nBinY, nMinY, nMaxY);
194     if(!CheckObject(hname.Data())){
195       AliError(Form("Not possible to create object: %s", hname.Data()));
196       return kFALSE;
197     }    
198   }
199   return kTRUE;  
200 }
201 //___________________________________________________________________
202 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){
203   //
204   // create a 2 dimensional array of histograms of size [X, Y]
205   //
206   if(!fListE){
207     AliError("No TList pointer ! ");
208     return kFALSE;
209   }
210   if(X <=0 || Y <=0){
211     AliError("can not create array with negative or zero size ");
212     return kFALSE;
213   }
214   TString hname;
215   for(Int_t i=0; i<X; ++i){
216     for(Int_t j=0; j<Y; ++j){
217       hname = "";
218       hname.Append(Form("%s_[%d][%d]", name, i, j));
219       //cout<<" -D: name: "<<name.str().c_str()<<endl;
220       //cout<<" -D: nBin: "<<_nBin<<" ,Min: "<<_nMin<<" , Max: "<<_nMax<<endl;
221       CreateTH1F(hname.Data(), title, nBin, nMin, nMax);
222       if(!CheckObject(hname.Data())){
223               AliError(Form("Not possible to create object: %s", hname.Data()));
224               return kFALSE;
225       }
226     }
227   }
228   return kTRUE;
229   
230   
231 }
232 //___________________________________________________________________
233 TObject* AliHFEcollection::Get(const char* name, Int_t X){
234   //
235   // Get the histogram from the vector
236   // Paramter: 
237   //  name - vector name
238   //  X - Number of the desired histogram
239   //
240   TString hname = name;
241   hname.Append(Form("_[%d]", X));
242   if(!CheckObject(hname.Data())){
243     AliError("No such object found in the list");
244     return 0x0;
245   }
246   else{
247     return Get(hname.Data());
248   }
249 }
250 //___________________________________________________________________
251 TObject* AliHFEcollection::Get(const char* name, Int_t X, Int_t Y){
252   //
253   // Get histogram from the 2D vector
254   // Parameters:
255   //  name - Name of the vector
256   //  X,Y - Indices of the histogram
257   //
258   TString hname = name;
259   hname.Append(Form("_[%d][%d]", X, Y));
260   if(!CheckObject(hname.Data())){
261     AliError("No such object found in the list");
262     AliError(Form("name: %s", hname.Data()));
263     return 0x0;
264   }
265   else{
266     return Get(hname.Data());
267   }
268 }
269 //___________________________________________________________________
270 Bool_t AliHFEcollection::CheckObject(const char* name){
271   //
272   // check wheter the creation of the histogram was succesfull
273   //
274   
275   if(!fListE){
276     AliError("No TList pointer ! ");
277     return kFALSE;
278   }
279   
280   if(!fListE->FindObject(name)){
281     AliError("Creating or Finding the object failed");
282     return kFALSE;
283   }
284   return kTRUE;
285 }
286 //___________________________________________________________________
287 TObject* AliHFEcollection::Get(const char* name){ 
288   //
289   // Get histogram with the required name
290   // 
291   return fListE->FindObject(name); 
292 }
293 //___________________________________________________________________
294 Long64_t AliHFEcollection::Merge(TCollection *list){
295   //
296   // Merge the collections
297   //
298   if(!fListE){
299     AliError("AliHFEcollection::Merge : No TList pointer ! ");
300     return 0;
301   }
302
303   return fListE->Merge(list);
304   
305 }
306 //____________________________________________________________________
307 void AliHFEcollection::Browse(TBrowser *b)
308 {
309   //
310   // Browse the content of the directory.
311   //
312
313    if (b) {
314       TObject *obj = 0;
315       TIter nextin(fListE);
316
317       //Add objects that are only in memory
318       while ((obj = nextin())) {
319          b->Add(obj, obj->GetName());
320       }
321    }
322 }