ROOT logo
//
// Class that contains the forward multiplicity data per event 
//
// This class contains a histogram of 
// @f[
//   \frac{d^2N_{ch}}{d\eta d\phi}\quad,
// @f]
// as well as a trigger mask for each analysed event.  
// 
// The eta acceptance of the event is stored in the underflow bins of
// the histogram.  So to build the final histogram, one needs to
// correct for this acceptance (properly weighted by the events), and
// the vertex efficiency.  This simply boils down to defining a 2D
// histogram and summing the event histograms in that histogram.  One
// should of course also do proper book-keeping of the accepted event.
//
#include "AliAODForwardMult.h"
#include <TBrowser.h>
#include <iostream>
#include <TMath.h>
#include <TObjString.h>
#include <TObjArray.h>
#include "AliLog.h"
ClassImp(AliAODForwardMult)
#ifdef DOXY_INPUT
; // For Emacs 
#endif

//____________________________________________________________________
const Float_t AliAODForwardMult::fgkInvalidIpZ = 1e6;

//____________________________________________________________________
AliAODForwardMult::AliAODForwardMult()
  : fIsMC(false),
    fHist(),
    fTriggers(0),
    fIpZ(fgkInvalidIpZ), 
    fCentrality(-1),				
    fNClusters(0)
{
  // 
  // Constructor 
  // 
}

//____________________________________________________________________
AliAODForwardMult::AliAODForwardMult(Bool_t isMC) 
  : fIsMC(isMC),
    fHist("forwardMult", "d^{2}N_{ch}/d#etad#varphi in the forward regions", 
	  200, -4, 6, 20, 0, 2*TMath::Pi()),
    fTriggers(0),
    fIpZ(fgkInvalidIpZ), 
    fCentrality(-1),				
    fNClusters(0)
{
  // 
  // Constructor 
  // 
  // Parameters: 
  //  isMC   If set to true this is for MC data (effects branch name)
  // 
  fHist.SetXTitle("#eta");
  fHist.SetYTitle("#varphi [radians]");
  fHist.SetZTitle("#frac{d^{2}N_{ch}}{d#etad#varphi}");
  fHist.SetDirectory(0);
  fHist.Sumw2();
}

//____________________________________________________________________
void
AliAODForwardMult::Init(const TAxis& etaAxis)
{
  // Initialize the histogram with an eta axis 
  // 
  // Parameters: 
  //   etaAxis       Eta axis to use 
  // 
  fHist.SetBins(etaAxis.GetNbins(), etaAxis.GetXmin(), etaAxis.GetXmax(), 
		20, 0, 2*TMath::Pi());
}

//____________________________________________________________________
void
AliAODForwardMult::Clear(Option_t* option)
{
  // Clear (or reset) internal values 
  // 
  // Parameters: 
  //  option   Passed to TH1::Reset 
  // 
  fHist.Reset(option);
  fTriggers  = 0;
  fIpZ       = fgkInvalidIpZ;
  fNClusters = 0;
}
//____________________________________________________________________
void
AliAODForwardMult::SetSNN(UShort_t snn)
{
  // set the center of mass energy per nucleon pair (GeV). 
  // This is stored in bin (0,0) of the histogram 
  // 
  // Parameters: 
  //   sNN   Center of mass energy per nuclean 
  fHist.SetBinContent(0,0,snn);
}
//____________________________________________________________________
void
AliAODForwardMult::SetSystem(UShort_t sys)
{
  // set the center of mass energy per nucleon pair (GeV). 
  // This is stored in bin (N+1,0) of the histogram 
  // 
  // Parameters: 
  //   sys   Collision system number 
  fHist.SetBinContent(fHist.GetNbinsX()+1,0,sys);
}

//____________________________________________________________________
Bool_t
AliAODForwardMult::HasIpZ() const
{
  // Check if we have valid z coordinate of the interaction point 
  // 
  // Return:
  //   true if the z coordinate of the interaction point is valid 
  // 
  return TMath::Abs(fIpZ - fgkInvalidIpZ) > 1;
}

//____________________________________________________________________
UShort_t
AliAODForwardMult::GetSNN() const
{
  // set the center of mass energy per nucleon pair (GeV). 
  // This is stored in bin (0,0) of the histogram 
  // 
  // Parameters: 
  //   sNN   Center of mass energy per nuclean 
  return UShort_t(fHist.GetBinContent(0,0));
}

//____________________________________________________________________
UShort_t
AliAODForwardMult::GetSystem() const
{
  // set the center of mass energy per nucleon pair (GeV). 
  // This is stored in bin (N+1,0) of the histogram 
  // 
  // Parameters: 
  //   sNN   Center of mass energy per nuclean 
  return UShort_t(fHist.GetBinContent(fHist.GetNbinsX()+1,0));
}

//____________________________________________________________________
void
AliAODForwardMult::Browse(TBrowser* b)
{
  // Browse this object 
  // 
  // Parameters: 
  //   b   Browser to use 
  static TObjString ipz;
  static TObjString trg;
  static TObjString cnt;
  static TObjString ncl;
  ipz = Form("ip_z=%fcm", fIpZ);
  trg = GetTriggerString(fTriggers);
  cnt = Form("%+6.1f%%", fCentrality);
  ncl = Form("%d clusters", fNClusters);
  b->Add(&fHist);
  b->Add(&ipz);
  b->Add(&trg);
  b->Add(&cnt);
  b->Add(&ncl);
}

namespace { 
  void AppendAnd(TString& trg, const TString& what)
  {
    if (!trg.IsNull()) trg.Append(" & ");
    trg.Append(what);
  }
}
//____________________________________________________________________
const Char_t*
AliAODForwardMult::GetTriggerString(UInt_t mask)
{
  // Get a string that describes the triggers 
  // 
  // Parameters: 
  //   mask  Bit pattern of triggers 
  // Return: 
  //   Character string representation of mask 
  static TString trg;
  trg = "";
  if ((mask & kInel)        != 0x0) AppendAnd(trg, "MBOR");
  if ((mask & kInelGt0)     != 0x0) AppendAnd(trg, "INEL>0");
  if ((mask & kNSD)         != 0x0) AppendAnd(trg, "MBAND");
  if ((mask & kV0AND)       != 0x0) AppendAnd(trg, "V0AND");
  if ((mask & kA)           != 0x0) AppendAnd(trg, "A");
  if ((mask & kB)           != 0x0) AppendAnd(trg, "B");
  if ((mask & kC)           != 0x0) AppendAnd(trg, "C");
  if ((mask & kE)           != 0x0) AppendAnd(trg, "E");
  if ((mask & kMCNSD)       != 0x0) AppendAnd(trg, "MCNSD");
  if ((mask & kNClusterGt0) != 0x0) AppendAnd(trg, "NCluster>0");
  if ((mask & kSatellite)   != 0x0) AppendAnd(trg, "Satellite");
  if ((mask & kOffline)     != 0x0) AppendAnd(trg, "Offline");
  return trg.Data();
}
  
//____________________________________________________________________
TH1I*
AliAODForwardMult::MakeTriggerHistogram(const char* name, Int_t mask) 
{
  // 
  // Make a histogram to record triggers in. 
  //
  // The bins defined by the trigger enumeration in this class.  One
  // can use this enumeration to retrieve the number of triggers for
  // each class.
  // 
  // Parameters:
  //    name Name of the histogram 
  // 
  // Return:
  //    Newly allocated histogram 
  //
  TString sel("");
  TString andSel("");
  if (mask > 0) {
    sel    = GetTriggerString(mask);
    andSel = GetTriggerString(mask & ~kB);
    andSel.Prepend(" & ");
  }
  TH1I* ret = new TH1I(name, "Triggers", kAccepted+1, -.5, kAccepted+.5);
  ret->SetYTitle("Events");
  ret->SetFillColor(kRed+1);
  ret->SetFillStyle(3001);
  ret->GetXaxis()->SetBinLabel(kBinAll,         "All events");
  ret->GetXaxis()->SetBinLabel(kBinB,           Form("B (Coll.)%s", 
						     andSel.Data()));
  ret->GetXaxis()->SetBinLabel(kBinA,           Form("A%s", andSel.Data()));
  ret->GetXaxis()->SetBinLabel(kBinC,           Form("C%s", andSel.Data()));
  ret->GetXaxis()->SetBinLabel(kBinE,           Form("E%s", andSel.Data()));
  ret->GetXaxis()->SetBinLabel(kBinInel,        "Coll. & MBOR");
  ret->GetXaxis()->SetBinLabel(kBinInelGt0,     "Coll. & MBOR&&nTracklet>0");
  ret->GetXaxis()->SetBinLabel(kBinNSD,         "Coll. & V0AND||FASTOR>5");
  ret->GetXaxis()->SetBinLabel(kBinV0AND,       "Coll. & V0AND");
  ret->GetXaxis()->SetBinLabel(kBinMCNSD,       "NSD (MC truth)");
  ret->GetXaxis()->SetBinLabel(kBinSatellite,   "Satellite");
  ret->GetXaxis()->SetBinLabel(kBinPileUp,      "w/Pileup");
  ret->GetXaxis()->SetBinLabel(kBinOffline,     "w/Offline");
  ret->GetXaxis()->SetBinLabel(kBinNClusterGt0, "w/N_{cluster}>1");
  ret->GetXaxis()->SetBinLabel(kWithVertex,     "w/Vertex");
  ret->GetXaxis()->SetBinLabel(kWithTrigger,    Form("w/Selected trigger (%s)",
						     sel.Data()));
  ret->GetXaxis()->SetBinLabel(kAccepted,       "Accepted by cut");
  ret->GetXaxis()->SetNdivisions(kAccepted, false);
  ret->SetStats(0);

  return ret;
}

//____________________________________________________________________
TH1I*
AliAODForwardMult::MakeStatusHistogram(const char* name) 
{
  // 
  // Make a histogram to record status in. 
  //
  // The bins defined by the status enumeration in this class.  
  // 
  // Parameters:
  //    name Name of the histogram 
  // 
  // Return:
  //    Newly allocated histogram 
  //
  TH1I* ret = new TH1I(name, "Event selection status", 
		       kWrongVertex+1, -.5, kWrongVertex+.5);
  ret->SetYTitle("Events");
  ret->SetFillColor(kBlue+1);
  ret->SetFillStyle(3001);
  ret->GetXaxis()->SetBinLabel(kGoodEvent+1,       "Good");
  ret->GetXaxis()->SetBinLabel(kWrongCentrality+1, "Out-of-range centrality");
  ret->GetXaxis()->SetBinLabel(kWrongTrigger+1,    "Wrong trigger");
  ret->GetXaxis()->SetBinLabel(kIsPileup+1,        "Pile-up");
  ret->GetXaxis()->SetBinLabel(kNoVertex+1,        "No IP_{z}");
  ret->GetXaxis()->SetBinLabel(kWrongVertex+1,     "Out-or-range IP_{z}");
  ret->GetXaxis()->SetNdivisions(kWrongVertex, false);
  ret->SetStats(0);
  return ret;
}

//____________________________________________________________________
UInt_t 
AliAODForwardMult::MakeTriggerMask(const char* what)
{
  UShort_t    trgMask = 0;
  TString     trgs(what);
  trgs.ToUpper();
  TObjArray*  parts = trgs.Tokenize("&");
  TObjString* trg;
  TIter       next(parts);
  while ((trg = static_cast<TObjString*>(next()))) { 
    TString s(trg->GetString());
    s.Strip(TString::kBoth, ' ');
    s.ToUpper();
    if      (s.IsNull()) continue;
    if      (s.CompareTo("INEL")       == 0) trgMask |= kInel;
    else if (s.CompareTo("MBOR")       == 0) trgMask |= kInel;
    else if (s.CompareTo("INEL>0")     == 0) trgMask |= kInelGt0;
    else if (s.CompareTo("INELGT0")    == 0) trgMask |= kInelGt0;
    else if (s.CompareTo("MBAND")      == 0) trgMask |= kNSD;
    else if (s.CompareTo("NSD")        == 0) trgMask |= kV0AND;
    else if (s.CompareTo("V0AND")      == 0) trgMask |= kV0AND;
    else if (s.CompareTo("MCNSD")      == 0) trgMask |= kMCNSD;
    else if (s.CompareTo("B")          == 0) trgMask |= kB;
    else if (s.CompareTo("A")          == 0) trgMask |= kA;
    else if (s.CompareTo("C")          == 0) trgMask |= kC;
    else if (s.CompareTo("SAT")        == 0) trgMask |= kSatellite;
    else if (s.CompareTo("E")          == 0) trgMask |= kE;
    else if (s.CompareTo("NCLUSTER>0") == 0) trgMask |= kNClusterGt0;
    else if (s.CompareTo("CENT")       == 0) trgMask |= kInel;
    else if (s.CompareTo("OFFLINE")    == 0) trgMask |= kOffline;
    // trgMask &= ~(kInel|kInelGt0|kNSD|kV0AND|kMCNSD);
    else 
      AliWarningGeneral("MakeTriggerMask", 
			Form("Unknown trigger %s", s.Data()));
  }
  delete parts;
  return trgMask;
}

//____________________________________________________________________
Bool_t
AliAODForwardMult::CheckEvent(Int_t    triggerMask,
			      Double_t vzMin, Double_t vzMax,
			      UShort_t cMin,  UShort_t cMax, 
			      TH1*     hist,  TH1*     status,
			      Bool_t   removePileup) const
{
  // 
  // Check if event meets the passses requirements.   
  //
  // It returns true if @e all of the following is true 
  //
  // - The trigger is within the bit mask passed.
  // - The vertex is within the specified limits. 
  // - The centrality is within the specified limits, or if lower
  //   limit is equal to or larger than the upper limit.
  // 
  // If a histogram is passed in the last parameter, then that
  // histogram is filled with the trigger bits. 
  // 
  // Parameters:
  //    triggerMask  Trigger mask
  //    vzMin        Minimum @f$ v_z@f$ (in centimeters)
  //    vzMax        Maximum @f$ v_z@f$ (in centimeters) 
  //    cMin         Minimum centrality (in percent)
  //    cMax         Maximum centrality (in percent)
  //    hist         Histogram to fill 
  // 
  // Return:
  //    @c true if the event meets the requirements 
  //
  if (cMin < cMax && (cMin > fCentrality || cMax <= fCentrality)) {
    if (status) status->Fill(kWrongCentrality);
    return false;
  }

  if (hist) { 
    Int_t tmp = triggerMask & ~kB;
    hist->AddBinContent(kBinAll);
    if (IsTriggerBits(kB|tmp))          hist->AddBinContent(kBinB);
    if (IsTriggerBits(kA|tmp))          hist->AddBinContent(kBinA);
    if (IsTriggerBits(kC|tmp))          hist->AddBinContent(kBinC);
    if (IsTriggerBits(kE|tmp))          hist->AddBinContent(kBinE);
    if (IsTriggerBits(kB|kInel))        hist->AddBinContent(kBinInel);
    if (IsTriggerBits(kB|kInelGt0))     hist->AddBinContent(kBinInelGt0);
    if (IsTriggerBits(kB|kNSD))         hist->AddBinContent(kBinNSD);
    if (IsTriggerBits(kB|kV0AND))       hist->AddBinContent(kBinV0AND);
    if (IsTriggerBits(kPileUp))         hist->AddBinContent(kBinPileUp);
    if (IsTriggerBits(kMCNSD))          hist->AddBinContent(kBinMCNSD);
    if (IsTriggerBits(kOffline))        hist->AddBinContent(kBinOffline);
    if (IsTriggerBits(kNClusterGt0))    hist->AddBinContent(kBinNClusterGt0);
    if (IsTriggerBits(kSatellite))      hist->AddBinContent(kBinSatellite);
    if (IsTriggerBits(triggerMask) && !IsTriggerBits(kB|tmp))
      Warning("CheckEvent", "event: 0x%x, mask: 0x%x, tmp: 0x%x, tmp|b: 0x%x",
	     fTriggers, triggerMask, tmp, tmp|kB);
  }
  // Check if we have an event of interest. 
  Int_t mask = triggerMask; //|kB
  if (!IsTriggerBits(mask)) { 
    if (status) status->Fill(kWrongTrigger);
    return false;
  }
  
  // Check for pileup
  if (IsTriggerBits(kPileUp)) {
    if (status) status->Fill(kIsPileup);
    if (removePileup) return false;
  }
  if (hist) hist->AddBinContent(kWithTrigger);
  
  // Check that we have a valid vertex
  if (vzMin < vzMax && !HasIpZ()) {
    if (status) status->Fill(kNoVertex);
    return false;
  }
  if (hist) hist->AddBinContent(kWithVertex);

  // Check that vertex is within cuts 
  if (vzMin < vzMax && !InRange(vzMin, vzMax)) {
    if (status) status->Fill(kWrongVertex);
    return false;
  }
  if (hist) hist->AddBinContent(kAccepted);
  
  if (status) status->Fill(kGoodEvent);
  return true;
}

//____________________________________________________________________
void
AliAODForwardMult::Print(Option_t* option) const
{
  // Print this object 
  // 
  // Parameters: 
  //  option   Passed to TH1::Print 
  fHist.Print(option);
  UShort_t sys = GetSystem();
  TString  str = "unknown";
  switch (sys) { 
  case 1:  str = "pp"; break;
  case 2:  str = "PbPb"; break;
  case 3:  str = "pPb" ; break;
  }
  std::cout << "Ipz:         " << fIpZ << "cm " << (HasIpZ() ? "" : "in") 
	    << "valid\n"
	    << "Triggers:    " << GetTriggerString(fTriggers)  << "\n"
	    << "sNN:         " << GetSNN() << "GeV\n" 
	    << "System:      " << str << "\n"
	    << "Centrality:  " << fCentrality << "%" 
	    << std::endl;
}

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