ROOT logo
/* $Id$ */

#include "dNdEtaAnalysis.h"

#include <TFile.h>
#include <TH3F.h>
#include <TH2F.h>
#include <TH1F.h>
#include <TMath.h>
#include <TCanvas.h>
#include <TCollection.h>
#include <TIterator.h>
#include <TList.h>
#include <TLegend.h>
#include <TLine.h>
#include <TParameter.h>

#include <AliLog.h>
#include "AlidNdEtaCorrection.h"
#include <AliCorrection.h>
#include <AliPWG0Helper.h>
#include <AliCorrectionMatrix2D.h>
#include <AliCorrectionMatrix3D.h>

//____________________________________________________________________
ClassImp(dNdEtaAnalysis)

//____________________________________________________________________
dNdEtaAnalysis::dNdEtaAnalysis() :
  TNamed(),
  fData(0),
  fMult(0),
  fPtDist(0),
  fAnalysisMode(AliPWG0Helper::kInvalid),
  fTag(),
  fvtxMin(-9.99),
  fvtxMax(9.99)
{
  // default constructor

  for (Int_t i=0; i<kVertexBinning; ++i)
  {
    fdNdEta[i] = 0;
    fdNdEtaPtCutOffCorrected[i] = 0;
  }
}

//____________________________________________________________________
dNdEtaAnalysis::dNdEtaAnalysis(const Char_t* name, const Char_t* title, AliPWG0Helper::AnalysisMode analysisMode) :
  TNamed(name, title),
  fData(0),
  fMult(0),
  fPtDist(0),
  fAnalysisMode(analysisMode),
  fTag(),
  fvtxMin(-9.99),
  fvtxMax(9.99)
{
  // constructor

  fData = new AliCorrection("Analysis", Form("%s Analysis", title), analysisMode);

  // do not add this hists to the directory
  Bool_t oldStatus = TH1::AddDirectoryStatus();
  TH1::AddDirectory(kFALSE);

  fMult = new TH1F("TriggeredMultiplicity", "Triggered Events;raw multiplicity;entries", 1000, -0.5, 999.5);

  TH1* histForBinning = fData->GetTrackCorrection()->GetGeneratedHistogram();
  fdNdEta[0] = new TH1F("dNdEta", "dN_{ch}/d#eta;#eta;dN_{ch}/d#eta", histForBinning->GetNbinsY(), histForBinning->GetYaxis()->GetXbins()->GetArray());

  fdNdEtaPtCutOffCorrected[0] = dynamic_cast<TH1F*> (fdNdEta[0]->Clone(Form("%s_corrected", fdNdEta[0]->GetName())));

  for (Int_t i=1; i<kVertexBinning; ++i)
  {
    fdNdEta[i]    = dynamic_cast<TH1F*> (fdNdEta[0]->Clone(Form("%s_%d", fdNdEta[0]->GetName(), i)));
    fdNdEtaPtCutOffCorrected[i]    = dynamic_cast<TH1F*> (fdNdEtaPtCutOffCorrected[0]->Clone(Form("%s_%d", fdNdEtaPtCutOffCorrected[0]->GetName(), i)));
  }

  fPtDist = new TH1F("Pt", "p_{T} distribution;p_{T} [GeV/c];#frac{dN}{d#eta dp_{T}} [c/GeV]", histForBinning->GetNbinsZ(), histForBinning->GetZaxis()->GetXbins()->GetArray());

  TH1::AddDirectory(oldStatus);
}

//____________________________________________________________________
dNdEtaAnalysis::~dNdEtaAnalysis()
{
  // destructor

  if (fData)
  {
    delete fData;
    fData = 0;
  }

  if (fMult)
  {
    delete fMult;
    fMult = 0;
  }

  for (Int_t i=0; i<kVertexBinning; ++i)
  {
    if (fdNdEta[i])
    {
      delete fdNdEta[i];
      fdNdEta[i] = 0;
    }
    if (fdNdEtaPtCutOffCorrected[i])
    {
      delete fdNdEtaPtCutOffCorrected[i];
      fdNdEtaPtCutOffCorrected[i] = 0;
    }
  }

  if (fPtDist)
  {
    delete fPtDist;
    fPtDist = 0;
  }
}

//_____________________________________________________________________________
dNdEtaAnalysis::dNdEtaAnalysis(const dNdEtaAnalysis &c) :
  TNamed(c),
  fData(0),
  fMult(0),
  fPtDist(0),
  fAnalysisMode(AliPWG0Helper::kInvalid),
  fTag(),
  fvtxMin(-9.99),
  fvtxMax(9.99)
{
  //
  // dNdEtaAnalysis copy constructor
  //

  ((dNdEtaAnalysis &) c).Copy(*this);
}

//_____________________________________________________________________________
dNdEtaAnalysis &dNdEtaAnalysis::operator=(const dNdEtaAnalysis &c)
{
  //
  // Assignment operator
  //

  if (this != &c) ((dNdEtaAnalysis &) c).Copy(*this);
  return *this;
}

//_____________________________________________________________________________
void dNdEtaAnalysis::Copy(TObject &c) const
{
  //
  // Copy function
  //

  dNdEtaAnalysis& target = (dNdEtaAnalysis &) c;

  target.fData = dynamic_cast<AliCorrection*> (fData->Clone());
  target.fMult = dynamic_cast<TH1F*> (fMult->Clone());

  for (Int_t i=0; i<kVertexBinning; ++i)
  {
    target.fdNdEta[i] = dynamic_cast<TH1F*> (fdNdEta[i]->Clone());
    target.fdNdEtaPtCutOffCorrected[i] = dynamic_cast<TH1F*> (fdNdEtaPtCutOffCorrected[i]->Clone());
  }

  target.fPtDist = dynamic_cast<TH1F*> (fPtDist->Clone());

  target.fAnalysisMode = fAnalysisMode;
  target.fTag = fTag;

  TNamed::Copy((TNamed &) c);
}

//____________________________________________________________________
void dNdEtaAnalysis::FillTrack(Float_t vtx, Float_t eta, Float_t pt)
{
  // fills a track into the histograms

  fData->GetTrackCorrection()->FillMeas(vtx, eta, pt);
}

//____________________________________________________________________
void dNdEtaAnalysis::FillEvent(Float_t vtx, Float_t n)
{
  // fills an event into the histograms

  fData->GetEventCorrection()->FillMeas(vtx, n);
}

//____________________________________________________________________
void dNdEtaAnalysis::FillTriggeredEvent(Float_t n)
{
  // fills a triggered event into the histograms

  fMult->Fill(n);
}

//____________________________________________________________________
void dNdEtaAnalysis::Finish(AlidNdEtaCorrection* correction, Float_t ptCut, AlidNdEtaCorrection::CorrectionType correctionType, const char* tag, Int_t backgroundSubtraction, TH1* combinatoricsCorrection)
{
  //
  // correct with the given correction values and calculate dNdEta and pT distribution
  // the corrections that are applied can be steered by the flag correctionType
  // the measured result is not used up to a multiplicity of multCut (the bin at multCut is the first that is used!)
  //

  fTag.Form("Correcting dN/deta spectrum (data: %d) >>> %s <<<. Correction type: %d, pt cut: %.2f.", (Int_t) fAnalysisMode, tag, (Int_t) correctionType, ptCut);
  Printf("\n\n%s", fTag.Data());
  
  if (combinatoricsCorrection)
    Printf("Combinatorics subtraction active!");

  // set corrections to 1
  fData->SetCorrectionToUnity();

  if (correction && correctionType != AlidNdEtaCorrection::kNone)
  {
    TH3* trackCorr = fData->GetTrackCorrection()->GetCorrectionHistogram();
    TH2* eventCorr = fData->GetEventCorrection()->GetCorrectionHistogram();

    if (correctionType >= AlidNdEtaCorrection::kTrack2Particle)
      trackCorr->Multiply(correction->GetTrack2ParticleCorrection()->GetTrackCorrection()->GetCorrectionHistogram());

    if (correctionType >= AlidNdEtaCorrection::kVertexReco)
    {
      trackCorr->Multiply(correction->GetVertexRecoCorrection()->GetTrackCorrection()->GetCorrectionHistogram());
      eventCorr->Multiply(correction->GetVertexRecoCorrection()->GetEventCorrection()->GetCorrectionHistogram());

      // set bin with multiplicity 0 to unity (correction has no meaning in this bin)
      for (Int_t i=0; i<=eventCorr->GetNbinsX()+1; i++)
        eventCorr->SetBinContent(i, 1, 1);
    }

    switch (correctionType)
    {
      case AlidNdEtaCorrection::kINEL :
      {
        trackCorr->Multiply(correction->GetTriggerBiasCorrectionINEL()->GetTrackCorrection()->GetCorrectionHistogram());
        eventCorr->Multiply(correction->GetTriggerBiasCorrectionINEL()->GetEventCorrection()->GetCorrectionHistogram());
        break;
      }
      case AlidNdEtaCorrection::kNSD :
      {
        trackCorr->Multiply(correction->GetTriggerBiasCorrectionNSD()->GetTrackCorrection()->GetCorrectionHistogram());
        eventCorr->Multiply(correction->GetTriggerBiasCorrectionNSD()->GetEventCorrection()->GetCorrectionHistogram());
        break;
      }
      case AlidNdEtaCorrection::kND :
      {
        trackCorr->Multiply(correction->GetTriggerBiasCorrectionND()->GetTrackCorrection()->GetCorrectionHistogram());
        eventCorr->Multiply(correction->GetTriggerBiasCorrectionND()->GetEventCorrection()->GetCorrectionHistogram());
        break;
      }
      case AlidNdEtaCorrection::kOnePart :
      {
        trackCorr->Multiply(correction->GetTriggerBiasCorrectionOnePart()->GetTrackCorrection()->GetCorrectionHistogram());
        eventCorr->Multiply(correction->GetTriggerBiasCorrectionOnePart()->GetEventCorrection()->GetCorrectionHistogram());
        break;
      }
      default : break;
    }
  }
  else
    printf("INFO: No correction applied\n");

  TH2F* rawMeasured = (TH2F*) fData->GetEventCorrection()->GetMeasuredHistogram()->Clone("rawMeasured");

  fData->ResetErrorsOnCorrections();
  fData->Multiply();
  
  if (correction && correctionType >= AlidNdEtaCorrection::kVertexReco)
  {
    // There are no events with vertex that have 0 multiplicity, therefore
    //   populate bin with 0 multiplicity with the following idea:
    //     alpha = triggered events with vertex at a given vertex position / all triggered events with vertex
    //     triggered events without vertex and 0 multiplicity at a given vertex position = alpha * all triggered events with 0 multiplicity
    //   afterwards we still correct for the trigger efficiency
    // at the same time calculate expectation from MC (not used, just to check the value)

    //TH2* measuredEvents = fData->GetEventCorrection()->GetMeasuredHistogram();
    TH2* correctedEvents = fData->GetEventCorrection()->GetGeneratedHistogram();

    TH2* eAll  =    correction->GetCorrection(correctionType)->GetEventCorrection()->GetGeneratedHistogram();
    TH2* eTrig =    correction->GetVertexRecoCorrection()->GetEventCorrection()->GetGeneratedHistogram();
    TH2* eTrigVtx = correction->GetVertexRecoCorrection()->GetEventCorrection()->GetMeasuredHistogram();
    TH1* eTrigVtx_projx = eTrigVtx->ProjectionX("eTrigVtx_projx", 2, eTrigVtx->GetNbinsY()+1);

    //new TCanvas; correctedEvents->DrawCopy("TEXT");

    // start above 0 mult. bin with integration
    TH1* vertexDist = rawMeasured->ProjectionX("vertexdist_measured", 2, rawMeasured->GetNbinsY()+1);
    //new TCanvas; vertexDist->DrawCopy();

    Int_t allEventsWithVertex = (Int_t) vertexDist->Integral(0, vertexDist->GetNbinsX()+1); // include under/overflow!
    Int_t triggeredEventsWith0Mult = (Int_t) fMult->GetBinContent(1);

    Printf("%d triggered events with 0 mult. -- %d triggered events with vertex", triggeredEventsWith0Mult, allEventsWithVertex);
    
    if (backgroundSubtraction > 0)
    {
      triggeredEventsWith0Mult -= backgroundSubtraction;
      Printf("Subtracted %d background events from 0 mult. bin", backgroundSubtraction);
    }

    TH1* kineBias = (TH1*) vertexDist->Clone("kineBias");
    kineBias->Reset();
    
    // loop over vertex bins
    for (Int_t i = 1; i <= rawMeasured->GetNbinsX(); i++)
    {
      Double_t alpha = (Double_t) vertexDist->GetBinContent(i) / allEventsWithVertex;
      Double_t events = alpha * triggeredEventsWith0Mult;

      if (eTrigVtx_projx->GetBinContent(i) == 0)
        continue;

      // calculate how many events we would have got with a pure MC-based correction
      //   in the given bin: measured events with vertex (mult > 0) * triggered events with mult 0 (mc) / events with vertex and mult > 0 (mc) * trigger correction for bin 0
      Printf("+++ 0-Bin Correction for bin %d +++", i);
      Printf("  Events: %f", vertexDist->GetBinContent(i));
      Printf("  Ratio triggered N==0 / triggered vertex N>0: %f", eTrig->GetBinContent(i, 1) / eTrigVtx_projx->GetBinContent(i));
      Printf("  Ratio all N==0 / triggered vertex N>0: %f", eAll->GetBinContent(i, 1) / eTrigVtx_projx->GetBinContent(i));
      Printf("  Correction factor: %f", fData->GetEventCorrection()->GetCorrectionHistogram()->GetBinContent(i, 1));

      //Double_t mcEvents = vertexDist->GetBinContent(i) * eTrig->GetBinContent(i, 1) / eTrigVtx_projx->GetBinContent(i) * fData->GetEventCorrection()->GetCorrectionHistogram()->GetBinContent(i, 1);
      Double_t mcEvents = vertexDist->GetBinContent(i) * eAll->GetBinContent(i, 1) / eTrigVtx_projx->GetBinContent(i);
      if (backgroundSubtraction == -1)
      {
        Printf("Using MC value for 0-bin correction!"); 
        events = mcEvents;
      }
      else
      {
        Double_t fZ = eTrigVtx_projx->Integral(0, eTrigVtx_projx->GetNbinsX()+1) / eTrigVtx_projx->GetBinContent(i) *
          eTrig->GetBinContent(i, 1) / eTrig->Integral(0, eTrig->GetNbinsX()+1, 1, 1);
          
        kineBias->SetBinContent(i, fZ);

        events *= fZ;

        // multiply with trigger correction if set above
        events *= fData->GetEventCorrection()->GetCorrectionHistogram()->GetBinContent(i, 1);

        Printf("  Bin %d, alpha is %.2f%%, fZ is %.3f, number of events with 0 mult.: %.2f (MC comparison: %.2f)", i, alpha * 100., fZ, events, mcEvents);
      }

      correctedEvents->SetBinContent(i, 1, events);
    }
    
    Printf("In |vtx-z| < 10 cm: %d events have been added", (Int_t) correctedEvents->Integral(vertexDist->FindBin(-9.9), vertexDist->FindBin(9.9), 1, 1));

    //new TCanvas; correctedEvents->DrawCopy("TEXT");
    //new TCanvas; kineBias->DrawCopy();
  }

  fData->PrintInfo(ptCut);

  TH3* dataHist = fData->GetTrackCorrection()->GetGeneratedHistogram();

  // integrate multiplicity axis out (include under/overflow bins!!!)
  TH2* tmp = fData->GetEventCorrection()->GetGeneratedHistogram();

  TH1D* vertexHist = (TH1D*) tmp->ProjectionX("_px", 0, tmp->GetNbinsY() + 1, "e");

  // create pt hist
  if (fAnalysisMode & AliPWG0Helper::kTPC || fAnalysisMode & AliPWG0Helper::kTPCITS)
  {
    // reset all ranges
    dataHist->GetXaxis()->SetRange(0, 0);
    dataHist->GetYaxis()->SetRange(0, 0);
    dataHist->GetZaxis()->SetRange(0, 0);

    // vtx cut
    Int_t vertexBinBegin = dataHist->GetXaxis()->FindBin(-5);
    Int_t vertexBinEnd = dataHist->GetXaxis()->FindBin(5);
    dataHist->GetXaxis()->SetRange(vertexBinBegin, vertexBinEnd);
    Float_t nEvents = vertexHist->Integral(vertexBinBegin, vertexBinEnd);

    if (nEvents > 0)
    {
      // eta cut
      dataHist->GetYaxis()->SetRange(dataHist->GetYaxis()->FindBin(-0.8), dataHist->GetYaxis()->FindBin(0.8));
      Float_t etaWidth = 1.6;

      TH1D* ptHist = static_cast<TH1D*> (dataHist->Project3D("ze"));

      for (Int_t i=1; i<=fPtDist->GetNbinsX(); ++i)
      {
        Float_t binSize = fPtDist->GetBinWidth(i);
        fPtDist->SetBinContent(i, ptHist->GetBinContent(i) / binSize / nEvents / etaWidth);
        fPtDist->SetBinError(i, ptHist->GetBinError(i) / binSize / nEvents / etaWidth);
      }

      delete ptHist;
    }
    else
      printf("ERROR: nEvents is 0!\n");
  }

  // reset all ranges
  dataHist->GetXaxis()->SetRange(0, 0);
  dataHist->GetYaxis()->SetRange(0, 0);
  dataHist->GetZaxis()->SetRange(0, 0);

  // integrate over pt (with pt cut) (TPC, TPCITS) or multiplicity (SPD)
  Int_t ptLowBin = 1;
  if (ptCut > 0 && (fAnalysisMode & AliPWG0Helper::kTPC || fAnalysisMode & AliPWG0Helper::kTPCITS))
    ptLowBin = dataHist->GetZaxis()->FindBin(ptCut);
    
  //new TCanvas; dataHist->DrawCopy();

  //dataHist->Sumw2();
  dataHist->GetZaxis()->SetRange(ptLowBin, dataHist->GetZaxis()->GetNbins()+1);
  printf("pt/multiplicity range %d %d\n", ptLowBin, dataHist->GetZaxis()->GetNbins()+1);
  TH2D* vtxVsEta = dynamic_cast<TH2D*> (dataHist->Project3D("yx2e"));
  
  //new TCanvas; vtxVsEta->Draw("COLZ");

  dataHist->GetZaxis()->SetRange(0, 0);
  vtxVsEta->GetXaxis()->SetTitle(dataHist->GetXaxis()->GetTitle());
  vtxVsEta->GetYaxis()->SetTitle(dataHist->GetYaxis()->GetTitle());

  if (vtxVsEta == 0)
  {
    printf("ERROR: pt/multiplicity integration failed\n");
    return;
  }

  //new TCanvas(tag, tag, 800, 600);  vtxVsEta->DrawCopy("COLZ");
  
  // clear result histograms
  for (Int_t vertexPos=0; vertexPos<kVertexBinning; ++vertexPos)
  {
    fdNdEta[vertexPos]->Reset();
    fdNdEtaPtCutOffCorrected[vertexPos]->Reset();
  }

  //const Float_t vertexRangeBegin[kVertexBinning] = { -9.99,  -9.99,  0.01 };
  //const Float_t vertexRangeEnd[kVertexBinning]   = {  9.99,  -0.01,  9.99 };
  const Float_t vertexRangeBegin[kVertexBinning] = { fvtxMin,  fvtxMin,  0.01 };
  const Float_t vertexRangeEnd[kVertexBinning]   = { fvtxMax,  -0.01,  fvtxMax };

  for (Int_t iEta=1; iEta<=vtxVsEta->GetNbinsY(); iEta++)
  {
    // loop over vertex ranges
    for (Int_t vertexPos=0; vertexPos<kVertexBinning; ++vertexPos)
    {
      Int_t vertexBinBegin = vertexHist->GetXaxis()->FindBin(vertexRangeBegin[vertexPos]);
      Int_t vertexBinEnd   = vertexHist->GetXaxis()->FindBin(vertexRangeEnd[vertexPos]);

      const Int_t *binBegin = 0;
      const Int_t maxBins = 20;
      const Int_t maxBins1 = 40;
      
      if (dataHist->GetNbinsY() != maxBins)
        AliFatal(Form("Binning of acceptance is different from data histogram: data=%d, acceptance=%d", dataHist->GetNbinsY(), maxBins));

      // adjust acceptance range
      // produce with drawPlots.C: DetermineAcceptance(...)

      //const Int_t binBeginSPD[maxBins] = {19, 18, 17, 15, 14, 12, 10, 9, 8, 7, 6, 6, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4};
      //const Int_t binBeginTPC[maxBins] = {-1, -1, -1, -1, -1, -1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, -1, -1, -1, -1, -1};
      //const Int_t binBeginTPCITS[maxBins] = {-1, -1, -1, -1, -1, -1, -1, 14, 10, 8, 7, 6, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, -1, -1, -1, -1, -1, -1, -1};

      const Int_t binBeginSPD[maxBins1] = {19, 18, 17, 15, 14, 12, 10, 9, 8, 7, 6, 6, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4};
      const Int_t binBeginTPC[maxBins1] = {-1, -1, -1, -1, -1, -1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, -1, -1, -1, -1, -1};
      const Int_t binBeginTPCITS[maxBins] = {-1, -1, -1, -1, -1, -1, 4, 4, 4, 4, 4, 4, 4, 4, -1, -1, -1, -1, -1, -1};
      if (fAnalysisMode & AliPWG0Helper::kSPD)
      {
        binBegin = binBeginSPD;
      }
      else if (fAnalysisMode & AliPWG0Helper::kTPC)
      {
        binBegin = binBeginTPC;
      }
      else if (fAnalysisMode & AliPWG0Helper::kTPCITS)
      {
        binBegin = binBeginTPCITS;
      }

      Int_t vtxBegin = 1;
      Int_t vtxEnd   = maxBins;

      if (binBegin)
      {
        vtxBegin = binBegin[iEta - 1];
        vtxEnd = (Int_t) vtxVsEta->GetNbinsX() + 1 - binBegin[maxBins - iEta];
      }
      else
        Printf("WARNING: No acceptance applied!");
      
      // eta range not accessible
      if (vtxBegin == -1)
        continue;
      
      //Printf("%d %d | %d %d", vtxBegin, vertexHist->GetXaxis()->FindBin(GetVtxMin(eta)), vtxEnd, vertexHist->GetXaxis()->FindBin(-GetVtxMin(-eta)));
      //vtxBegin = vertexHist->GetXaxis()->FindBin(GetVtxMin(eta));
      //vtxEnd = vertexHist->GetXaxis()->FindBin(-GetVtxMin(-eta));

      //Float_t eta = vtxVsEta->GetYaxis()->GetBinCenter(iEta);
      //printf("Eta bin: %d (%f) Vertex range: %d; before: %d %d (range) %d %d (acceptance)", iEta, eta, vertexPos, vertexBinBegin, vertexBinEnd, vtxBegin, vtxEnd);
      vertexBinBegin = TMath::Max(vertexBinBegin, vtxBegin);
      vertexBinEnd =   TMath::Min(vertexBinEnd, vtxEnd);
      //Printf(" after:  %d %d", vertexBinBegin, vertexBinEnd);

      // no data for this bin
      if (vertexBinBegin > vertexBinEnd)
      {
        //Printf("Bin empty. Skipped");
        continue;
      }

      Float_t totalEvents = 0;
      Float_t sum = 0;
      Float_t sumError2 = 0;
      Float_t unusedTracks = 0;
      Float_t unusedEvents = 0;
      for (Int_t iVtx = 1; iVtx <= vtxVsEta->GetNbinsX(); iVtx++)
      {
        if (iVtx >= vertexBinBegin && iVtx <= vertexBinEnd)
        {
          if (vtxVsEta->GetBinContent(iVtx, iEta) != 0)
          {
            sum += vtxVsEta->GetBinContent(iVtx, iEta);

            if (sumError2 > 10e30)
              Printf("WARNING: sum of error2 is dangerously large - be prepared for crash... ");

            sumError2 = sumError2 + TMath::Power(vtxVsEta->GetBinError(iVtx, iEta),2);
          }
          totalEvents += vertexHist->GetBinContent(iVtx);
        }
        else
        {
          unusedTracks += vtxVsEta->GetBinContent(iVtx, iEta);
          unusedEvents += vertexHist->GetBinContent(iVtx);
        }
      }

      if (totalEvents == 0)
      {
        printf("WARNING: No events for hist %d %d %d\n", vertexPos, vertexBinBegin, vertexBinEnd);
        continue;
      }

      Float_t ptCutOffCorrection = 1;

      // find pt cut off correction factor
      if ((fAnalysisMode & AliPWG0Helper::kTPC || fAnalysisMode & AliPWG0Helper::kTPCITS) && (fAnalysisMode & AliPWG0Helper::kFieldOn))
      {
        if (correction && ptCut > 0)
            ptCutOffCorrection = correction->GetMeasuredFraction(correctionType, ptCut, vtxVsEta->GetYaxis()->GetBinCenter(iEta), vertexBinBegin, vertexBinEnd);

        if (ptCutOffCorrection <= 0)
        {
            printf("UNEXPECTED: ptCutOffCorrection is %f for hist %d %d %d\n", ptCutOffCorrection, vertexPos, vertexBinBegin, vertexBinEnd);
            continue;
        }
      }

      //printf("Eta: %d (%f) Vertex Range: %d %d, Event Count %f, Track Sum: %f, Track Sum corrected: %f \n", iEta, vtxVsEta->GetYaxis()->GetBinCenter(iEta), vertexBinBegin, vertexBinEnd, totalEvents, sum, sum / ptCutOffCorrection);

      Int_t bin = fdNdEta[vertexPos]->FindBin(vtxVsEta->GetYaxis()->GetBinCenter(iEta));
      if (bin > 0 && bin <= fdNdEta[vertexPos]->GetNbinsX())
      {
        Float_t dndeta = sum / totalEvents;
        Float_t error  = TMath::Sqrt(sumError2) / totalEvents;

        // correct for additional combinatorics
        Float_t combCorr = 0;
        if (combinatoricsCorrection)
        {
          combCorr = combinatoricsCorrection->GetBinContent(combinatoricsCorrection->GetXaxis()->FindBin(vtxVsEta->GetYaxis()->GetBinCenter(iEta)));
          dndeta *= combCorr;
          error *= combCorr;
        }
        
        dndeta = dndeta / fdNdEta[vertexPos]->GetBinWidth(bin);
        error  = error / fdNdEta[vertexPos]->GetBinWidth(bin);

        fdNdEta[vertexPos]->SetBinContent(bin, dndeta);
        fdNdEta[vertexPos]->SetBinError(bin, error);

        dndeta /= ptCutOffCorrection;
        error  /= ptCutOffCorrection;

        fdNdEtaPtCutOffCorrected[vertexPos]->SetBinContent(bin, dndeta);
        fdNdEtaPtCutOffCorrected[vertexPos]->SetBinError(bin, error);

        //Printf("Bin %d has dN/deta = %f +- %f; %.2f tracks %.2f events (outside acceptance: %.2f tracks, %.2f events) (comb. corr: %f)", bin, dndeta, error, sum, totalEvents, unusedTracks, unusedEvents, combCorr);
      }
    }
  }
}

//____________________________________________________________________
Float_t dNdEtaAnalysis::GetVtxMin(Float_t eta)
{
  // helper function for the SPD acceptance
  // the function returns the beginning of the acceptance window in z vertex position as function of eta
  // to get the maximum: -GetVtxMin(-eta)

  Float_t a[2] = { -15, 0 };
  Float_t b[2] = { 0, -1.4 };
  Float_t c[2] = { 15, -2.2 };

  Float_t meanAB[2];
  meanAB[0] = (b[0] + a[0]) / 2;
  meanAB[1] = (b[1] + a[1]) / 2;

  Float_t meanBC[2];
  meanBC[0] = (c[0] + b[0]) / 2;
  meanBC[1] = (c[1] + b[1]) / 2;

  Float_t mAB = (b[1] - a[1]) / (b[0] - a[0]);
  Float_t mBC = (c[1] - b[1]) / (c[0] - b[0]);

  Float_t bAB = meanAB[1] - mAB * meanAB[0];
  Float_t bBC = meanBC[1] - mBC * meanBC[0];

  if (eta > b[1])
    return 1.0 / mAB * eta - bAB / mAB;

  return 1.0 / mBC * eta - bBC / mBC;
}

//____________________________________________________________________
void dNdEtaAnalysis::SaveHistograms()
{
  // save the histograms to a directory with the name of this class (retrieved from TNamed)

  gDirectory->mkdir(GetName());
  gDirectory->cd(GetName());

  if (fData)
  {
    fData->SaveHistograms();
  }
  else
    printf("dNdEtaAnalysis::SaveHistograms: UNEXPECTED: fData is 0\n");

  if (fMult)
  {
    fMult->Write();
  }
  else
    printf("dNdEtaAnalysis::SaveHistograms: UNEXPECTED: fMult is 0\n");

  if (fPtDist)
    fPtDist       ->Write();
  else
    printf("dNdEtaAnalysis::SaveHistograms: UNEXPECTED: fPtDist is 0\n");

  for (Int_t i=0; i<kVertexBinning; ++i)
  {
    if (fdNdEta[i])
      fdNdEta[i]->Write();
    else
      printf("dNdEtaAnalysis::SaveHistograms: UNEXPECTED: fdNdEta[%d] is 0\n", i);

    if (fdNdEtaPtCutOffCorrected[i])
      fdNdEtaPtCutOffCorrected[i]->Write();
    else
      printf("dNdEtaAnalysis::SaveHistograms: UNEXPECTED: fdNdEtaPtCutOffCorrected[%d] is 0\n", i);
  }

  TNamed named("fTag", fTag.Data());
  named.Write();

  TParameter<Int_t> param("fAnalysisMode", fAnalysisMode);
  param.Write();

  gDirectory->cd("../");
}

void dNdEtaAnalysis::LoadHistograms(const Char_t* dir)
{
  // loads the histograms from a directory with the name of this class (retrieved from TNamed)

  if (!dir)
    dir = GetName();

  gDirectory->cd(dir);

  fData->LoadHistograms();
  fMult = dynamic_cast<TH1F*> (gDirectory->Get(fMult->GetName()));

  for (Int_t i=0; i<kVertexBinning; ++i)
  {
    fdNdEta[i] = dynamic_cast<TH1F*> (gDirectory->Get(fdNdEta[i]->GetName()));
    fdNdEtaPtCutOffCorrected[i] = dynamic_cast<TH1F*> (gDirectory->Get(fdNdEtaPtCutOffCorrected[i]->GetName()));
  }

  fPtDist = dynamic_cast<TH1F*> (gDirectory->Get(fPtDist->GetName()));

  if (static_cast<TNamed*> (gDirectory->Get("fTag")))
    fTag = (static_cast<TNamed*> (gDirectory->Get("fTag")))->GetTitle();

  if (static_cast<TParameter<Int_t>*> (gDirectory->Get("fAnalysisMode")))
    fAnalysisMode = (AliPWG0Helper::AnalysisMode) (static_cast<TParameter<Int_t>*> (gDirectory->Get("fAnalysisMode")))->GetVal();

  gDirectory->cd("../");
}

//____________________________________________________________________
void dNdEtaAnalysis::DrawHistograms(Bool_t simple)
{
  // draws the histograms

  if (!simple)
  {
    if (fData)
      fData->DrawHistograms(GetName());

    TCanvas* canvas = new TCanvas(Form("%s_dNdEtaAnalysis", GetName()), Form("%s_dNdEtaAnalysis", GetName()), 800, 400);
    canvas->Divide(2, 1);

    canvas->cd(1);
    if (fdNdEtaPtCutOffCorrected[0])
      fdNdEtaPtCutOffCorrected[0]->DrawCopy();

    if (fdNdEta[0])
    {
      fdNdEta[0]->SetLineColor(kRed);
      fdNdEta[0]->DrawCopy("SAME");
    }

    canvas->cd(2);
    if (fPtDist)
      fPtDist->DrawCopy();
  }

    // histograms for different vertices?
  if (kVertexBinning > 0)
  {
      // doesnt work, but i dont get it, giving up...
    TCanvas* canvas2 = new TCanvas(Form("%s_dNdEtaAnalysisVtx", GetName()), Form("%s_dNdEtaAnalysisVtx", GetName()), 450, 450);
    TCanvas* canvas3 = 0;
    if (!simple)
      canvas3 = new TCanvas(Form("%s_dNdEtaAnalysisVtx_noptcutoff", GetName()), Form("%s_dNdEtaAnalysisVtx_noptcutoff", GetName()), 450, 450);

    //Int_t yPads = (Int_t) TMath::Ceil(((Double_t) kVertexBinning - 1) / 2);
    //printf("%d\n", yPads);
    //canvas2->Divide(2, yPads);

    TLegend* legend = new TLegend(0.4, 0.2, 0.6, 0.4);

    for (Int_t i=0; i<kVertexBinning; ++i)
    {
      if (fdNdEtaPtCutOffCorrected[i])
      {
        canvas2->cd();

        fdNdEtaPtCutOffCorrected[i]->SetLineColor(i+1);
        fdNdEtaPtCutOffCorrected[i]->DrawCopy((i == 0) ? "" : "SAME");
        legend->AddEntry(fdNdEtaPtCutOffCorrected[i], (i == 0) ? "Vtx All" : Form("Vtx Bin %d", i-1));
      }
      if (canvas3 && fdNdEta[i])
      {
        canvas3->cd();

        fdNdEta[i]->SetLineColor(i+1);
        fdNdEta[i]->DrawCopy((i == 0) ? "" : "SAME");
      }
    }

    canvas2->cd();
    legend->Draw();
    canvas2->SaveAs(Form("%s_%s.gif", canvas2->GetName(), GetName()));

    if (canvas3)
    {
      canvas3->cd();
      legend->Draw();
    }
  }

  if (kVertexBinning == 3)
  {
     TH1* clone = dynamic_cast<TH1*> (fdNdEtaPtCutOffCorrected[1]->Clone("clone"));
     TH1* clone2 = dynamic_cast<TH1*> (fdNdEtaPtCutOffCorrected[2]->Clone("clone2"));

     if (clone && clone2)
     {
        TCanvas* canvas4 = new TCanvas(Form("%s_dNdEtaAnalysisVtxRatios", GetName()), Form("%s_dNdEtaAnalysisVtxRatios", GetName()), 450, 450);

        clone->Divide(fdNdEtaPtCutOffCorrected[0]);
        clone->GetYaxis()->SetRangeUser(0.95, 1.05);
        clone->DrawCopy();

        clone2->Divide(fdNdEtaPtCutOffCorrected[0]);
        clone2->DrawCopy("SAME");

        TLine* line = new TLine(-1, 1, 1, 1);
        line->Draw();

        canvas4->SaveAs(Form("%s_%s.gif", canvas4->GetName(), GetName()));
     }
   }
}

Long64_t dNdEtaAnalysis::Merge(TCollection* list)
{
  // Merges a list of dNdEtaAnalysis objects with this one.
  // This is needed for PROOF.
  // Returns the number of merged objects (including this)

  if (!list)
    return 0;

  if (list->IsEmpty())
    return 1;

  TIterator* iter = list->MakeIterator();
  TObject* obj;

  // sub collections
  const Int_t nCollections = 2 * kVertexBinning + 3; // 3 standalone hists, 3 arrays of size kVertexBinning
  TList* collections[nCollections];
  for (Int_t i=0; i<nCollections; ++i)
    collections[i] = new TList;

  Int_t count = 0;
  while ((obj = iter->Next()))
  {
    dNdEtaAnalysis* entry = dynamic_cast<dNdEtaAnalysis*> (obj);
    if (entry == 0)
      continue;

    collections[0]->Add(entry->fData);
    collections[1]->Add(entry->fMult);
    collections[2]->Add(entry->fPtDist);

    for (Int_t i=0; i<kVertexBinning; ++i)
    {
      collections[3+i]->Add(entry->fdNdEta[i]);
      collections[3+kVertexBinning+i]->Add(entry->fdNdEtaPtCutOffCorrected[i]);
    }

    ++count;
  }

  fData->Merge(collections[0]);
  fMult->Merge(collections[1]);
  fPtDist->Merge(collections[2]);

  for (Int_t i=0; i<kVertexBinning; ++i)
  {
    fdNdEta[i]->Merge(collections[3+i]);
    fdNdEtaPtCutOffCorrected[i]->Merge(collections[3+kVertexBinning+i]);
  }

  for (Int_t i=0; i<nCollections; ++i)
    delete collections[i];

  return count+1;
}


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