Bool_t oldStatus = TH1::AddDirectoryStatus();
TH1::AddDirectory(kFALSE);
- fhMeas = new TH2F("measured", Form("%s measured",title), nBinX, Xmin, Xmax, nBinY, Ymin, Ymax);
- fhGene = new TH2F("generated", Form("%s generated",title), nBinX, Xmin, Xmax, nBinY, Ymin, Ymax);
- fhCorr = new TH2F("correction", Form("%s correction",title), nBinX, Xmin, Xmax, nBinY, Ymin, Ymax);
+ fhMeas = new TH2F("measured", Form("%s measured", GetTitle()), nBinX, Xmin, Xmax, nBinY, Ymin, Ymax);
+ fhGene = new TH2F("generated", Form("%s generated", GetTitle()), nBinX, Xmin, Xmax, nBinY, Ymin, Ymax);
+ fhCorr = new TH2F("correction", Form("%s correction", GetTitle()), nBinX, Xmin, Xmax, nBinY, Ymin, Ymax);
TH1::AddDirectory(oldStatus);
// histograms already deleted in base class
}
-TH2F* AliCorrectionMatrix2D::GetGeneratedHistogram() const
+TH2* AliCorrectionMatrix2D::GetGeneratedHistogram() const
{
// return generated histogram casted to correct type
- return dynamic_cast<TH2F*> (fhGene);
+ return dynamic_cast<TH2*> (fhGene);
}
-TH2F* AliCorrectionMatrix2D::GetMeasuredHistogram() const
+TH2* AliCorrectionMatrix2D::GetMeasuredHistogram() const
{
// return measured histogram casted to correct type
- return dynamic_cast<TH2F*> (fhMeas);
+ return dynamic_cast<TH2*> (fhMeas);
}
//____________________________________________________________________
-TH1F* AliCorrectionMatrix2D::Get1DCorrection(Char_t* opt, Float_t min, Float_t max)
+TH1* AliCorrectionMatrix2D::Get1DCorrectionHistogram(Char_t* opt, Float_t min, Float_t max)
{
//
// integrate the correction over one variable
TH1D* gene1D = 0;
if (strcmp(opt,"x")==0) {
- Int_t binMin = GetMeasuredHistogram()->GetYaxis()->FindBin(min);
- Int_t binMax = GetMeasuredHistogram()->GetYaxis()->FindBin(max);
+ Int_t binMin = fhMeas->GetYaxis()->FindBin(min);
+ Int_t binMax = fhGene->GetYaxis()->FindBin(max);
- if (min==0 && max==0) {
- meas1D = GetMeasuredHistogram()->ProjectionX();
- gene1D = GetGeneratedHistogram()->ProjectionX();
+ if (min>=max) {
+ meas1D = ((TH2F*)fhMeas)->ProjectionX();
+ gene1D = ((TH2F*)fhGene)->ProjectionX();
}
else {
- AliDebug(AliLog::kDebug+1, Form("Getting 1D map. Including y-bins %d to %d \n", binMin, binMax));
+ Printf("Getting 1D map. Including y-bins %d to %d", binMin, binMax);
- meas1D = GetMeasuredHistogram()->ProjectionX("pm",binMin,binMax);
- gene1D = GetGeneratedHistogram()->ProjectionX("pg",binMin,binMax);
+ meas1D = ((TH2F*)fhMeas)->ProjectionX(Form("%s_x_pm", GetName()),binMin,binMax);
+ gene1D = ((TH2F*)fhGene)->ProjectionX(Form("%s_x_pg", GetName()),binMin,binMax);
}
}
- if (strcmp(opt,"y")==0) {
- Int_t binMin = GetMeasuredHistogram()->GetXaxis()->FindBin(min);
- Int_t binMax = GetMeasuredHistogram()->GetXaxis()->FindBin(max);
+ else if (strcmp(opt,"y")==0) {
+ Int_t binMin = fhMeas->GetXaxis()->FindBin(min);
+ Int_t binMax = fhMeas->GetXaxis()->FindBin(max);
- if (min==0 && max==0) {
- meas1D = GetMeasuredHistogram()->ProjectionY();
- gene1D = GetGeneratedHistogram()->ProjectionY();
+ if (min>=max) {
+ meas1D = ((TH2F*)fhMeas)->ProjectionY();
+ gene1D = ((TH2F*)fhGene)->ProjectionY();
}
else {
- AliDebug(AliLog::kDebug+1, Form("Getting 1D map. Including x-bins %d to %d \n", binMin, binMax));
+ Printf("Getting 1D map. Including x-bins %d to %d \n", binMin, binMax);
- meas1D = GetMeasuredHistogram()->ProjectionY("pm", binMin, binMax);
- gene1D = GetGeneratedHistogram()->ProjectionY("pg", binMin, binMax);
+ meas1D = ((TH2F*)fhMeas)->ProjectionY(Form("%s_y_pm", GetName()), binMin, binMax);
+ gene1D = ((TH2F*)fhGene)->ProjectionY(Form("%s_y_pg", GetName()), binMin, binMax);
}
}
+ else {
+ Printf("ERROR: Invalid option");
+ return 0;
+ }
+
gene1D->Sumw2();
gene1D->SetName(Form("corr_1D_%s",fName.Data()));
gene1D->SetTitle(Form("corr_1D_%s",fName.Data()));
+
+ TH1* divided = (TH1*) gene1D->Clone(Form("corr_1D_%s",fName.Data()));
+ divided->Reset();
+
+ divided->Divide(gene1D, meas1D, 1, 1, "B");
- gene1D->Divide(gene1D, meas1D, 1, 1, "B");
+ Printf("%p %p", gene1D, meas1D);
- return (TH1F*)gene1D;
+ return (TH1F*)divided;
}
//____________________________________________________________________
void AliCorrectionMatrix2D::FillMeas(Float_t ax, Float_t ay)
{
// add value to measured histogram
- GetMeasuredHistogram()->Fill(ax, ay);
+ ((TH2F*)fhMeas)->Fill(ax, ay);
}
//____________________________________________________________________
void AliCorrectionMatrix2D::FillGene(Float_t ax, Float_t ay)
{
// add value to generated histogram
- GetGeneratedHistogram()->Fill(ax, ay);
+ ((TH2F*)fhGene)->Fill(ax, ay);
}
//____________________________________________________________________
}
+//____________________________________________________________________
+void AliCorrectionMatrix2D::Rebin(Int_t x, Int_t y)
+{
+ // rebins the histograms, recalculates the correction
+
+ GetGeneratedHistogram()->Rebin2D(x, y);
+ GetMeasuredHistogram()->Rebin2D(x, y);
+ GetCorrectionHistogram()->Rebin2D(x, y);
+ Divide();
+}