ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

// $Id$

// --- MUON header files ---
#include "AliMUONTriggerDisplay.h"

#include "AliMpDDLStore.h"
#include "AliMpVSegmentation.h"
#include "AliMpSegmentation.h"
#include "AliMpConstants.h"
#include "AliMpPad.h"
#include "AliMpLocalBoard.h"
#include "AliMpCDB.h"

// --- AliRoot header files ---
#include "AliLog.h"

// --- ROOT system ---
#include <TH1.h> 
#include <TH2.h>
#include <TGraph.h>

//-----------------------------------------------------------------------------
/// \class AliMUONTriggerDisplay
///
/// MUON base class for converting histos as a function of strip/board/slat number
/// into display histos showing the detection element position in the 
/// trigger chamber.
///
/// Input histos can be given as:
///  - TH2 with x -> board # [1-234]  and   y -> strip # in board [0-15].  Option: kDisplayStrips
///  - TH1 with x -> board # [1-234]                                       Option: kDisplayBoards
///  - TH1 with x -> slat #  [0-17]                                        Option: kDisplaySlats
///
/// \author D. Stocco

/// \cond CLASSIMP
ClassImp(AliMUONTriggerDisplay)
/// \endcond
           
//____________________________________________________________________________ 
AliMUONTriggerDisplay::AliMUONTriggerDisplay() : 
TObject()
{
  /// ctor
}

//__________________________________________________________________
AliMUONTriggerDisplay::~AliMUONTriggerDisplay()
{
  /// dtor
}


//____________________________________________________________________________ 
TH2* AliMUONTriggerDisplay::GetEmptyDisplayHisto(TString displayHistoName, EDisplayType displayType,
						 Int_t cathode, Int_t chamber,
						 TString displayHistoTitle)
{
  //
  /// Return the display histogram with optimized binning
  /// but do not fill it.
  //
  TH2F* displayHisto = new TH2F();
  
  InitOrDisplayTriggerInfo(0x0, displayHisto, displayType,
			   cathode, chamber, displayHistoName, displayHistoTitle);
  
  return displayHisto;
}


//____________________________________________________________________________ 
TH2* AliMUONTriggerDisplay::GetBoardNumberHisto(TString displayHistoName,
						Int_t chamber,
						TString displayHistoTitle)
{
  //
  /// Return the display histogram with optimized binning
  /// and fill it with the board number
  //

  const Int_t kNboards = AliMpConstants::NofLocalBoards();
  TH1F* inputHisto = new TH1F("boardNumbers","Board Numbers",kNboards,0.5,(Float_t)kNboards + 0.5);
  for(Int_t ibin=1; ibin<=kNboards; ibin++){
    inputHisto->Fill(ibin,ibin);
  }

  TH2F* displayHisto = (TH2F*)GetEmptyDisplayHisto(displayHistoName, kDisplayBoards, 0, chamber, displayHistoTitle);
  FillDisplayHistogram(inputHisto,displayHisto,kDisplayBoards,0,chamber,kNumbered);
  
  delete inputHisto;

  displayHisto->SetStats(kFALSE);
  return displayHisto;
}


//____________________________________________________________________________ 
TH2* AliMUONTriggerDisplay::GetDisplayHistogram(TH1* inputHisto, TString displayHistoName,
						EDisplayType displayType, Int_t cathode,
						Int_t chamber, TString displayHistoTitle,
						EDisplayOption displayOpt)
{
  //
  /// Get histogram displaying the information contained in the input histogram
  //
  TH2* displayHisto = GetEmptyDisplayHisto(displayHistoName, displayType,
					   cathode, chamber, displayHistoTitle);

  FillDisplayHistogram(inputHisto, displayHisto, displayType, cathode, chamber, displayOpt);

  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,
						   Int_t chamber, EDisplayOption displayOpt)
{
  //
  /// Fill a previously initialized display histogram 
  /// with the information contained in inputHisto.
  /// To get initialized display, please use GetEmptyDisplayHisto method
  //
  return InitOrDisplayTriggerInfo(inputHisto, displayHisto, displayType,
				  cathode, chamber, "", "",displayOpt);
}

//____________________________________________________________________________ 
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,
						       EDisplayOption displayOpt)
{
  //
  /// Initialize trigger information display histograms using mapping
  /// Trigger information is displayed in a user-friendly way:
  /// from local board and strip numbers to their position on chambers.
  //

  // Load mapping
  if ( ! AliMpSegmentation::Instance(kFALSE) ) {
    /// Load mapping
    if ( ! AliMpCDB::LoadDDLStore() ) {
      AliError("Could not access mapping from OCDB !");
      AliError("Histograms are not initialized !");
      return kFALSE;
    }
  }
  
  Int_t iCh = (chamber > AliMpConstants::NofTrackingChambers()) ? chamber - 11 : chamber;
  Int_t iCath = cathode;
  
  TArrayD xAxisStrip;
  TArrayD yAxisStrip;
  TArrayD xAxisBoard;
  TArrayD yAxisBoard;
  
  Float_t yOffsetLine, xOffsetLine = 0.;
  
  const Float_t kResetValue=1234567.;
  
  if(!inputObject){
    xAxisBoard.Set(55);
    xAxisBoard.Reset(kResetValue);
    yAxisBoard.Set(50);
    yAxisBoard.Reset(kResetValue);
    
    xAxisStrip.Set(420);
    xAxisStrip.Reset(kResetValue);
    yAxisStrip.Set(710);
    yAxisStrip.Reset(kResetValue);
  }
  else if(!displayHisto){
    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 ) {
        if ( inputGraph->GetN() == 0 ){
          return kTRUE;
        }
      }
      else {
        AliWarning("The object should inherit from TH1 or TGraph!");
        return kFALSE;
      }
    }
  }
  
  Float_t xWidth, yWidth, yWidthSlat=0., xWidthCol=0.;
  Float_t x1,x2,y1,y2;
  Float_t x1b=0., x2b=0., y1b=0., y2b=0.;
  Float_t xcPad, ycPad;
  Int_t line=0, slat;
  Float_t sign = 1.;
  
  const Float_t kShiftB = 0.5;
  const Float_t kShiftS = 0.1;
  
  const Float_t kShiftX = (iCath==0) ? kShiftB : kShiftS;
  const Float_t kShiftY = (iCath==0) ? kShiftS : kShiftB;
  const Float_t kShiftEl = (displayType==kDisplaySlats) ? 0.01 : kShiftB;
  
  Int_t iChamber = iCh + AliMpConstants::NofTrackingChambers();
  for(Int_t iLoc = 0; iLoc < AliMpConstants::NofLocalBoards(); iLoc++) {
    Int_t iBoard = iLoc+1;
    Int_t detElemId = AliMpDDLStore::Instance()->GetDEfromLocalBoard(iBoard, iChamber);
    
    if (!detElemId) continue;
    
    AliMpLocalBoard* localBoard = AliMpDDLStore::Instance()->GetLocalBoard(iBoard, kFALSE);
    
    // skip copy cards
    if( !localBoard->IsNotified())
      continue;
    
    // get segmentation
    const AliMpVSegmentation* seg[2] = {
      AliMpSegmentation::Instance()->GetMpSegmentation(detElemId, AliMp::GetCathodType(0)),
      AliMpSegmentation::Instance()->GetMpSegmentation(detElemId, AliMp::GetCathodType(1))};
    
    if(iLoc==0){
      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
    slat = detElemId%100;
    line = (4 + slat)%18;
    sign = 1.;
    if(line>8) {
      line = 17 - line;
      sign = -1.;
    }
    yOffsetLine = (Float_t)(line - 4) * 2. * yWidthSlat;
	  
    Int_t nLocations = 1;
    
    for(Int_t cath=0; cath<AliMpConstants::NofCathodes(); cath++){
      // Loop on cathodes:
      // necessary because strip info is read for each cathode
      // board info is read only from cathode 0
      
      // loop over strips
      for (Int_t ibitxy = 0; ibitxy < 16; ++ibitxy) {
        // get pad from electronics
        
        Int_t offset = 0;
        if (cath && localBoard->GetSwitch(AliMpLocalBoard::kZeroAllYLSB)) offset = -8;
        
        AliMpPad pad = seg[cath]->PadByLocation(iBoard,ibitxy+offset,kFALSE);
        
        if (!pad.IsValid()) continue;
                
        xWidth = pad.GetDimensionX();
        yWidth = pad.GetDimensionY();
        xcPad = sign * (pad.GetPositionX() + xOffsetLine);
        if(line==4) xcPad += 0.75 * sign * xWidthCol;
        ycPad = pad.GetPositionY() + yOffsetLine;
        nLocations = pad.GetNofLocations();
        Int_t iStrip = pad.GetLocalBoardChannel(0);
        
        if(cath==0){
          if(iStrip==0) {
            x1b = xcPad - xWidth + kShiftEl;
            y1b = ycPad - yWidth + kShiftEl;
          }
          x2b = xcPad + xWidth - kShiftEl;
          y2b = ycPad + yWidth - kShiftEl;
        }
        
        // For non-bending plane fill only the first board covered by the strip
        // i.e. avoid filling many times the same information
        if ( cath == 1 && pad.GetLocalBoardId(0) != iBoard ) continue;

        
        if(cath==iCath){
          x1 = xcPad - xWidth + kShiftX;
          y1 = ycPad - yWidth + kShiftY;
          x2 = xcPad + xWidth - kShiftX;
          y2 = ycPad + yWidth - kShiftY;
          
          if(!inputObject){
            AddSortedPoint(x1, xAxisStrip, kResetValue);
            AddSortedPoint(x2, xAxisStrip, kResetValue);
            
            AddSortedPoint(y1, yAxisStrip, kResetValue);
            AddSortedPoint(y2, yAxisStrip, kResetValue);
          }
          else if(displayType==kDisplayStrips)
            FillBins(inputObject, displayHisto, iBoard, iStrip, x1, x2, y1, y2, kShiftX, kShiftY, displayOpt);
        }
                
      } // loop on strips
      
      // if iCath==0 strip info and board info are both filled -> break!
      // if iCath==1 board info is filled at cath==0. Strip info to be filled at cath==1
      if(iCath==0) break;
    } // loop on cathodes
    
    if(!inputObject){
      // Per board
      AddSortedPoint(x1b, xAxisBoard, kResetValue);
      AddSortedPoint(x2b, xAxisBoard, kResetValue);
      
      AddSortedPoint(y1b, yAxisBoard, kResetValue);
      AddSortedPoint(y2b, yAxisBoard, kResetValue);
    }
    else if(displayType==kDisplayBoards)
      FillBins(inputObject, displayHisto, iBoard, -nLocations, x1b, x2b, y1b, y2b, kShiftEl, kShiftEl, displayOpt);
    else if(displayType==kDisplaySlats)
      FillBins(inputObject, displayHisto, slat, -1, x1b, x2b, y1b, y2b, kShiftEl, kShiftEl, displayOpt);
  } // loop on local boards
  
  if ( inputObject ) return kTRUE;
  
  displayHisto->Reset();
  
  // Book histos
  const Float_t kMinDiff = 0.1;
  
  TArrayD* currArray[4] = {&xAxisStrip, &yAxisStrip,
    &xAxisBoard, &yAxisBoard};
  for(Int_t iaxis=0; iaxis<4; iaxis++){
    Int_t ipoint=0;
    while(TMath::Abs((*currArray[iaxis])[ipoint]-kResetValue)>kMinDiff) {
      ipoint++;
    }
    if(ipoint>currArray[iaxis]->GetSize()-2)
      AliWarning(Form("Array size (%i) lower than the number of points!", currArray[iaxis]->GetSize()));
    currArray[iaxis]->Set(ipoint);
  }
  
  switch(displayType){
    case kDisplayStrips:
      displayHisto->SetBins(xAxisStrip.GetSize()-1, xAxisStrip.GetArray(),
                            yAxisStrip.GetSize()-1, yAxisStrip.GetArray());
      break;
    case kDisplayBoards:
    case kDisplaySlats:
      displayHisto->SetBins(xAxisBoard.GetSize()-1, xAxisBoard.GetArray(),
                            yAxisBoard.GetSize()-1, yAxisBoard.GetArray());
      break;
  }
  
  displayHisto->SetName(displayHistoName.Data());
  displayHisto->SetTitle(displayHistoTitle.Data());
  displayHisto->SetXTitle("X (cm)");
  displayHisto->SetYTitle("Y (cm)");
  //displayHisto->SetStats(kFALSE);
  
  return kTRUE;
}


//____________________________________________________________________________ 
Bool_t AliMUONTriggerDisplay::AddSortedPoint(Float_t currVal, TArrayD& position, const Float_t kResetValue)
{
  //
  /// Add sorted point in array according to an increasing order.
  /// Used to build display histograms axis.
  //
  Int_t nEntries = position.GetSize()-1;
  Float_t tmp1, tmp2;
  const Float_t kMinDiff = 0.1;
  for(Int_t i=0; i<nEntries; i++){
    if(TMath::Abs(position[i]-currVal)<kMinDiff) return kFALSE;
    if(TMath::Abs(position[i]-kResetValue)<kMinDiff) {
      position[i] = currVal;
      return kTRUE;
    }
    if(currVal>position[i]) continue;
    tmp1 = position[i];
    position[i] = currVal;
    for(Int_t j=i+1; j<nEntries; j++){
      tmp2 = position[j];
      position[j] = tmp1;
      tmp1 = tmp2;
      if(tmp1==kResetValue) break;
    }
    return kTRUE;
  }
  return kFALSE;
}


//____________________________________________________________________________ 
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,
				     EDisplayOption displayOpt)
{
  //
  /// Given the bin in inputHisto, search the corresponding bins
  /// in display histo and fill it.
  //
  Int_t binY=0;
  Float_t binContent=0;
  TH1* inputHisto = dynamic_cast<TH1*>(inputObject);
  if ( inputHisto ) {
    Int_t binX = inputHisto->GetXaxis()->FindBin(iElement1);
    if ( inputObject->IsA()->InheritsFrom("TH2") ) {
      binY = inputHisto->GetYaxis()->FindBin(iElement2);
      binContent = inputHisto->GetBinContent(binX, binY);
    }
    else binContent = inputHisto->GetBinContent(binX);
  }
  else {
    TGraph* inputGraph = dynamic_cast<TGraph*>(inputObject);
    if ( inputGraph ) {
      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 return;
  }  

  if(binContent==0) {
    if(displayOpt==kShowZeroes) binContent = 1e-5;
    else return;
  }

  Int_t binX1 = displayHisto->GetXaxis()->FindBin(x1 + 0.01*kShiftX);
  Int_t binX2 = displayHisto->GetXaxis()->FindBin(x2 - 0.01*kShiftX);
  Int_t binY1 = displayHisto->GetYaxis()->FindBin(y1 + 0.01*kShiftY);
  Int_t binY2 = displayHisto->GetYaxis()->FindBin(y2 - 0.01*kShiftY);

  if(displayOpt==kNumbered) {
    Int_t meanBin = (binX1+binX2)/2;
    binX1 = meanBin;
    binX2 = meanBin;
    
    meanBin = (binY1+binY2)/2;
    binY1 = meanBin;
    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.
	  
	  // If iElement2 is less than 0, then its meaning is the 
	  // number of boards covered by one strip
	  // the area has therefore to be multiplied accordingly
	  // This fixes the problem when filling the trigger rate per boards in non-bending plane
	  // which is overestimated since the segmentation is always given by the bending-plane
	  if ( iElement2 < 0 ) elementArea *= -(Double_t)iElement2;

  }

  for(Int_t ibinx=binX1; ibinx<=binX2; ibinx++){
    for(Int_t ibiny=binY1; ibiny<=binY2; ibiny++){
      displayHisto->SetBinContent(ibinx,ibiny,binContent/elementArea);
    }
  }
}

 AliMUONTriggerDisplay.cxx:1
 AliMUONTriggerDisplay.cxx:2
 AliMUONTriggerDisplay.cxx:3
 AliMUONTriggerDisplay.cxx:4
 AliMUONTriggerDisplay.cxx:5
 AliMUONTriggerDisplay.cxx:6
 AliMUONTriggerDisplay.cxx:7
 AliMUONTriggerDisplay.cxx:8
 AliMUONTriggerDisplay.cxx:9
 AliMUONTriggerDisplay.cxx:10
 AliMUONTriggerDisplay.cxx:11
 AliMUONTriggerDisplay.cxx:12
 AliMUONTriggerDisplay.cxx:13
 AliMUONTriggerDisplay.cxx:14
 AliMUONTriggerDisplay.cxx:15
 AliMUONTriggerDisplay.cxx:16
 AliMUONTriggerDisplay.cxx:17
 AliMUONTriggerDisplay.cxx:18
 AliMUONTriggerDisplay.cxx:19
 AliMUONTriggerDisplay.cxx:20
 AliMUONTriggerDisplay.cxx:21
 AliMUONTriggerDisplay.cxx:22
 AliMUONTriggerDisplay.cxx:23
 AliMUONTriggerDisplay.cxx:24
 AliMUONTriggerDisplay.cxx:25
 AliMUONTriggerDisplay.cxx:26
 AliMUONTriggerDisplay.cxx:27
 AliMUONTriggerDisplay.cxx:28
 AliMUONTriggerDisplay.cxx:29
 AliMUONTriggerDisplay.cxx:30
 AliMUONTriggerDisplay.cxx:31
 AliMUONTriggerDisplay.cxx:32
 AliMUONTriggerDisplay.cxx:33
 AliMUONTriggerDisplay.cxx:34
 AliMUONTriggerDisplay.cxx:35
 AliMUONTriggerDisplay.cxx:36
 AliMUONTriggerDisplay.cxx:37
 AliMUONTriggerDisplay.cxx:38
 AliMUONTriggerDisplay.cxx:39
 AliMUONTriggerDisplay.cxx:40
 AliMUONTriggerDisplay.cxx:41
 AliMUONTriggerDisplay.cxx:42
 AliMUONTriggerDisplay.cxx:43
 AliMUONTriggerDisplay.cxx:44
 AliMUONTriggerDisplay.cxx:45
 AliMUONTriggerDisplay.cxx:46
 AliMUONTriggerDisplay.cxx:47
 AliMUONTriggerDisplay.cxx:48
 AliMUONTriggerDisplay.cxx:49
 AliMUONTriggerDisplay.cxx:50
 AliMUONTriggerDisplay.cxx:51
 AliMUONTriggerDisplay.cxx:52
 AliMUONTriggerDisplay.cxx:53
 AliMUONTriggerDisplay.cxx:54
 AliMUONTriggerDisplay.cxx:55
 AliMUONTriggerDisplay.cxx:56
 AliMUONTriggerDisplay.cxx:57
 AliMUONTriggerDisplay.cxx:58
 AliMUONTriggerDisplay.cxx:59
 AliMUONTriggerDisplay.cxx:60
 AliMUONTriggerDisplay.cxx:61
 AliMUONTriggerDisplay.cxx:62
 AliMUONTriggerDisplay.cxx:63
 AliMUONTriggerDisplay.cxx:64
 AliMUONTriggerDisplay.cxx:65
 AliMUONTriggerDisplay.cxx:66
 AliMUONTriggerDisplay.cxx:67
 AliMUONTriggerDisplay.cxx:68
 AliMUONTriggerDisplay.cxx:69
 AliMUONTriggerDisplay.cxx:70
 AliMUONTriggerDisplay.cxx:71
 AliMUONTriggerDisplay.cxx:72
 AliMUONTriggerDisplay.cxx:73
 AliMUONTriggerDisplay.cxx:74
 AliMUONTriggerDisplay.cxx:75
 AliMUONTriggerDisplay.cxx:76
 AliMUONTriggerDisplay.cxx:77
 AliMUONTriggerDisplay.cxx:78
 AliMUONTriggerDisplay.cxx:79
 AliMUONTriggerDisplay.cxx:80
 AliMUONTriggerDisplay.cxx:81
 AliMUONTriggerDisplay.cxx:82
 AliMUONTriggerDisplay.cxx:83
 AliMUONTriggerDisplay.cxx:84
 AliMUONTriggerDisplay.cxx:85
 AliMUONTriggerDisplay.cxx:86
 AliMUONTriggerDisplay.cxx:87
 AliMUONTriggerDisplay.cxx:88
 AliMUONTriggerDisplay.cxx:89
 AliMUONTriggerDisplay.cxx:90
 AliMUONTriggerDisplay.cxx:91
 AliMUONTriggerDisplay.cxx:92
 AliMUONTriggerDisplay.cxx:93
 AliMUONTriggerDisplay.cxx:94
 AliMUONTriggerDisplay.cxx:95
 AliMUONTriggerDisplay.cxx:96
 AliMUONTriggerDisplay.cxx:97
 AliMUONTriggerDisplay.cxx:98
 AliMUONTriggerDisplay.cxx:99
 AliMUONTriggerDisplay.cxx:100
 AliMUONTriggerDisplay.cxx:101
 AliMUONTriggerDisplay.cxx:102
 AliMUONTriggerDisplay.cxx:103
 AliMUONTriggerDisplay.cxx:104
 AliMUONTriggerDisplay.cxx:105
 AliMUONTriggerDisplay.cxx:106
 AliMUONTriggerDisplay.cxx:107
 AliMUONTriggerDisplay.cxx:108
 AliMUONTriggerDisplay.cxx:109
 AliMUONTriggerDisplay.cxx:110
 AliMUONTriggerDisplay.cxx:111
 AliMUONTriggerDisplay.cxx:112
 AliMUONTriggerDisplay.cxx:113
 AliMUONTriggerDisplay.cxx:114
 AliMUONTriggerDisplay.cxx:115
 AliMUONTriggerDisplay.cxx:116
 AliMUONTriggerDisplay.cxx:117
 AliMUONTriggerDisplay.cxx:118
 AliMUONTriggerDisplay.cxx:119
 AliMUONTriggerDisplay.cxx:120
 AliMUONTriggerDisplay.cxx:121
 AliMUONTriggerDisplay.cxx:122
 AliMUONTriggerDisplay.cxx:123
 AliMUONTriggerDisplay.cxx:124
 AliMUONTriggerDisplay.cxx:125
 AliMUONTriggerDisplay.cxx:126
 AliMUONTriggerDisplay.cxx:127
 AliMUONTriggerDisplay.cxx:128
 AliMUONTriggerDisplay.cxx:129
 AliMUONTriggerDisplay.cxx:130
 AliMUONTriggerDisplay.cxx:131
 AliMUONTriggerDisplay.cxx:132
 AliMUONTriggerDisplay.cxx:133
 AliMUONTriggerDisplay.cxx:134
 AliMUONTriggerDisplay.cxx:135
 AliMUONTriggerDisplay.cxx:136
 AliMUONTriggerDisplay.cxx:137
 AliMUONTriggerDisplay.cxx:138
 AliMUONTriggerDisplay.cxx:139
 AliMUONTriggerDisplay.cxx:140
 AliMUONTriggerDisplay.cxx:141
 AliMUONTriggerDisplay.cxx:142
 AliMUONTriggerDisplay.cxx:143
 AliMUONTriggerDisplay.cxx:144
 AliMUONTriggerDisplay.cxx:145
 AliMUONTriggerDisplay.cxx:146
 AliMUONTriggerDisplay.cxx:147
 AliMUONTriggerDisplay.cxx:148
 AliMUONTriggerDisplay.cxx:149
 AliMUONTriggerDisplay.cxx:150
 AliMUONTriggerDisplay.cxx:151
 AliMUONTriggerDisplay.cxx:152
 AliMUONTriggerDisplay.cxx:153
 AliMUONTriggerDisplay.cxx:154
 AliMUONTriggerDisplay.cxx:155
 AliMUONTriggerDisplay.cxx:156
 AliMUONTriggerDisplay.cxx:157
 AliMUONTriggerDisplay.cxx:158
 AliMUONTriggerDisplay.cxx:159
 AliMUONTriggerDisplay.cxx:160
 AliMUONTriggerDisplay.cxx:161
 AliMUONTriggerDisplay.cxx:162
 AliMUONTriggerDisplay.cxx:163
 AliMUONTriggerDisplay.cxx:164
 AliMUONTriggerDisplay.cxx:165
 AliMUONTriggerDisplay.cxx:166
 AliMUONTriggerDisplay.cxx:167
 AliMUONTriggerDisplay.cxx:168
 AliMUONTriggerDisplay.cxx:169
 AliMUONTriggerDisplay.cxx:170
 AliMUONTriggerDisplay.cxx:171
 AliMUONTriggerDisplay.cxx:172
 AliMUONTriggerDisplay.cxx:173
 AliMUONTriggerDisplay.cxx:174
 AliMUONTriggerDisplay.cxx:175
 AliMUONTriggerDisplay.cxx:176
 AliMUONTriggerDisplay.cxx:177
 AliMUONTriggerDisplay.cxx:178
 AliMUONTriggerDisplay.cxx:179
 AliMUONTriggerDisplay.cxx:180
 AliMUONTriggerDisplay.cxx:181
 AliMUONTriggerDisplay.cxx:182
 AliMUONTriggerDisplay.cxx:183
 AliMUONTriggerDisplay.cxx:184
 AliMUONTriggerDisplay.cxx:185
 AliMUONTriggerDisplay.cxx:186
 AliMUONTriggerDisplay.cxx:187
 AliMUONTriggerDisplay.cxx:188
 AliMUONTriggerDisplay.cxx:189
 AliMUONTriggerDisplay.cxx:190
 AliMUONTriggerDisplay.cxx:191
 AliMUONTriggerDisplay.cxx:192
 AliMUONTriggerDisplay.cxx:193
 AliMUONTriggerDisplay.cxx:194
 AliMUONTriggerDisplay.cxx:195
 AliMUONTriggerDisplay.cxx:196
 AliMUONTriggerDisplay.cxx:197
 AliMUONTriggerDisplay.cxx:198
 AliMUONTriggerDisplay.cxx:199
 AliMUONTriggerDisplay.cxx:200
 AliMUONTriggerDisplay.cxx:201
 AliMUONTriggerDisplay.cxx:202
 AliMUONTriggerDisplay.cxx:203
 AliMUONTriggerDisplay.cxx:204
 AliMUONTriggerDisplay.cxx:205
 AliMUONTriggerDisplay.cxx:206
 AliMUONTriggerDisplay.cxx:207
 AliMUONTriggerDisplay.cxx:208
 AliMUONTriggerDisplay.cxx:209
 AliMUONTriggerDisplay.cxx:210
 AliMUONTriggerDisplay.cxx:211
 AliMUONTriggerDisplay.cxx:212
 AliMUONTriggerDisplay.cxx:213
 AliMUONTriggerDisplay.cxx:214
 AliMUONTriggerDisplay.cxx:215
 AliMUONTriggerDisplay.cxx:216
 AliMUONTriggerDisplay.cxx:217
 AliMUONTriggerDisplay.cxx:218
 AliMUONTriggerDisplay.cxx:219
 AliMUONTriggerDisplay.cxx:220
 AliMUONTriggerDisplay.cxx:221
 AliMUONTriggerDisplay.cxx:222
 AliMUONTriggerDisplay.cxx:223
 AliMUONTriggerDisplay.cxx:224
 AliMUONTriggerDisplay.cxx:225
 AliMUONTriggerDisplay.cxx:226
 AliMUONTriggerDisplay.cxx:227
 AliMUONTriggerDisplay.cxx:228
 AliMUONTriggerDisplay.cxx:229
 AliMUONTriggerDisplay.cxx:230
 AliMUONTriggerDisplay.cxx:231
 AliMUONTriggerDisplay.cxx:232
 AliMUONTriggerDisplay.cxx:233
 AliMUONTriggerDisplay.cxx:234
 AliMUONTriggerDisplay.cxx:235
 AliMUONTriggerDisplay.cxx:236
 AliMUONTriggerDisplay.cxx:237
 AliMUONTriggerDisplay.cxx:238
 AliMUONTriggerDisplay.cxx:239
 AliMUONTriggerDisplay.cxx:240
 AliMUONTriggerDisplay.cxx:241
 AliMUONTriggerDisplay.cxx:242
 AliMUONTriggerDisplay.cxx:243
 AliMUONTriggerDisplay.cxx:244
 AliMUONTriggerDisplay.cxx:245
 AliMUONTriggerDisplay.cxx:246
 AliMUONTriggerDisplay.cxx:247
 AliMUONTriggerDisplay.cxx:248
 AliMUONTriggerDisplay.cxx:249
 AliMUONTriggerDisplay.cxx:250
 AliMUONTriggerDisplay.cxx:251
 AliMUONTriggerDisplay.cxx:252
 AliMUONTriggerDisplay.cxx:253
 AliMUONTriggerDisplay.cxx:254
 AliMUONTriggerDisplay.cxx:255
 AliMUONTriggerDisplay.cxx:256
 AliMUONTriggerDisplay.cxx:257
 AliMUONTriggerDisplay.cxx:258
 AliMUONTriggerDisplay.cxx:259
 AliMUONTriggerDisplay.cxx:260
 AliMUONTriggerDisplay.cxx:261
 AliMUONTriggerDisplay.cxx:262
 AliMUONTriggerDisplay.cxx:263
 AliMUONTriggerDisplay.cxx:264
 AliMUONTriggerDisplay.cxx:265
 AliMUONTriggerDisplay.cxx:266
 AliMUONTriggerDisplay.cxx:267
 AliMUONTriggerDisplay.cxx:268
 AliMUONTriggerDisplay.cxx:269
 AliMUONTriggerDisplay.cxx:270
 AliMUONTriggerDisplay.cxx:271
 AliMUONTriggerDisplay.cxx:272
 AliMUONTriggerDisplay.cxx:273
 AliMUONTriggerDisplay.cxx:274
 AliMUONTriggerDisplay.cxx:275
 AliMUONTriggerDisplay.cxx:276
 AliMUONTriggerDisplay.cxx:277
 AliMUONTriggerDisplay.cxx:278
 AliMUONTriggerDisplay.cxx:279
 AliMUONTriggerDisplay.cxx:280
 AliMUONTriggerDisplay.cxx:281
 AliMUONTriggerDisplay.cxx:282
 AliMUONTriggerDisplay.cxx:283
 AliMUONTriggerDisplay.cxx:284
 AliMUONTriggerDisplay.cxx:285
 AliMUONTriggerDisplay.cxx:286
 AliMUONTriggerDisplay.cxx:287
 AliMUONTriggerDisplay.cxx:288
 AliMUONTriggerDisplay.cxx:289
 AliMUONTriggerDisplay.cxx:290
 AliMUONTriggerDisplay.cxx:291
 AliMUONTriggerDisplay.cxx:292
 AliMUONTriggerDisplay.cxx:293
 AliMUONTriggerDisplay.cxx:294
 AliMUONTriggerDisplay.cxx:295
 AliMUONTriggerDisplay.cxx:296
 AliMUONTriggerDisplay.cxx:297
 AliMUONTriggerDisplay.cxx:298
 AliMUONTriggerDisplay.cxx:299
 AliMUONTriggerDisplay.cxx:300
 AliMUONTriggerDisplay.cxx:301
 AliMUONTriggerDisplay.cxx:302
 AliMUONTriggerDisplay.cxx:303
 AliMUONTriggerDisplay.cxx:304
 AliMUONTriggerDisplay.cxx:305
 AliMUONTriggerDisplay.cxx:306
 AliMUONTriggerDisplay.cxx:307
 AliMUONTriggerDisplay.cxx:308
 AliMUONTriggerDisplay.cxx:309
 AliMUONTriggerDisplay.cxx:310
 AliMUONTriggerDisplay.cxx:311
 AliMUONTriggerDisplay.cxx:312
 AliMUONTriggerDisplay.cxx:313
 AliMUONTriggerDisplay.cxx:314
 AliMUONTriggerDisplay.cxx:315
 AliMUONTriggerDisplay.cxx:316
 AliMUONTriggerDisplay.cxx:317
 AliMUONTriggerDisplay.cxx:318
 AliMUONTriggerDisplay.cxx:319
 AliMUONTriggerDisplay.cxx:320
 AliMUONTriggerDisplay.cxx:321
 AliMUONTriggerDisplay.cxx:322
 AliMUONTriggerDisplay.cxx:323
 AliMUONTriggerDisplay.cxx:324
 AliMUONTriggerDisplay.cxx:325
 AliMUONTriggerDisplay.cxx:326
 AliMUONTriggerDisplay.cxx:327
 AliMUONTriggerDisplay.cxx:328
 AliMUONTriggerDisplay.cxx:329
 AliMUONTriggerDisplay.cxx:330
 AliMUONTriggerDisplay.cxx:331
 AliMUONTriggerDisplay.cxx:332
 AliMUONTriggerDisplay.cxx:333
 AliMUONTriggerDisplay.cxx:334
 AliMUONTriggerDisplay.cxx:335
 AliMUONTriggerDisplay.cxx:336
 AliMUONTriggerDisplay.cxx:337
 AliMUONTriggerDisplay.cxx:338
 AliMUONTriggerDisplay.cxx:339
 AliMUONTriggerDisplay.cxx:340
 AliMUONTriggerDisplay.cxx:341
 AliMUONTriggerDisplay.cxx:342
 AliMUONTriggerDisplay.cxx:343
 AliMUONTriggerDisplay.cxx:344
 AliMUONTriggerDisplay.cxx:345
 AliMUONTriggerDisplay.cxx:346
 AliMUONTriggerDisplay.cxx:347
 AliMUONTriggerDisplay.cxx:348
 AliMUONTriggerDisplay.cxx:349
 AliMUONTriggerDisplay.cxx:350
 AliMUONTriggerDisplay.cxx:351
 AliMUONTriggerDisplay.cxx:352
 AliMUONTriggerDisplay.cxx:353
 AliMUONTriggerDisplay.cxx:354
 AliMUONTriggerDisplay.cxx:355
 AliMUONTriggerDisplay.cxx:356
 AliMUONTriggerDisplay.cxx:357
 AliMUONTriggerDisplay.cxx:358
 AliMUONTriggerDisplay.cxx:359
 AliMUONTriggerDisplay.cxx:360
 AliMUONTriggerDisplay.cxx:361
 AliMUONTriggerDisplay.cxx:362
 AliMUONTriggerDisplay.cxx:363
 AliMUONTriggerDisplay.cxx:364
 AliMUONTriggerDisplay.cxx:365
 AliMUONTriggerDisplay.cxx:366
 AliMUONTriggerDisplay.cxx:367
 AliMUONTriggerDisplay.cxx:368
 AliMUONTriggerDisplay.cxx:369
 AliMUONTriggerDisplay.cxx:370
 AliMUONTriggerDisplay.cxx:371
 AliMUONTriggerDisplay.cxx:372
 AliMUONTriggerDisplay.cxx:373
 AliMUONTriggerDisplay.cxx:374
 AliMUONTriggerDisplay.cxx:375
 AliMUONTriggerDisplay.cxx:376
 AliMUONTriggerDisplay.cxx:377
 AliMUONTriggerDisplay.cxx:378
 AliMUONTriggerDisplay.cxx:379
 AliMUONTriggerDisplay.cxx:380
 AliMUONTriggerDisplay.cxx:381
 AliMUONTriggerDisplay.cxx:382
 AliMUONTriggerDisplay.cxx:383
 AliMUONTriggerDisplay.cxx:384
 AliMUONTriggerDisplay.cxx:385
 AliMUONTriggerDisplay.cxx:386
 AliMUONTriggerDisplay.cxx:387
 AliMUONTriggerDisplay.cxx:388
 AliMUONTriggerDisplay.cxx:389
 AliMUONTriggerDisplay.cxx:390
 AliMUONTriggerDisplay.cxx:391
 AliMUONTriggerDisplay.cxx:392
 AliMUONTriggerDisplay.cxx:393
 AliMUONTriggerDisplay.cxx:394
 AliMUONTriggerDisplay.cxx:395
 AliMUONTriggerDisplay.cxx:396
 AliMUONTriggerDisplay.cxx:397
 AliMUONTriggerDisplay.cxx:398
 AliMUONTriggerDisplay.cxx:399
 AliMUONTriggerDisplay.cxx:400
 AliMUONTriggerDisplay.cxx:401
 AliMUONTriggerDisplay.cxx:402
 AliMUONTriggerDisplay.cxx:403
 AliMUONTriggerDisplay.cxx:404
 AliMUONTriggerDisplay.cxx:405
 AliMUONTriggerDisplay.cxx:406
 AliMUONTriggerDisplay.cxx:407
 AliMUONTriggerDisplay.cxx:408
 AliMUONTriggerDisplay.cxx:409
 AliMUONTriggerDisplay.cxx:410
 AliMUONTriggerDisplay.cxx:411
 AliMUONTriggerDisplay.cxx:412
 AliMUONTriggerDisplay.cxx:413
 AliMUONTriggerDisplay.cxx:414
 AliMUONTriggerDisplay.cxx:415
 AliMUONTriggerDisplay.cxx:416
 AliMUONTriggerDisplay.cxx:417
 AliMUONTriggerDisplay.cxx:418
 AliMUONTriggerDisplay.cxx:419
 AliMUONTriggerDisplay.cxx:420
 AliMUONTriggerDisplay.cxx:421
 AliMUONTriggerDisplay.cxx:422
 AliMUONTriggerDisplay.cxx:423
 AliMUONTriggerDisplay.cxx:424
 AliMUONTriggerDisplay.cxx:425
 AliMUONTriggerDisplay.cxx:426
 AliMUONTriggerDisplay.cxx:427
 AliMUONTriggerDisplay.cxx:428
 AliMUONTriggerDisplay.cxx:429
 AliMUONTriggerDisplay.cxx:430
 AliMUONTriggerDisplay.cxx:431
 AliMUONTriggerDisplay.cxx:432
 AliMUONTriggerDisplay.cxx:433
 AliMUONTriggerDisplay.cxx:434
 AliMUONTriggerDisplay.cxx:435
 AliMUONTriggerDisplay.cxx:436
 AliMUONTriggerDisplay.cxx:437
 AliMUONTriggerDisplay.cxx:438
 AliMUONTriggerDisplay.cxx:439
 AliMUONTriggerDisplay.cxx:440
 AliMUONTriggerDisplay.cxx:441
 AliMUONTriggerDisplay.cxx:442
 AliMUONTriggerDisplay.cxx:443
 AliMUONTriggerDisplay.cxx:444
 AliMUONTriggerDisplay.cxx:445
 AliMUONTriggerDisplay.cxx:446
 AliMUONTriggerDisplay.cxx:447
 AliMUONTriggerDisplay.cxx:448
 AliMUONTriggerDisplay.cxx:449
 AliMUONTriggerDisplay.cxx:450
 AliMUONTriggerDisplay.cxx:451
 AliMUONTriggerDisplay.cxx:452
 AliMUONTriggerDisplay.cxx:453
 AliMUONTriggerDisplay.cxx:454
 AliMUONTriggerDisplay.cxx:455
 AliMUONTriggerDisplay.cxx:456
 AliMUONTriggerDisplay.cxx:457
 AliMUONTriggerDisplay.cxx:458
 AliMUONTriggerDisplay.cxx:459
 AliMUONTriggerDisplay.cxx:460
 AliMUONTriggerDisplay.cxx:461
 AliMUONTriggerDisplay.cxx:462
 AliMUONTriggerDisplay.cxx:463
 AliMUONTriggerDisplay.cxx:464
 AliMUONTriggerDisplay.cxx:465
 AliMUONTriggerDisplay.cxx:466
 AliMUONTriggerDisplay.cxx:467
 AliMUONTriggerDisplay.cxx:468
 AliMUONTriggerDisplay.cxx:469
 AliMUONTriggerDisplay.cxx:470
 AliMUONTriggerDisplay.cxx:471
 AliMUONTriggerDisplay.cxx:472
 AliMUONTriggerDisplay.cxx:473
 AliMUONTriggerDisplay.cxx:474
 AliMUONTriggerDisplay.cxx:475
 AliMUONTriggerDisplay.cxx:476
 AliMUONTriggerDisplay.cxx:477
 AliMUONTriggerDisplay.cxx:478
 AliMUONTriggerDisplay.cxx:479
 AliMUONTriggerDisplay.cxx:480
 AliMUONTriggerDisplay.cxx:481
 AliMUONTriggerDisplay.cxx:482
 AliMUONTriggerDisplay.cxx:483
 AliMUONTriggerDisplay.cxx:484
 AliMUONTriggerDisplay.cxx:485
 AliMUONTriggerDisplay.cxx:486
 AliMUONTriggerDisplay.cxx:487
 AliMUONTriggerDisplay.cxx:488
 AliMUONTriggerDisplay.cxx:489
 AliMUONTriggerDisplay.cxx:490
 AliMUONTriggerDisplay.cxx:491
 AliMUONTriggerDisplay.cxx:492
 AliMUONTriggerDisplay.cxx:493
 AliMUONTriggerDisplay.cxx:494
 AliMUONTriggerDisplay.cxx:495
 AliMUONTriggerDisplay.cxx:496
 AliMUONTriggerDisplay.cxx:497
 AliMUONTriggerDisplay.cxx:498
 AliMUONTriggerDisplay.cxx:499
 AliMUONTriggerDisplay.cxx:500
 AliMUONTriggerDisplay.cxx:501
 AliMUONTriggerDisplay.cxx:502
 AliMUONTriggerDisplay.cxx:503
 AliMUONTriggerDisplay.cxx:504
 AliMUONTriggerDisplay.cxx:505
 AliMUONTriggerDisplay.cxx:506
 AliMUONTriggerDisplay.cxx:507
 AliMUONTriggerDisplay.cxx:508
 AliMUONTriggerDisplay.cxx:509
 AliMUONTriggerDisplay.cxx:510
 AliMUONTriggerDisplay.cxx:511
 AliMUONTriggerDisplay.cxx:512
 AliMUONTriggerDisplay.cxx:513
 AliMUONTriggerDisplay.cxx:514
 AliMUONTriggerDisplay.cxx:515
 AliMUONTriggerDisplay.cxx:516
 AliMUONTriggerDisplay.cxx:517
 AliMUONTriggerDisplay.cxx:518
 AliMUONTriggerDisplay.cxx:519
 AliMUONTriggerDisplay.cxx:520
 AliMUONTriggerDisplay.cxx:521
 AliMUONTriggerDisplay.cxx:522
 AliMUONTriggerDisplay.cxx:523
 AliMUONTriggerDisplay.cxx:524
 AliMUONTriggerDisplay.cxx:525
 AliMUONTriggerDisplay.cxx:526