]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG1/TRD/AliTRDrecoTask.cxx
protect resolution task against running on old data (differently
[u/mrichter/AliRoot.git] / PWG1 / TRD / AliTRDrecoTask.cxx
index 7967e8883bea943cdc7a9d1f5792e30314b5bd94..f7660a656d8ef1507d9a3803c35b33f0cfc81805 100644 (file)
 #include "TObjArray.h"\r
 #include "TDirectory.h"\r
 #include "TTreeStream.h"\r
+#include "TBox.h"\r
+#include "TVectorT.h"\r
 \r
 #include "AliLog.h"\r
 #include "AliAnalysisTask.h"\r
+#include "AliAnalysisManager.h"\r
 #include "AliExternalTrackParam.h"\r
 \r
-#include "AliAnalysisManager.h"\r
 #include "info/AliTRDeventInfo.h"\r
 #include "AliTRDrecoTask.h"\r
 #include "AliTRDtrackV1.h"\r
@@ -45,6 +47,7 @@ TTreeSRedirector* AliTRDrecoTask::fgDebugStream(NULL);
 AliTRDrecoTask::AliTRDrecoTask()\r
   : AliAnalysisTaskSE()\r
   ,fNRefFigures(0)\r
+  ,fDets(NULL)\r
   ,fContainer(NULL)\r
   ,fEvent(NULL)\r
   ,fTracks(NULL)\r
@@ -66,6 +69,7 @@ AliTRDrecoTask::AliTRDrecoTask()
 AliTRDrecoTask::AliTRDrecoTask(const char *name, const char *title)\r
   : AliAnalysisTaskSE(name)\r
   ,fNRefFigures(0)\r
+  ,fDets(NULL)\r
   ,fContainer(NULL)\r
   ,fEvent(NULL)\r
   ,fTracks(NULL)\r
@@ -106,7 +110,13 @@ AliTRDrecoTask::~AliTRDrecoTask()
     fPlotFuncList = NULL;\r
   }\r
   \r
-  if(fContainer && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()){\r
+  if(fDets){\r
+    if(fDets->IsOwner()) fDets->Delete();\r
+    delete fDets;\r
+    fDets = NULL;\r
+  }\r
+\r
+  if(fContainer && !(AliAnalysisManager::GetAnalysisManager() && AliAnalysisManager::GetAnalysisManager()->IsProofMode())){\r
     if(fContainer->IsOwner()) fContainer->Delete();\r
     delete fContainer;\r
     fContainer = NULL;\r
@@ -242,6 +252,36 @@ Bool_t AliTRDrecoTask::Load(const Char_t *file, const Char_t *dir)
   return kTRUE;\r
 }\r
 \r
+//________________________________________________________\r
+Bool_t AliTRDrecoTask::LoadDetectorMap(const Char_t *file, const Char_t *dir)\r
+{\r
+// Load detector map.\r
+\r
+  if(!TFile::Open(file)){\r
+    AliWarning(Form("Couldn't open file %s.", file));\r
+    return kFALSE;\r
+  }\r
+  if(!gFile->cd(dir)){\r
+    AliWarning(Form("Couldn't cd to %s in %s.", dir, file));\r
+    return kFALSE;\r
+  }\r
+  TObjArray *info = NULL;\r
+  if(!(info = (TObjArray*)gDirectory->Get("TRDinfoGen"))){\r
+    AliWarning("Missing TRDinfoGen container.");\r
+    return kFALSE;\r
+  }\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
+  gFile->Close();\r
+  return kTRUE;\r
+}\r
+\r
+\r
 //________________________________________________________\r
 Bool_t AliTRDrecoTask::Save(TObjArray * const results){\r
   //\r
@@ -274,6 +314,44 @@ Bool_t AliTRDrecoTask::PostProcess()
   return kTRUE;\r
 }\r
 \r
+//_______________________________________________________\r
+void AliTRDrecoTask::MakeDetectorPlot(Int_t ly)\r
+{\r
+// Draw chamber boundaries in eta/phi plots with misalignments\r
+// based on info collected by AliTRDinfoGen\r
+\r
+  if(!fDets){\r
+    AliWarning("Detector map and status not available.");\r
+    return;\r
+  }\r
+\r
+  TBox *gdet = new TBox();\r
+  gdet->SetLineWidth(kBlack);gdet->SetFillColor(kBlack);\r
+  Int_t style[] = {0, 3003};\r
+  for(Int_t idet(0); idet<540; idet++){\r
+    if(idet%6 != ly) continue;\r
+    TVectorF *det((TVectorF*)fDets->At(idet));\r
+    if(!det) continue;\r
+    AliDebug(2, Form("det[%03d] 0[%+4.1f %+4.1f] 1[%+4.1f %+4.1f]", idet, (*det)[0], (*det)[1], (*det)[2], (*det)[3]));\r
+    Int_t iopt = Int_t((*det)[4]);\r
+    if(iopt==4){\r
+      gdet->SetFillStyle(style[1]);gdet->SetFillColor(kBlack);\r
+      gdet->DrawBox((*det)[0], (*det)[1], (*det)[2], (*det)[3]);\r
+    } else {\r
+      gdet->SetFillStyle(style[0]);\r
+      gdet->DrawBox((*det)[0], (*det)[1], (*det)[2], (*det)[3]);\r
+      if(iopt==1){\r
+        gdet->SetFillStyle(style[1]);gdet->SetFillColor(kBlue);\r
+        gdet->DrawBox((*det)[0], (*det)[1], (*det)[2], 0.5*((*det)[3]+(*det)[1]));\r
+      } else if(iopt==2){\r
+        gdet->SetFillStyle(style[1]);gdet->SetFillColor(kRed);\r
+        gdet->DrawBox((*det)[0], 0.5*((*det)[3]+(*det)[1]), (*det)[2], (*det)[3]);\r
+      } else if(iopt!=0) AliError(Form("Wrong chmb. status[%d] for det[%03d]", iopt, idet));\r
+    }\r
+  }\r
+}\r
+\r
+\r
 //_______________________________________________________\r
 void AliTRDrecoTask::MakeSummary()\r
 {\r