- suspend saving chamber geometry/status until a mergable object can be
[u/mrichter/AliRoot.git] / PWGPP / TRD / AliTRDrecoTask.cxx
index 37d260d..ee461d8 100644 (file)
@@ -38,6 +38,7 @@
 #include "AliExternalTrackParam.h"\r
 \r
 #include "info/AliTRDeventInfo.h"\r
+#include "info/AliTRDtrendingManager.h"\r
 #include "AliTRDrecoTask.h"\r
 #include "AliTRDtrackV1.h"\r
 #include "AliTRDpidUtil.h"\r
@@ -45,7 +46,6 @@
 ClassImp(AliTRDrecoTask)\r
 \r
 Float_t AliTRDrecoTask::fgPt0[AliTRDrecoTask::fgNPt0] = {0.5, 0.8, 1.5, 5};\r
-TList* AliTRDrecoTask::fgTrendPoint(NULL);\r
 TTreeSRedirector* AliTRDrecoTask::fgDebugStream(NULL);\r
 //_______________________________________________________\r
 AliTRDrecoTask::AliTRDrecoTask()\r
@@ -141,13 +141,13 @@ AliTRDrecoTask::~AliTRDrecoTask()
     fContainer = NULL;\r
   }\r
 \r
-  if(fgTrendPoint){\r
+/*  if(fgTrendPoint){\r
     TFile::Open("TRD.PerformanceTrend.root", "UPDATE");\r
     fgTrendPoint->Write();\r
     delete fgTrendPoint;\r
     fgTrendPoint=NULL;\r
     gFile->Close();\r
-  }\r
+  }*/\r
 }\r
 \r
 //_______________________________________________________\r
@@ -244,15 +244,12 @@ Bool_t AliTRDrecoTask::GetRefFigure(Int_t /*ifig*/)
 }\r
 \r
 //_______________________________________________________\r
-Bool_t AliTRDrecoTask::PutTrendValue(const Char_t *name, Double_t val)\r
+Bool_t AliTRDrecoTask::PutTrendValue(const Char_t *name, Double_t val, Double_t err)\r
 {\r
 // Generic publisher for trend values\r
 \r
-  if(!fgTrendPoint){\r
-    fgTrendPoint = new TList();\r
-    fgTrendPoint->SetOwner();\r
-  }\r
-  fgTrendPoint->AddLast(new TNamed(Form("%s_%s", GetName(), name), Form("%f", val)));\r
+  AliTRDtrendingManager *tm = AliTRDtrendingManager::Instance();\r
+  tm->AddValue(Form("%s_%s", GetName(), name), val, err);\r
   return kTRUE;\r
 }\r
 \r
@@ -501,38 +498,7 @@ void AliTRDrecoTask::Terminate(Option_t *)
 }\r
 \r
 //________________________________________________________\r
-void AliTRDrecoTask::Adjust(TF1 *f, TH1 * const h)\r
-{\r
-// Helper function to avoid duplication of code\r
-// Make first guesses on the fit parameters\r
-\r
-  // find the intial parameters of the fit !! (thanks George)\r
-  Int_t nbinsy = Int_t(.5*h->GetNbinsX());\r
-  Double_t sum = 0.;\r
-  for(Int_t jbin=nbinsy-4; jbin<=nbinsy+4; jbin++) sum+=h->GetBinContent(jbin); sum/=9.;\r
-  f->SetParLimits(0, 0., 3.*sum);\r
-  f->SetParameter(0, .9*sum);\r
-\r
-  f->SetParLimits(1, -.2, .2);\r
-  f->SetParameter(1, -0.1);\r
-\r
-  f->SetParLimits(2, 0., 4.e-1);\r
-  f->SetParameter(2, 2.e-2);\r
-  if(f->GetNpar() <= 4) return;\r
-\r
-  f->SetParLimits(3, 0., sum);\r
-  f->SetParameter(3, .1*sum);\r
-\r
-  f->SetParLimits(4, -.3, .3);\r
-  f->SetParameter(4, 0.);\r
-\r
-  f->SetParLimits(5, 0., 1.e2);\r
-  f->SetParameter(5, 2.e-1);\r
-}\r
-\r
-\r
-//________________________________________________________\r
-void AliTRDrecoTask::SetNormZ(TH2 *h2, Int_t bxmin, Int_t bxmax, Int_t bymin, Int_t bymax, Float_t thr)\r
+Float_t AliTRDrecoTask::SetNormZ(TH2 *h2, Int_t bxmin, Int_t bxmax, Int_t bymin, Int_t bymax, Float_t thr)\r
 {\r
 // Normalize histo content to the mean value in the range specified by bin ranges\r
 // [bxmin, bxmax] on the x axis and [bymin, bymax] on the y axis.\r
@@ -552,6 +518,7 @@ void AliTRDrecoTask::SetNormZ(TH2 *h2, Int_t bxmin, Int_t bxmax, Int_t bymin, In
       else h2->SetBinContent(ix, iy, 100.*(c/s-1.));\r
     }\r
   }\r
+  return s;\r
 }\r
 \r
 //________________________________________________________\r
@@ -683,6 +650,46 @@ void AliTRDrecoTask::AliTRDrecoProjection::Increment(Int_t bin[], Double_t v)
 }\r
 \r
 //________________________________________________________\r
+Double_t AliTRDrecoTask::AliTRDrecoProjection::GetTrendValue(const Int_t mid, Double_t *m, Double_t *s) const\r
+{\r
+//   Return result of fitting the main distribution (represented on the z axis) with the function selected\r
+// "mid". Optionally return the Mean and RMS of the distribution pointing to "m" and "s"\r
+\r
+  if(!fH){\r
+    AliDebug(1, Form("Missing 3D in %s", GetName()));\r
+    return -999.;\r
+  }\r
+  TH1 *h1s(NULL);\r
+  if(!(h1s = (TH1D*)fH->Project3D("z"))){\r
+    AliDebug(1, Form("Failed Project3D(\"z\") in %s", GetName()));\r
+    return -999.;\r
+  }\r
+  Int_t ne((Int_t)h1s->Integral());\r
+  if(ne<30){\r
+    AliDebug(1, Form("Statistics too low[%2d] in %s", ne, GetName()));\r
+    return -999.;\r
+  }\r
+  TAxis *az(h1s->GetXaxis());\r
+  Float_t vm(h1s->GetMean()), v(vm), ve(h1s->GetRMS());\r
+  if(mid==1){\r
+    TF1 fg("fg", "gaus", az->GetXmin(), az->GetXmax());\r
+    fg.SetParameter(0, Float_t(ne)); fg.SetParameter(1, vm); fg.SetParameter(2, ve);\r
+    h1s->Fit(&fg, "WQ0");\r
+    v = fg.GetParameter(1);\r
+  } else if (mid==2) {\r
+    TF1 fl("fl", "landau", az->GetXmin(), az->GetXmax());\r
+    fl.SetParameter(0, Float_t(ne)); fl.SetParameter(1, vm); fl.SetParameter(2, ve);\r
+    h1s->Fit(&fl, "WQ0");\r
+    v = fl.GetMaximumX();\r
+  }\r
+  if(m) *m = vm;\r
+  if(s) *s = ve;\r
+  AliDebug(2, Form("%s[%d]:: %f {%f %f} Entries[%d]", fH->GetName(), mid, v, m?(*m):0., s?(*s):0., (Int_t)h1s->Integral()));\r
+\r
+  return v;\r
+}\r
+\r
+//________________________________________________________\r
 TH2* AliTRDrecoTask::AliTRDrecoProjection::Projection2D(const Int_t nstat, const Int_t ncol, const Int_t mid, Bool_t del)\r
 {\r
 // build the 2D projection and adjust binning\r
@@ -718,7 +725,9 @@ TH2* AliTRDrecoTask::AliTRDrecoProjection::Projection2D(const Int_t nstat, const
   Float_t dz=(fRange[1]-fRange[1])/ncol;\r
   TString titlez(az->GetTitle()); TObjArray *tokenTitle(titlez.Tokenize(" "));\r
   Int_t nt(tokenTitle->GetEntriesFast());\r
-  TH2 *h2 = new TH2F(Form("%s_2D", fH->GetName()),\r
+  TH2 *h2(NULL);\r
+  if((h2 = (TH2*)gDirectory->Get(Form("%s_2D", fH->GetName())))) delete h2; // avoid ROOT warning messages\r
+  h2 = new TH2F(Form("%s_2D", fH->GetName()),\r
             Form("%s;%s;%s;%s(%s) %s", fH->GetTitle(), ax->GetTitle(), ay->GetTitle(), title[mid], nt>0?(*tokenTitle)[0]->GetName():"", nt>1?(*tokenTitle)[1]->GetName():""),\r
             nx, ax->GetXmin(), ax->GetXmax(), ny, ay->GetXmin(), ay->GetXmax());\r
   h2->SetContour(ncol);\r