3 //--------------------------------------------------------------------//
5 // AliCFDataGrid Class //
6 // Class to handle observed data and correct them //
8 // -- Author : S.Arcelli //
12 //--------------------------------------------------------------------//
19 #include "AliCFDataGrid.h"
21 //____________________________________________________________________
22 ClassImp(AliCFDataGrid)
24 //____________________________________________________________________
25 AliCFDataGrid::AliCFDataGrid() :
31 // default constructor
33 SumW2(); //errors saved
36 //____________________________________________________________________
37 AliCFDataGrid::AliCFDataGrid(const Char_t* name,const Char_t* title) :
38 AliCFGrid(name,title),
43 // default constructor
45 SumW2(); //errors saved
48 //____________________________________________________________________
49 AliCFDataGrid::AliCFDataGrid(const Char_t* name, const Char_t* title, const Int_t nVarIn, const Int_t * nBinIn, const Float_t *binLimitsIn) :
50 AliCFGrid(name,title,nVarIn,nBinIn,binLimitsIn),
57 SumW2();// errors saved
59 //____________________________________________________________________
60 AliCFDataGrid::AliCFDataGrid(const Char_t* name, const Char_t* title, const AliCFContainer &c) :
61 AliCFGrid(name,title,c.GetNVar(),c.GetNBins(),c.GetBinLimits()),
69 //assign the container;
73 //____________________________________________________________________
74 AliCFDataGrid::AliCFDataGrid(const AliCFDataGrid& data) : AliCFGrid(),
81 ((AliCFDataGrid &)data).Copy(*this);
84 //____________________________________________________________________
85 AliCFDataGrid::~AliCFDataGrid()
91 //____________________________________________________________________
92 AliCFDataGrid &AliCFDataGrid::operator=(const AliCFDataGrid &c)
98 ((AliCFDataGrid &) c).Copy(*this);
101 //____________________________________________________________________
103 void AliCFDataGrid::SetMeasured(Int_t istep)
106 // Deposit observed data over the grid
110 //Initially, set the corrected data to the measured data
111 for(Int_t i=0;i<fNDim;i++){
112 Float_t meas=fContainer->GetGrid(fSelData)->GetElement(i);
113 Float_t dmeas=fContainer->GetGrid(fSelData)->GetElementError(i);
115 SetElementError(i,dmeas);
116 if(meas <=0)nEmptyBins++;
119 AliInfo(Form("retrieving measured data from Container %s at selection step %i: %i empty bins were found.",fContainer->GetName(),fSelData,nEmptyBins));
121 //____________________________________________________________________
122 void AliCFDataGrid::ApplyEffCorrection(const AliCFEffGrid &c)
126 // Apply the efficiency correction
128 if(c.GetNVar()!=fNVar){
129 AliInfo("Different number of variables, cannot apply correction");
132 if(c.GetNDim()!=fNDim){
133 AliInfo("Different number of dimension, cannot apply correction");
140 Float_t eff,deff,unc,dunc,corr,dcorr;
141 //Apply the correction
142 for(Int_t i=0;i<fNDim;i++){
143 eff =c.GetElement(i);
144 deff =TMath::Sqrt(c.GetElementError(i));
146 dunc =TMath::Sqrt(GetElementError(i));
150 dcorr=TMath::Sqrt(dunc*dunc/unc/unc+deff*deff/eff/eff)*corr;
152 SetElementError(i,dcorr*dcorr);
157 SetElementError(i,0);
160 AliInfo(Form("correction applied for %i cells in correction matrix of Container %s, having entries in Data Container %s.",ncorr,c.GetName(),GetName()));
161 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()));
163 //____________________________________________________________________
164 void AliCFDataGrid::ApplyBGCorrection(const AliCFDataGrid &c)
168 // Apply correction for background
170 if(c.GetNVar()!=fNVar){
171 AliInfo("Different number of variables, cannot apply correction");
174 if(c.GetNDim()!=fNDim){
175 AliInfo("Different number of dimension, cannot apply correction");
180 Float_t bkg,dbkg,unc,dunc,corr,dcorr;
182 //Apply the correction
184 for(Int_t i=0;i<fNDim;i++){
185 bkg =c.GetElement(i);
186 dbkg =TMath::Sqrt(c.GetElementError(i));
188 dunc =TMath::Sqrt(GetElementError(i));
190 dcorr=TMath::Sqrt(unc+bkg); //stats only, check this
192 SetElementError(i,dcorr*dcorr);
197 //____________________________________________________________________
198 void AliCFDataGrid::Copy(TObject& eff) const
203 AliCFDataGrid& target = (AliCFDataGrid &) eff;
204 target.fContainer=fContainer;
205 target.fSelData=fSelData;