ROOT logo
//
// See implementation or Doxygen comments for more information
//
#ifndef ALIAODFORWARDMULT_H
#define ALIAODFORWARDMULT_H
/**
 * @file   AliAODForwardMult.h
 * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
 * @date   Wed Mar 23 13:58:00 2011
 * 
 * @brief  Per-event @f$ N_{ch}@f$ per @f$(\eta,\varphi)@f$ bin 
 * 
 * @ingroup pwglf_forward_aod
 * 
 */
#include <TObject.h>
#include <TH2D.h>
class TBrowser;
class TH1I;
/**
 * 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.
 *
 * @code 
 * TTree* GetAODTree()
 * { 
 *    TFile* file = TFile::Open("AliAODs.root","READ");
 *    TTree* tree = static_cast<TTree*>(file->Get("aodTree"));
 *    return tree;
 * }
 * 
 * void Analyse()
 * { 
 *   TH2D*              sum        = 0;                  // Summed hist
 *   TTree*             tree       = GetAODTree();       // AOD tree
 *   AliAODForwardMult* mult       = 0;                  // AOD object
 *   Int_t              nTriggered = 0;                  // # of triggered ev.
 *   Int_t              nWithVertex= 0;                  // # of ev. w/vertex
 *   Int_t              nAccepted  = 0;                  // # of ev. used
 *   Int_t              nAvailable = tree->GetEntries(); // How many entries
 *   Float_t            vzLow      = -10;                // Lower ip cut
 *   Float_t            vzHigh     =  10;                // Upper ip cut
 *   Int_t              mask       = AliAODForwardMult::kInel;// Trigger mask
 *   tree->SetBranchAddress("forward", &forward);        // Set the address
 * 
 *   for (int i = 0; i < nAvailable; i++) { 
 *     // Create sum histogram on first event - to match binning to input
 *     if (!sum) sum = static_cast<TH2D*>(mult->Clone("d2ndetadphi"));
 * 
 *     tree->GetEntry(i);
 * 
 *     // Other trigger/event requirements could be defined 
 *     if (!mult->IsTriggerBits(mask)) continue; 
 *     nTriggered++;
 *
 *     // Check if we have vertex 
 *     if (!mult->HasIpZ()) continue;
 *     nWithVertex++;
 * 
 *     // Select vertex range (in centimeters) 
 *     if (!mult->InRange(vzLow, vzHigh) continue; 
 *     nAccepted++;
 * 
 *     // Add contribution from this event
 *     sum->Add(&(mult->GetHistogram()));
 *   }
 * 
 *   // Get acceptance normalisation from underflow bins 
 *   TH1D* norm   = sum->ProjectionX("norm", 0, 1, "");
 *   // Project onto eta axis - _ignoring_underflow_bins_!
 *   TH1D* dndeta = sum->Projection("dndeta", 1, -1, "e");
 *   // Normalize to the acceptance 
 *   dndeta->Divide(norm);
 *   // Scale by the vertex efficiency 
 *   dndeta->Scale(Double_t(nWithVertex)/nTriggered, "width");
 *   // And draw the result
 *   dndeta->Draw();
 * }
 * @endcode   
 *     
 * The above code will draw the final @f$ dN_{ch}/d\eta@f$ for the
 * selected event class and vertex range
 *
 * The histogram can be used as input for other kinds of analysis too, 
 * like flow, event-plane, centrality, and so on. 
 *
 * @ingroup pwglf_forward 
 * @ingroup pwglf_forward_aod
 */
class AliAODForwardMult : public TObject
{
public:
  /** 
   * Bits of the trigger pattern
   */
  enum { 
    /** In-elastic collision - really MBOR*/
    kInel        = 0x0001, 
    /** In-elastic collision with at least one SPD tracklet */
    kInelGt0     = 0x0002, 
    /** Non-single diffractive collision - (V0AND||FASTOR>5) */
    kNSD         = 0x0004, 
    /** Empty bunch crossing */
    kEmpty       = 0x0008, 
    /** A-side trigger */
    kA           = 0x0010, 
    /** B(arrel) trigger */
    kB           = 0x0020, 
    /** C-side trigger */
    kC           = 0x0080,  
    /** Empty trigger */
    kE           = 0x0100,
    /** pileup from SPD */
    kPileUp      = 0x0200,    
    /** true NSD from MC */
    kMCNSD       = 0x0400,    
    /** Offline MB triggered */
    kOffline     = 0x0800,
    /** At least one SPD cluster */ 
    kNClusterGt0 = 0x1000,
    /** V0-AND trigger */
    kV0AND       = 0x2000, 
    /** Satellite event */
    kSatellite   = 0x4000,
    /** SPD outlier event */
    kSPDOutlier  = 0x8000,
    /** SPD pile-up */
    kPileupSPD   = 0x10000,
    /** Track pile-up */
    kPileupTrack = 0x20000,
    /** Out of bunch pileup */
    kPileupBC    = 0x40000
    
  };
  /** 
   * Bin numbers in trigger histograms 
   */
  enum { 
    kBinAll=1,
    kBinInel, 
    kBinInelGt0, 
    kBinNSD, 
    kBinV0AND,
    kBinA, 
    kBinB, 
    kBinC, 
    kBinE,
    kBinSatellite,
    kBinPileUp, 
    kBinMCNSD,
    kBinOffline,
    kBinNClusterGt0,
    kWithTrigger, 
    kWithVertex, 
    kAccepted
  };
  /** 
   * User bits of these objects (bits 14-23 can be used)
   */
  enum {
    /** Secondary correction maps where applied */
    kSecondary           = (1 << 14), 
    /** Vertex bias correction was applied */
    kVertexBias          = (1 << 15),  
    /** Acceptance correction was applied */
    kAcceptance          = (1 << 16), 
    /** Merging efficiency correction was applied */
    kMergingEfficiency   = (1 << 17),
    /** Signal in overlaps is the sum */
    kSum                 = (1 << 18), 
    /** Used eta dependent empirical correction - to be implemented */
    kEmpirical           = (1 << 19)
  };
  /**
   * Return codes of CheckEvent 
   */
  enum ECheckStatus {
    /** Event accepted by cuts */
    kGoodEvent = 0, 
    /** Event centrality not in range */
    kWrongCentrality, 
    /** Event trigger isn't in the supplied mask */
    kWrongTrigger, 
    /** Event is a pile-up event */
    kIsPileup, 
    /** Event has no interaction point information */
    kNoVertex, 
    /** Event interaction point is out of range */
    kWrongVertex
  };
    
  /** 
   * Default constructor 
   * 
   * Used by ROOT I/O sub-system - do not use
   */
  AliAODForwardMult();
  /** 
   * Constructor 
   * 
   * @param isMC Whether this was from MC or not 
   */
  AliAODForwardMult(Bool_t isMC);
  /** 
   * Destructor 
   */
  virtual ~AliAODForwardMult() {} // Destructor 
  /** 
   * Initialize 
   * 
   * @param etaAxis  Pseudo-rapidity axis
   */
  void Init(const TAxis& etaAxis);
  /** 
   * Get the @f$ d^2N_{ch}/d\eta d\phi@f$ histogram, 
   *
   * @return @f$ d^2N_{ch}/d\eta d\phi@f$ histogram, 
   */  
  const TH2D& GetHistogram() const { return fHist; } // Get histogram 
  /** 
   * Get the @f$ d^2N_{ch}/d\eta d\phi@f$ histogram, 
   *
   * @return @f$ d^2N_{ch}/d\eta d\phi@f$ histogram, 
   */  
  TH2D& GetHistogram() { return fHist; } // Get histogram 
  /** 
   * Get the trigger bits 
   * 
   * @return Trigger bits 
   */
  UInt_t GetTriggerBits() const { return fTriggers; } // Get triggers
  /** 
   * Set the trigger mask 
   * 
   * @param trg Trigger mask
   */
  void SetTriggerMask(UInt_t trg) { fTriggers = trg; } // Set triggers 
  /** 
   * Set bit(s) in trigger mask 
   * 
   * @param bits bit(s) to set 
   */
  void SetTriggerBits(UInt_t bits) { fTriggers |= bits; } // Set trigger bits
  /** 
   * Check if all bit(s) are set in the trigger mask.  Note, this is
   * an @e and between the bits.  If you need an @e or you should use
   * the member function IsTriggerOrBits
   * 
   * @param bits Bits to test for 
   * 
   * @return true if all enabled bits in the argument is also set in
   * the trigger word
   */
  Bool_t IsTriggerBits(UInt_t bits) const;
  /** 
   * Check if any of bit(s) are enabled in the trigger word.  This is
   * an @e or between the selected bits.  If you need and @a and you
   * should use the member function IsTriggerBits;
   * 
   * @param bits Bits to check for 
   * 
   * @return true if any of the enabled bits in the arguments are also
   * enabled in the trigger mask
   */
  Bool_t IsTriggerOrBits(UInt_t bits) const;
  /** 
   * Whether we have any trigger bits 
   *
   * @return true if we have some trigger 
   */
  Bool_t HasTrigger() const { return fTriggers != 0; } // Check for triggers
  /** 
   * Clear all data 
   * 
   * @param option  Passed on to TH2::Reset verbatim
   */
  void Clear(Option_t* option="");
  /** 
   * browse this object 
   * 
   * @param b Browser 
   */
  void Browse(TBrowser* b);
  /** 
   * This is a folder 
   * 
   * @return Always true
   */
  Bool_t IsFolder() const { return kTRUE; } // Always true 
  /** 
   * Check if the data has been secondary corrected by MC maps 
   * 
   * @return true if secondary corrected via MC maps
   */
  Bool_t IsSecondaryCorrected() const { return TestBit(kSecondary); }
  /** 
   * Check if vertex bias correction was applied 
   * 
   * @return true if MC based vertex bias was applied 
   */
  Bool_t IsVertexBiasCorrected() const { return TestBit(kVertexBias); }
  /** 
   * Check if acceptance correction (from dead strips) was applied 
   * 
   * @return true if acceptance correction was applied 
   */
  Bool_t IsAcceptanceCorrected() const { return TestBit(kAcceptance); }
  /** 
   * Check if merging efficiency (from MC) was applied 
   * 
   * @return true if merging efficiency was applied
   */
  Bool_t IsMergingEfficiencyCorrected() const { 
    return TestBit(kMergingEfficiency); }
  /** 
   * Check if an empirical correction was applied in the event level. 
   * 
   * @return True if the empirical correction was applied per event. 
   */
  Bool_t IsEmpiricalCorrected() const { return TestBit(kEmpirical); }
  /** 
   * Check if the output is the sum (not average) in regions of
   * overlap between detectors.
   * 
   * 
   * @return true if the sum (not average) is stored in overlap
   * regions.
   */
  Bool_t IsSumSignal() const { return TestBit(kSum); }
  /** 
   * Print content 
   * 
   * @param option Passed verbatim to TH2::Print 
   */
  void Print(Option_t* option="") const;
  /** 
   * Set the z coordinate of the interaction point
   * 
   * @param ipZ Interaction point z coordinate
   */
  void SetIpZ(Float_t ipZ) { fIpZ = ipZ; } // Set Ip's Z coordinate
  /** 
   * Set the center of mass energy per nucleon-pair.  This is stored 
   * in the (0,0) of the histogram 
   * 
   * @param sNN Center of mass energy per nucleon pair (GeV)
   */
  void SetSNN(UShort_t sNN); 
  /** 
   * Get the collision system number
   * - 0: Unknown 
   * - 1: pp
   * - 2: PbPb
   * 
   * @param sys Collision system number
   */
  void SetSystem(UShort_t sys);
  /** 
   * Set the event centrality 
   * 
   * @param c Centrality 
   */
  void SetCentrality(Float_t c) { fCentrality = c; }
  /** 
   * Set the z coordinate of the interaction point
   * 
   * @return Interaction point z coordinate
   */
  Float_t GetIpZ() const { return fIpZ; } // Get Ip's Z coordinate 
  /** 
   * Check if we have a valid z coordinate of the interaction point
   *
   * @return True if we have a valid interaction point z coordinate
   */
  Bool_t HasIpZ() const;
  /** 
   * Get the center of mass energy per nucleon pair (GeV)
   * 
   * @return Center of mass energy per nucleon pair (GeV)
   */
  UShort_t GetSNN() const;
  /** 
   * Get the collision system number
   * - 0: Unknown 
   * - 1: pp
   * - 2: PbPb
   * 
   * @return Collision system number
   */
  UShort_t GetSystem() const;
  /** 
   * Check if the z coordinate of the interaction point is within the
   * given limits.  Note that the convention used corresponds to the
   * convention used in ROOTs TAxis.
   * 
   * @param low  Lower cut (inclusive)
   * @param high Upper cut (exclusive)
   * 
   * @return true if @f$ low \ge ipz < high@f$ 
   */
  Bool_t InRange(Float_t low, Float_t high) const;
  /** 
   * Get the event centrality 
   * 
   * @return Centrality 
   */
  Float_t GetCentrality() const { return fCentrality; }
  /** 
   * Check if we have a valid centrality 
   * 
   * @return true if the centrality information is valid 
   */
  Bool_t  HasCentrality() const { return !(fCentrality  < 0); }
  /** 
   * Get the number of SPD clusters seen in @f$ |\eta|<1@f$ 
   * 
   * @return Number of SPD clusters seen
   */
  UShort_t GetNClusters() const { return fNClusters; }
  /** 
   * Set the number of SPD clusters seen in @f$ |\eta|<1@f$ 
   * 
   * @param n Number of SPD clusters 
   */
  void SetNClusters(UShort_t n) { fNClusters = n; }
  /** 
   * Get the name of the object 
   * 
   * @return Name of object 
   */
  const Char_t* GetName() const { return (fIsMC ? "ForwardMC" : "Forward"); }
  /** 
   * 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.
   * 
   * Note, for data with out a centrality estimate (e.g., pp), one
   * must pass equal centrality cuts, or no data will be accepted.  In
   * other words, for pp data, always pass cMin=0, cMax=0
   *
   * If a histogram is passed in the last parameter, then that
   * histogram is filled with the trigger bits. 
   * 
   * @param triggerMask  Trigger mask
   * @param vzMin        Minimum @f$ v_z@f$ (in centimeters)
   * @param vzMax        Maximum @f$ v_z@f$ (in centimeters) 
   * @param cMin         Minimum centrality (in percent)
   * @param cMax         Maximum centrality (in percent)
   * @param hist         Histogram to fill 
   * @param status       Histogram to fill 
   * @param removePileup If true, do not accept pile-up events (default)
   * 
   * @return @c true if the event meets the requirements 
   */
  Bool_t CheckEvent(Int_t    triggerMask=kInel,
		    Double_t vzMin=-10, Double_t vzMax=10,
		    UShort_t cMin=0,    UShort_t cMax=100, 
		    TH1*     hist=0,
		    TH1*     status=0,
		    Bool_t   removePileup=true) const;
  /** 
   * Get a string correspondig to the trigger mask
   * 
   * @param mask Trigger mask 
   * 
   * @return Static string (copy before use)
   */
  static const Char_t* GetTriggerString(UInt_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.
   * 
   * @param name Name of the histogram 
   * @param mask Trigger mask 
   * 
   * @return Newly allocated histogram 
   */
  static TH1I* MakeTriggerHistogram(const char* name="triggers",
				    Int_t mask=0);
  /** 
   * Make a histogram to record status in. 
   *
   * The bins defined by the status enumeration in this class.  
   * 
   * @param name Name of the histogram 
   * 
   * @return Newly allocated histogram 
   */
  static TH1I* MakeStatusHistogram(const char* name="status");
  /** 
   * Utility function to make a trigger mask from the passed string. 
   * 
   * The string is a comma or space seperated list of case-insensitive
   * strings
   * 
   * - INEL 
   * - INEL>0
   * - NSD 
   * 
   * @param what Which triggers to put in the mask. 
   * 
   * @return The generated trigger mask. 
   */
  static UInt_t MakeTriggerMask(const char* what);
protected: 
  /** From MC or not */
  Bool_t   fIsMC;       // Whether this is from MC 
  /** Histogram of @f$d^2N_{ch}/(d\eta d\phi)@f$ for this event */
  TH2D     fHist;       // Histogram of d^2N_{ch}/(deta dphi) for this event
  /** Trigger bits */
  UInt_t   fTriggers;   // Trigger bit mask 
  /** Interaction point @f$z@f$ coordinate */
  Float_t  fIpZ;        // Z coordinate of the interaction point
  /** Centrality */
  Float_t  fCentrality; // Event centrality 
  /** Number of clusters in @f$|\eta|<1@f$ */
  UShort_t fNClusters;  // Number of SPD clusters in |eta|<1
  /** Invalid value for interaction point @f$z@f$ coordiante */
  static const Float_t fgkInvalidIpZ; // Invalid IpZ value 
  ClassDef(AliAODForwardMult,5); // AOD forward multiplicity 
};

//____________________________________________________________________
inline Bool_t
AliAODForwardMult::InRange(Float_t low, Float_t high) const 
{
  return HasIpZ() && fIpZ >= low && fIpZ < high;
}

//____________________________________________________________________
inline Bool_t 
AliAODForwardMult::IsTriggerBits(UInt_t bits) const 
{ 
  return HasTrigger() && ((fTriggers & bits) == bits); 
}
//____________________________________________________________________
inline Bool_t 
AliAODForwardMult::IsTriggerOrBits(UInt_t bits) const 
{ 
  return HasTrigger() && ((fTriggers & bits) != 0);
}

#endif
// Local Variables:
//  mode: C++
// End:

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