ROOT logo
//
// Task to analyse the AOD for for dN/deta in the base regions 
//
#ifndef ALIBASEDNDETATASK_H
#define ALIBASEDNDETATASK_H
/**
 * @file   AliBasedNdetaTask.h
 * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
 * @date   Wed Mar 23 13:58:12 2011
 * 
 * @brief  
 * 
 * @ingroup pwglf_forward_dndeta
 * 
 */
#include "AliBaseAODTask.h"
#include <AliAnalysisUtils.h>
class TAxis;
class TList;
class TH2D;
class TH2F;
class TH1D;
class TH1I;
class AliAODEvent;
class AliAODForwardMult;
class TObjArray;

/** 
 * @defgroup pwglf_forward_tasks_dndeta dN/deta tasks 
 *
 * Code to produce @f$ dN/d\eta@f$
 *
 * @ingroup pwglf_forward_tasks 
 */
/**
 * @defgroup pwglf_forward_dndeta dN/deta
 *
 * @f$ dN/d\eta@f$ code 
 *
 * @ingroup pwglf_forward_topical
 */
/**
 * Base class for tasks to determine @f$ dN/d\eta@f$ 
 *
 * @ingroup pwglf_forward_tasks_dndeta
 * @ingroup pwglf_forward_dndeta
 */
class AliBasedNdetaTask : public AliBaseAODTask
{
public:
  /** 
   * Bit mask values of the normalisation scheme 
   */
  enum {
    /** Only normalize to accepted events */
    kNone = 0,
    /** 
     * Do the full normalisation 
     * @f[ 
     *   N = (N_A-N_A/N_V(N_T-N_V)) = \frac{1}{\epsilon_V}N_A
     * @f]
     */
    kEventLevel = 0x1,
    /** 
     * Dummy 
     */
    kDummy = 0x2, 
    /** 
     * Correct for background events (A+C-E)
     */
    kBackground = 0x4,
    /**
     * Correct for the trigger efficiency
     *
     * @f[
     *   N = N_A \frac{1}{\epsilon_X}
     * @f]
     */
    kTriggerEfficiency = 0x8,
    /** 
     * Correct using zero-bin efficiency only 
     */
    kZeroBin = 0x10,
    /**
     * Do the full correction
     */
    kFull = kEventLevel | kBackground | kTriggerEfficiency,
  };
  /**
   * Mask for selecting pile-up 
   */
  enum EPileupMask { 
    /**
     * Use the flag from AOD 
     */
    kPileupNormal = 0, 
    /** 
     * Check the pile-up flag from SPD 
     */
    kPileupSPD    = 0x1, 
    /** 
     * Check the pileup flag from tracks 
     */
    kPileupTrk    = 0x2, 
    /**
     * Check the out-of-bunch pileup flag 
     */
    kPileupBC     = 0x4, 
    /**
     * Use the flag from AOD 
     */
    kPileupFull   = 0x8,
    /** 
     * Also accept pileup 
     */
    kPileupIgnore = 0x10,
    /** 
     * Use analysis utility class 
     */
    kPileupUtil = 0x20 
  };

  enum ECentralityEstimator { 
    kCentNone,
    kCentDefault,   // What ever stored in AOD 
    kCentV0M,       // VZERO multiplcity 
    kCentV0A,       // VZERO-A 
    kCentV0A123,    // VZERO-A 
    kCentV0C,       // VZERO-C
    kCentFMD,       // FMD
    kCentTrk,       // Tracks
    kCentTkl,       // Tracklets
    kCentCL0,       // Clusters in SPD-0
    kCentCL1,       // Clusters in SPD-1
    kCentCND,       // Clusters
    kCentZNA,       // ZDC neutrons A-side
    kCentZNC,       // ZDC neutrons C-side
    kCentZPA,       // ZDC protons A-side
    kCentZPC,       // ZDC protons C-side
    kCentNPA,       // ?
    kCentV0MvsFMD,  // V0M vs FMD
    kCentTklvsV0M,  // Tracks vs V0M
    kCentZEMvsZDC,  // ZDC veto vs neutrons
    kCentTrue = 0x100, 
    kCentEq   = 0x200
  };
  /** 
   * Constructor 
   * 
   */
  AliBasedNdetaTask();
  /** 
   * Constructor
   * 
   * @param name    Name of task 
   */
  AliBasedNdetaTask(const char* name);
  /**
   * Destructor
   * 
   */
  virtual ~AliBasedNdetaTask();
  
  /** 
   * @{ 
   * @name Task configuration 
   */
  /** 
   * Set the debug level 
   * 
   * @param level Debug level
   */
  virtual void SetDebugLevel(Int_t level);
  /** 
   * Set whether to correct for empty bins when projecting on the X axis. 
   * 
   * @param use Whether to correct for empty bins 
   */
  void SetCorrEmpty(Bool_t use) { fCorrEmpty = use; }
  /** 
   * Set whether to use the ROOT TH2::ProjectionX method when
   * projecting on the X axis.
   * 
   * @param use Whether to use TH2::ProjectionX
   */
  void SetUseROOTProjectX(Bool_t use) { fUseROOTProj = use; }
  /** 
   * Trigger efficiency for selected trigger(s)
   * 
   * @param e Trigger efficiency 
   */
  void SetTriggerEff(Double_t e) { fTriggerEff = e; } 
  /** 
   * Trigger efficiency for 0-bin for selected trigger(s)
   * 
   * @param e Trigger efficiency for 0-bin
   */
  void SetTriggerEff0(Double_t e) { fTriggerEff0 = e; } 
  /**
   * Set satellite vertex flag
   *
   * @param satVtx
   */
  void SetSatelliteVertices(Bool_t satVtx) { fSatelliteVertices = satVtx; }
  /** 
   * Set which centrality estimator to use - if not set, use the one
   * from the Forward AOD object.  Note, the string is diagnosed, and
   * if found not to be valid, then a the program terminates via a
   * Fatal.
   *
   * @param method String definining centrality method (case insensitive)
   * Typical values are 
   * - V0M (e.g., PbPb)
   * - V0A 
   * - V0C 
   * - FMD 
   * - ZNA (e.g., pPb) 
   * - ZNC (e.g., Pbp)
   * - ZPA 
   * - ZPC 
   * - ZEMvsZDC
   *
   * @return true if @a method is valid estimator 
   */
  Bool_t SetCentralityMethod(const TString& method);
  /**
   * Get reference to the analysis utility 
   *
   * @return reference to the AliAnalysisUtils object
   */
  AliAnalysisUtils& GetAnalysisUtils() { return fAnaUtil; }
  /** 
   * Get a string representing the normalization scheme 
   * 
   * @param scheme Normalization scheme bits 
   * 
   * @return String representation 
   */
  static const Char_t* NormalizationSchemeString(UShort_t scheme);
  /** 
   * Parse a string representing the normalization scheme 
   * 
   * @param what String of the normalization scheme 
   * 
   * @return normalization scheme bits
   */
  static UShort_t ParseNormalizationScheme(const Char_t* what);
  /** 
   * Setthe normalisation scheme to use 
   * 
   * @param scheme Normalisation scheme 
   */
  void SetNormalizationScheme(UShort_t scheme);
  /** 
   * Space, pipe, or comma separated list of options
   * 
   * @param what List of options 
   */
  void SetNormalizationScheme(const char* what);
  /** 
   * Set the mask for checking pile-up events 
   *
   * @param bits A bit pattern of EPileupMask bits 
   */
  void SetPileupMask(UShort_t bits) { fPileupMask = bits; }
  /** 
   * Filename of final MC correction
   * 
   * @param filename filename
   */
  void SetMCFinalCorrFilename(const char* filename) { 
    fFinalMCCorrFile.Clear();
    fFinalMCCorrFile.Append(filename); 
  }
  /** 
   * Flag whether we should disregard SPD outlier events, as flagged
   * by AliTriggerAnalysis::IsSPDClusterVsTrackletBG. The default
   * setting for this flags events as outliers if
   *
   @f[ 
   N_{cluster} > 65 + 4 N_{tracklet}
   @f] 
   * 
   * where @f$N_{cluster}@f$ is the total number of clusters in both
   * SPD layers, and @f$N_{tracklet}@f$ is the total number of
   * tracklets in the SPD.
   * 
   * @param check If true, then check for SPD outlier events before processing. 
   */
  void SetCheckSPDOutlier(Bool_t check=true) { fCheckSPDOutlier = check; }
  /** @} */
  /** 
   * Print information 
   * 
   * @param option Not used
   */
  void Print(Option_t* option="") const;
  /** @{ 
   *  @name Task interface 
   */
  /** 
   * Create output objects.  
   *
   * This is called once per slave process 
   *
   * @return true on success
   */
  virtual Bool_t Book();
  /** 
   * Process a single event 
   * 
   * @return true on success
   */
  virtual Bool_t Event(AliAODEvent& aod);
  /** 
   * Called at end of event processing.
   *
   * This is called once in the master 
   * 
   * @return true on success
   */
  virtual Bool_t Finalize();
  /* @} */

  /** 
   * @{ 
   * @name Services member functions 
   */
  /** 
   * Project onto the X axis 
   * 
   * @param h         2D histogram 
   * @param name      New name 
   * @param firstbin  First bin to use 
   * @param lastbin   Last bin to use
   * @param useROOT   Use TH2::ProjectionX instead of custom code 
   * @param corr      Whether to do corrections or not 
   * @param error     Whether to calculate errors
   * 
   * @return Newly created histogram or null
   */
  static TH1D* ProjectX(const TH2D* h, 
			const char* name,
			Int_t firstbin, 
			Int_t lastbin, 
			bool  useROOT=false,
			bool  corr=true,
			bool  error=true);
  /** 
   * Scale the copy of the 2D histogram by coverage in supplied 1D histogram
   *  
   * @param copy Data to scale 
   * @param norm Coverage histogram 
   */
  static void ScaleToCoverage(TH2D* copy, const TH1D* norm);
  /** 
   * Scale the copy of the 1D histogram by coverage in supplied 1D histogram
   *  
   * @param copy Data to scale 
   * @param norm Coverage histogram 
   */
  static void ScaleToCoverage(TH1D* copy, const TH1D* norm);
  /** 
   * Set histogram graphical options, etc. 
   * 
   * @param h       Histogram to modify
   * @param colour  Marker color 
   * @param marker  Marker style
   * @param title   Title of histogram
   * @param ytitle  Title on y-axis. 
   */
  static void SetHistogramAttributes(TH1D* h, Int_t colour, Int_t marker, 
				     const char* title, 
				     const char* ytitle=0);
  /** @} */

  /**
   * Marker styles 
   */
  enum { 
    kSolid        = 0x000, 
    kHollow       = 0x001, 
    kCircle       = 0x002,
    kSquare       = 0x004, 
    kUpTriangle   = 0x006, 
    kDownTriangle = 0x008, 
    kDiamond      = 0x00a,
    kCross        = 0x00c,
    kStar         = 0x00e
  };
  /** 
   * Get the marker style from option bits
   * 
   * @param bits Option bits 
   * 
   * @return Marker style 
   */
  static Int_t GetMarkerStyle(UShort_t bits);
  /** 
   * Get the marker option bits from a style 
   * 
   * @param style Style
   * 
   * @return option bits
   */
  static UShort_t GetMarkerBits(Int_t style);
  /** 
   * Flip an option bit 
   * 
   * @param style Style parameter
   * 
   * @return New style 
   */
  static Int_t FlipHollowStyle(Int_t style);
  /**
   * Setter of empirical correction
   *
   * @param h 2D histogram of ratio of nominal @f$ 1/N
   * dN_{ch}/d\eta@f$ to satellite @f$ 1/N dN_{ch}/d\eta@f$ in PbPb
   * collisions as a function of @f$\eta@f$ and interaction point
   * Z-coordinate @f$ IP_{z}@f$
   */
  void SetGlobalEmpiricalcorrection(TH2D* h){fEmpiricalCorrection=h;}
protected:
  /** 
   * Copy contructor - not defined
   */
  AliBasedNdetaTask(const AliBasedNdetaTask&);
  /** 
   * Assignment operator - not defined
   * 
   * 
   * @return 
   */
  AliBasedNdetaTask& operator=(const AliBasedNdetaTask&);
  // Forward declaration 
  class CentralityBin;
  /** 
   * Check if the event corresponds to the selected trigger(s),
   * vertex, and centrality.  Derived classes can overload this to
   * enable event processing - even if the event is not within cuts.
   * 
   * @param forward Forward object
   * 
   * @return true if the event is within the cuts. 
   */
  virtual Bool_t CheckEvent(const AliAODForwardMult& forward);
  /** 
   * Create the CentralityBin objects if not already done.
   * 
   */
  virtual void InitializeCentBins();
  /** 
   * Retrieve the histogram 
   * 
   * @param aod AOD event 
   * @param mc  Whether to get the MC histogram or not
   * 
   * @return Retrieved histogram or null
   */
  virtual TH2D* GetHistogram(const AliAODEvent& aod, Bool_t mc=false) = 0;
  /** 
   * Get the colour to use for markers (only pp - in PbPb we use a rainbow)
   * 
   * @return Marker colour 
   */
  virtual Int_t GetColor() const { return kBlack; }
  /** 
   * Get the marker style 
   * 
   * @return Marker style 
   */
  virtual Int_t GetMarker() const { return GetMarkerStyle(kCircle); }
  /** 
   * Massage data histograms if needed
   * 
   * @param vtx 
   * @param data 
   * @param mcData 
   */
  virtual void CheckEventData(Double_t vtx, 
			      TH2*     data, 
			      TH2*     mcData);
  /** 
   * Add a centrality bin 
   * 
   * @param at   Where in the list to add this bin 
   * @param low  Low cut
   * @param high High cut
   */
  void AddCentralityBin(UShort_t at, Short_t low, Short_t high);
  /** 
   * Make a centrality bin 
   * 
   * @param name  Name used for histograms
   * @param low   Low cut in percent
   * @param high  High cut in percent
   * 
   * @return A newly created centrality bin 
   */
  virtual CentralityBin* MakeCentralityBin(const char* name, Short_t low, 
					   Short_t high) const;
  
  // function which applies empirical correction to the AOD object 
  Bool_t ApplyEmpiricalCorrection(const AliAODForwardMult* aod,TH2D* data);


  static Int_t GetCentMethodID(const TString& meth);
  static const char* GetCentMethod(UShort_t id);

  //==================================================================
  /**
   * Class that holds the sum of the data - possibly split into 0 or
   * non-zero bins 
   * 
   */
  struct Sum : public TNamed
  {
    TH2D* fSum;     // Sum of non-zero events
    TH2D* fSum0;    // Sum of zero events 
    TH1I* fEvents;  // Distribution of events 
    Int_t fDebug;   // Debug level
    /** 
     * I/O Constructor - do not use
     */    
    Sum() : fSum(0), fSum0(0), fEvents(0), fDebug(0) {}
    /** 
     * Constructor 
     * 
     * @param name      Name
     * @param postfix   Possible post-fix 
     */
    Sum(const char* name, const char* postfix) 
      : TNamed(name,postfix), 
	fSum(0), 
	fSum0(0), 
	fEvents(0), 
	fDebug(0) 
    {}
    /** 
     * Copy constructor
     * 
     * @param o Object to copy from 
     */
    Sum(const Sum& o) 
      : TNamed(o), 
	fSum(o.fSum), 
	fSum0(o.fSum0), 
	fEvents(o.fEvents), 
	fDebug(o.fDebug) 
    {}
    /** 
     * Assignment operator 
     * 
     * @param o Object to assign from 
     * 
     * @return Reference to this object 
     */
    Sum& operator=(const Sum& o) 
    {
      if (&o == this) return *this;
      SetName(o.GetName()); fSum = o.fSum; fSum0 = o.fSum0; fEvents=o.fEvents;
      return *this;
    }
    /** 
     * Destructor 
     */
    ~Sum() {}
    /** 
     * Initialise this object.  
     * 
     * @param list  List to add histograms to
     * @param data  Format of data to be cloned here
     * @param col   Color 
     */
    void Init(TList* list, const TH2D* data, Int_t col);
    /** 
     * Add an event 
     * 
     * @param data    Data to add
     * @param isZero  If this is zero event
     */
    void Add(const TH2D* data, Bool_t isZero=false);
    /** 
     * Get the histogram name 
     * 
     * @param name Base name 
     * @param what Which one 
     * @param post Possible postfix
     * 
     * @return Name 
     */
    static TString GetHistName(const char* name, Int_t what=0, 
			       const char* post=0);
    /** 
     * Get the histogram name 
     * 
     * @param what Which one 
     * 
     * @return Name 
     */
    TString GetHistName(Int_t what=0) const;
    /** 
     * Get the sum 
     * 
     * @param o          Output list
     * @param ntotal     On return, the total number of events
     * @param zeroEff    Zero-bin efficiency
     * @param otherEff   Non-zero-bin efficiency 
     * @param marker     Marker to use 
     * @param rootXproj  Whether to use TH2::ProjectionX
     * @param corrEmpty  Correct for empty bins 
     * 
     * @return The total sum histogram 
     */
    TH2D* CalcSum(TList* o, Double_t& ntotal,
		  Double_t zeroEff, Double_t otherEff=1, Int_t marker=20,
		  Bool_t rootXproj=false, Bool_t corrEmpty=true) const;

    ClassDef(Sum,2); // Summed histograms
  };
    
  //==================================================================
  /**
   * Calculations done per centrality 
   * 
   */
  class CentralityBin : public TNamed
  {
  public:
    /** 
     * Constructor 
     */
    CentralityBin();
    /** 
     * Constructor 
     * 
     * @param name Name used for histograms (e.g., Forward)
     * @param low  Lower centrality cut in percent 
     * @param high Upper centrality cut in percent 
     */
    CentralityBin(const char* name, Short_t low, Short_t high);
    /** 
     * Copy constructor 
     * 
     * @param other Object to copy from 
     */
    CentralityBin(const CentralityBin& other);
    /** 
     * Destructor 
     */
    virtual ~CentralityBin();
    /** 
     * Assignment operator 
     * 
     * @param other Object to assign from 
     * 
     * @return Reference to this 
     */
    CentralityBin& operator=(const CentralityBin& other);
    /** 
     * Check if this is the 'all' bin 
     * 
     * @return true if low and high cuts are both zero
     */    
    Bool_t IsAllBin() const { return fLow == 0 && fHigh == 0; }
    /** 
     * Get the list name 
     * 
     * @return List Name 
     */
    const char* GetListName() const;
    /** 
     * Create output objects 
     * 
     * @param dir   Parent list
     * @param mask  Trigger mask
     */
    virtual void CreateOutputObjects(TList* dir, Int_t mask);
    /** 
     * Process an event
     * 
     * @param forward     Forward data (for trigger, vertex, & centrality)
     * @param triggerMask Trigger mask 
     * @param isZero      True if this is a zero bin event 
     * @param vzMin       Minimum IP z coordinate
     * @param vzMax       Maximum IP z coordinate
     * @param data        Data histogram 
     * @param mc          MC histogram
     * @param checkPileup If true, disregard pile-up events (global flag)
     *
     * @return true if the event was selected
     */
    virtual Bool_t ProcessEvent(const AliAODForwardMult* forward, 
				Int_t                    triggerMask,
				Bool_t                   isZero,
				Double_t                 vzMin, 
				Double_t                 vzMax, 
				const TH2D*              data, 
				const TH2D*              mc,
				Bool_t                   checkPileup);
    /** 
     * Calculate the Event-Level normalization. 
     * 
     * The full event level normalization for trigger @f$X@f$ is given by 
     * @f{eqnarray*}{
     *    N &=& \frac{1}{\epsilon_X}
     *          \left(N_A+\frac{N_A}{N_V}(N_{-V}-\beta)\right)\\
     *      &=& \frac{1}{\epsilon_X}N_A
     *          \left(1+\frac{1}{N_V}(N_T-N_V-\beta)\right)\\
     *      &=& \frac{1}{\epsilon_X}N_A
     *          \left(1+\frac{N_T}{N_V}-1-\frac{\beta}{N_V}\right)\\
     *      &=& \frac{1}{\epsilon_X}N_A
     *          \left(\frac{1}{\epsilon_V}-\frac{\beta}{N_V}\right)
     * @f}
     * where 
     *
     * - @f$\epsilon_X=\frac{N_{T,X}}{N_X}@f$ is the trigger
     *   efficiency evaluated in simulation.
     * - @f$\epsilon_V=\frac{N_V}{N_T}@f$ is the vertex efficiency 
     *   evaluated from the data 
     * - @f$N_X@f$ is the Monte-Carlo truth number of events of type 
     *   @f$X@f$. 
     * - @f$N_{T,X}@f$ is the Monte-Carlo truth number of events of type 
     *   @f$X@f$ which was also triggered as such. 
     * - @f$N_T@f$ is the number of data events that where triggered 
     *   as type @f$X@f$ and had a collision trigger (CINT1B)
     * - @f$N_V@f$ is the number of data events that where triggered
     *   as type @f$X@f$, had a collision trigger (CINT1B), and had 
     *   a vertex. 
     * - @f$N_{-V}@f$ is the number of data events that where triggered
     *   as type @f$X@f$, had a collision trigger (CINT1B), but no
     *   vertex. 
     * - @f$N_A@f$ is the number of data events that where triggered
     *   as type @f$X@f$, had a collision trigger (CINT1B), and had 
     *   a vertex in the selected range. 
     * - @f$\beta=N_a+N_c-N_e@f$ is the number of control triggers that 
     *   were also triggered as type @f$X@f$. 
     * - @f$N_a@f$ Number of beam-empty events also triggered as type 
     *   @f$X@f$ events (CINT1-A or CINT1-AC). 
     * - @f$N_c@f$ Number of empty-beam events also triggered as type 
     *   @f$X@f$ events (CINT1-C). 
     * - @f$N_e@f$ Number of empty-empty events also triggered as type 
     *   @f$X@f$ events (CINT1-E). 
     * 
     * Note, that if @f$ \beta \ll N_A@f$ the last term can be ignored, and 
     * the expression simplyfies to  
     * @f[
     *  N = \frac{1}{\epsilon_X}\frac{1}{\epsilon_V}N_A
     * @f]
     *
     * @param t       Histogram of triggers 
     * @param scheme  Normalisation scheme 
     * @param trgEff  Trigger efficiency 
     * @param ntotal  On return, the total number of events to normalise to.
     * @param text    If non-null, fill with normalization calculation
     * 
     * @return @f$N_A/N@f$ or negative number in case of errors. 
     */
    virtual Double_t Normalization(const TH1I& t, 
				   UShort_t    scheme,
				   Double_t    trgEff,
				   Double_t&   ntotal,
				   TString*    text) const;
    /** 
     * Generate the dN/deta result from input 
     * 
     * @param sum        Sum of 2D hists 
     * @param postfix    Post fix on names
     * @param rootProj   Whether to use ROOT TH2::ProjectionX
     * @param corrEmpty  Correct for empty bins 
     * @param scaler     Event-level normalization scaler  
     * @param marker     Marker style 
     * @param color       Color of markers 
     * @param mclist      List of MC data 
     * @param truthlist   List of MC truth data 
     */
    virtual void MakeResult(const TH2D* sum,  
			    const char* postfix, 
			    bool        rootProj, 
			    bool        corrEmpty,
			    Double_t    scaler,
			    Int_t       marker,
			    Int_t       color, 
			    TList*      mclist,
			    TList*      truthlist);
    /** 
     * End of processing 
     * 
     * @param sums        List of sums
     * @param results     Output list of results
     * @param scheme      Normalisation scheme options
     * @param trigEff     Trigger efficiency 
     * @param trigEff0    0-bin trigger efficiency 
     * @param rootProj    If true, use TH2::ProjectionX
     * @param corrEmpty   Whether to correct for empty bins
     * @param triggerMask Trigger mask 
     * @param marker      Marker style 
     * @param color       Color of markers 
     * @param mclist      List of MC data 
     * @param truthlist   List of MC truth data 
     */
    virtual void End(TList*      sums, 
		     TList*      results,
		     UShort_t    scheme,
		     Double_t    trigEff,
		     Double_t    trigEff0,
		     Bool_t      rootProj,
		     Bool_t      corrEmpty, 
		     Int_t       triggerMask,
		     Int_t       marker,
		     Int_t       color,
		     TList*      mclist,
		     TList*      truthlist);
    /**
     * @{
     * @name Access histograms
     */
    /** 
     * Get sum histogram 
     * 
     * @param mc If true, return MC histogram 
     * 
     * @return Sum histogram
     */
    const Sum* GetSum(Bool_t mc=false) const { return mc ? fSumMC : fSum; }
    /** 
     * Get sum histogram 
     * 
     * @param mc If true, return MC histogram 
     * 
     * @return Sum histogram
     */
    Sum* GetSum(Bool_t mc=false) { return mc ? fSumMC : fSum; }
    /** 
     * Get trigger histogram
     * 
     * @return Trigger histogram
     */
    const TH1I* GetTriggers() const { return fTriggers; } 
    /** 
     * Get trigger histogram
     * 
     * @return Trigger histogram 
     */
    TH1I* GetTriggers() { return fTriggers; }
    /** 
     * Get trigger histogram
     * 
     * @return Trigger histogram
     */
    const TH1I* GetStatus() const { return fStatus; } 
    /** 
     * Get trigger histogram
     * 
     * @return Trigger histogram 
     */
    TH1I* GetStatus() { return fStatus; }
    /** @} */

    /** 
     * Get the color of the markers
     *
     * @param fallback Fall-back color 
     *
     * @return Color for this centrality bin 
     */
    Int_t GetColor(Int_t fallback=kRed+2) const;
    /** 
     * Get list of results 
     * 
     * @return List of results
     */
    TList* GetResults() const { return fOutput; }
    /** 
     * Get name of result histogram. Note, the returned pointer points
     * to static memory and should be copied/used immediately.
     * 
     * @param rebin    Whether to get rebinned result
     * @param sym      Whether to get symmetric extension
     * @param postfix  Possible postfix (e.g., "MC")
     * 
     * @return 
     */
    const char* GetResultName(const char* postfix="") const;
    /** 
     * Get a result 
     * 
     * @param postfix  Possible postfix (e.g., "MC")
     * @param verbose  If true, complain about missing histogram
     * 
     * @return Pointer to histogram or null
     */
    TH1* GetResult(const char* postfix="",
		   Bool_t      verbose=true) const;
    /** 
     * Set the debug level
     * 
     * @param lvl Debug level
     */
    void SetDebugLevel(Int_t lvl);
    /**
     * Set satellite vertex flag
     *
     * @param satVtx
     */
    void SetSatelliteVertices(Bool_t satVtx) { fSatelliteVertices = satVtx; }
  protected:
    /** 
     * Read in sum hisotgram from list 
     * 
     * @param list List to read from 
     * @param mc   True for MC input 
     * 
     * @return true if sum histogram is found
     */
    virtual Bool_t ReadSum(TList* list, bool mc=false);
    /** 
     * Create sum histogram 
     * 
     * @param data  Data histogram to clone 
     * @param mc    (optional) MC histogram to clone 
     */
    virtual void CreateSums(const TH2D* data, const TH2D* mc);
    /** 
     * Check the trigger, vertex, and centrality
     * 
     * @param forward Event input 
     * @param triggerMask  The used trigger mask 
     * @param vzMin        Least @f$ v_z@f$
     * @param vzMax        Largest @f$ v_z@f$
     * 
     * @return true if the event is to be used 
     */
    virtual Bool_t CheckEvent(const AliAODForwardMult* forward, 
			      Int_t                    triggerMask,
			      Double_t                 vzMin, 
			      Double_t                 vzMax,
			      Bool_t                   checkPileup);
    TList*   fSums;      // Output list 
    TList*   fOutput;    // Output list 
    Sum*     fSum;       // Sum histogram
    Sum*     fSumMC;     // MC sum histogram
    TH1I*    fTriggers;  // Trigger histogram 
    TH1I*    fStatus;    // Trigger histogram 
    UShort_t fLow;       // Lower limit (inclusive)
    UShort_t fHigh;      // Upper limit (exclusive)
    Bool_t   fDoFinalMCCorrection; //Do final MC correction
    Bool_t   fSatelliteVertices; // Satellite vertex flag
    Int_t    fDebug;    // Debug level 

    ClassDef(CentralityBin,4); // A centrality bin 
  };
  Bool_t          fCorrEmpty;    // Correct for empty bins 
  Bool_t          fUseROOTProj;  // Whether to use ROOT's ProjectionX
  Double_t        fTriggerEff;   // Trigger efficiency for selected trigger(s)
  Double_t        fTriggerEff0;  // Bin-0 Trigger efficiency for sel trigger(s)
  TObjArray*      fListOfCentralities; // Centrality bins 
  UShort_t        fNormalizationScheme; // Normalization scheme
  TString         fFinalMCCorrFile; //Filename for final MC corr
  Bool_t          fSatelliteVertices; // satellite vertex flag
  TH2D*           fEmpiricalCorrection; // Empirical correction 
  TH2D* 	  fMeanVsC;         //mean signal per event vs cent
  TString         fCentMethod;    // Centrality estimator 
  UShort_t        fPileupMask;    // Pile-up checks 
  AliAnalysisUtils fAnaUtil;      // Analysis utility 
  Bool_t          fCheckSPDOutlier; // Check for SPD outliers 
  ClassDef(AliBasedNdetaTask,17); // Determine charged particle density
};

#endif
//
// Local Variables:
//  mode: C++
// End:
//
 AliBasedNdetaTask.h:1
 AliBasedNdetaTask.h:2
 AliBasedNdetaTask.h:3
 AliBasedNdetaTask.h:4
 AliBasedNdetaTask.h:5
 AliBasedNdetaTask.h:6
 AliBasedNdetaTask.h:7
 AliBasedNdetaTask.h:8
 AliBasedNdetaTask.h:9
 AliBasedNdetaTask.h:10
 AliBasedNdetaTask.h:11
 AliBasedNdetaTask.h:12
 AliBasedNdetaTask.h:13
 AliBasedNdetaTask.h:14
 AliBasedNdetaTask.h:15
 AliBasedNdetaTask.h:16
 AliBasedNdetaTask.h:17
 AliBasedNdetaTask.h:18
 AliBasedNdetaTask.h:19
 AliBasedNdetaTask.h:20
 AliBasedNdetaTask.h:21
 AliBasedNdetaTask.h:22
 AliBasedNdetaTask.h:23
 AliBasedNdetaTask.h:24
 AliBasedNdetaTask.h:25
 AliBasedNdetaTask.h:26
 AliBasedNdetaTask.h:27
 AliBasedNdetaTask.h:28
 AliBasedNdetaTask.h:29
 AliBasedNdetaTask.h:30
 AliBasedNdetaTask.h:31
 AliBasedNdetaTask.h:32
 AliBasedNdetaTask.h:33
 AliBasedNdetaTask.h:34
 AliBasedNdetaTask.h:35
 AliBasedNdetaTask.h:36
 AliBasedNdetaTask.h:37
 AliBasedNdetaTask.h:38
 AliBasedNdetaTask.h:39
 AliBasedNdetaTask.h:40
 AliBasedNdetaTask.h:41
 AliBasedNdetaTask.h:42
 AliBasedNdetaTask.h:43
 AliBasedNdetaTask.h:44
 AliBasedNdetaTask.h:45
 AliBasedNdetaTask.h:46
 AliBasedNdetaTask.h:47
 AliBasedNdetaTask.h:48
 AliBasedNdetaTask.h:49
 AliBasedNdetaTask.h:50
 AliBasedNdetaTask.h:51
 AliBasedNdetaTask.h:52
 AliBasedNdetaTask.h:53
 AliBasedNdetaTask.h:54
 AliBasedNdetaTask.h:55
 AliBasedNdetaTask.h:56
 AliBasedNdetaTask.h:57
 AliBasedNdetaTask.h:58
 AliBasedNdetaTask.h:59
 AliBasedNdetaTask.h:60
 AliBasedNdetaTask.h:61
 AliBasedNdetaTask.h:62
 AliBasedNdetaTask.h:63
 AliBasedNdetaTask.h:64
 AliBasedNdetaTask.h:65
 AliBasedNdetaTask.h:66
 AliBasedNdetaTask.h:67
 AliBasedNdetaTask.h:68
 AliBasedNdetaTask.h:69
 AliBasedNdetaTask.h:70
 AliBasedNdetaTask.h:71
 AliBasedNdetaTask.h:72
 AliBasedNdetaTask.h:73
 AliBasedNdetaTask.h:74
 AliBasedNdetaTask.h:75
 AliBasedNdetaTask.h:76
 AliBasedNdetaTask.h:77
 AliBasedNdetaTask.h:78
 AliBasedNdetaTask.h:79
 AliBasedNdetaTask.h:80
 AliBasedNdetaTask.h:81
 AliBasedNdetaTask.h:82
 AliBasedNdetaTask.h:83
 AliBasedNdetaTask.h:84
 AliBasedNdetaTask.h:85
 AliBasedNdetaTask.h:86
 AliBasedNdetaTask.h:87
 AliBasedNdetaTask.h:88
 AliBasedNdetaTask.h:89
 AliBasedNdetaTask.h:90
 AliBasedNdetaTask.h:91
 AliBasedNdetaTask.h:92
 AliBasedNdetaTask.h:93
 AliBasedNdetaTask.h:94
 AliBasedNdetaTask.h:95
 AliBasedNdetaTask.h:96
 AliBasedNdetaTask.h:97
 AliBasedNdetaTask.h:98
 AliBasedNdetaTask.h:99
 AliBasedNdetaTask.h:100
 AliBasedNdetaTask.h:101
 AliBasedNdetaTask.h:102
 AliBasedNdetaTask.h:103
 AliBasedNdetaTask.h:104
 AliBasedNdetaTask.h:105
 AliBasedNdetaTask.h:106
 AliBasedNdetaTask.h:107
 AliBasedNdetaTask.h:108
 AliBasedNdetaTask.h:109
 AliBasedNdetaTask.h:110
 AliBasedNdetaTask.h:111
 AliBasedNdetaTask.h:112
 AliBasedNdetaTask.h:113
 AliBasedNdetaTask.h:114
 AliBasedNdetaTask.h:115
 AliBasedNdetaTask.h:116
 AliBasedNdetaTask.h:117
 AliBasedNdetaTask.h:118
 AliBasedNdetaTask.h:119
 AliBasedNdetaTask.h:120
 AliBasedNdetaTask.h:121
 AliBasedNdetaTask.h:122
 AliBasedNdetaTask.h:123
 AliBasedNdetaTask.h:124
 AliBasedNdetaTask.h:125
 AliBasedNdetaTask.h:126
 AliBasedNdetaTask.h:127
 AliBasedNdetaTask.h:128
 AliBasedNdetaTask.h:129
 AliBasedNdetaTask.h:130
 AliBasedNdetaTask.h:131
 AliBasedNdetaTask.h:132
 AliBasedNdetaTask.h:133
 AliBasedNdetaTask.h:134
 AliBasedNdetaTask.h:135
 AliBasedNdetaTask.h:136
 AliBasedNdetaTask.h:137
 AliBasedNdetaTask.h:138
 AliBasedNdetaTask.h:139
 AliBasedNdetaTask.h:140
 AliBasedNdetaTask.h:141
 AliBasedNdetaTask.h:142
 AliBasedNdetaTask.h:143
 AliBasedNdetaTask.h:144
 AliBasedNdetaTask.h:145
 AliBasedNdetaTask.h:146
 AliBasedNdetaTask.h:147
 AliBasedNdetaTask.h:148
 AliBasedNdetaTask.h:149
 AliBasedNdetaTask.h:150
 AliBasedNdetaTask.h:151
 AliBasedNdetaTask.h:152
 AliBasedNdetaTask.h:153
 AliBasedNdetaTask.h:154
 AliBasedNdetaTask.h:155
 AliBasedNdetaTask.h:156
 AliBasedNdetaTask.h:157
 AliBasedNdetaTask.h:158
 AliBasedNdetaTask.h:159
 AliBasedNdetaTask.h:160
 AliBasedNdetaTask.h:161
 AliBasedNdetaTask.h:162
 AliBasedNdetaTask.h:163
 AliBasedNdetaTask.h:164
 AliBasedNdetaTask.h:165
 AliBasedNdetaTask.h:166
 AliBasedNdetaTask.h:167
 AliBasedNdetaTask.h:168
 AliBasedNdetaTask.h:169
 AliBasedNdetaTask.h:170
 AliBasedNdetaTask.h:171
 AliBasedNdetaTask.h:172
 AliBasedNdetaTask.h:173
 AliBasedNdetaTask.h:174
 AliBasedNdetaTask.h:175
 AliBasedNdetaTask.h:176
 AliBasedNdetaTask.h:177
 AliBasedNdetaTask.h:178
 AliBasedNdetaTask.h:179
 AliBasedNdetaTask.h:180
 AliBasedNdetaTask.h:181
 AliBasedNdetaTask.h:182
 AliBasedNdetaTask.h:183
 AliBasedNdetaTask.h:184
 AliBasedNdetaTask.h:185
 AliBasedNdetaTask.h:186
 AliBasedNdetaTask.h:187
 AliBasedNdetaTask.h:188
 AliBasedNdetaTask.h:189
 AliBasedNdetaTask.h:190
 AliBasedNdetaTask.h:191
 AliBasedNdetaTask.h:192
 AliBasedNdetaTask.h:193
 AliBasedNdetaTask.h:194
 AliBasedNdetaTask.h:195
 AliBasedNdetaTask.h:196
 AliBasedNdetaTask.h:197
 AliBasedNdetaTask.h:198
 AliBasedNdetaTask.h:199
 AliBasedNdetaTask.h:200
 AliBasedNdetaTask.h:201
 AliBasedNdetaTask.h:202
 AliBasedNdetaTask.h:203
 AliBasedNdetaTask.h:204
 AliBasedNdetaTask.h:205
 AliBasedNdetaTask.h:206
 AliBasedNdetaTask.h:207
 AliBasedNdetaTask.h:208
 AliBasedNdetaTask.h:209
 AliBasedNdetaTask.h:210
 AliBasedNdetaTask.h:211
 AliBasedNdetaTask.h:212
 AliBasedNdetaTask.h:213
 AliBasedNdetaTask.h:214
 AliBasedNdetaTask.h:215
 AliBasedNdetaTask.h:216
 AliBasedNdetaTask.h:217
 AliBasedNdetaTask.h:218
 AliBasedNdetaTask.h:219
 AliBasedNdetaTask.h:220
 AliBasedNdetaTask.h:221
 AliBasedNdetaTask.h:222
 AliBasedNdetaTask.h:223
 AliBasedNdetaTask.h:224
 AliBasedNdetaTask.h:225
 AliBasedNdetaTask.h:226
 AliBasedNdetaTask.h:227
 AliBasedNdetaTask.h:228
 AliBasedNdetaTask.h:229
 AliBasedNdetaTask.h:230
 AliBasedNdetaTask.h:231
 AliBasedNdetaTask.h:232
 AliBasedNdetaTask.h:233
 AliBasedNdetaTask.h:234
 AliBasedNdetaTask.h:235
 AliBasedNdetaTask.h:236
 AliBasedNdetaTask.h:237
 AliBasedNdetaTask.h:238
 AliBasedNdetaTask.h:239
 AliBasedNdetaTask.h:240
 AliBasedNdetaTask.h:241
 AliBasedNdetaTask.h:242
 AliBasedNdetaTask.h:243
 AliBasedNdetaTask.h:244
 AliBasedNdetaTask.h:245
 AliBasedNdetaTask.h:246
 AliBasedNdetaTask.h:247
 AliBasedNdetaTask.h:248
 AliBasedNdetaTask.h:249
 AliBasedNdetaTask.h:250
 AliBasedNdetaTask.h:251
 AliBasedNdetaTask.h:252
 AliBasedNdetaTask.h:253
 AliBasedNdetaTask.h:254
 AliBasedNdetaTask.h:255
 AliBasedNdetaTask.h:256
 AliBasedNdetaTask.h:257
 AliBasedNdetaTask.h:258
 AliBasedNdetaTask.h:259
 AliBasedNdetaTask.h:260
 AliBasedNdetaTask.h:261
 AliBasedNdetaTask.h:262
 AliBasedNdetaTask.h:263
 AliBasedNdetaTask.h:264
 AliBasedNdetaTask.h:265
 AliBasedNdetaTask.h:266
 AliBasedNdetaTask.h:267
 AliBasedNdetaTask.h:268
 AliBasedNdetaTask.h:269
 AliBasedNdetaTask.h:270
 AliBasedNdetaTask.h:271
 AliBasedNdetaTask.h:272
 AliBasedNdetaTask.h:273
 AliBasedNdetaTask.h:274
 AliBasedNdetaTask.h:275
 AliBasedNdetaTask.h:276
 AliBasedNdetaTask.h:277
 AliBasedNdetaTask.h:278
 AliBasedNdetaTask.h:279
 AliBasedNdetaTask.h:280
 AliBasedNdetaTask.h:281
 AliBasedNdetaTask.h:282
 AliBasedNdetaTask.h:283
 AliBasedNdetaTask.h:284
 AliBasedNdetaTask.h:285
 AliBasedNdetaTask.h:286
 AliBasedNdetaTask.h:287
 AliBasedNdetaTask.h:288
 AliBasedNdetaTask.h:289
 AliBasedNdetaTask.h:290
 AliBasedNdetaTask.h:291
 AliBasedNdetaTask.h:292
 AliBasedNdetaTask.h:293
 AliBasedNdetaTask.h:294
 AliBasedNdetaTask.h:295
 AliBasedNdetaTask.h:296
 AliBasedNdetaTask.h:297
 AliBasedNdetaTask.h:298
 AliBasedNdetaTask.h:299
 AliBasedNdetaTask.h:300
 AliBasedNdetaTask.h:301
 AliBasedNdetaTask.h:302
 AliBasedNdetaTask.h:303
 AliBasedNdetaTask.h:304
 AliBasedNdetaTask.h:305
 AliBasedNdetaTask.h:306
 AliBasedNdetaTask.h:307
 AliBasedNdetaTask.h:308
 AliBasedNdetaTask.h:309
 AliBasedNdetaTask.h:310
 AliBasedNdetaTask.h:311
 AliBasedNdetaTask.h:312
 AliBasedNdetaTask.h:313
 AliBasedNdetaTask.h:314
 AliBasedNdetaTask.h:315
 AliBasedNdetaTask.h:316
 AliBasedNdetaTask.h:317
 AliBasedNdetaTask.h:318
 AliBasedNdetaTask.h:319
 AliBasedNdetaTask.h:320
 AliBasedNdetaTask.h:321
 AliBasedNdetaTask.h:322
 AliBasedNdetaTask.h:323
 AliBasedNdetaTask.h:324
 AliBasedNdetaTask.h:325
 AliBasedNdetaTask.h:326
 AliBasedNdetaTask.h:327
 AliBasedNdetaTask.h:328
 AliBasedNdetaTask.h:329
 AliBasedNdetaTask.h:330
 AliBasedNdetaTask.h:331
 AliBasedNdetaTask.h:332
 AliBasedNdetaTask.h:333
 AliBasedNdetaTask.h:334
 AliBasedNdetaTask.h:335
 AliBasedNdetaTask.h:336
 AliBasedNdetaTask.h:337
 AliBasedNdetaTask.h:338
 AliBasedNdetaTask.h:339
 AliBasedNdetaTask.h:340
 AliBasedNdetaTask.h:341
 AliBasedNdetaTask.h:342
 AliBasedNdetaTask.h:343
 AliBasedNdetaTask.h:344
 AliBasedNdetaTask.h:345
 AliBasedNdetaTask.h:346
 AliBasedNdetaTask.h:347
 AliBasedNdetaTask.h:348
 AliBasedNdetaTask.h:349
 AliBasedNdetaTask.h:350
 AliBasedNdetaTask.h:351
 AliBasedNdetaTask.h:352
 AliBasedNdetaTask.h:353
 AliBasedNdetaTask.h:354
 AliBasedNdetaTask.h:355
 AliBasedNdetaTask.h:356
 AliBasedNdetaTask.h:357
 AliBasedNdetaTask.h:358
 AliBasedNdetaTask.h:359
 AliBasedNdetaTask.h:360
 AliBasedNdetaTask.h:361
 AliBasedNdetaTask.h:362
 AliBasedNdetaTask.h:363
 AliBasedNdetaTask.h:364
 AliBasedNdetaTask.h:365
 AliBasedNdetaTask.h:366
 AliBasedNdetaTask.h:367
 AliBasedNdetaTask.h:368
 AliBasedNdetaTask.h:369
 AliBasedNdetaTask.h:370
 AliBasedNdetaTask.h:371
 AliBasedNdetaTask.h:372
 AliBasedNdetaTask.h:373
 AliBasedNdetaTask.h:374
 AliBasedNdetaTask.h:375
 AliBasedNdetaTask.h:376
 AliBasedNdetaTask.h:377
 AliBasedNdetaTask.h:378
 AliBasedNdetaTask.h:379
 AliBasedNdetaTask.h:380
 AliBasedNdetaTask.h:381
 AliBasedNdetaTask.h:382
 AliBasedNdetaTask.h:383
 AliBasedNdetaTask.h:384
 AliBasedNdetaTask.h:385
 AliBasedNdetaTask.h:386
 AliBasedNdetaTask.h:387
 AliBasedNdetaTask.h:388
 AliBasedNdetaTask.h:389
 AliBasedNdetaTask.h:390
 AliBasedNdetaTask.h:391
 AliBasedNdetaTask.h:392
 AliBasedNdetaTask.h:393
 AliBasedNdetaTask.h:394
 AliBasedNdetaTask.h:395
 AliBasedNdetaTask.h:396
 AliBasedNdetaTask.h:397
 AliBasedNdetaTask.h:398
 AliBasedNdetaTask.h:399
 AliBasedNdetaTask.h:400
 AliBasedNdetaTask.h:401
 AliBasedNdetaTask.h:402
 AliBasedNdetaTask.h:403
 AliBasedNdetaTask.h:404
 AliBasedNdetaTask.h:405
 AliBasedNdetaTask.h:406
 AliBasedNdetaTask.h:407
 AliBasedNdetaTask.h:408
 AliBasedNdetaTask.h:409
 AliBasedNdetaTask.h:410
 AliBasedNdetaTask.h:411
 AliBasedNdetaTask.h:412
 AliBasedNdetaTask.h:413
 AliBasedNdetaTask.h:414
 AliBasedNdetaTask.h:415
 AliBasedNdetaTask.h:416
 AliBasedNdetaTask.h:417
 AliBasedNdetaTask.h:418
 AliBasedNdetaTask.h:419
 AliBasedNdetaTask.h:420
 AliBasedNdetaTask.h:421
 AliBasedNdetaTask.h:422
 AliBasedNdetaTask.h:423
 AliBasedNdetaTask.h:424
 AliBasedNdetaTask.h:425
 AliBasedNdetaTask.h:426
 AliBasedNdetaTask.h:427
 AliBasedNdetaTask.h:428
 AliBasedNdetaTask.h:429
 AliBasedNdetaTask.h:430
 AliBasedNdetaTask.h:431
 AliBasedNdetaTask.h:432
 AliBasedNdetaTask.h:433
 AliBasedNdetaTask.h:434
 AliBasedNdetaTask.h:435
 AliBasedNdetaTask.h:436
 AliBasedNdetaTask.h:437
 AliBasedNdetaTask.h:438
 AliBasedNdetaTask.h:439
 AliBasedNdetaTask.h:440
 AliBasedNdetaTask.h:441
 AliBasedNdetaTask.h:442
 AliBasedNdetaTask.h:443
 AliBasedNdetaTask.h:444
 AliBasedNdetaTask.h:445
 AliBasedNdetaTask.h:446
 AliBasedNdetaTask.h:447
 AliBasedNdetaTask.h:448
 AliBasedNdetaTask.h:449
 AliBasedNdetaTask.h:450
 AliBasedNdetaTask.h:451
 AliBasedNdetaTask.h:452
 AliBasedNdetaTask.h:453
 AliBasedNdetaTask.h:454
 AliBasedNdetaTask.h:455
 AliBasedNdetaTask.h:456
 AliBasedNdetaTask.h:457
 AliBasedNdetaTask.h:458
 AliBasedNdetaTask.h:459
 AliBasedNdetaTask.h:460
 AliBasedNdetaTask.h:461
 AliBasedNdetaTask.h:462
 AliBasedNdetaTask.h:463
 AliBasedNdetaTask.h:464
 AliBasedNdetaTask.h:465
 AliBasedNdetaTask.h:466
 AliBasedNdetaTask.h:467
 AliBasedNdetaTask.h:468
 AliBasedNdetaTask.h:469
 AliBasedNdetaTask.h:470
 AliBasedNdetaTask.h:471
 AliBasedNdetaTask.h:472
 AliBasedNdetaTask.h:473
 AliBasedNdetaTask.h:474
 AliBasedNdetaTask.h:475
 AliBasedNdetaTask.h:476
 AliBasedNdetaTask.h:477
 AliBasedNdetaTask.h:478
 AliBasedNdetaTask.h:479
 AliBasedNdetaTask.h:480
 AliBasedNdetaTask.h:481
 AliBasedNdetaTask.h:482
 AliBasedNdetaTask.h:483
 AliBasedNdetaTask.h:484
 AliBasedNdetaTask.h:485
 AliBasedNdetaTask.h:486
 AliBasedNdetaTask.h:487
 AliBasedNdetaTask.h:488
 AliBasedNdetaTask.h:489
 AliBasedNdetaTask.h:490
 AliBasedNdetaTask.h:491
 AliBasedNdetaTask.h:492
 AliBasedNdetaTask.h:493
 AliBasedNdetaTask.h:494
 AliBasedNdetaTask.h:495
 AliBasedNdetaTask.h:496
 AliBasedNdetaTask.h:497
 AliBasedNdetaTask.h:498
 AliBasedNdetaTask.h:499
 AliBasedNdetaTask.h:500
 AliBasedNdetaTask.h:501
 AliBasedNdetaTask.h:502
 AliBasedNdetaTask.h:503
 AliBasedNdetaTask.h:504
 AliBasedNdetaTask.h:505
 AliBasedNdetaTask.h:506
 AliBasedNdetaTask.h:507
 AliBasedNdetaTask.h:508
 AliBasedNdetaTask.h:509
 AliBasedNdetaTask.h:510
 AliBasedNdetaTask.h:511
 AliBasedNdetaTask.h:512
 AliBasedNdetaTask.h:513
 AliBasedNdetaTask.h:514
 AliBasedNdetaTask.h:515
 AliBasedNdetaTask.h:516
 AliBasedNdetaTask.h:517
 AliBasedNdetaTask.h:518
 AliBasedNdetaTask.h:519
 AliBasedNdetaTask.h:520
 AliBasedNdetaTask.h:521
 AliBasedNdetaTask.h:522
 AliBasedNdetaTask.h:523
 AliBasedNdetaTask.h:524
 AliBasedNdetaTask.h:525
 AliBasedNdetaTask.h:526
 AliBasedNdetaTask.h:527
 AliBasedNdetaTask.h:528
 AliBasedNdetaTask.h:529
 AliBasedNdetaTask.h:530
 AliBasedNdetaTask.h:531
 AliBasedNdetaTask.h:532
 AliBasedNdetaTask.h:533
 AliBasedNdetaTask.h:534
 AliBasedNdetaTask.h:535
 AliBasedNdetaTask.h:536
 AliBasedNdetaTask.h:537
 AliBasedNdetaTask.h:538
 AliBasedNdetaTask.h:539
 AliBasedNdetaTask.h:540
 AliBasedNdetaTask.h:541
 AliBasedNdetaTask.h:542
 AliBasedNdetaTask.h:543
 AliBasedNdetaTask.h:544
 AliBasedNdetaTask.h:545
 AliBasedNdetaTask.h:546
 AliBasedNdetaTask.h:547
 AliBasedNdetaTask.h:548
 AliBasedNdetaTask.h:549
 AliBasedNdetaTask.h:550
 AliBasedNdetaTask.h:551
 AliBasedNdetaTask.h:552
 AliBasedNdetaTask.h:553
 AliBasedNdetaTask.h:554
 AliBasedNdetaTask.h:555
 AliBasedNdetaTask.h:556
 AliBasedNdetaTask.h:557
 AliBasedNdetaTask.h:558
 AliBasedNdetaTask.h:559
 AliBasedNdetaTask.h:560
 AliBasedNdetaTask.h:561
 AliBasedNdetaTask.h:562
 AliBasedNdetaTask.h:563
 AliBasedNdetaTask.h:564
 AliBasedNdetaTask.h:565
 AliBasedNdetaTask.h:566
 AliBasedNdetaTask.h:567
 AliBasedNdetaTask.h:568
 AliBasedNdetaTask.h:569
 AliBasedNdetaTask.h:570
 AliBasedNdetaTask.h:571
 AliBasedNdetaTask.h:572
 AliBasedNdetaTask.h:573
 AliBasedNdetaTask.h:574
 AliBasedNdetaTask.h:575
 AliBasedNdetaTask.h:576
 AliBasedNdetaTask.h:577
 AliBasedNdetaTask.h:578
 AliBasedNdetaTask.h:579
 AliBasedNdetaTask.h:580
 AliBasedNdetaTask.h:581
 AliBasedNdetaTask.h:582
 AliBasedNdetaTask.h:583
 AliBasedNdetaTask.h:584
 AliBasedNdetaTask.h:585
 AliBasedNdetaTask.h:586
 AliBasedNdetaTask.h:587
 AliBasedNdetaTask.h:588
 AliBasedNdetaTask.h:589
 AliBasedNdetaTask.h:590
 AliBasedNdetaTask.h:591
 AliBasedNdetaTask.h:592
 AliBasedNdetaTask.h:593
 AliBasedNdetaTask.h:594
 AliBasedNdetaTask.h:595
 AliBasedNdetaTask.h:596
 AliBasedNdetaTask.h:597
 AliBasedNdetaTask.h:598
 AliBasedNdetaTask.h:599
 AliBasedNdetaTask.h:600
 AliBasedNdetaTask.h:601
 AliBasedNdetaTask.h:602
 AliBasedNdetaTask.h:603
 AliBasedNdetaTask.h:604
 AliBasedNdetaTask.h:605
 AliBasedNdetaTask.h:606
 AliBasedNdetaTask.h:607
 AliBasedNdetaTask.h:608
 AliBasedNdetaTask.h:609
 AliBasedNdetaTask.h:610
 AliBasedNdetaTask.h:611
 AliBasedNdetaTask.h:612
 AliBasedNdetaTask.h:613
 AliBasedNdetaTask.h:614
 AliBasedNdetaTask.h:615
 AliBasedNdetaTask.h:616
 AliBasedNdetaTask.h:617
 AliBasedNdetaTask.h:618
 AliBasedNdetaTask.h:619
 AliBasedNdetaTask.h:620
 AliBasedNdetaTask.h:621
 AliBasedNdetaTask.h:622
 AliBasedNdetaTask.h:623
 AliBasedNdetaTask.h:624
 AliBasedNdetaTask.h:625
 AliBasedNdetaTask.h:626
 AliBasedNdetaTask.h:627
 AliBasedNdetaTask.h:628
 AliBasedNdetaTask.h:629
 AliBasedNdetaTask.h:630
 AliBasedNdetaTask.h:631
 AliBasedNdetaTask.h:632
 AliBasedNdetaTask.h:633
 AliBasedNdetaTask.h:634
 AliBasedNdetaTask.h:635
 AliBasedNdetaTask.h:636
 AliBasedNdetaTask.h:637
 AliBasedNdetaTask.h:638
 AliBasedNdetaTask.h:639
 AliBasedNdetaTask.h:640
 AliBasedNdetaTask.h:641
 AliBasedNdetaTask.h:642
 AliBasedNdetaTask.h:643
 AliBasedNdetaTask.h:644
 AliBasedNdetaTask.h:645
 AliBasedNdetaTask.h:646
 AliBasedNdetaTask.h:647
 AliBasedNdetaTask.h:648
 AliBasedNdetaTask.h:649
 AliBasedNdetaTask.h:650
 AliBasedNdetaTask.h:651
 AliBasedNdetaTask.h:652
 AliBasedNdetaTask.h:653
 AliBasedNdetaTask.h:654
 AliBasedNdetaTask.h:655
 AliBasedNdetaTask.h:656
 AliBasedNdetaTask.h:657
 AliBasedNdetaTask.h:658
 AliBasedNdetaTask.h:659
 AliBasedNdetaTask.h:660
 AliBasedNdetaTask.h:661
 AliBasedNdetaTask.h:662
 AliBasedNdetaTask.h:663
 AliBasedNdetaTask.h:664
 AliBasedNdetaTask.h:665
 AliBasedNdetaTask.h:666
 AliBasedNdetaTask.h:667
 AliBasedNdetaTask.h:668
 AliBasedNdetaTask.h:669
 AliBasedNdetaTask.h:670
 AliBasedNdetaTask.h:671
 AliBasedNdetaTask.h:672
 AliBasedNdetaTask.h:673
 AliBasedNdetaTask.h:674
 AliBasedNdetaTask.h:675
 AliBasedNdetaTask.h:676
 AliBasedNdetaTask.h:677
 AliBasedNdetaTask.h:678
 AliBasedNdetaTask.h:679
 AliBasedNdetaTask.h:680
 AliBasedNdetaTask.h:681
 AliBasedNdetaTask.h:682
 AliBasedNdetaTask.h:683
 AliBasedNdetaTask.h:684
 AliBasedNdetaTask.h:685
 AliBasedNdetaTask.h:686
 AliBasedNdetaTask.h:687
 AliBasedNdetaTask.h:688
 AliBasedNdetaTask.h:689
 AliBasedNdetaTask.h:690
 AliBasedNdetaTask.h:691
 AliBasedNdetaTask.h:692
 AliBasedNdetaTask.h:693
 AliBasedNdetaTask.h:694
 AliBasedNdetaTask.h:695
 AliBasedNdetaTask.h:696
 AliBasedNdetaTask.h:697
 AliBasedNdetaTask.h:698
 AliBasedNdetaTask.h:699
 AliBasedNdetaTask.h:700
 AliBasedNdetaTask.h:701
 AliBasedNdetaTask.h:702
 AliBasedNdetaTask.h:703
 AliBasedNdetaTask.h:704
 AliBasedNdetaTask.h:705
 AliBasedNdetaTask.h:706
 AliBasedNdetaTask.h:707
 AliBasedNdetaTask.h:708
 AliBasedNdetaTask.h:709
 AliBasedNdetaTask.h:710
 AliBasedNdetaTask.h:711
 AliBasedNdetaTask.h:712
 AliBasedNdetaTask.h:713
 AliBasedNdetaTask.h:714
 AliBasedNdetaTask.h:715
 AliBasedNdetaTask.h:716
 AliBasedNdetaTask.h:717
 AliBasedNdetaTask.h:718
 AliBasedNdetaTask.h:719
 AliBasedNdetaTask.h:720
 AliBasedNdetaTask.h:721
 AliBasedNdetaTask.h:722
 AliBasedNdetaTask.h:723
 AliBasedNdetaTask.h:724
 AliBasedNdetaTask.h:725
 AliBasedNdetaTask.h:726
 AliBasedNdetaTask.h:727
 AliBasedNdetaTask.h:728
 AliBasedNdetaTask.h:729
 AliBasedNdetaTask.h:730
 AliBasedNdetaTask.h:731
 AliBasedNdetaTask.h:732
 AliBasedNdetaTask.h:733
 AliBasedNdetaTask.h:734
 AliBasedNdetaTask.h:735
 AliBasedNdetaTask.h:736
 AliBasedNdetaTask.h:737
 AliBasedNdetaTask.h:738
 AliBasedNdetaTask.h:739
 AliBasedNdetaTask.h:740
 AliBasedNdetaTask.h:741
 AliBasedNdetaTask.h:742
 AliBasedNdetaTask.h:743
 AliBasedNdetaTask.h:744
 AliBasedNdetaTask.h:745
 AliBasedNdetaTask.h:746
 AliBasedNdetaTask.h:747
 AliBasedNdetaTask.h:748
 AliBasedNdetaTask.h:749
 AliBasedNdetaTask.h:750
 AliBasedNdetaTask.h:751
 AliBasedNdetaTask.h:752
 AliBasedNdetaTask.h:753
 AliBasedNdetaTask.h:754
 AliBasedNdetaTask.h:755
 AliBasedNdetaTask.h:756
 AliBasedNdetaTask.h:757
 AliBasedNdetaTask.h:758
 AliBasedNdetaTask.h:759
 AliBasedNdetaTask.h:760
 AliBasedNdetaTask.h:761
 AliBasedNdetaTask.h:762
 AliBasedNdetaTask.h:763
 AliBasedNdetaTask.h:764
 AliBasedNdetaTask.h:765
 AliBasedNdetaTask.h:766
 AliBasedNdetaTask.h:767
 AliBasedNdetaTask.h:768
 AliBasedNdetaTask.h:769
 AliBasedNdetaTask.h:770
 AliBasedNdetaTask.h:771
 AliBasedNdetaTask.h:772
 AliBasedNdetaTask.h:773
 AliBasedNdetaTask.h:774
 AliBasedNdetaTask.h:775
 AliBasedNdetaTask.h:776
 AliBasedNdetaTask.h:777
 AliBasedNdetaTask.h:778
 AliBasedNdetaTask.h:779
 AliBasedNdetaTask.h:780
 AliBasedNdetaTask.h:781
 AliBasedNdetaTask.h:782
 AliBasedNdetaTask.h:783
 AliBasedNdetaTask.h:784
 AliBasedNdetaTask.h:785
 AliBasedNdetaTask.h:786
 AliBasedNdetaTask.h:787
 AliBasedNdetaTask.h:788
 AliBasedNdetaTask.h:789
 AliBasedNdetaTask.h:790
 AliBasedNdetaTask.h:791
 AliBasedNdetaTask.h:792
 AliBasedNdetaTask.h:793
 AliBasedNdetaTask.h:794
 AliBasedNdetaTask.h:795
 AliBasedNdetaTask.h:796
 AliBasedNdetaTask.h:797
 AliBasedNdetaTask.h:798
 AliBasedNdetaTask.h:799
 AliBasedNdetaTask.h:800
 AliBasedNdetaTask.h:801
 AliBasedNdetaTask.h:802
 AliBasedNdetaTask.h:803
 AliBasedNdetaTask.h:804
 AliBasedNdetaTask.h:805
 AliBasedNdetaTask.h:806
 AliBasedNdetaTask.h:807
 AliBasedNdetaTask.h:808
 AliBasedNdetaTask.h:809
 AliBasedNdetaTask.h:810
 AliBasedNdetaTask.h:811
 AliBasedNdetaTask.h:812
 AliBasedNdetaTask.h:813
 AliBasedNdetaTask.h:814
 AliBasedNdetaTask.h:815
 AliBasedNdetaTask.h:816
 AliBasedNdetaTask.h:817
 AliBasedNdetaTask.h:818
 AliBasedNdetaTask.h:819
 AliBasedNdetaTask.h:820
 AliBasedNdetaTask.h:821
 AliBasedNdetaTask.h:822
 AliBasedNdetaTask.h:823
 AliBasedNdetaTask.h:824
 AliBasedNdetaTask.h:825
 AliBasedNdetaTask.h:826
 AliBasedNdetaTask.h:827
 AliBasedNdetaTask.h:828
 AliBasedNdetaTask.h:829
 AliBasedNdetaTask.h:830
 AliBasedNdetaTask.h:831
 AliBasedNdetaTask.h:832
 AliBasedNdetaTask.h:833
 AliBasedNdetaTask.h:834
 AliBasedNdetaTask.h:835
 AliBasedNdetaTask.h:836
 AliBasedNdetaTask.h:837
 AliBasedNdetaTask.h:838
 AliBasedNdetaTask.h:839
 AliBasedNdetaTask.h:840
 AliBasedNdetaTask.h:841
 AliBasedNdetaTask.h:842
 AliBasedNdetaTask.h:843
 AliBasedNdetaTask.h:844
 AliBasedNdetaTask.h:845
 AliBasedNdetaTask.h:846
 AliBasedNdetaTask.h:847
 AliBasedNdetaTask.h:848
 AliBasedNdetaTask.h:849
 AliBasedNdetaTask.h:850
 AliBasedNdetaTask.h:851
 AliBasedNdetaTask.h:852
 AliBasedNdetaTask.h:853
 AliBasedNdetaTask.h:854
 AliBasedNdetaTask.h:855
 AliBasedNdetaTask.h:856
 AliBasedNdetaTask.h:857
 AliBasedNdetaTask.h:858
 AliBasedNdetaTask.h:859
 AliBasedNdetaTask.h:860
 AliBasedNdetaTask.h:861
 AliBasedNdetaTask.h:862
 AliBasedNdetaTask.h:863
 AliBasedNdetaTask.h:864
 AliBasedNdetaTask.h:865
 AliBasedNdetaTask.h:866
 AliBasedNdetaTask.h:867
 AliBasedNdetaTask.h:868
 AliBasedNdetaTask.h:869
 AliBasedNdetaTask.h:870
 AliBasedNdetaTask.h:871
 AliBasedNdetaTask.h:872
 AliBasedNdetaTask.h:873
 AliBasedNdetaTask.h:874
 AliBasedNdetaTask.h:875
 AliBasedNdetaTask.h:876
 AliBasedNdetaTask.h:877
 AliBasedNdetaTask.h:878
 AliBasedNdetaTask.h:879
 AliBasedNdetaTask.h:880
 AliBasedNdetaTask.h:881
 AliBasedNdetaTask.h:882
 AliBasedNdetaTask.h:883
 AliBasedNdetaTask.h:884
 AliBasedNdetaTask.h:885
 AliBasedNdetaTask.h:886
 AliBasedNdetaTask.h:887
 AliBasedNdetaTask.h:888
 AliBasedNdetaTask.h:889
 AliBasedNdetaTask.h:890
 AliBasedNdetaTask.h:891
 AliBasedNdetaTask.h:892
 AliBasedNdetaTask.h:893
 AliBasedNdetaTask.h:894
 AliBasedNdetaTask.h:895
 AliBasedNdetaTask.h:896
 AliBasedNdetaTask.h:897
 AliBasedNdetaTask.h:898
 AliBasedNdetaTask.h:899
 AliBasedNdetaTask.h:900
 AliBasedNdetaTask.h:901
 AliBasedNdetaTask.h:902
 AliBasedNdetaTask.h:903
 AliBasedNdetaTask.h:904
 AliBasedNdetaTask.h:905
 AliBasedNdetaTask.h:906
 AliBasedNdetaTask.h:907
 AliBasedNdetaTask.h:908
 AliBasedNdetaTask.h:909
 AliBasedNdetaTask.h:910
 AliBasedNdetaTask.h:911
 AliBasedNdetaTask.h:912
 AliBasedNdetaTask.h:913
 AliBasedNdetaTask.h:914
 AliBasedNdetaTask.h:915
 AliBasedNdetaTask.h:916
 AliBasedNdetaTask.h:917
 AliBasedNdetaTask.h:918
 AliBasedNdetaTask.h:919
 AliBasedNdetaTask.h:920
 AliBasedNdetaTask.h:921
 AliBasedNdetaTask.h:922
 AliBasedNdetaTask.h:923
 AliBasedNdetaTask.h:924
 AliBasedNdetaTask.h:925
 AliBasedNdetaTask.h:926
 AliBasedNdetaTask.h:927
 AliBasedNdetaTask.h:928
 AliBasedNdetaTask.h:929
 AliBasedNdetaTask.h:930
 AliBasedNdetaTask.h:931
 AliBasedNdetaTask.h:932
 AliBasedNdetaTask.h:933
 AliBasedNdetaTask.h:934
 AliBasedNdetaTask.h:935
 AliBasedNdetaTask.h:936
 AliBasedNdetaTask.h:937
 AliBasedNdetaTask.h:938
 AliBasedNdetaTask.h:939
 AliBasedNdetaTask.h:940
 AliBasedNdetaTask.h:941
 AliBasedNdetaTask.h:942
 AliBasedNdetaTask.h:943
 AliBasedNdetaTask.h:944
 AliBasedNdetaTask.h:945
 AliBasedNdetaTask.h:946
 AliBasedNdetaTask.h:947
 AliBasedNdetaTask.h:948
 AliBasedNdetaTask.h:949
 AliBasedNdetaTask.h:950
 AliBasedNdetaTask.h:951
 AliBasedNdetaTask.h:952
 AliBasedNdetaTask.h:953
 AliBasedNdetaTask.h:954
 AliBasedNdetaTask.h:955
 AliBasedNdetaTask.h:956
 AliBasedNdetaTask.h:957
 AliBasedNdetaTask.h:958
 AliBasedNdetaTask.h:959
 AliBasedNdetaTask.h:960
 AliBasedNdetaTask.h:961
 AliBasedNdetaTask.h:962
 AliBasedNdetaTask.h:963
 AliBasedNdetaTask.h:964
 AliBasedNdetaTask.h:965
 AliBasedNdetaTask.h:966
 AliBasedNdetaTask.h:967
 AliBasedNdetaTask.h:968
 AliBasedNdetaTask.h:969
 AliBasedNdetaTask.h:970
 AliBasedNdetaTask.h:971
 AliBasedNdetaTask.h:972
 AliBasedNdetaTask.h:973
 AliBasedNdetaTask.h:974
 AliBasedNdetaTask.h:975
 AliBasedNdetaTask.h:976