Bug fix by Xian-Guo
[u/mrichter/AliRoot.git] / TRD / AliTRDdEdxCalibHistArray.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 //
17 // xx
18 // xx
19 // xx
20 // xx
21 // xx
22 //
23 //  Xianguo Lu 
24 //  lu@physi.uni-heidelberg.de
25 //  Xianguo.Lu@cern.ch
26 //  
27 //
28 #include "THnBase.h"
29 #include "THn.h"
30 #include "TCollection.h"
31
32 #include "AliTRDdEdxBaseUtils.h"
33 #include "AliTRDdEdxCalibHistArray.h"
34
35 ClassImp(AliTRDdEdxCalibHistArray);
36
37 AliTRDdEdxCalibHistArray::AliTRDdEdxCalibHistArray(const Bool_t kNoInv): 
38   TObjArray(kNoInv ? 4: 8)
39 {
40   //
41   //constructor
42   //
43   SetName(GetArrayName());
44   SetOwner(kTRUE);
45
46   const Int_t    nbin[2]={AliTRDdEdxBaseUtils::NTRDtimebin(), 200};
47   const Double_t xmin[2]={0,       0.01};
48   const Double_t xmax[2]={nbin[0], 10};
49   const TString aname[2]={"globalTimeBin", "trdqovertpc"};
50   const TString atitle[2]={"det * AliTRDseedV1::kNtb + itb", "TRD-Cluster-Q / TPC-Signal"};
51
52   for(Int_t iter=0; iter<GetSize(); iter++){
53     THnBase *hi = new THnF(GetNameAt(iter), "", 2, nbin, xmin, xmax);
54     for(Int_t iaxis=0; iaxis<2; iaxis++){
55       TAxis *xi = hi->GetAxis(iaxis);
56       xi->SetName(aname[iaxis]);
57       xi->SetTitle(atitle[iaxis]);
58       //only log for y-axis
59       if(iaxis==1){
60         AliTRDdEdxBaseUtils::BinLogX(xi);
61       }
62     }
63     AddAt(hi, iter);
64   }
65 }
66
67 AliTRDdEdxCalibHistArray::AliTRDdEdxCalibHistArray(const AliTRDdEdxCalibHistArray &obj): 
68   TObjArray(obj)
69 {
70   //
71   //copy constructor
72   //
73 }
74
75 AliTRDdEdxCalibHistArray & AliTRDdEdxCalibHistArray::operator=(const AliTRDdEdxCalibHistArray &obj)
76 {
77   //
78   //assignment operator
79   //
80
81   if(&obj == this) return *this;
82
83   TObjArray::operator=(obj);
84
85   return *this;
86 }
87
88 Long64_t AliTRDdEdxCalibHistArray::Merge(const TCollection* list) 
89 {
90   //
91   // Merge list of objects (needed by PROOF)
92   //
93
94   if(!list)
95     return 0;
96   
97   if(list->IsEmpty())
98     return 1;
99   
100   TIterator* iter = list->MakeIterator();
101   TObject* obj = 0;
102   
103   Int_t count=0;
104   while((obj = iter->Next()) != 0) 
105     {
106       AliTRDdEdxCalibHistArray * entry = dynamic_cast<AliTRDdEdxCalibHistArray*>(obj);
107       if (entry == 0) continue; 
108       
109       if(GetSize()!= entry->GetSize()){
110         printf("AliTRDdEdxCalibHistArray::Merge GetSize()!= entry->GetSize() %d %d\n", GetSize(), entry->GetSize()); exit(1);
111       }
112
113       for(Int_t ii=0; ii<GetSize(); ii++){
114         THnBase *h0 = (THnBase*) At(ii);
115         THnBase *h1 = (THnBase*) entry->At(ii);
116         h0->Add(h1);
117       }
118       
119       count++;
120     }
121   
122   return count;
123
124 }