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