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$

#include "AliMUONTriggerEfficiencyCells.h"
#include "AliMpConstants.h"

// Classes for display
#include "AliMUONTriggerDisplay.h"
#include "AliCDBManager.h"
#include "AliMpDDLStore.h"

#include "AliLog.h"

#include "TRandom.h"
#include "Riostream.h"
#include "TH1F.h"
#include "TObjArray.h"
#include "TGraphAsymmErrors.h"

#include "TH2F.h"
#include "TCanvas.h"
#include "TROOT.h"

#include "AliMUONTriggerChamberEfficiency.h"

//-----------------------------------------------------------------------------
/// \class AliMUONTriggerChamberEfficiency
/// A class to store and give access to the trigger chamber efficiency.
///
/// Efficiency is stored per cathode on local boards
///
/// The main method of this class is IsTriggered().
///
/// \author Diego Stocco; INFN Torino
//-----------------------------------------------------------------------------

/// \cond CLASSIMP
ClassImp(AliMUONTriggerChamberEfficiency)
/// \endcond

//__________________________________________________________________________
AliMUONTriggerChamberEfficiency::AliMUONTriggerChamberEfficiency(AliMUONTriggerEfficiencyCells* effCells)
:
TObject(),
fIsOwner(kFALSE),
fEfficiencyMap(effCells),
fEfficiencyObjects(0x0),
fDisplayList(0x0)
{
///  Default constructor.
  FillFromList();
}

//__________________________________________________________________________
AliMUONTriggerChamberEfficiency::AliMUONTriggerChamberEfficiency(const Char_t* filename, const Char_t* listname)
:
TObject(),
fIsOwner(kTRUE),
fEfficiencyMap(0x0),
fEfficiencyObjects(0x0),
fDisplayList(0x0)
{
///  Constructor using an ASCII file.
  fEfficiencyMap = new AliMUONTriggerEfficiencyCells(filename, listname);
  FillFromList();
}


//_____________________________________________________________________________
AliMUONTriggerChamberEfficiency::AliMUONTriggerChamberEfficiency(const AliMUONTriggerChamberEfficiency& other)
:
TObject(other),
fIsOwner(other.fIsOwner),
fEfficiencyMap(other.fEfficiencyMap),
fEfficiencyObjects(other.fEfficiencyObjects),
fDisplayList(other.fDisplayList)
{
/// Copy constructor
}

//_____________________________________________________________________________
AliMUONTriggerChamberEfficiency& AliMUONTriggerChamberEfficiency::operator=(const AliMUONTriggerChamberEfficiency& other)
{
  /// Asignment operator
  // check assignement to self
  if (this == &other)
    return *this;

  fIsOwner = other.fIsOwner;
  fEfficiencyMap = other.fEfficiencyMap;
  fEfficiencyObjects = other.fEfficiencyObjects;
  fDisplayList = other.fDisplayList;
    
  return *this;
}

//__________________________________________________________________________
AliMUONTriggerChamberEfficiency::~AliMUONTriggerChamberEfficiency()
{
///  Destructor.
  if ( fIsOwner )
    delete fEfficiencyMap;
  delete fEfficiencyObjects;
  delete fDisplayList;
}


//__________________________________________________________________________
Float_t AliMUONTriggerChamberEfficiency::GetCellEfficiency(Int_t detElemId, Int_t localBoard, Int_t hType) const
{
///  Get the efficiencies of the 2 cathodes at a given local board

  Int_t chamber = FindChamberIndex(detElemId);
  Int_t index = GetIndex(kHboardEff, hType, chamber);
  TGraphAsymmErrors* effGraph = ((TGraphAsymmErrors*)fEfficiencyObjects->At(index));

  // Some graphs are not available in the old implementation
  if ( ! effGraph ) return -1.;

  Double_t xpt, ypt;
  effGraph->GetPoint(localBoard-1, xpt, ypt);
  return ypt;
}


//__________________________________________________________________________
Float_t AliMUONTriggerChamberEfficiency::GetCellEfficiencyError(Int_t detElemId, Int_t localBoard, Int_t hType, Int_t errType) const
{
  /// Get the efficiencie errors of the 2 cathodes at a given local board
  /// errype 0 -> low error
  /// errype 1 -> high error
  
  Int_t chamber = FindChamberIndex(detElemId);
  Int_t index = GetIndex(kHboardEff, hType, chamber);
  TGraphAsymmErrors* effGraph = ((TGraphAsymmErrors*)fEfficiencyObjects->At(index));
  
  // Some graphs are not available in the old implementation
  if ( ! effGraph ) return -1.;

  Float_t err = -1.;
  if ( errType == 0 ) { // low error
    err = effGraph->GetErrorYlow(localBoard-1);
  }
  else if ( errType == 1 ) { // up error
    err = effGraph->GetErrorYhigh(localBoard-1);
  }
  
  return err;
}


//__________________________________________________________________________
void 
AliMUONTriggerChamberEfficiency::IsTriggered(Int_t detElemId, Int_t localBoard, Bool_t &trigBend, Bool_t &trigNonBend) const
{
///  Whether or not a given local board has a chance to trig, on each cathode.

  // P(B) : probability to fire bending plane
  Float_t effBend = GetCellEfficiency(detElemId, localBoard, AliMUONTriggerEfficiencyCells::kBendingEff);

  // P(BN) : probability to fire bending and non-bending plane
  Float_t effBoth = GetCellEfficiency(detElemId, localBoard, AliMUONTriggerEfficiencyCells::kBothPlanesEff);

  trigBend =  ( gRandom->Rndm() > effBend ) ? kFALSE : kTRUE;

  // P(N) : probability to fire non-bending plane
  Float_t effNonBend = GetCellEfficiency(detElemId, localBoard, AliMUONTriggerEfficiencyCells::kNonBendingEff);

  if ( effBoth > 0 ) {
    effNonBend = ( trigBend ) ? 
      effBoth / effBend :   // P(N|B) = P(BN) / P(B)
      ( effNonBend - effBoth ) / ( 1. - effBend );  // P(N|!B) = ( P(N) - P(BN) ) / ( 1 - P(B) )
  }

  trigNonBend =  ( gRandom->Rndm() > effNonBend ) ? kFALSE : kTRUE;

  AliDebug(2,Form("Ch %i  board %i  resp (%i, %i)  prob (%.2f, %.2f)  effNB %.2f  effBoth %.2f\n", detElemId/100, localBoard, trigBend, trigNonBend, effBend, effNonBend, GetCellEfficiency(detElemId, localBoard, AliMUONTriggerEfficiencyCells::kNonBendingEff), effBoth));


}


//__________________________________________________________________________
Int_t AliMUONTriggerChamberEfficiency::FindChamberIndex(Int_t detElemId) const
{
///  From detElemId to chamber number

  // Int_t iChamber = AliMpDEManager::GetChamberId(detElemId);
  Int_t iChamber = detElemId/100 - 1;
  return iChamber-AliMpConstants::NofTrackingChambers();
}


//__________________________________________________________________________
void
AliMUONTriggerChamberEfficiency::FillFromList(Bool_t useMeanValues)
{
///  Fills internal histos from list.

  if ( fEfficiencyObjects )
    delete fEfficiencyObjects;

  const Int_t kNeffHistos = 
    2 * ( AliMUONTriggerEfficiencyCells::kNcounts - 1 ) * AliMpConstants::NofTriggerChambers();

  fEfficiencyObjects = new TObjArray(kNeffHistos);
  fEfficiencyObjects->SetOwner();

  TH1F *histoNum = 0x0, *histoDen=0x0;
  TString histoName = "";
  Int_t deType[2] = {AliMUONTriggerEfficiencyCells::kHboardCount,
		     AliMUONTriggerEfficiencyCells::kHslatCount};
  Int_t deTypeEff[2] = {kHboardEff, kHslatEff};
  Int_t index = -1;

  Bool_t rebuildEfficiency = kTRUE;

  for ( Int_t ide=0; ide<2; ide++){
    Int_t currDe = deType[ide];

    if ( useMeanValues && currDe == AliMUONTriggerEfficiencyCells::kHboardCount ) 
      continue;

    for(Int_t ich=0; ich<AliMpConstants::NofTriggerChambers(); ich++){
      histoName = fEfficiencyMap->GetHistoName(currDe, AliMUONTriggerEfficiencyCells::kAllTracks, ich);
      if ( fEfficiencyMap->GetHistoList() ) {
	histoDen = (TH1F*)fEfficiencyMap->GetHistoList()->FindObject(histoName.Data());
	if ( !histoDen ) {
	  AliWarning(Form("Histogram %s not found. Efficiency won't be re-build", histoName.Data()));
	  rebuildEfficiency = kFALSE;
	}
      }
      else {
	AliWarning("Histogram list not present: efficiency won't be re-build");
	rebuildEfficiency = kFALSE;
      }

      Int_t nTypes = ( rebuildEfficiency ) ? AliMUONTriggerEfficiencyCells::kNcounts-1 : 2; 
      for(Int_t hType=0; hType<nTypes; hType++){
	histoName = fEfficiencyMap->GetHistoName(currDe, hType, ich);

	histoNum = ( rebuildEfficiency ) ? 
	  (TH1F*)fEfficiencyMap->GetHistoList()->FindObject(histoName.Data()) :
	  fEfficiencyMap->GetOldEffHisto(currDe, ich, hType);
      
	if ( !histoNum ) {
	  AliWarning(Form("Histogram %s not found. Skip to next", histoName.Data()));
	  continue;
	}

	index = GetIndex(deTypeEff[ide], hType, ich);
	TGraphAsymmErrors* effGraph = GetEfficiencyGraph(histoNum,histoDen);
	fEfficiencyObjects->AddAt(effGraph, index);

	TString debugString = Form("Adding object %s",effGraph->GetName());
	if ( histoDen ) debugString += Form(" (%s/%s)",histoNum->GetName(),histoDen->GetName());
	debugString += Form(" index %i",index);
	AliDebug(5,debugString.Data());

	if ( useMeanValues && rebuildEfficiency ){
	  Int_t currChamber = ich + AliMpConstants::NofTrackingChambers();
	  histoName = fEfficiencyMap->GetHistoName(AliMUONTriggerEfficiencyCells::kHboardCount, hType, ich);
	  TH1F* auxHistoNum = (TH1F*)fEfficiencyMap->GetHistoList()->FindObject(histoName.Data())->Clone("tempHistoNum");
	  TH1F* auxHistoDen = (TH1F*)fEfficiencyMap->GetHistoList()->FindObject(histoName.Data())->Clone("tempHistoDen");
	  for ( Int_t iBinBoard = 1; iBinBoard<=AliMpConstants::NofLocalBoards(); iBinBoard++){
	    Int_t detElemId = AliMpDDLStore::Instance()->GetDEfromLocalBoard(iBinBoard, currChamber);
	    Int_t iBin = histoNum->FindBin(detElemId%100);

	    auxHistoNum->SetBinContent(iBinBoard, histoNum->GetBinContent(iBin));
	    auxHistoDen->SetBinContent(iBinBoard, histoDen->GetBinContent(iBin));
	  }
	  index = GetIndex(kHboardEff, hType, ich);
	  effGraph = GetEfficiencyGraph(auxHistoNum,auxHistoDen);
	  fEfficiencyObjects->AddAt(effGraph, index);
	  AliDebug(5,Form("Adding object %s (%s/%s) at index %i",effGraph->GetName(),histoNum->GetName(),histoDen->GetName(),index));
	  delete auxHistoNum;
	  delete auxHistoDen;
	} // if (useMeanValues)
      } // loop on count type
    } // loop on chamber
  } // loop on detection element histogram
}


//_____________________________________________________________________________
void AliMUONTriggerChamberEfficiency::DisplayEfficiency(Bool_t perSlat, Bool_t show2Dhisto)
{
  //
  /// Display calculated efficiency.
  //

  if ( !AliCDBManager::Instance()->GetDefaultStorage() ){
    AliWarning("Please set default CDB storage (needed for mapping).");
    return;
  }
  if ( AliCDBManager::Instance()->GetRun() < 0 ){
    AliWarning("Please set CDB run number (needed for mapping).");
    return;
  }

  TString baseCanName = "MTRtrigChEffCan";
  TString histoName;

  // Remove previously created canvases
  TCanvas* can = 0x0;
  TIter next(gROOT->GetListOfCanvases());
  while ((can = (TCanvas *)next())) {
    histoName = can->GetName();
    if ( histoName.Contains(baseCanName.Data()))
      delete can;
  }

  delete fDisplayList;
  fDisplayList = new TList();
  fDisplayList->SetOwner();

  TH2F* displayHisto = 0x0;

  AliMUONTriggerDisplay triggerDisplay;

  Int_t deType = ( perSlat ) ? kHslatEff : kHboardEff;
  AliMUONTriggerDisplay::EDisplayType displayType = ( perSlat ) ? 
    AliMUONTriggerDisplay::kDisplaySlats : AliMUONTriggerDisplay::kDisplayBoards;
  Int_t index = -1;

  TGraph* graph = 0x0;

  // Book histos
  for(Int_t ich=0; ich<AliMpConstants::NofTriggerChambers(); ich++){
    Int_t currCh = 11 + ich;
    for(Int_t hType=0; hType<AliMUONTriggerEfficiencyCells::kNcounts - 1; hType++){
      index = GetIndex(deType, hType, ich);
      graph = (TGraph*)fEfficiencyObjects->At(index);
      if ( ! graph ) continue;
      histoName = graph->GetName();
      histoName += baseCanName;
      Int_t shift = 10*(index%((AliMUONTriggerEfficiencyCells::kNcounts - 1)*
			       AliMpConstants::NofTriggerChambers()));
      can = new TCanvas(histoName.Data(), histoName.Data(), 100+shift, shift, 700, 700);
      can->SetRightMargin(0.14);
      can->SetLeftMargin(0.12);
      histoName.ReplaceAll(baseCanName.Data(), "Display");
      if ( show2Dhisto ) {
	displayHisto = 
	  (TH2F*)triggerDisplay.GetDisplayHistogram(graph, histoName,
						    displayType,
						    hType,currCh,histoName,
						    AliMUONTriggerDisplay::kShowZeroes);
	displayHisto->SetDirectory(0);
      }

      if ( show2Dhisto ){
	displayHisto->GetZaxis()->SetRangeUser(0.,1.);
	displayHisto->GetYaxis()->SetTitleOffset(1.4);
	displayHisto->SetStats(kFALSE);
	displayHisto->DrawCopy("COLZ");
	delete displayHisto;

	if ( deType == kHboardEff ){
	  histoName = Form("labels%iChamber%i", hType, currCh);
	  displayHisto = 
	    (TH2F*)triggerDisplay.GetBoardNumberHisto(histoName,currCh);
	  displayHisto->SetDirectory(0);
	  displayHisto->DrawCopy("textsame");
	  delete displayHisto;
	}
      }
      else {
	TGraphAsymmErrors* drawGraph = (TGraphAsymmErrors*)graph->Clone(histoName.Data());
	drawGraph->SetMarkerStyle(20);
	drawGraph->SetMarkerSize(0.7);
	drawGraph->SetMarkerColor(kRed);
	fDisplayList->Add(drawGraph);
	drawGraph->Draw("ap");
      } // loop on chamber
    } // loop on count type
  } // loop on chamber
}


//__________________________________________________________________________
Bool_t AliMUONTriggerChamberEfficiency::LowStatisticsSettings(Bool_t useMeanValues)
{
  //
  /// In case of low statistics, fill the local board efficiency with
  /// the average value of the RPC
  //

  if ( useMeanValues )
    AliInfo("Boards filled with the average efficiency of the RPC");

  FillFromList(useMeanValues);

  return kTRUE;
}


//__________________________________________________________________________
Int_t
AliMUONTriggerChamberEfficiency::GetIndex(Int_t histoType, Int_t countType, 
					  Int_t chamber) const
{
  //
  /// Return the index of the object in the array
  //

  const Int_t kNtypes = AliMUONTriggerEfficiencyCells::kNcounts - 1;
  const Int_t kNchambers = AliMpConstants::NofTriggerChambers();
  return 
    histoType * kNtypes * kNchambers + 
    chamber * kNtypes +
    countType;
  //countType * kNchambers +
  //chamber;
}


//_____________________________________________________________________________
TObject* AliMUONTriggerChamberEfficiency::GetEffObject(Int_t histoType, Int_t countType, 
                                                                 Int_t chamber)
{
  //
  /// Get efficiency object
  //
  Int_t index = GetIndex(histoType, countType, chamber);
  return fEfficiencyObjects->At(index);
}


//_____________________________________________________________________________
TGraphAsymmErrors* AliMUONTriggerChamberEfficiency::GetEfficiencyGraph(TH1* histoNum, TH1* histoDen)
{
  //
  /// Create the graph of efficiency from the numerator and denominator
  /// histogram in such a way to have a point set also for
  /// detection elements with efficiency = 0 or non calculated
  //

  TGraphAsymmErrors* auxGraph = 0x0;
  if ( histoDen ) auxGraph = new TGraphAsymmErrors(histoNum,histoDen,"cp");
  else auxGraph = new TGraphAsymmErrors(histoNum);

  Int_t npoints = histoNum->GetNbinsX();
  TGraphAsymmErrors* effGraph = new TGraphAsymmErrors(npoints);
  TString histoName = histoNum->GetName();
  histoName.ReplaceAll("Count","Eff");
  effGraph->SetName(histoName.Data());
  effGraph->SetTitle(histoName.Data());
  Double_t oldX, oldY;
  for ( Int_t ibin=0; ibin<npoints; ibin++ ) {
    Int_t foundPoint = -1;
    for (Int_t ipt=0; ipt<auxGraph->GetN(); ipt++) {
      auxGraph->GetPoint(ipt, oldX, oldY);
      if ( oldX > histoNum->GetBinLowEdge(ibin+1) &&
	   oldX < histoNum->GetBinLowEdge(ibin+2) ) {
	foundPoint = ipt;
	break;
      }
    }
    Double_t currX = ( foundPoint < 0 ) ? histoNum->GetBinCenter(ibin+1) : oldX; 
    Double_t currY = ( foundPoint < 0 ) ? 0. : oldY;
    Double_t eyl   = ( foundPoint < 0 ) ? 0. : auxGraph->GetErrorYlow(foundPoint);
    Double_t eyh   = ( foundPoint < 0 ) ? 0. : auxGraph->GetErrorYhigh(foundPoint);
    effGraph->SetPoint(ibin, currX, currY);
    effGraph->SetPointError(ibin, 0., 0., eyl, eyh);
  }

  delete auxGraph;

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