New support for QA histos
[u/mrichter/AliRoot.git] / CORRFW / AliCFDataGrid.cxx
CommitLineData
563113d0 1/* $Id$ */
1e9dad92 2/**************************************************************************
3 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * *
5 * Author: The ALICE Off-line Project. *
6 * Contributors are mentioned in the code where appropriate. *
7 * *
8 * Permission to use, copy, modify and distribute this software and its *
9 * documentation strictly for non-commercial purposes is hereby granted *
10 * without fee, provided that the above copyright notice appears in all *
11 * copies and that both the copyright notice and this permission notice *
12 * appear in the supporting documentation. The authors make no claims *
13 * about the suitability of this software for any purpose. It is *
14 * provided "as is" without express or implied warranty. *
15 **************************************************************************/
563113d0 16//--------------------------------------------------------------------//
17// //
18// AliCFDataGrid Class //
19// Class to handle observed data and correct them //
20// //
21// -- Author : S.Arcelli //
22// //
23// //
24// //
25//--------------------------------------------------------------------//
26//
27//
28#include <TROOT.h>
29#include <TMath.h>
30#include <TFile.h>
31#include <AliLog.h>
32#include "AliCFDataGrid.h"
33
34//____________________________________________________________________
35ClassImp(AliCFDataGrid)
36
37//____________________________________________________________________
38AliCFDataGrid::AliCFDataGrid() :
39 AliCFGrid(),
40 fSelData(-1),
41 fContainer(0x0)
42{
43 //
44 // default constructor
45 //
46 SumW2(); //errors saved
47}
48
49//____________________________________________________________________
50AliCFDataGrid::AliCFDataGrid(const Char_t* name,const Char_t* title) :
51 AliCFGrid(name,title),
52 fSelData(-1),
53 fContainer(0x0)
54{
55 //
56 // default constructor
57 //
58 SumW2(); //errors saved
59}
60
61//____________________________________________________________________
1e9dad92 62AliCFDataGrid::AliCFDataGrid(const Char_t* name, const Char_t* title, const Int_t nVarIn, const Int_t * nBinIn, const Double_t *binLimitsIn) :
563113d0 63 AliCFGrid(name,title,nVarIn,nBinIn,binLimitsIn),
64 fSelData(-1),
65 fContainer(0x0)
66{
67 //
68 // main constructor
69 //
70 SumW2();// errors saved
71}
72//____________________________________________________________________
73AliCFDataGrid::AliCFDataGrid(const Char_t* name, const Char_t* title, const AliCFContainer &c) :
74 AliCFGrid(name,title,c.GetNVar(),c.GetNBins(),c.GetBinLimits()),
75 fSelData(-1),
76 fContainer(0x0)
77{
78 //
79 // main constructor
80 //
81 SumW2();
82 //assign the container;
83 fContainer=&c;
84
85}
86//____________________________________________________________________
87AliCFDataGrid::AliCFDataGrid(const AliCFDataGrid& data) : AliCFGrid(),
88 fSelData(-1),
89 fContainer(0x0)
90{
91 //
92 // copy constructor
93 //
94 ((AliCFDataGrid &)data).Copy(*this);
95}
96
97//____________________________________________________________________
98AliCFDataGrid::~AliCFDataGrid()
99{
100 //
101 // destructor
102 //
103}
104//____________________________________________________________________
105AliCFDataGrid &AliCFDataGrid::operator=(const AliCFDataGrid &c)
106{
107 //
108 // assigment operator
109 //
110 if (this != &c)
111 ((AliCFDataGrid &) c).Copy(*this);
112 return *this;
113}
114//____________________________________________________________________
115
116void AliCFDataGrid::SetMeasured(Int_t istep)
117{
118 //
119 // Deposit observed data over the grid
120 //
121 Int_t nEmptyBins=0;
122 fSelData=istep;
123 //Initially, set the corrected data to the measured data
124 for(Int_t i=0;i<fNDim;i++){
125 Float_t meas=fContainer->GetGrid(fSelData)->GetElement(i);
126 Float_t dmeas=fContainer->GetGrid(fSelData)->GetElementError(i);
127 SetElement(i,meas);
128 SetElementError(i,dmeas);
129 if(meas <=0)nEmptyBins++;
130 }
131 fNentriesTot=fNDim;
132 AliInfo(Form("retrieving measured data from Container %s at selection step %i: %i empty bins were found.",fContainer->GetName(),fSelData,nEmptyBins));
133}
134//____________________________________________________________________
135void AliCFDataGrid::ApplyEffCorrection(const AliCFEffGrid &c)
136{
137
138 //
139 // Apply the efficiency correction
140 //
141 if(c.GetNVar()!=fNVar){
142 AliInfo("Different number of variables, cannot apply correction");
143 return;
144 }
145 if(c.GetNDim()!=fNDim){
146 AliInfo("Different number of dimension, cannot apply correction");
147 return;
148 }
149
150 //Get the data
151 Int_t ncorr=0;
152 Int_t nnocorr=0;
153 Float_t eff,deff,unc,dunc,corr,dcorr;
154 //Apply the correction
155 for(Int_t i=0;i<fNDim;i++){
156 eff =c.GetElement(i);
1e9dad92 157 deff =c.GetElementError(i);
563113d0 158 unc =GetElement(i);
1e9dad92 159 dunc =GetElementError(i);
563113d0 160 if(eff>0 && unc>0){
161 ncorr++;
162 corr=unc/eff;
163 dcorr=TMath::Sqrt(dunc*dunc/unc/unc+deff*deff/eff/eff)*corr;
164 SetElement(i,corr);
1e9dad92 165 SetElementError(i,dcorr);
563113d0 166 } else{
167 if(unc>0)nnocorr++;
168 SetElement(i,0);
169 SetElementError(i,0);
170 }
171 }
172 AliInfo(Form("correction applied for %i cells in correction matrix of Container %s, having entries in Data Container %s.",ncorr,c.GetName(),GetName()));
173 AliInfo(Form("No correction applied for %i empty bins in correction matrix of Container %s, having entries in Data Container %s. Their content in the corrected data container was set to zero",nnocorr,c.GetName(),GetName()));
174}
175//____________________________________________________________________
176void AliCFDataGrid::ApplyBGCorrection(const AliCFDataGrid &c)
177{
178
179 //
180 // Apply correction for background
181 //
182 if(c.GetNVar()!=fNVar){
183 AliInfo("Different number of variables, cannot apply correction");
184 return;
185 }
186 if(c.GetNDim()!=fNDim){
187 AliInfo("Different number of dimension, cannot apply correction");
188 return;
189 }
190
191 //Get the data
192 Float_t bkg,dbkg,unc,dunc,corr,dcorr;
193
194 //Apply the correction
195
196 for(Int_t i=0;i<fNDim;i++){
197 bkg =c.GetElement(i);
1e9dad92 198 dbkg =c.GetElementError(i);
563113d0 199 unc =GetElement(i);
1e9dad92 200 dunc =GetElementError(i);
563113d0 201 corr=unc-bkg;
1e9dad92 202 dcorr=TMath::Sqrt(unc+bkg); //stat err only...
563113d0 203 SetElement(i,corr);
1e9dad92 204 SetElementError(i,dcorr);
563113d0 205
206 }
207}
563113d0 208//____________________________________________________________________
209void AliCFDataGrid::Copy(TObject& eff) const
210{
211 // copy function
212
213 Copy(eff);
214 AliCFDataGrid& target = (AliCFDataGrid &) eff;
215 target.fContainer=fContainer;
216 target.fSelData=fSelData;
217
218}