]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG1/TRD/AliTRDcheckDET.cxx
add V0 task as cuasi-independent performance task
[u/mrichter/AliRoot.git] / PWG1 / TRD / AliTRDcheckDET.cxx
index 2637712cb24eccbabde328a117b01ea22bc607d5..759ede6b8d57ddbafe6cc78f1bdb38c6490582a5 100644 (file)
@@ -37,6 +37,7 @@
 #include <TLinearFitter.h>
 #include <TMath.h>
 #include <TMap.h>
+#include <TProfile2D.h>
 #include <TObjArray.h>
 #include <TObject.h>
 #include <TObjString.h>
@@ -205,7 +206,7 @@ Bool_t AliTRDcheckDET::PostProcess(){
   Float_t ok = h->GetBinContent(1);
   Int_t nerr = h->GetNbinsX();
   for(Int_t ierr=nerr; ierr--;){
-    h->SetBinContent(ierr+1, 1.e2*h->GetBinContent(ierr+1)/ok);
+    h->SetBinContent(ierr+1, ok>0.?1.e2*h->GetBinContent(ierr+1)/ok:0.);
   }
   h->SetBinContent(1, 0.);
 
@@ -217,7 +218,7 @@ Bool_t AliTRDcheckDET::PostProcess(){
     Float_t okB = h->GetBinContent(1);
     Int_t nerrB = h->GetNbinsX();
     for(Int_t ierr=nerrB; ierr--;){
-      h->SetBinContent(ierr+1, 1.e2*h->GetBinContent(ierr+1)/okB);
+      h->SetBinContent(ierr+1, okB>0.?1.e2*h->GetBinContent(ierr+1)/okB:0.);
     }
     h->SetBinContent(1, 0.);
   }
@@ -227,30 +228,50 @@ Bool_t AliTRDcheckDET::PostProcess(){
   return kTRUE;
 }
 
+//_______________________________________________________
+void AliTRDcheckDET::MakeSummary(){
+  //
+  // Create summary plots for TRD check DET
+  // This function creates 2 summary plots:
+  // - General Quantities
+  // - PHS
+  // The function will reuse GetRefFigure
+  //
+  
+  TCanvas *cOut = new TCanvas(Form("summary%s1", GetName()), Form("Summary 1 for task %s", GetName()), 1024, 768);
+  cOut->Divide(3,3);
+
+  // Create figures using GetRefFigure
+  cOut->cd(1); GetRefFigure(kFigNtracksEvent);  
+  cOut->cd(2); GetRefFigure(kFigNtracksSector);
+  cOut->cd(3); GetRefFigure(kFigNclustersTrack);
+  cOut->cd(4); GetRefFigure(kFigNclustersTracklet);
+  cOut->cd(5); GetRefFigure(kFigNtrackletsTrack);
+  cOut->cd(6); GetRefFigure(kFigNTrackletsP);
+  cOut->cd(7); GetRefFigure(kFigChargeCluster);
+  cOut->cd(8); GetRefFigure(kFigChargeTracklet);
+  cOut->SaveAs(Form("TRDsummary%s1.gif", GetName()));
+  delete cOut;
+
+  // Second Plot: PHS
+  cOut = new TCanvas(Form("summary%s2", GetName()), Form("Summary 2 for task %s", GetName()), 1024, 512);
+  cOut->cd(); GetRefFigure(kFigPH);
+  cOut->SaveAs(Form("TRDsummary%s2.gif", GetName())); 
+  delete cOut;
+
+  // Third Plot: Mean Number of clusters as function of eta, phi and layer
+   cOut = new TCanvas(Form("summary%s3", GetName()), Form("Summary 3 for task %s", GetName()), 1024, 768);
+  cOut->cd(); MakePlotMeanClustersLayer();
+  cOut->SaveAs(Form("TRDsummary%s3.gif", GetName())); 
+  delete cOut;
+
+}
+
 //_______________________________________________________
 Bool_t AliTRDcheckDET::GetRefFigure(Int_t ifig){
   //
   // Setting Reference Figures
   //
-  enum FigureType_t{
-    kFigNclustersTrack,
-    kFigNclustersTracklet,
-    kFigNtrackletsTrack,
-    kFigNTrackletsP,
-    kFigNtrackletsCross,
-    kFigNtrackletsFindable,
-    kFigNtracksEvent,
-    kFigNtracksSector,
-    kFigTrackStatus,
-    kFigTrackletStatus,
-    kFigChi2,
-    kFigPH,
-    kFigChargeCluster,
-    kFigChargeTracklet,
-    kFigNeventsTrigger,
-    kFigNeventsTriggerTracks,
-    kFigTriggerPurity
-  };
   gPad->SetLogy(0);
   gPad->SetLogx(0);
   TH1 *h = NULL; TObjArray *arr=NULL;
@@ -325,6 +346,7 @@ Bool_t AliTRDcheckDET::GetRefFigure(Int_t ifig){
     gPad->SetLogy(0);
     return kTRUE;
   case kFigChi2:
+    return kTRUE;
     MakePlotChi2();
     return kTRUE;
   case kFigPH:
@@ -380,6 +402,18 @@ TObjArray *AliTRDcheckDET::Histos(){
   } else h->Reset();
   fContainer->AddAt(h, kNclustersTrack);
 
+  TObjArray *arr = new TObjArray(AliTRDgeometry::kNlayer);
+  arr->SetOwner(kTRUE);  arr->SetName("clusters");
+  fContainer->AddAt(arr, kNclustersLayer);
+  for(Int_t ily=AliTRDgeometry::kNlayer; ily--;){
+    if(!(h = (TProfile2D *)gROOT->FindObject(Form("hNcl%d", ily)))){
+      h = new TProfile2D(Form("hNcl%d", ily), Form("Mean Number of clusters in Layer %d", ily), 100, -1.0, 1.0, 50, -1.1*TMath::Pi(), 1.1*TMath::Pi());
+      h->GetXaxis()->SetTitle("#eta");
+      h->GetYaxis()->SetTitle("#phi");
+    } else h->Reset();
+    arr->AddAt(h, ily);
+  }
+
   if(!(h = (TH1F *)gROOT->FindObject("hNclTls"))){
     h = new TH1F("hNclTls","N_{clusters} / tracklet", 51, -0.5, 50.5);
     h->GetXaxis()->SetTitle("N_{clusters}");
@@ -454,7 +488,7 @@ TObjArray *AliTRDcheckDET::Histos(){
   }
   fContainer->AddAt(h, kTrackStatus);
 
-  TObjArray *arr = new TObjArray(AliTRDgeometry::kNlayer);
+  arr = new TObjArray(AliTRDgeometry::kNlayer);
   arr->SetOwner(kTRUE);  arr->SetName("TrackletStatus");
   fContainer->AddAt(arr, kTrackletStatus);
   for(Int_t ily=AliTRDgeometry::kNlayer; ily--;){
@@ -471,7 +505,7 @@ TObjArray *AliTRDcheckDET::Histos(){
   }
 
   // <PH> histos
-  arr = new TObjArray(2);
+  arr = new TObjArray(3);
   arr->SetOwner(kTRUE);  arr->SetName("<PH>");
   fContainer->AddAt(arr, kPH);
   if(!(h = (TH1F *)gROOT->FindObject("hPHt"))){
@@ -484,6 +518,12 @@ TObjArray *AliTRDcheckDET::Histos(){
     h = new TProfile("hPHx", "<PH>", 31, -0.08, 4.88);
   else h->Reset();
   arr->AddAt(h, 1);
+  if(!(h = (TH2F *)gROOT->FindObject("hPH2D"))){
+    h = new TH2F("hPH2D", "Charge Distribution / time", 31, -0.5, 30.5, 100, 0, 1024);
+    h->GetXaxis()->SetTitle("Time / 100ns");
+    h->GetYaxis()->SetTitle("Charge / a.u.");
+  } else h->Reset();
+  arr->AddAt(h, 2);
 
   // Chi2 histos
   if(!(h = (TH2S*)gROOT->FindObject("hChi2"))){
@@ -554,7 +594,7 @@ TH1 *AliTRDcheckDET::PlotTrackStatus(const AliTRDtrackV1 *track)
 //
   if(track) fkTrack = track;
   if(!fkTrack){
-    AliWarning("No Track defined.");
+    AliDebug(4, "No Track defined.");
     return NULL;
   }
   TH1 *h = NULL;
@@ -586,7 +626,7 @@ TH1 *AliTRDcheckDET::PlotTrackletStatus(const AliTRDtrackV1 *track)
 //
   if(track) fkTrack = track;
   if(!fkTrack){
-    AliWarning("No Track defined.");
+    AliDebug(4, "No Track defined.");
     return NULL;
   }
   TObjArray *arr =NULL;
@@ -613,18 +653,31 @@ TH1 *AliTRDcheckDET::PlotNClustersTracklet(const AliTRDtrackV1 *track){
   //
   if(track) fkTrack = track;
   if(!fkTrack){
-    AliWarning("No Track defined.");
+    AliDebug(4, "No Track defined.");
     return NULL;
   }
+  AliExternalTrackParam *par = fkTrack->GetTrackIn() ? fkTrack->GetTrackIn() : fkTrack->GetTrackOut();
   TH1 *h = NULL;
+  TProfile2D *hlayer = NULL;
+  Double_t eta = 0., phi = 0.;
   if(!(h = dynamic_cast<TH1F *>(fContainer->At(kNclustersTracklet)))){
     AliWarning("No Histogram defined.");
     return NULL;
   }
   AliTRDseedV1 *tracklet = NULL;
+  TObjArray *histosLayer = dynamic_cast<TObjArray *>(fContainer->At(kNclustersLayer));
+  if(!histosLayer){
+    AliWarning("No Histograms for single layer defined");
+  }
   for(Int_t itl = 0; itl < AliTRDgeometry::kNlayer; itl++){
     if(!(tracklet = fkTrack->GetTracklet(itl)) || !tracklet->IsOK()) continue;
     h->Fill(tracklet->GetN2());
+    if(histosLayer && par){
+      if((hlayer = dynamic_cast<TProfile2D *>(histosLayer->At(itl)))){
+        GetEtaPhiAt(par, tracklet->GetX0(), eta, phi);
+        hlayer->Fill(eta, phi, tracklet->GetN2());
+      }
+    }
   }
   return h;
 }
@@ -636,7 +689,7 @@ TH1 *AliTRDcheckDET::PlotNClustersTrack(const AliTRDtrackV1 *track){
   //
   if(track) fkTrack = track;
   if(!fkTrack){
-    AliWarning("No Track defined.");
+    AliDebug(4, "No Track defined.");
     return NULL;
   }
   TH1 *h = NULL;
@@ -648,6 +701,7 @@ TH1 *AliTRDcheckDET::PlotNClustersTrack(const AliTRDtrackV1 *track){
   Int_t nclusters = 0;
   AliTRDseedV1 *tracklet = NULL;
   AliExternalTrackParam *par = fkTrack->GetTrackOut() ? fkTrack->GetTrackOut() : fkTrack->GetTrackIn();
+  if(!par) return NULL;
   Double_t momentumRec = par->P();
   for(Int_t itl = 0; itl < AliTRDgeometry::kNlayer; itl++){
     if(!(tracklet = fkTrack->GetTracklet(itl)) || !tracklet->IsOK()) continue;
@@ -692,7 +746,7 @@ TH1 *AliTRDcheckDET::PlotNTrackletsTrack(const AliTRDtrackV1 *track){
   //
   if(track) fkTrack = track;
   if(!fkTrack){
-    AliWarning("No Track defined.");
+    AliDebug(4, "No Track defined.");
     return NULL;
   }
   TH1 *h = NULL, *hSta = NULL; TH2 *hBarrel = NULL;
@@ -720,7 +774,8 @@ TH1 *AliTRDcheckDET::PlotNTrackletsTrack(const AliTRDtrackV1 *track){
       AliError("Input track params missing");
       return NULL;
     }
-    hBarrel->Fill(par->P(), nTracklets);
+    p = par->P(); // p needed later in the debug streaming
+    hBarrel->Fill(p, nTracklets);
   } else {
     // Stand alone Track: momentum dependence not usefull
     method = 0;
@@ -733,32 +788,30 @@ TH1 *AliTRDcheckDET::PlotNTrackletsTrack(const AliTRDtrackV1 *track){
 
   if(DebugLevel() > 2){
     AliTRDseedV1 *tracklet = NULL;
-    Int_t sector = -1;
+    Int_t sector = -1, stack = -1, detector;
     for(Int_t itl = 0; itl < AliTRDgeometry::kNlayer; itl++){
       if(!(tracklet = fkTrack->GetTracklet(itl)) || !(tracklet->IsOK())) continue;
-      sector = fGeo->GetSector(tracklet->GetDetector());
+      detector = tracklet->GetDetector();
+      sector = fGeo->GetSector(detector);
+      stack = fGeo->GetStack(detector);
       break;
     }
     (*DebugStream()) << "NTrackletsTrack"
       << "Sector="      << sector
+      << "Stack="        << stack 
       << "NTracklets="  << nTracklets
       << "Method="      << method
       << "p="           << p
       << "\n";
   }
   if(DebugLevel() > 3){
-    if(nTracklets == 1){
-      // If we have one Tracklet, check in which layer this happens
-      Int_t layer = -1;
-      AliTRDseedV1 *tracklet = NULL;
-      for(Int_t il = 0; il < AliTRDgeometry::kNlayer; il++){
-        if((tracklet = fkTrack->GetTracklet(il)) && tracklet->IsOK()){layer =  il; break;}
-      }
-      if(layer >= 0){
+    AliTRDseedV1 *tracklet = NULL;
+    for(Int_t il = 0; il < AliTRDgeometry::kNlayer; il++){
+      if((tracklet = fkTrack->GetTracklet(il)) && tracklet->IsOK()){
         (*DebugStream()) << "NTrackletsLayer"
-          << "Layer=" << layer
-          << "p=" << p
-          << "\n";
+        << "Layer=" << il
+        << "p=" << p
+        << "\n";
       }
     }
   }
@@ -773,7 +826,7 @@ TH1 *AliTRDcheckDET::PlotNTrackletsRowCross(const AliTRDtrackV1 *track){
   //
   if(track) fkTrack = track;
   if(!fkTrack){
-    AliWarning("No Track defined.");
+    AliDebug(4, "No Track defined.");
     return NULL;
   }
   TH1 *h = NULL;
@@ -825,7 +878,7 @@ TH1 *AliTRDcheckDET::PlotFindableTracklets(const AliTRDtrackV1 *track){
  
   if(track) fkTrack = track;
   if(!fkTrack){
-    AliWarning("No Track defined.");
+    AliDebug(4, "No Track defined.");
     return NULL;
   }
   TH1 *h = NULL;
@@ -923,7 +976,7 @@ TH1 *AliTRDcheckDET::PlotChi2(const AliTRDtrackV1 *track){
   //
   if(track) fkTrack = track;
   if(!fkTrack){
-    AliWarning("No Track defined.");
+    AliDebug(4, "No Track defined.");
     return NULL;
   }
   TH1 *h = NULL;
@@ -946,14 +999,17 @@ TH1 *AliTRDcheckDET::PlotPHt(const AliTRDtrackV1 *track){
   //
   if(track) fkTrack = track;
   if(!fkTrack){
-    AliWarning("No Track defined.");
+    AliDebug(4, "No Track defined.");
     return NULL;
   }
-  TProfile *h = NULL;
+  TProfile *h = NULL; TH2F *phs2D = NULL;
   if(!(h = dynamic_cast<TProfile *>(((TObjArray*)(fContainer->At(kPH)))->At(0)))){
     AliWarning("No Histogram defined.");
     return NULL;
   }
+  if(!(phs2D = dynamic_cast<TH2F *>(((TObjArray*)(fContainer->At(kPH)))->At(2)))){
+    AliWarning("2D Pulse Height histogram not defined. Histogramm cannot be filled");
+  }
   AliTRDseedV1 *tracklet = NULL;
   AliTRDcluster *c = NULL;
   for(Int_t itl = 0; itl < AliTRDgeometry::kNlayer; itl++){
@@ -966,25 +1022,30 @@ TH1 *AliTRDcheckDET::PlotPHt(const AliTRDtrackV1 *track){
       Int_t localtime        = c->GetLocalTimeBin();
       Double_t absoluteCharge = TMath::Abs(c->GetQ());
       h->Fill(localtime, absoluteCharge);
+      phs2D->Fill(localtime, absoluteCharge); 
       if(DebugLevel() > 3){
+        Int_t inChamber = c->IsInChamber() ? 1 : 0;
         Double_t distance[2];
         GetDistanceToTracklet(distance, tracklet, c);
         Float_t theta = TMath::ATan(tracklet->GetZref(1));
         Float_t phi = TMath::ATan(tracklet->GetYref(1));
-        Float_t momentum = 0.;
+        AliExternalTrackParam *trdPar = fkTrack->GetTrackIn();
+        Float_t momentumMC = 0, momentumRec = trdPar ? trdPar->P() : track->P(); // prefer Track Low
         Int_t pdg = 0;
         Int_t kinkIndex = fkESD ? fkESD->GetKinkIndex() : 0;
         UShort_t TPCncls = fkESD ? fkESD->GetTPCncls() : 0;
         if(fkMC){
-          if(fkMC->GetTrackRef()) momentum = fkMC->GetTrackRef()->P();
+          if(fkMC->GetTrackRef()) momentumMC = fkMC->GetTrackRef()->P();
           pdg = fkMC->GetPDG();
         }
         (*DebugStream()) << "PHt"
           << "Detector="       << detector
           << "crossing="       << crossing
+          << "inChamber=" << inChamber
           << "Timebin="                << localtime
           << "Charge="         << absoluteCharge
-          << "momentum="       << momentum
+          << "momentumMC="     << momentumMC
+          << "momentumRec="    << momentumRec
           << "pdg="                            << pdg
           << "theta="                  << theta
           << "phi="                            << phi
@@ -1008,34 +1069,35 @@ TH1 *AliTRDcheckDET::PlotPHx(const AliTRDtrackV1 *track){
   //
   if(track) fkTrack = track;
   if(!fkTrack){
-    AliWarning("No Track defined.");
-    return NULL;
+     AliDebug(4, "No Track defined.");
+     return NULL;
   }
   TProfile *h = NULL;
   if(!(h = dynamic_cast<TProfile *>(((TObjArray*)(fContainer->At(kPH)))->At(1)))){
     AliWarning("No Histogram defined.");
     return NULL;
   }
-  AliTRDseedV1 *tracklet = NULL;
-  AliTRDcluster *c = NULL;
+  AliTRDseedV1 *tracklet(NULL);
+  AliTRDcluster *c(NULL);
   Double_t xd(0.), dqdl(0.);
   TVectorD vq(AliTRDseedV1::kNtb), vxd(AliTRDseedV1::kNtb), vdqdl(AliTRDseedV1::kNtb);
   for(Int_t itl = 0; itl < AliTRDgeometry::kNlayer; itl++){
     if(!(tracklet = fkTrack->GetTracklet(itl)) || !(tracklet->IsOK())) continue;
     Int_t det(tracklet->GetDetector());
     Bool_t rc(tracklet->IsRowCross());
-    Int_t jc(0);
-    for(Int_t ic(0); ic<AliTRDseedV1::kNclusters; ic++){
-      if(!(c = tracklet->GetClusters(ic))) continue;
+    for(Int_t ic(0); ic<AliTRDseedV1::kNtb; ic++){
+      Bool_t kFIRST(kFALSE);
+      if(!(c = tracklet->GetClusters(ic))){
+         if(!(c = tracklet->GetClusters(AliTRDseedV1::kNtb+ic))) continue;
+      } else kFIRST=kTRUE;
       if(!IsUsingClustersOutsideChamber() && !c->IsInChamber()) continue;
-      jc = (ic-AliTRDseedV1::kNtb);
-      if(jc<0) jc+=AliTRDseedV1::kNtb;
-      xd = tracklet->GetX0() - c->GetX(); vxd[jc] = xd;
-      dqdl=tracklet->GetdQdl(ic); vdqdl[jc] = dqdl;
+      xd = tracklet->GetX0() - c->GetX(); vxd[ic] = xd;
+      dqdl=tracklet->GetdQdl(ic); vdqdl[ic] = dqdl;
+      vq[ic]=c->GetQ();
+      if(kFIRST && (c = tracklet->GetClusters(AliTRDseedV1::kNtb+ic))) vq[ic]+=c->GetQ();
       h->Fill(xd, dqdl);
     }
     if(DebugLevel() > 3){
-      vq[jc]+=c->GetQ();
       (*DebugStream()) << "PHx"
         << "det="  << det
         << "rc="   << rc
@@ -1055,7 +1117,7 @@ TH1 *AliTRDcheckDET::PlotChargeCluster(const AliTRDtrackV1 *track){
   //
   if(track) fkTrack = track;
   if(!fkTrack){
-    AliWarning("No Track defined.");
+    AliDebug(4, "No Track defined.");
     return NULL;
   }
   TH1 *h = NULL;
@@ -1067,9 +1129,14 @@ TH1 *AliTRDcheckDET::PlotChargeCluster(const AliTRDtrackV1 *track){
   AliTRDcluster *c = NULL;
   for(Int_t itl = 0; itl < AliTRDgeometry::kNlayer; itl++){
     if(!(tracklet = fkTrack->GetTracklet(itl)) || !tracklet->IsOK())continue;
-    for(Int_t itime = 0; itime < AliTRDtrackerV1::GetNTimeBins(); itime++){
-      if(!(c = tracklet->GetClusters(itime))) continue;
-      h->Fill(c->GetQ());
+    for(Int_t ic(0); ic < AliTRDseedV1::kNtb; ic++){
+      Bool_t kFIRST(kFALSE);
+      if(!(c = tracklet->GetClusters(ic))) {
+        if(!(c = tracklet->GetClusters(AliTRDseedV1::kNtb+ic))) continue;
+      } else kFIRST = kTRUE;
+      Float_t q(c->GetQ());
+      if(kFIRST && (c = tracklet->GetClusters(AliTRDseedV1::kNtb+ic))) q+=c->GetQ();
+      h->Fill(q);
     }
   }
   return h;
@@ -1082,7 +1149,7 @@ TH1 *AliTRDcheckDET::PlotChargeTracklet(const AliTRDtrackV1 *track){
   //
   if(track) fkTrack = track;
   if(!fkTrack){
-    AliWarning("No Track defined.");
+    AliDebug(4, "No Track defined.");
     return NULL;
   }
   TH1 *h = NULL;
@@ -1139,7 +1206,7 @@ TH1 *AliTRDcheckDET::PlotNTracksSector(const AliTRDtrackV1 *track){
   //
   if(track) fkTrack = track;
   if(!fkTrack){
-    AliWarning("No Track defined.");
+    AliDebug(4, "No Track defined.");
     return NULL;
   }
   TH1 *h = NULL;
@@ -1178,6 +1245,20 @@ void AliTRDcheckDET::GetDistanceToTracklet(Double_t *dist, AliTRDseedV1 * const
   dist[1] = c->GetZ() - tracklet->GetZat(x);
 }
 
+//________________________________________________________
+void AliTRDcheckDET::GetEtaPhiAt(AliExternalTrackParam *track, Double_t x, Double_t &eta, Double_t &phi){
+  //
+  // Get phi and eta at a given radial position
+  // 
+  AliExternalTrackParam workpar(*track);
+
+  Double_t posLocal[3];
+  Bool_t sucPos = workpar.GetXYZAt(x, fEventInfo->GetRunInfo()->GetMagneticField(), posLocal);
+  Double_t sagPhi = sucPos ? TMath::ATan2(posLocal[1], posLocal[0]) : 0.;
+  phi = sagPhi;
+  eta = workpar.Eta();
+}
+
 
 //_______________________________________________________
 TH1* AliTRDcheckDET::MakePlotChi2()
@@ -1187,8 +1268,11 @@ TH1* AliTRDcheckDET::MakePlotChi2()
 // 
 // Alex Bercuci <A.Bercuci@gsi.de>
 
+  return NULL;
+
   TH2S *h2 = (TH2S*)fContainer->At(kChi2);
   TF1 f("fChi2", "[0]*pow(x, [1]-1)*exp(-0.5*x)", 0., 50.);
+  f.SetParLimits(1,1, 1e100);
   TLegend *leg = new TLegend(.7,.7,.95,.95);
   leg->SetBorderSize(1); leg->SetHeader("Tracklets per Track");
   TH1D *h1 = NULL;
@@ -1320,16 +1404,20 @@ void AliTRDcheckDET::MakePlotnTrackletsVsP(){
 }
 
 //________________________________________________________
-TH1* AliTRDcheckDET::MakePlotPulseHeight(){
+Bool_t AliTRDcheckDET::MakePlotPulseHeight(){
   //
   // Create Plot of the Pluse Height Spectrum
   //
+  TCanvas *output = gPad->GetCanvas();
+  output->Divide(2);
+  output->cd(1);
   TH1 *h, *h1, *h2;
   TObjArray *arr = (TObjArray*)fContainer->FindObject("<PH>");
   h = (TH1F*)arr->At(0);
   h->SetMarkerStyle(24);
   h->SetMarkerColor(kBlack);
   h->SetLineColor(kBlack);
+  h->GetYaxis()->SetTitleOffset(1.5);
   h->Draw("e1");
   // Trending for the pulse height: plateau value, slope and timebin of the maximum
   TLinearFitter fit(1,"pol1");
@@ -1366,7 +1454,34 @@ TH1* AliTRDcheckDET::MakePlotPulseHeight(){
   axis->SetTextColor(kBlue);
   axis->SetTitle("x_{0}-x_{c} [cm]");
   axis->Draw();
-  return h1;
+
+  output->cd(2);
+  TH2 *ph2d = (TH2F *)arr->At(2);
+  ph2d->GetYaxis()->SetTitleOffset(1.8);
+  ph2d->SetStats(kFALSE);
+  ph2d->Draw("colz");
+  return kTRUE;
+}
+
+//________________________________________________________
+void AliTRDcheckDET::MakePlotMeanClustersLayer(){
+  //
+  // Create Summary plot for the mean number of clusters per layer
+  //
+  TCanvas *output = gPad->GetCanvas();
+  output->Divide(3,2);
+  TObjArray *histos = (TObjArray *)fContainer->At(kNclustersLayer);
+  if(!histos){
+    AliWarning("Histos for each layer not found");
+    return;
+  }
+  TProfile2D *hlayer = NULL;
+  for(Int_t ily = 0; ily < AliTRDgeometry::kNlayer; ily++){
+    hlayer = dynamic_cast<TProfile2D *>(histos->At(ily));
+    output->cd(ily + 1);
+    gPad->SetGrid(0,0);
+    hlayer->Draw("colz");
+  }
 }
 
 //________________________________________________________