]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG0/AliCorrectionMatrix2D.cxx
Fix from for producing a dataset via the alien plugin. Redirecting the alien 'find...
[u/mrichter/AliRoot.git] / PWG0 / AliCorrectionMatrix2D.cxx
index cdb5307b57500e14582e4cfca466166c0bd1ea8b..6878e719ca8c71fc93ae41165fe1ccded342b5c7 100644 (file)
@@ -56,9 +56,9 @@ AliCorrectionMatrix2D::AliCorrectionMatrix2D(const Char_t* name, const Char_t* t
   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);
 
@@ -101,20 +101,20 @@ AliCorrectionMatrix2D::~AliCorrectionMatrix2D()
   // 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 
@@ -124,57 +124,67 @@ TH1F* AliCorrectionMatrix2D::Get1DCorrection(Char_t* opt, Float_t min, Float_t m
   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);
 }
 
 //____________________________________________________________________
@@ -245,3 +255,13 @@ void AliCorrectionMatrix2D::RemoveEdges(Float_t cut, Int_t nBinsXedge, Int_t nBi
 
 }
 
+//____________________________________________________________________
+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();
+}