add new mergeable classes for chamber status and trigger statistics
[u/mrichter/AliRoot.git] / PWGPP / TRD / AliTRDinfoGen.cxx
index fe0e7cb..930d8e4 100644 (file)
@@ -94,6 +94,8 @@
 #include "info/AliTRDtrackInfo.h"\r
 #include "info/AliTRDeventInfo.h"\r
 #include "info/AliTRDv0Info.h"\r
+#include "info/AliTRDchmbInfo.h"\r
+#include "info/AliTRDtriggerInfo.h"\r
 #include "info/AliTRDeventCuts.h"\r
 \r
 ClassImp(AliTRDinfoGen)\r
@@ -268,10 +270,9 @@ void AliTRDinfoGen::UserCreateOutputObjects()
   fContainer->AddAt(h, kEvType);\r
   TH2I* h2=new TH2I("hBCtrack", "Track 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
+  fContainer->AddAt(new AliTRDtriggerInfo(), kTrigger);\r
   TObjArray *chmb = new TObjArray(AliTRDgeometry::kNdet);\r
-  chmb->SetName("Chambers"); chmb->SetOwner();\r
+  chmb->SetName("Chambers Status"); chmb->SetOwner(kTRUE);\r
   fContainer->AddAt(chmb, kChmb);\r
 \r
   PostData(AliTRDpwgppHelper::kTracksBarrel, fTracksBarrel);\r
@@ -363,7 +364,8 @@ void AliTRDinfoGen::UserExec(Option_t *){
     // load misalignment\r
     fgGeo = new AliTRDgeometry;\r
     fgGeo->CreateClusterMatrixArray();\r
-    //MakeChambers();\r
+    MakeChambers();\r
+    printf("After MakeChambers()\n");\r
     // load reco param list from OCDB\r
     AliInfo("Initializing TRD reco params ...");\r
     fgReconstructor = new AliTRDReconstructor();\r
@@ -406,20 +408,11 @@ void AliTRDinfoGen::UserExec(Option_t *){
   fMCev = MCEvent();\r
   \r
   // trigger monitor\r
-  h = (TH1I*)fContainer->At(kTrigger);\r
-  TAxis *ax(h->GetXaxis());\r
+  AliTRDtriggerInfo *ti = (AliTRDtriggerInfo*)fContainer->At(kTrigger);\r
   TObjArray *evTriggers = fESDev->GetFiredTriggerClasses().Tokenize(" ");\r
-  for(Int_t iet(evTriggers->GetEntriesFast()); iet--;){\r
-    Int_t ix(1);\r
-    for(; ix<=ax->GetNbins(); ix++){\r
-      if(!Int_t(h->GetBinContent(ix))){\r
-        ax->SetBinLabel(ix, (*evTriggers)[iet]->GetName());\r
-        break;\r
-      }\r
-      if(strcmp((*evTriggers)[iet]->GetName(), ax->GetBinLabel(ix))==0) break;\r
-    }\r
-    h->AddBinContent(ix);\r
-  }\r
+  //printf("Ev[%03d] Triggers[%s]\n", fESDev->GetEventNumberInFile(), fESDev->GetFiredTriggerClasses().Data());\r
+  for(Int_t iet(evTriggers->GetEntriesFast()); iet--;) ti->Add((*evTriggers)[iet]->GetName());\r
+  evTriggers->Delete(); delete evTriggers;\r
 \r
   // event selection based on vertex cuts and trigger\r
   if(UseLocalEvSelection() && !fEventCut->IsSelected(fESDev, IsCollision())){\r
@@ -855,9 +848,9 @@ void AliTRDinfoGen::MakeChambers()
     AliError("No access to calibration data");\r
     return;\r
   }\r
-\r
-  Double_t alpha(0.), cs(-2.), sn(0.);\r
-  TVectorF pos(5*AliTRDgeometry::kNdet);\r
+  TObjArray *chmb = (TObjArray*)fContainer->At(kChmb);\r
+  Int_t stat(0);\r
+  Double_t alpha(0.), cs(-2.), sn(0.), pos[4];\r
   for(Int_t isec(0); isec<AliTRDgeometry::kNsector; isec++){\r
     alpha = (0.5+isec)*AliTRDgeometry::GetAlpha();\r
     cs    = TMath::Cos(alpha);\r
@@ -866,7 +859,6 @@ void AliTRDinfoGen::MakeChambers()
     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
-        Int_t jdet = 5*idet;\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
@@ -877,26 +869,26 @@ void AliTRDinfoGen::MakeChambers()
         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
+                 glb[3] = {1,1,1};\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[jdet+0] = eta; pos[jdet+1] = phi;\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[jdet+2] = eta; pos[jdet+3] = phi;\r
-        pos[jdet+4] = 0.;\r
+        pos[2] = eta; pos[3] = phi;\r
+        stat = 0;\r
         if(calib->IsChamberGood(idet)){\r
-          if(calib->IsHalfChamberNoData(idet, 0)) pos[jdet+4] += 2.;\r
-          if(calib->IsHalfChamberNoData(idet, 1)) pos[jdet+4] += 3.;\r
-        } else pos[jdet+4] = 1.;\r
+          if(calib->IsHalfChamberNoData(idet, 0)) stat += 2;\r
+          if(calib->IsHalfChamberNoData(idet, 1)) stat += 3;\r
+        } else stat = 1;\r
+        chmb->Add(new AliTRDchmbInfo(idet, stat, pos));\r
       }\r
     }\r
   }\r
-  fContainer->AddAt(new TVectorF(pos), kChmb);\r
 }\r
 \r
 //____________________________________________________________________\r
@@ -909,18 +901,18 @@ void AliTRDinfoGen::MakeSummary()
   }\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
+  const Int_t nx(1024), ny(1024);\r
+  cOut = new TCanvas("infoGenSummary", "Run Statistics", nx, ny);\r
+  cOut->Divide(2,2, 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->SetBarOffset(0.06); h1->SetBarWidth(0.88); h1->SetFillColor(kGreen); h1->SetFillStyle(3001);\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->SetBarOffset(0.04); h1->SetBarWidth(0.92);h1->SetFillColor(kGreen); h1->SetFillStyle(3001);\r
   h1->Draw("bar1");\r
   //=========\r
   p=cOut->cd(3);p->SetRightMargin(0.025);p->SetTopMargin(0.01);p->SetLogz();\r
@@ -938,7 +930,7 @@ void AliTRDinfoGen::MakeSummary()
                      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
+  TAxis *ax(hs->GetXaxis()); ax->CenterTitle(); ax->SetTitleOffset(1.4);\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
@@ -946,6 +938,19 @@ void AliTRDinfoGen::MakeSummary()
     }\r
   }\r
   hs->Draw("textbox");\r
+\r
+  //=========\r
+  p=cOut->cd(4); p->SetRightMargin(0.0215);p->SetLeftMargin(0.414);//p->SetLogz();\r
+  TObject *o = fContainer->At(kTrigger);\r
+  if(o){\r
+    if(!strcmp("TH1I", o->IsA()->GetName())){\r
+      h1 = dynamic_cast<TH1I*>(o);\r
+      h1->GetXaxis()->SetTitleOffset(6.5); h1->GetXaxis()->CenterTitle();\r
+      h1->SetFillStyle(3001);h1->SetFillColor(kGreen);\r
+      h1->SetBarWidth(0.8);h1->SetBarOffset(0.1);\r
+      ((TH1I*)o)->Draw("hbar2");\r
+    } else ((AliTRDtriggerInfo*)o)->Draw();\r
+  }\r
   cOut->SaveAs(Form("%s.gif", cOut->GetName()));\r
 }\r
 \r
@@ -987,11 +992,13 @@ void AliTRDinfoGen::Terminate(Option_t* /*option*/)
   AliInfo("");\r
   if(!(fContainer = dynamic_cast<TObjArray *>(GetOutputData(AliTRDpwgppHelper::kMonitor)))) return;\r
   AliInfo(Form("fContainer(%p)", (void*)fContainer));\r
+\r
+  AliTRDtriggerInfo* ti(NULL);\r
   if(UseLocalEvSelection()){\r
-    TH1 *h1 = (TH1*)fContainer->At(kTrigger); TAxis *ax(h1->GetXaxis());\r
-    AliInfo(Form("h1(%p)", (void*)h1));\r
-    for(Int_t ix(1); ix<=ax->GetNbins(); ix++){\r
-      if(fEventCut->CheckTrigger(ax->GetBinLabel(ix))) ax->SetBinLabel(ix, Form("#color[2]{%s}", ax->GetBinLabel(ix)));\r
+    if(!(ti = (AliTRDtriggerInfo*)fContainer->At(kTrigger))) return;\r
+    for(Int_t ix(0); ix<ti->GetNTriggers(); ix++){\r
+      if(fEventCut->CheckTrigger(ti->GetTrigger(ix))) ti->SetSelectTrigger(ix);\r
+      //ax->SetBinLabel(ix, Form("#color[2]{%s}", ax->GetBinLabel(ix)));\r
     }\r
   }\r
 }\r