#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
AliTRDrecoTask::AliTRDrecoTask()\r
: AliAnalysisTaskSE()\r
,fNRefFigures(0)\r
+ ,fDets(NULL)\r
,fContainer(NULL)\r
,fEvent(NULL)\r
,fTracks(NULL)\r
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
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
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
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