Various updates
[u/mrichter/AliRoot.git] / PWGPP / TRD / AliTRDrecoTask.cxx
index f87e10a..74a3dde 100644 (file)
@@ -44,6 +44,7 @@
 \r
 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
@@ -51,6 +52,7 @@ AliTRDrecoTask::AliTRDrecoTask()
   : AliAnalysisTaskSE()\r
   ,fNRefFigures(0)\r
   ,fDets(NULL)\r
+  ,fDetsV(NULL)\r
   ,fContainer(NULL)\r
   ,fEvent(NULL)\r
   ,fTracks(NULL)\r
@@ -76,6 +78,7 @@ AliTRDrecoTask::AliTRDrecoTask(const char *name, const char *title)
   : AliAnalysisTaskSE(name)\r
   ,fNRefFigures(0)\r
   ,fDets(NULL)\r
+  ,fDetsV(NULL)\r
   ,fContainer(NULL)\r
   ,fEvent(NULL)\r
   ,fTracks(NULL)\r
@@ -130,6 +133,7 @@ AliTRDrecoTask::~AliTRDrecoTask()
     delete fDets;\r
     fDets = NULL;\r
   }\r
+  if(fDetsV) delete fDetsV; fDetsV=NULL;\r
 \r
   if(fContainer && !(AliAnalysisManager::GetAnalysisManager() && AliAnalysisManager::GetAnalysisManager()->IsProofMode())){\r
     if(fContainer->IsOwner()) fContainer->Delete();\r
@@ -153,6 +157,19 @@ Int_t AliTRDrecoTask::GetNRefFigures() const
   return fNRefFigures; \r
 } \r
 \r
+//____________________________________________________________________\r
+Int_t AliTRDrecoTask::GetPtBinSignificant(Float_t pt)\r
+{\r
+// Get significant (very low, low, medium, high, very high) pt bin\r
+\r
+  Int_t ipt(0);\r
+  while(ipt<fgNPt0){\r
+    if(pt<fgPt0[ipt]) break;\r
+    ipt++;\r
+  }\r
+  return ipt-1;\r
+}\r
+\r
 //_______________________________________________________\r
 void AliTRDrecoTask::UserCreateOutputObjects()\r
 {\r
@@ -305,11 +322,12 @@ Bool_t AliTRDrecoTask::LoadDetectorMap(const Char_t *file, const Char_t *dir)
   }\r
   TObjArray *dets = (TObjArray*)info->FindObject("Chambers");\r
   if(!dets){\r
-    AliWarning("Missing detector map from TRDinfoGen results.");\r
-    info->ls();\r
-    return kFALSE;\r
-  }\r
-  fDets = (TObjArray*)dets->Clone("Chambers");\r
+    TVector *vdets = (TVector*)info->At(4);\r
+    if(!vdets){\r
+      AliWarning("Missing detector map from TRDinfoGen results.");\r
+      return kFALSE;\r
+    } else fDetsV = (TVector*)vdets->Clone();\r
+  } else fDets = (TObjArray*)dets->Clone("Chambers");\r
   gFile->Close();\r
   return kTRUE;\r
 }\r
@@ -354,7 +372,8 @@ void AliTRDrecoTask::MakeDetectorPlot(Int_t ly, const Option_t *opt)
 // based on info collected by AliTRDinfoGen\r
 \r
   if(!fDets){\r
-    AliWarning("Detector map and status not available.");\r
+    AliWarning("OLD Detector map and status not available. Try NEW");\r
+    MakeDetectorPlotNEW(ly, opt);\r
     return;\r
   }\r
   Float_t xmin(0.), xmax(0.);\r
@@ -395,6 +414,52 @@ void AliTRDrecoTask::MakeDetectorPlot(Int_t ly, const Option_t *opt)
   for(Int_t is(0); is<AliTRDgeometry::kNsector; is++) sm->DrawLatex(xmin, -TMath::Pi()+(is+0.5)*dsm, Form("%02d", is>=9?(is-9):(is+9)));\r
 }\r
 \r
+//_______________________________________________________\r
+void AliTRDrecoTask::MakeDetectorPlotNEW(Int_t ly, const Option_t *opt)\r
+{\r
+// Draw chamber boundaries in eta/phi plots with misalignments\r
+// based on info collected by AliTRDinfoGen NEW data storage\r
+\r
+  if(!fDetsV){\r
+    AliWarning("NEW Detector map and status not available.");\r
+    return;\r
+  }\r
+  Float_t xmin(0.), xmax(0.);\r
+  TBox *gdet = new TBox();\r
+  gdet->SetLineColor(kBlack);gdet->SetFillColor(kBlack);\r
+  Int_t style[] = {0, 3003};\r
+  for(Int_t idet(0), jdet(0); idet<AliTRDgeometry::kNdet; idet++, jdet+=5){\r
+    if(idet%6 != ly) continue;\r
+    Int_t iopt = Int_t((*fDetsV)[jdet+4]);\r
+    if(strcmp(opt, "eta")==0){\r
+      xmin=(*fDetsV)[jdet+0]; xmax=(*fDetsV)[jdet+2];\r
+    } else if(strcmp(opt, "pad")==0){\r
+      Int_t stk(AliTRDgeometry::GetStack(idet));\r
+      xmin=-0.6+16*(4-stk)-(stk<2?4:0); xmax=xmin+(stk==2?12:16)-0.2;\r
+    } else continue;\r
+    AliDebug(2, Form("det[%03d] 0[%+4.1f(%+4.1f) %+4.1f] 1[%+4.1f(%+4.1f) %+4.1f] opt[%d]", idet, xmin, (*fDetsV)[jdet+0], (*fDetsV)[jdet+1], xmax, (*fDetsV)[jdet+2], (*fDetsV)[jdet+3], iopt));\r
+    if(iopt==1){\r
+      gdet->SetFillStyle(style[1]);gdet->SetFillColor(kBlack);\r
+      gdet->DrawBox(xmin, (*fDetsV)[jdet+1], xmax, (*fDetsV)[jdet+3]);\r
+    } else {\r
+      gdet->SetFillStyle(style[0]);\r
+      gdet->DrawBox(xmin, (*fDetsV)[jdet+1], xmax, (*fDetsV)[jdet+3]);\r
+      if(iopt==2){\r
+        gdet->SetFillStyle(style[1]);gdet->SetFillColor(kGreen);\r
+        gdet->DrawBox(xmin, (*fDetsV)[jdet+1], xmax, 0.5*((*fDetsV)[jdet+3]+(*fDetsV)[jdet+1]));\r
+      } else if(iopt==3){\r
+        gdet->SetFillStyle(style[1]);gdet->SetFillColor(kRed);\r
+        gdet->DrawBox(xmin, 0.5*((*fDetsV)[jdet+3]+(*fDetsV)[jdet+1]), xmax, (*fDetsV)[jdet+3]);\r
+      } else if(iopt!=0) AliError(Form("Wrong chmb. status[%d] for det[%03d]", iopt, idet));\r
+    }\r
+  }\r
+  Float_t dsm = TMath::TwoPi()/AliTRDgeometry::kNsector;\r
+  xmin=0.;\r
+  if(strcmp(opt, "pad")==0) xmin=38.;\r
+  TLatex *sm = new TLatex(); sm->SetTextAlign(22);sm->SetTextColor(0); sm->SetTextFont(32);sm->SetTextSize(0.03);\r
+  for(Int_t is(0); is<AliTRDgeometry::kNsector; is++) sm->DrawLatex(xmin, -TMath::Pi()+(is+0.5)*dsm, Form("%02d", is>=9?(is-9):(is+9)));\r
+}\r
+\r
 \r
 //_______________________________________________________\r
 void AliTRDrecoTask::MakeSummary()\r
@@ -657,23 +722,24 @@ TH2* AliTRDrecoTask::AliTRDrecoProjection::Projection2D(const Int_t nstat, const
   AliDebug(2, Form("%s[%s] nx[%d] ny[%d]", h2->GetName(), h2->GetTitle(), nx, ny));\r
   for(Int_t iy(0); iy<ny; iy++){\r
     for(Int_t ix(0); ix<nx; ix++){\r
-      h = fH->ProjectionZ(Form("%s_z", h2->GetName()), ix*dxBin+1, (ix+1)*dxBin+1, iy*dyBin+1, (iy+1)*dyBin+1);\r
+      h = fH->ProjectionZ(Form("%s_z", h2->GetName()), ix*dxBin+1, ix*dxBin+1, iy*dyBin+1, iy*dyBin+1);\r
       Int_t ne((Int_t)h->Integral());\r
       if(ne<nstat/2){\r
         h2->SetBinContent(ix+1, iy+1, -999);\r
         h2->SetBinError(ix+1, iy+1, 1.);\r
         n++;\r
       }else{\r
+        h = fH->ProjectionZ(Form("%s_z", h2->GetName()), (ix-1)*dxBin+1, (ix+1)*dxBin+1, (iy-1)*dyBin+1, (iy+1)*dyBin+1);\r
         Float_t v(h->GetMean()), ve(h->GetRMS());\r
         if(mid==1){\r
           TF1 fg("fg", "gaus", az->GetXmin(), az->GetXmax());\r
           fg.SetParameter(0, Float_t(ne)); fg.SetParameter(1, v); fg.SetParameter(2, ve);\r
-          h->Fit(&fg, "WQ");\r
+          h->Fit(&fg, "WQ0");\r
           v = fg.GetParameter(1); ve = fg.GetParameter(2);\r
         } else if (mid==2) {\r
           TF1 fl("fl", "landau", az->GetXmin(), az->GetXmax());\r
           fl.SetParameter(0, Float_t(ne)); fl.SetParameter(1, v); fl.SetParameter(2, ve);\r
-          h->Fit(&fl, "WQ");\r
+          h->Fit(&fl, "WQ0");\r
           v = fl.GetMaximumX(); ve = fl.GetParameter(2);\r
 /*          TF1 fgle("gle", "[0]*TMath::Landau(x, [1], [2], 1)*TMath::Exp(-[3]*x/[1])", az->GetXmin(), az->GetXmax());\r
           fgle.SetParameter(0, fl.GetParameter(0));\r