]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONTriggerDisplay.cxx
Introduced datamember fIsRemote. Used to disable the progress bar when running in...
[u/mrichter/AliRoot.git] / MUON / AliMUONTriggerDisplay.cxx
index bc55f72da71e75f329b4330eb992893cc8cc8fb5..2c4a78f1308bef1bf0ab1d5acb6dbecc70734c9d 100644 (file)
@@ -32,6 +32,7 @@
 // --- ROOT system ---
 #include <TH1.h> 
 #include <TH2.h>
+#include <TGraph.h>
 
 //-----------------------------------------------------------------------------
 /// \class AliMUONTriggerDisplay
@@ -126,6 +127,23 @@ TH2* AliMUONTriggerDisplay::GetDisplayHistogram(TH1* inputHisto, TString display
   return displayHisto;
 }
 
+//____________________________________________________________________________ 
+TH2* AliMUONTriggerDisplay::GetDisplayHistogram(TGraph* inputGraph, TString displayHistoName,
+                                               EDisplayType displayType, Int_t cathode,
+                                               Int_t chamber, TString displayHistoTitle,
+                                               EDisplayOption displayOpt)
+{
+  //
+  /// Get histogram displaying the information contained in the input graph
+  //
+  TH2* displayHisto = GetEmptyDisplayHisto(displayHistoName, displayType,
+                                          cathode, chamber, displayHistoTitle);
+
+  FillDisplayHistogram(inputGraph, displayHisto, displayType, cathode, chamber, displayOpt);
+
+  return displayHisto;
+}
+
 //____________________________________________________________________________ 
 Bool_t AliMUONTriggerDisplay::FillDisplayHistogram(TH1* inputHisto, TH2* displayHisto,
                                                   EDisplayType displayType, Int_t cathode,
@@ -141,7 +159,21 @@ Bool_t AliMUONTriggerDisplay::FillDisplayHistogram(TH1* inputHisto, TH2* display
 }
 
 //____________________________________________________________________________ 
-Bool_t AliMUONTriggerDisplay::InitOrDisplayTriggerInfo(TH1* inputHisto, TH2* displayHisto,
+Bool_t AliMUONTriggerDisplay::FillDisplayHistogram(TGraph* inputGraph, TH2* displayHisto,
+                                                  EDisplayType displayType, Int_t cathode,
+                                                  Int_t chamber, EDisplayOption displayOpt)
+{
+  //
+  /// Fill a previously initialized display histogram 
+  /// with the information contained in inputGraph.
+  /// To get initialized display, please use GetEmptyDisplayHisto method
+  //
+  return InitOrDisplayTriggerInfo(inputGraph, displayHisto, displayType,
+                                 cathode, chamber, "", "",displayOpt);
+}
+
+//____________________________________________________________________________ 
+Bool_t AliMUONTriggerDisplay::InitOrDisplayTriggerInfo(TObject* inputObject, TH2* displayHisto,
                                                       EDisplayType displayType,
                                                       Int_t cathode, Int_t chamber,
                                                       TString displayHistoName, TString displayHistoTitle,
@@ -175,7 +207,7 @@ Bool_t AliMUONTriggerDisplay::InitOrDisplayTriggerInfo(TH1* inputHisto, TH2* dis
 
   const Float_t kResetValue=1234567.;
 
-  if(!inputHisto){
+  if(!inputObject){
     xAxisBoard.Set(55);
     xAxisBoard.Reset(kResetValue);
     yAxisBoard.Set(50);
@@ -190,6 +222,20 @@ Bool_t AliMUONTriggerDisplay::InitOrDisplayTriggerInfo(TH1* inputHisto, TH2* dis
       AliWarning("Display histogram not initialized. Please initialize it first!");
       return kFALSE;
   }
+  else {
+    TH1* inputHisto = dynamic_cast<TH1*>(inputObject);    
+    if ( inputHisto ) {
+      if ( inputHisto->GetEntries() == 0 ) {
+       return kTRUE;
+      }
+    }
+    else {
+      TGraph* inputGraph = dynamic_cast<TGraph*>(inputObject);
+      if ( inputGraph->GetN() == 0 ){
+       return kTRUE;
+      }
+    }
+  }
 
   Float_t xWidth, yWidth, yWidthSlat=0., xWidthCol=0.;
   Float_t x1,x2,y1,y2;
@@ -224,11 +270,11 @@ Bool_t AliMUONTriggerDisplay::InitOrDisplayTriggerInfo(TH1* inputHisto, TH2* dis
       AliMpSegmentation::Instance()->GetMpSegmentation(detElemId, AliMp::GetCathodType(1))};
 
     if(iLoc==0){
-      AliMpPad pad1 = seg[1]->PadByLocation(AliMpIntPair(iBoard,0),kFALSE);
-      yWidthSlat = pad1.Dimensions().Y();
-      AliMpPad pad0 = seg[0]->PadByLocation(AliMpIntPair(iBoard,0),kFALSE);
-      xOffsetLine = TMath::Abs(pad0.Position().X()) + pad0.Dimensions().X();
-      xWidthCol = 2.* pad0.Dimensions().X();
+      AliMpPad pad1 = seg[1]->PadByLocation(iBoard,0,kFALSE);
+      yWidthSlat = pad1.GetDimensionY();
+      AliMpPad pad0 = seg[0]->PadByLocation(iBoard,0,kFALSE);
+      xOffsetLine = TMath::Abs(pad0.GetPositionX()) + pad0.GetDimensionX();
+      xWidthCol = 2.* pad0.GetDimensionX();
     }
 
     // Get ideal global position of DetElemId center
@@ -251,17 +297,17 @@ Bool_t AliMUONTriggerDisplay::InitOrDisplayTriggerInfo(TH1* inputHisto, TH2* dis
        // get pad from electronics
 
        Int_t offset = 0;
-       if (cath && localBoard->GetSwitch(6)) offset = -8;
+       if (cath && localBoard->GetSwitch(AliMpLocalBoard::kZeroAllYLSB)) offset = -8;
 
-       AliMpPad pad = seg[cath]->PadByLocation(AliMpIntPair(iBoard,iStrip+offset),kFALSE);
+       AliMpPad pad = seg[cath]->PadByLocation(iBoard,iStrip+offset,kFALSE);
 
        if (!pad.IsValid()) continue;
 
-       xWidth = pad.Dimensions().X();
-       yWidth = pad.Dimensions().Y();
-       xcPad = sign * (pad.Position().X() + xOffsetLine);
+       xWidth = pad.GetDimensionX();
+       yWidth = pad.GetDimensionY();
+       xcPad = sign * (pad.GetPositionX() + xOffsetLine);
        if(line==4) xcPad += 0.75 * sign * xWidthCol;
-       ycPad = pad.Position().Y() + yOffsetLine;
+       ycPad = pad.GetPositionY() + yOffsetLine;
 
        if(cath==iCath){
          x1 = xcPad - xWidth + kShiftX;
@@ -269,7 +315,7 @@ Bool_t AliMUONTriggerDisplay::InitOrDisplayTriggerInfo(TH1* inputHisto, TH2* dis
          x2 = xcPad + xWidth - kShiftX;
          y2 = ycPad + yWidth - kShiftY;
 
-         if(!inputHisto){
+         if(!inputObject){
            AddSortedPoint(x1, xAxisStrip, kResetValue);
            AddSortedPoint(x2, xAxisStrip, kResetValue);
 
@@ -277,7 +323,7 @@ Bool_t AliMUONTriggerDisplay::InitOrDisplayTriggerInfo(TH1* inputHisto, TH2* dis
            AddSortedPoint(y2, yAxisStrip, kResetValue);
          }
          else if(displayType==kDisplayStrips) 
-           FillBins(inputHisto, displayHisto, iBoard, iStrip, x1, x2, y1, y2, kShiftX, kShiftY, displayOpt);
+           FillBins(inputObject, displayHisto, iBoard, iStrip, x1, x2, y1, y2, kShiftX, kShiftY, displayOpt);
        }
 
        if(cath==0){
@@ -295,7 +341,7 @@ Bool_t AliMUONTriggerDisplay::InitOrDisplayTriggerInfo(TH1* inputHisto, TH2* dis
       if(iCath==0) break;
     } // loop on cathodes
 
-    if(!inputHisto){
+    if(!inputObject){
       // Per board
       AddSortedPoint(x1b, xAxisBoard, kResetValue);
       AddSortedPoint(x2b, xAxisBoard, kResetValue);
@@ -304,12 +350,12 @@ Bool_t AliMUONTriggerDisplay::InitOrDisplayTriggerInfo(TH1* inputHisto, TH2* dis
       AddSortedPoint(y2b, yAxisBoard, kResetValue);
     }
     else if(displayType==kDisplayBoards) 
-      FillBins(inputHisto, displayHisto, iBoard, -1, x1b, x2b, y1b, y2b, kShiftEl, kShiftEl, displayOpt);
+      FillBins(inputObject, displayHisto, iBoard, -1, x1b, x2b, y1b, y2b, kShiftEl, kShiftEl, displayOpt);
     else if(displayType==kDisplaySlats) 
-      FillBins(inputHisto, displayHisto, slat, -1, x1b, x2b, y1b, y2b, kShiftEl, kShiftEl, displayOpt);
+      FillBins(inputObject, displayHisto, slat, -1, x1b, x2b, y1b, y2b, kShiftEl, kShiftEl, displayOpt);
   } // loop on local boards
 
-  if(inputHisto) return kTRUE;
+  if ( inputObject ) return kTRUE;
 
   displayHisto->Reset();
 
@@ -382,7 +428,7 @@ Bool_t AliMUONTriggerDisplay::AddSortedPoint(Float_t currVal, TArrayD& position,
 
 
 //____________________________________________________________________________ 
-void AliMUONTriggerDisplay::FillBins(TH1* inputHisto, TH2* displayHisto,
+void AliMUONTriggerDisplay::FillBins(TObject* inputObject, TH2* displayHisto,
                                     Int_t iElement1, Int_t iElement2,
                                     Float_t x1, Float_t x2, Float_t y1, Float_t y2,
                                     const Float_t kShiftX, const Float_t kShiftY,
@@ -392,15 +438,29 @@ void AliMUONTriggerDisplay::FillBins(TH1* inputHisto, TH2* displayHisto,
   /// Given the bin in inputHisto, search the corresponding bins
   /// in display histo and fill it.
   //
-  TString className = inputHisto->ClassName();
+  TString className = inputObject->ClassName();
   Int_t binY=0;
   Float_t binContent=0;
-  Int_t binX = inputHisto->GetXaxis()->FindBin(iElement1);
-  if(className.Contains("2")) {
-    binY = inputHisto->GetYaxis()->FindBin(iElement2);
-    binContent = inputHisto->GetBinContent(binX, binY);
+  if ( className.Contains("TH") ) {
+    TH1* inputHisto = dynamic_cast<TH1*>(inputObject);
+    Int_t binX = inputHisto->GetXaxis()->FindBin(iElement1);
+    if(className.Contains("TH2")) {
+      binY = inputHisto->GetYaxis()->FindBin(iElement2);
+      binContent = inputHisto->GetBinContent(binX, binY);
+    }
+    else binContent = inputHisto->GetBinContent(binX);
+  }
+  else {
+    TGraph* inputGraph = dynamic_cast<TGraph*>(inputObject);
+    Double_t xpt, ypt;
+    for ( Int_t ipt=0; ipt<inputGraph->GetN(); ipt++){
+      inputGraph->GetPoint(ipt, xpt, ypt);
+      if ( TMath::Abs(xpt - iElement1) < 0.1 ) {
+       binContent = ypt;
+       break;
+      }
+    }
   }
-  else binContent = inputHisto->GetBinContent(binX);
 
   if(binContent==0) {
     if(displayOpt==kShowZeroes) binContent = 1e-5;
@@ -422,9 +482,19 @@ void AliMUONTriggerDisplay::FillBins(TH1* inputHisto, TH2* displayHisto,
     binY2 = meanBin;
   }
 
+  Float_t elementArea = 1.;
+  if(displayOpt == kNormalizeToArea) {
+    elementArea = (x2 - x1 + 2*kShiftX) * 
+      (y2 - y1 + 2*kShiftY); // In InitOrDisplayTriggerInfo: 
+                             // x2 = x_c + xHalfWidth - kShiftX
+                             // x1 = x_c - xHalfWidth + kShiftX
+                             // so x2 - x1 + 2*kShiftX returns the element width.
+
+  }
+
   for(Int_t ibinx=binX1; ibinx<=binX2; ibinx++){
     for(Int_t ibiny=binY1; ibiny<=binY2; ibiny++){
-      displayHisto->SetBinContent(ibinx,ibiny,binContent);
+      displayHisto->SetBinContent(ibinx,ibiny,binContent/elementArea);
     }
   }
 }