update detector map plot (recoTask)
authorabercuci <abercuci@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 10 Jan 2012 10:00:41 +0000 (10:00 +0000)
committerabercuci <abercuci@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 10 Jan 2012 10:00:41 +0000 (10:00 +0000)
fix multiplicity class definition (eventInfo)
add no of pads/cluster in debug mode (resolution)

PWG1/TRD/AliTRDinfoGen.cxx
PWG1/TRD/AliTRDrecoTask.cxx
PWG1/TRD/AliTRDrecoTask.h
PWG1/TRD/AliTRDresolution.cxx
PWG1/TRD/AliTRDresolution.h
PWG1/TRD/info/AliTRDeventInfo.cxx
PWG1/TRD/info/AliTRDeventInfo.h

index 55fc07d..d755d3e 100644 (file)
@@ -432,7 +432,6 @@ void AliTRDinfoGen::UserExec(Option_t *){
   new(fEventInfo)AliTRDeventInfo(fESDev->GetHeader(), const_cast<AliESDRun *>(fESDev->GetESDRun()));\r
   // Determine centrality\r
   // Author: Ionut Arsene <I.C.Arsene@gsi.de>\r
-  AliDebug(2, Form("  Beam Type: %s", fESDev->GetESDRun()->GetBeamType()));\r
   TString beamtype = fESDev->GetESDRun()->GetBeamType();\r
   if(beamtype.Contains("Pb-Pb") || beamtype.Contains("A-A")){\r
     const AliMultiplicity *mult = fESDev->GetMultiplicity();\r
@@ -440,9 +439,14 @@ void AliTRDinfoGen::UserExec(Option_t *){
     const AliCentrality *cent = fESDev->GetCentrality();\r
     // centrality for different options V0 = "V0M", ITS = "TKL" etc\r
     fEventInfo->SetCentrality(cent?cent->GetCentralityPercentile("TKL"):-1.);\r
+    AliDebug(2, Form("  Beam Type[%s] Mult[%d/%4d] Cent[%d/%5.2f]",\r
+        beamtype.Data(),\r
+        fEventInfo->GetMultiplicity(), mult?mult->GetNumberOfTracklets():0,\r
+        fEventInfo->GetCentrality(), cent?cent->GetCentralityPercentile("TKL"):-1.));\r
   } else {\r
     fEventInfo->SetMultiplicity(0);\r
     fEventInfo->SetCentrality(-1.);\r
+    AliDebug(2, Form("  Beam Type[%s]", beamtype.Data()));\r
   }\r
   UShort_t evBC(fESDev->GetBunchCrossNumber());\r
 \r
index 304ecde..d4409e9 100644 (file)
@@ -27,6 +27,7 @@
 #include "TDirectory.h"\r
 #include "TTreeStream.h"\r
 #include "TBox.h"\r
+#include "TLatex.h"\r
 #include "TVectorT.h"\r
 \r
 #include "AliLog.h"\r
@@ -345,7 +346,7 @@ Bool_t AliTRDrecoTask::PostProcess()
 }\r
 \r
 //_______________________________________________________\r
-void AliTRDrecoTask::MakeDetectorPlot(Int_t ly)\r
+void AliTRDrecoTask::MakeDetectorPlot(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\r
@@ -354,7 +355,7 @@ void AliTRDrecoTask::MakeDetectorPlot(Int_t ly)
     AliWarning("Detector map and status not available.");\r
     return;\r
   }\r
-\r
+  Float_t xmin(0.), xmax(0.);\r
   TBox *gdet = new TBox();\r
   gdet->SetLineWidth(kBlack);gdet->SetFillColor(kBlack);\r
   Int_t style[] = {0, 3003};\r
@@ -364,21 +365,31 @@ void AliTRDrecoTask::MakeDetectorPlot(Int_t ly)
     if(!det) continue;\r
     Int_t iopt = Int_t((*det)[4]);\r
     AliDebug(2, Form("det[%03d] 0[%+4.1f %+4.1f] 1[%+4.1f %+4.1f] opt[%d]", idet, (*det)[0], (*det)[1], (*det)[2], (*det)[3], iopt));\r
+    if(strcmp(opt, "eta")==0){xmin=(*det)[0]; xmax=(*det)[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
     if(iopt==1){\r
       gdet->SetFillStyle(style[1]);gdet->SetFillColor(kBlack);\r
-      gdet->DrawBox((*det)[0], (*det)[1], (*det)[2], (*det)[3]);\r
+      gdet->DrawBox(xmin, (*det)[1], xmax, (*det)[3]);\r
     } else {\r
       gdet->SetFillStyle(style[0]);\r
-      gdet->DrawBox((*det)[0], (*det)[1], (*det)[2], (*det)[3]);\r
+      gdet->DrawBox(xmin, (*det)[1], xmax, (*det)[3]);\r
       if(iopt==2){\r
         gdet->SetFillStyle(style[1]);gdet->SetFillColor(kBlue);\r
-        gdet->DrawBox((*det)[0], (*det)[1], (*det)[2], 0.5*((*det)[3]+(*det)[1]));\r
+        gdet->DrawBox(xmin, (*det)[1], xmax, 0.5*((*det)[3]+(*det)[1]));\r
       } else if(iopt==3){\r
         gdet->SetFillStyle(style[1]);gdet->SetFillColor(kRed);\r
-        gdet->DrawBox((*det)[0], 0.5*((*det)[3]+(*det)[1]), (*det)[2], (*det)[3]);\r
+        gdet->DrawBox(xmin, 0.5*((*det)[3]+(*det)[1]), xmax, (*det)[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
index 2c241e6..47ab6aa 100644 (file)
@@ -53,7 +53,7 @@ public:
   TList*         GetPlotFunctors() const { return fPlotFuncList;}\r
   virtual Bool_t GetRefFigure(Int_t ifig);\r
   virtual void   MakeSummary();\r
-  void           MakeDetectorPlot(Int_t ly=0);\r
+  void           MakeDetectorPlot(Int_t ly=0, const Option_t *opt="eta");\r
   Bool_t         IsHeavyIon() const      { return TestBit(kHeavyIon);};\r
   Bool_t         IsPP() const            { return !TestBit(kHeavyIon);};\r
   Bool_t         HasFriends() const      { return TestBit(kFriends);};\r
index 8d439fd..8751da0 100644 (file)
@@ -319,6 +319,7 @@ TH1* AliTRDresolution::DetCluster(const TObjArray *cls)
     val[kEta] = (5-stk)*16-cl->GetPadRow()-1-(stk<3?4:0);
     val[kYrez]= TMath::Abs(cl->GetQ());
     val[4]    = fEvent->GetMultiplicity();
+    val[5]    = cl->IsFivePad()?1:cl->GetNPads();
     H->Fill(val);
   }
   return NULL;
@@ -1099,25 +1100,34 @@ void AliTRDresolution::MakeSummary()
   const Int_t nx(2048), ny(1536);
 
   if((arr = (TObjArray*)fProj->At(kDetector))){
-    cOut = new TCanvas(Form("%s_Det", GetName()), "Detector performance", 2*nx, 2*ny);
+    cOut = new TCanvas(Form("%s_DetOccupancy", GetName()), "Detector performance", 2*nx, 2*ny);
     cOut->Divide(AliTRDgeometry::kNlayer,AliTRDeventInfo::kCentralityClasses, 1.e-5, 1.e-5);
     for(Int_t icen(0); icen<AliTRDeventInfo::kCentralityClasses; icen++){
-      Float_t zmin(1.e10), zmax(0.);
-      for(Int_t ily(0); ily<AliTRDgeometry::kNlayer; ily++){
-        if(!(h2 = (TH2*)arr->FindObject(Form("HDetQ%d%d_yx", ily, icen)))) continue;
-        Float_t m, M; GetRangeZ(h2, m, M);
-        if(m<zmin) zmin=m;
-        if(M>zmax) zmax=M;
-      }
       for(Int_t ily(0); ily<AliTRDgeometry::kNlayer; ily++){
         p=cOut->cd(icen*AliTRDgeometry::kNlayer+ily+1); p->SetRightMargin(0.1572581);p->SetTopMargin(0.08262712);
         if(!(h2 = (TH2*)arr->FindObject(Form("HDetQ%d%d_yx", ily, icen)))) continue;
-        SetRangeZ(h2, zmin, zmax);
+        SetNormZ(h2, 1, 11, 1, -1, 10.);
+        SetRangeZ(h2, 0., 150, -25.);
+        h2->GetZaxis()->SetTitle("Rel. Det. Occup. [%]");
+        h2->GetZaxis()->CenterTitle();
         h2->Draw("colz");
-        MakeDetectorPlot(ily);
+        MakeDetectorPlot(ily, "pad");
       }
     }
     cOut->SaveAs(Form("%s.gif", cOut->GetName()));
+    cOut = new TCanvas(Form("%s_DetCharge", GetName()), "Detector performance", nx, ny);
+    cOut->Divide(3,2, 1.e-5, 1.e-5);
+    for(Int_t ily(0); ily<AliTRDgeometry::kNlayer; ily++){
+      p=cOut->cd(ily+1); p->SetRightMargin(0.1572581);p->SetTopMargin(0.08262712);
+      if(!(h2 = (TH2*)arr->FindObject(Form("HDetQ%d_2D", ily)))) continue;
+      SetNormZ(h2, 1, 11, 1, -1, 10.);
+      SetRangeZ(h2, 0., 45., -15.);
+      h2->GetZaxis()->SetTitle("Rel. Mean(q) [%]");
+      h2->GetZaxis()->CenterTitle();
+      h2->Draw("colz");
+      MakeDetectorPlot(ily, "pad");
+    }
+    cOut->SaveAs(Form("%s.gif", cOut->GetName()));
   }
   for(Int_t ityp(0); ityp<(HasMCdata()?2:1); ityp++){
     if((arr = (TObjArray*)fProj->At(ityp?kMCcluster:kCluster))){
@@ -2606,11 +2616,11 @@ TObjArray* AliTRDresolution::Histos()
   // cluster to detector
   snprintf(hn, nhn, "h%s", fgPerformanceName[kDetector]);
   if(!(H = (THnSparseI*)gROOT->FindObject(hn))){
-    const Int_t mdim(5);
-    const Char_t *cldTitle[mdim] = {"layer", fgkTitle[kPhi], "pad row", "centrality", "q [a.u.]"/*, "occupancy", "tb [10 Hz]"*/};
-    const Int_t cldNbins[mdim]   = {AliTRDgeometry::kNlayer, fgkNbins[kPhi], 76, AliTRDeventInfo::kCentralityClasses, 100};
-    const Double_t cldMin[mdim]  = {-0.5, fgkMin[kPhi], -0.5, -0.5, 0.},
-                   cldMax[mdim]  = {AliTRDgeometry::kNlayer-0.5, fgkMax[kPhi], 75.5, AliTRDeventInfo::kCentralityClasses - 0.5, 1200.};
+    const Int_t mdim(6);
+    const Char_t *cldTitle[mdim] = {"layer", fgkTitle[kPhi], "pad row", "q [a.u.]", "centrality", "no. of pads"/*, "tb [10 Hz]"*/};
+    const Int_t cldNbins[mdim]   = {AliTRDgeometry::kNlayer, fgkNbins[kPhi], 76, 50, AliTRDeventInfo::kCentralityClasses, 7};
+    const Double_t cldMin[mdim]  = {-0.5, fgkMin[kPhi], -0.5, 0., -0.5, 0.5},
+                   cldMax[mdim]  = {AliTRDgeometry::kNlayer-0.5, fgkMax[kPhi], 75.5, 1200., AliTRDeventInfo::kCentralityClasses - 0.5, 7.5};
     st = "cluster proprieties;";
     // define minimum info to be saved in non debug mode
     Int_t ndim=DebugLevel()>=1?mdim:Int_t(kNdimDet);
@@ -3276,14 +3286,37 @@ TH2* AliTRDresolution::AliTRDresolutionProjection::Projection2D(const Int_t nsta
 }
 
 //________________________________________________________
-void AliTRDresolution::SetRangeZ(TH2 *h2, Float_t min, Float_t max)
+void AliTRDresolution::SetNormZ(TH2 *h2, Int_t bxmin, Int_t bxmax, Int_t bymin, Int_t bymax, Float_t thr)
+{
+// Normalize histo content to the mean value in the range specified by bin ranges
+// [bxmin, bxmax] on the x axis and [bymin, bymax] on the y axis.
+// Optionally a threshold "thr" can be specified to disregard entries with no meaning 
+
+  Float_t s = 0., c=0.; Int_t is(0);
+  for(Int_t ix(bxmin); ix<=(bxmax>0?bxmax:(h2->GetXaxis()->GetNbins())); ix++){
+    for(Int_t iy(bymin); iy<=(bymax>0?bymax:(h2->GetYaxis()->GetNbins())); iy++){
+      if((c = h2->GetBinContent(ix, iy))<thr) continue;
+      s += c; is++;
+    }
+  }
+  s/= is?is:1;
+  for(Int_t ix(1); ix<=h2->GetXaxis()->GetNbins(); ix++){
+    for(Int_t iy(1); iy<=h2->GetYaxis()->GetNbins(); iy++){
+      if((c = h2->GetBinContent(ix, iy))<thr) h2->SetBinContent(ix, iy, thr-100);
+      else h2->SetBinContent(ix, iy, 100.*(c/s-1.));
+    }
+  }
+}
+
+//________________________________________________________
+void AliTRDresolution::SetRangeZ(TH2 *h2, Float_t min, Float_t max, Float_t thr)
 {
 // Set range on Z axis such to avoid outliers
 
   Float_t c(0.), dz(1.e-3*(max-min));
   for(Int_t ix(1); ix<=h2->GetXaxis()->GetNbins(); ix++){
     for(Int_t iy(1); iy<=h2->GetYaxis()->GetNbins(); iy++){
-      if((c = h2->GetBinContent(ix, iy))<10) continue;
+      if((c = h2->GetBinContent(ix, iy))<thr) continue;
       if(c<=min) h2->SetBinContent(ix, iy, min+dz);
     }
   }
index 377ef0e..b8a0293 100644 (file)
@@ -138,7 +138,8 @@ public:
   void            SetBCselectTOF(Int_t b=0)             { fBCbinTOF = b==0?2:(b<0?1:3);}
   void            SetBCselectFill(Int_t b=0)            { fBCbinFill = b<0||b>3499?1:b+1;}
   void            SetBsign(Int_t b=0)                   { fBsign = Bool_t(b);}
-  void            SetRangeZ(TH2 *h2, Float_t m, Float_t M);
+  static void     SetNormZ(TH2 *h2, Int_t bxmin=1, Int_t bxmax=-1, Int_t bymin=1, Int_t bymax=-1, Float_t thr=0.);
+  static void     SetRangeZ(TH2 *h2, Float_t m, Float_t M, Float_t thr=0.);
   void            SetVerbose(Bool_t v = kTRUE)          { SetBit(kVerbose, v);}
   void            SetVisual(Bool_t v = kTRUE)           { SetBit(kVisual, v);}
   void            SetTrackRefit(Bool_t v = kTRUE)       { SetBit(kTrackRefit, v);}
index 0c4165b..2eb2db4 100644 (file)
 #include "AliTRDeventInfo.h"
 
 ClassImp(AliTRDeventInfo)
-Int_t const AliTRDeventInfo::fgkMultBin[AliTRDeventInfo::kCentralityClasses] = {
-  700, 1400, 2100, 2800, 3500
+Int_t const AliTRDeventInfo::fgkMultBin[AliTRDeventInfo::kCentralityClasses-1] = {
+  700, 1400, 2100, 2800/*, 3500*/
 };
-Float_t const AliTRDeventInfo::fgkCentBin[AliTRDeventInfo::kCentralityClasses] = {
-  0.1, 0.2, 0.5, 0.8, 1.
+Float_t const AliTRDeventInfo::fgkCentBin[AliTRDeventInfo::kCentralityClasses-1] = {
+  0.1, 0.2, 0.5, 0.8/*, 1.*/
 };
 //____________________________________________________________________
 AliTRDeventInfo::AliTRDeventInfo():
@@ -134,7 +134,7 @@ UShort_t  AliTRDeventInfo::GetBunchFill() const
 Int_t  AliTRDeventInfo::GetCentralityBin(Float_t cenPer)
 {
 // calculate centrality bin
-  for(Int_t icen(0); icen<kCentralityClasses; icen++){
+  for(Int_t icen(0); icen<kCentralityClasses-1; icen++){
     if(cenPer<fgkCentBin[icen]) return icen;
   }
   return -1;
@@ -144,7 +144,7 @@ Int_t  AliTRDeventInfo::GetCentralityBin(Float_t cenPer)
 Int_t  AliTRDeventInfo::GetMultiplicityBin(Int_t n)
 {
 // calculate centrality bin
-  for(Int_t im(0); im<kCentralityClasses; im++){
+  for(Int_t im(0); im<kCentralityClasses-1; im++){
     if(n<fgkMultBin[im]) return kCentralityClasses-im-1;
   }
   return 0;
index b142b52..a2d8ec7 100644 (file)
@@ -49,8 +49,8 @@ private:
   enum{
     kOwner = BIT(14)
   };
-  static Int_t const   fgkMultBin[kCentralityClasses]; // multiplicity bins
-  static Float_t const fgkCentBin[kCentralityClasses]; // centrality bins
+  static Int_t const   fgkMultBin[kCentralityClasses-1]; // multiplicity bins
+  static Float_t const fgkCentBin[kCentralityClasses-1]; // centrality bins
   AliESDHeader* fHeader;      //! The ESD Header
   AliESDRun*    fRun;         //! The ESD Run Info
   Int_t         fCentrality;  //! Centrality class based on AliCentrality