#include <TObjArray.h>\r
#include <TObject.h>\r
#include <TString.h>\r
+#include <TVectorT.h>\r
#include <TH1.h>\r
#include <TH2.h>\r
+#include <TCanvas.h>\r
#include <TPad.h>\r
#include <TFile.h>\r
#include <TTree.h>\r
#include "AliTRDrecoParam.h"\r
#include "AliTRDcalibDB.h"\r
#include "AliTRDtrackerV1.h"\r
+#include "AliTRDpadPlane.h"\r
#include "AliTRDgeometry.h"\r
#include "AliTRDtrackV1.h"\r
#include "AliTRDseedV1.h"\r
delete fV0List;\r
fV0List = NULL;\r
}\r
- if(fContainer){ \r
+ if(fContainer && !(AliAnalysisManager::GetAnalysisManager() && AliAnalysisManager::GetAnalysisManager()->IsProofMode())){\r
fContainer->Delete(); \r
delete fContainer;\r
fContainer = NULL;\r
ax->SetBinLabel(3, "Cosmic");\r
ax->SetBinLabel(4, "Calib");\r
fContainer->AddAt(h, kEvType);\r
- TH2I* h2=new TH2I("hBC", "Bunch Cross statistics;Fill Bunch;TOF BC;Entries", 3500, -0.5, 3499.5, 31, -10.5, 20.5);\r
+ TH2I* h2=new TH2I("hBC", "Bunch statistics;Fill Bunch;TOF BC;Entries", 3500, -0.5, 3499.5, 31, -10.5, 20.5);\r
fContainer->AddAt(h2, kBC);\r
h=new TH1I("hTriggers", "Triggers statistics;;Entries", 21, -0.5, 20.5);\r
fContainer->AddAt(h, kTrigger);\r
+ TObjArray *chmb = new TObjArray(AliTRDgeometry::kNdet);\r
+ chmb->SetName("Chambers"); chmb->SetOwner();\r
+ fContainer->AddAt(chmb, kChmb);\r
PostData(AliTRDpwg1Helper::kMonitor, fContainer);\r
}\r
\r
AliCDBEntry* obj(NULL);\r
AliCDBManager* ocdb = AliCDBManager::Instance();\r
if(ocdb->IsDefaultStorageSet()){\r
- AliInfo("OCDB :: initialized.");\r
+ AliInfo("OCDB :: initialized externally.");\r
} else {\r
AliInfo("OCDB :: initializing locally ...");\r
// prepare OCDB access\r
// load misalignment\r
fgGeo = new AliTRDgeometry;\r
fgGeo->CreateClusterMatrixArray();\r
+ MakeChambers();\r
// load reco param list from OCDB\r
AliInfo("Initializing TRD reco params ...");\r
fgReconstructor = new AliTRDReconstructor();\r
// Author: Ionut Arsene <I.C.Arsene@gsi.de>\r
Int_t centralityBin = -1;\r
AliDebug(2, Form(" Beam Type: %s", fESDev->GetESDRun()->GetBeamType()));\r
- if(TString(fESDev->GetESDRun()->GetBeamType()).Contains("Pb-Pb")){\r
+ TString beamtype = fESDev->GetESDRun()->GetBeamType();\r
+ if(beamtype.Contains("Pb-Pb") || beamtype.Contains("A-A")){\r
centralityBin = 4;\r
const AliMultiplicity *mult = fESDev->GetMultiplicity();\r
Double_t zdcNeutronEnergy = fESDev->GetZDCN1Energy()+fESDev->GetZDCN2Energy();\r
PostData(AliTRDpwg1Helper::kV0List, fV0List);\r
}\r
\r
+\r
+//____________________________________________________________________\r
+void AliTRDinfoGen::MakeChambers()\r
+{\r
+// Build chamber position and status\r
+ if(!fContainer){\r
+ AliError("Missing container");\r
+ return;\r
+ }\r
+ AliTRDcalibDB *calib(AliTRDcalibDB::Instance());\r
+ if(!calib){\r
+ AliError("No access to calibration data");\r
+ return;\r
+ }\r
+\r
+ TObjArray *chmb((TObjArray*)fContainer->At(kChmb));\r
+ Double_t alpha(0.), cs(-2.), sn(0.);\r
+ TVectorF pos(5);\r
+ for(Int_t isec(0); isec<AliTRDgeometry::kNsector; isec++){\r
+ alpha = (0.5+isec)*AliTRDgeometry::GetAlpha();\r
+ cs = TMath::Cos(alpha);\r
+ sn = TMath::Sin(alpha);\r
+\r
+ for(Int_t istk(0); istk<AliTRDgeometry::kNstack; istk++){\r
+ for(Int_t ilyr(0); ilyr<AliTRDgeometry::kNlayer; ilyr++){\r
+ Int_t idet(AliTRDgeometry::GetDetector(ilyr, istk, isec));\r
+ TGeoHMatrix *matrix(fgGeo->GetClusterMatrix(idet));\r
+ if(!matrix){\r
+ AliDebug(2, Form("Missing matrix for %03d [%02d_%d_%d]", idet, isec, istk, ilyr));\r
+ continue;\r
+ }\r
+ AliDebug(2, Form("Read info for %03d [%02d_%d_%d]", idet, isec, istk, ilyr));\r
+ AliTRDpadPlane *pp(fgGeo->GetPadPlane(ilyr, istk));\r
+ Double_t zm(0.5 * (pp->GetRow0() + pp->GetRowEnd())),\r
+ loc0[] = {AliTRDgeometry::AnodePos(), pp->GetCol0(), zm-pp->GetRow0()},\r
+ loc1[] = {AliTRDgeometry::AnodePos(), pp->GetColEnd(), zm-pp->GetRowEnd()},\r
+ glb[3];\r
+ matrix->LocalToMaster(loc0, glb);\r
+ Float_t phi = TMath::ATan2(glb[0]*sn + glb[1]*cs, glb[0]*cs - glb[1]*sn),\r
+ tgl = glb[2]/glb[0]/TMath::Sqrt(1.+glb[1]*glb[1]/glb[0]/glb[0]),\r
+ eta = -TMath::Log(TMath::Tan(0.5 * (0.5*TMath::Pi() - TMath::ATan(tgl))));\r
+ pos[0] = eta; pos[1] = phi;\r
+ matrix->LocalToMaster(loc1, glb);\r
+ phi = TMath::ATan2(glb[0]*sn + glb[1]*cs, glb[0]*cs - glb[1]*sn);\r
+ tgl = glb[2]/glb[0]/TMath::Sqrt(1.+glb[1]*glb[1]/glb[0]/glb[0]);\r
+ eta = -TMath::Log(TMath::Tan(0.5 * (0.5*TMath::Pi() - TMath::ATan(tgl))));\r
+ pos[2] = eta; pos[3] = phi;\r
+ pos[4] = calib->IsChamberGood(idet)?0.:1.;\r
+ chmb->AddAt(new TVectorF(pos), idet);\r
+ }\r
+ }\r
+ }\r
+}\r
+\r
+//____________________________________________________________________\r
+void AliTRDinfoGen::MakeSummary()\r
+{\r
+// Build summary plots\r
+ if(!fContainer){\r
+ AliError("Missing results");\r
+ return;\r
+ }\r
+ TH1 *h1(NULL); TVirtualPad *p(NULL); TCanvas *cOut(NULL);\r
+\r
+ const Int_t nx(2048), ny(750);\r
+ cOut = new TCanvas(GetName(), "Run Statistics", nx, ny);\r
+ cOut->Divide(3,1, 1.e-5, 1.e-5);\r
+ //=========\r
+ p=cOut->cd(1);p->SetRightMargin(0.025);p->SetTopMargin(0.01);p->SetLogy();\r
+ h1 = (TH1*)fContainer->At(kStatTrk);\r
+ h1->SetBarOffset(0.06); h1->SetBarWidth(0.88); h1->SetFillColor(3);\r
+ h1->Draw("bar1");\r
+ //=========\r
+ p=cOut->cd(2);p->SetRightMargin(0.025);p->SetTopMargin(0.01);p->SetLogy();\r
+ h1 = (TH1*)fContainer->At(kEvType);\r
+ h1->SetBarOffset(0.04); h1->SetBarWidth(0.92);h1->SetFillColor(6);\r
+ h1->Draw("bar1");\r
+ //=========\r
+ p=cOut->cd(3);p->SetRightMargin(0.025);p->SetTopMargin(0.01);p->SetLogz();\r
+ TH2 *h2((TH2*)fContainer->At(kBC));\r
+ h1 = h2->ProjectionX("_px");\r
+ Int_t n(0); Int_t bins[3500];\r
+ for(Int_t ib(1); ib<=3500; ib++){\r
+ if(h1->GetBinContent(ib) < 1) continue;\r
+ bins[n++] = ib;\r
+ }\r
+ delete h1;\r
+\r
+ TAxis *ay(h2->GetYaxis());\r
+ TH2 *hs = new TH2I("hBC_Summary", Form("%s;%s;%s", h2->GetTitle(), h2->GetXaxis()->GetTitle(), h2->GetYaxis()->GetTitle()),\r
+ n, -0.5, n-0.5, ay->GetNbins(), ay->GetXmin(), ay->GetXmax());\r
+ hs->SetLineColor(kBlack);hs->SetLineWidth(1);\r
+ hs->SetMarkerColor(kRed);\r
+ TAxis *ax(hs->GetXaxis());\r
+ for(Int_t ib(0); ib<n; ib++){\r
+ ax->SetBinLabel(ib+1, Form("%d", bins[ib]));\r
+ for(Int_t iy(1); iy<=ay->GetNbins(); iy++){\r
+ hs->SetBinContent(ib+1, iy, h2->GetBinContent(bins[ib], iy));\r
+ }\r
+ }\r
+ hs->Draw("textbox");\r
+ cOut->SaveAs(Form("%s.gif", cOut->GetName()));\r
+}\r
+\r
//____________________________________________________________________\r
void AliTRDinfoGen::SetLocalEvSelection(const AliTRDeventCuts &ec)\r
{\r