ROOT logo
// Dihadron correlations task - simple task to read ESD or AOD input,
// calculate same- and mixed-event correlations, and fill THnSparse
// output. -A. Adare, Apr 2011

#include <TAxis.h>
#include <TCanvas.h>
#include <TChain.h>
#include <TFormula.h>
#include <TH1.h>
#include <TH2.h>
#include <TH3.h>
#include <THn.h>
#include <TProfile2D.h>
#include <TROOT.h>
#include <TTree.h>
#include "AliAnalysisUtils.h"
#include "AliAODEvent.h"
#include "AliAODInputHandler.h"
#include "AliAnalysisManager.h"
#include "AliAnalysisTask.h"
#include "AliCentrality.h"
#include "AliDhcTask.h"
#include "AliESDEvent.h"
#include "AliESDInputHandler.h"
#include "AliESDMuonTrack.h"
#include "AliESDtrackCuts.h"
#include "AliPool.h"
#include "AliVParticle.h"

using std::cout;
using std::endl;

ClassImp(AliDhcTask)

//________________________________________________________________________
AliDhcTask::AliDhcTask()
: AliAnalysisTaskSE(), fVerbosity(0), fEtaMax(1), fZVtxMax(10), fPtMin(0.25), fPtMax(15),
  fTrackDepth(1000), fPoolSize(200), fTracksName(), fDoWeights(kFALSE), fFillMuons(kFALSE),
  fRequireMuon(kFALSE), fReqPtLo(0.0), fReqPtHi(1000.0),
  fPtTACrit(kTRUE), fAllTAHists(kFALSE), fMixInEtaT(kFALSE),
  fUseMuonUtils(kFALSE), fMuonCutMask(0), fMuonTrackCuts(0x0),
  fEtaTLo(-1.0), fEtaTHi(1.0), fEtaALo(-1.0), fEtaAHi(1.0), fOmitFirstEv(kTRUE),
  fDoFillSame(kFALSE), fDoMassCut(kFALSE), fCheckVertex(kTRUE), fClassName(),
  fCentMethod("V0M"), fNBdeta(20), fNBdphi(36), fTriggerMatch(kTRUE),
  fBPtT(0x0), fBPtA(0x0), fBCent(0x0), fBZvtx(0x0),
  fMixBCent(0x0), fMixBZvtx(0x0), fHEffT(0x0), fHEffA(0x0),
  fESD(0x0), fAOD(0x0), fOutputList(0x0), fHEvt(0x0), fHEvtWTr(0x0), fHTrk(0x0), fHPoolReady(0x0),
  fHPtAss(0x0), fHPtTrg(0x0), fHPtTrgEvt(0x0),
  fHPtTrgNorm1S(0x0), fHPtTrgNorm1M(0x0), fHPtTrgNorm2S(0x0), fHPtTrgNorm2M(0x0),
  fHCent(0x0), fHZvtx(0x0), fNbins(0), fHSs(0x0), fHMs(0x0), fHPts(0x0), fHSMass(0x0), fHMMass(0x0),
  fHQATp(0x0), fHQAAp(0x0), fHQATpCorr(0x0), fHQAApCorr(0x0),
  fHQATm(0x0), fHQAAm(0x0), fHQATmCorr(0x0), fHQAAmCorr(0x0),
  fHPtCentT(0x0), fHPtCentA(0x0), fIndex(0x0),
  fCentrality(99), fZVertex(99), fEsdTPCOnly(0), fPoolMgr(0),
  fUtils(0x0)
{
  // Constructor
}

//________________________________________________________________________
AliDhcTask::AliDhcTask(const char *name, Bool_t def) 
: AliAnalysisTaskSE(name), fVerbosity(0), fEtaMax(1), fZVtxMax(10), fPtMin(0.25), fPtMax(15),
  fTrackDepth(1000), fPoolSize(200), fTracksName(), fDoWeights(kFALSE), fFillMuons(kFALSE),
  fRequireMuon(kFALSE), fReqPtLo(0.0), fReqPtHi(1000.0),
  fPtTACrit(kTRUE), fAllTAHists(kFALSE), fMixInEtaT(kFALSE),
  fUseMuonUtils(kFALSE), fMuonCutMask(0), fMuonTrackCuts(0x0),
  fEtaTLo(-1.0), fEtaTHi(1.0), fEtaALo(-1.0), fEtaAHi(1.0), fOmitFirstEv(kTRUE),
  fDoFillSame(kFALSE), fDoMassCut(kFALSE), fCheckVertex(kTRUE), fClassName(),
  fCentMethod("V0M"), fNBdeta(20), fNBdphi(36), fTriggerMatch(kTRUE),
  fBPtT(0x0), fBPtA(0x0), fBCent(0x0), fBZvtx(0x0),
  fMixBCent(0x0), fMixBZvtx(0x0), fHEffT(0x0), fHEffA(0x0),
  fESD(0x0), fAOD(0x0), fOutputList(0x0), fHEvt(0x0), fHEvtWTr(0x0), fHTrk(0x0), fHPoolReady(0x0),
  fHPtAss(0x0), fHPtTrg(0x0), fHPtTrgEvt(0x0),
  fHPtTrgNorm1S(0x0), fHPtTrgNorm1M(0x0), fHPtTrgNorm2S(0x0), fHPtTrgNorm2M(0x0),
  fHCent(0x0), fHZvtx(0x0), fNbins(0), fHSs(0x0), fHMs(0x0), fHPts(0x0), fHSMass(0x0), fHMMass(0x0),
  fHQATp(0x0), fHQAAp(0x0), fHQATpCorr(0x0), fHQAApCorr(0x0),
  fHQATm(0x0), fHQAAm(0x0), fHQATmCorr(0x0), fHQAAmCorr(0x0),
  fHPtCentT(0x0), fHPtCentA(0x0), fIndex(0x0),
  fCentrality(99), fZVertex(99), fEsdTPCOnly(0), fPoolMgr(0),
  fUtils(0x0)
{
  // Constructor

  // Define input and output slots here
  // Input slot #0 works with a TChain
  DefineInput(0, TChain::Class());
  // Output slot #0 id reserved by the base class for AOD
  // Output slot #1 writes into a TH1 container
  DefineOutput(1, TList::Class());

  fBranchNames="ESD:AliESDRun.,AliESDHeader.,PrimaryVertex.,SPDVertex.,TPCVertex.,Tracks "
               "AOD:header,tracks,vertices,";

  if (def) {
    Double_t ptt[4] = {0.25, 1.0, 2.0, 15.0};
    fBPtT  = new TAxis(3,ptt); 
    Double_t pta[4] = {0.25, 1.0, 2.0, 15.0};
    fBPtA  = new TAxis(3,pta); 
    Double_t cent[2] = {-100.0, 100.0};
    fBCent = new TAxis(1,cent);
    Double_t zvtx[2] = {-10, 10};
    fBZvtx = new TAxis(1,zvtx);
    Double_t centmix[2] = {-100.0, 100.0};
    fMixBCent = new TAxis(1,centmix);
    Double_t zvtxmix[9] = {-10,-6,-4,-2,0,2,4,6,10};
    fMixBZvtx = new TAxis(8,zvtxmix);
  }
}

//________________________________________________________________________
void AliDhcTask::UserCreateOutputObjects()
{
  // Create histograms
  // Called once (per slave on PROOF!)
  PrintDhcSettings();

  fOutputList = new TList();
  fOutputList->SetOwner(1);

  fUtils = new AliAnalysisUtils();
  if (fUseMuonUtils) {
    fMuonTrackCuts = new AliMuonTrackCuts("StdMuonCuts","StdMuonCuts");
    fMuonTrackCuts->SetCustomParamFromRun(197388,"muon_pass2"); // for LHC13b,c,d,e,f ?
    fMuonTrackCuts->SetFilterMask(fMuonCutMask);
    AliInfo(Form(" using muon track cuts with bit %u\n", fMuonCutMask));
  }

  BookHistos();
  InitEventMixer(); 
  PostData(1, fOutputList);
}

//________________________________________________________________________
void AliDhcTask::PrintDhcSettings()
{
  AliInfo(Form("Dhc Task %s settings",fName.Data()));
  AliInfo(Form(" centrality estimator %s", fCentMethod.Data()));
  AliInfo(Form(" using tracks named %s", fTracksName.Data()));
  AliInfo(Form(" efficiency correct triggers? %d", fHEffT!=0));
  if (fHEffT!=0) {
    AliInfo(Form(" %d dimensions (t)", fHEffT->GetNdimensions()));
  }
  AliInfo(Form(" efficiency correct associates? %d", fHEffA!=0));
  if (fHEffA!=0) {
    AliInfo(Form(" %d dimensions (a)", fHEffA->GetNdimensions()));
  }
  AliInfo(Form(" fill muons? %d", fFillMuons));
  AliInfo(Form(" require muon even if not filling them? %d", fRequireMuon));
  if (fRequireMuon) AliInfo(Form(" require muon with %f < pt < %f", fReqPtLo, fReqPtHi));
  AliInfo(Form(" use pTT > pTA criterion? %d", fPtTACrit));
  AliInfo(Form(" create all pTT, pTA hists? %d", fAllTAHists));
  AliInfo(Form(" Mix in eta_T bins instead of z_vertex? %d", fMixInEtaT));
  AliInfo(Form(" trigger eta range %f .. %f", fEtaTLo, fEtaTHi));
  AliInfo(Form(" associate eta range %f .. %f", fEtaALo, fEtaAHi));
  AliInfo(Form(" fill same event in any case? %d", fDoFillSame));
  AliInfo(Form(" do invariant mass cut? %d", fDoMassCut));
  AliInfo(Form(" omit first event? %d", fOmitFirstEv));
  AliInfo(Form(" check the vertex? %d", fCheckVertex));
  AliInfo(Form(" use the muon PWG muon cuts? %d", fUseMuonUtils));
}

//________________________________________________________________________
void AliDhcTask::BookHistos()
{
  // Book histograms.

  if (fVerbosity > 1) {
    AliInfo(Form("Number of pt(t) bins: %d", fBPtT->GetNbins()));
    for (Int_t i=1; i<=fBPtT->GetNbins(); i++) {
      AliInfo(Form("pt(t) bin %d, %f to %f", i, fBPtT->GetBinLowEdge(i), fBPtT->GetBinUpEdge(i)));
    }
    AliInfo(Form("Number of pt(a) bins: %d", fBPtA->GetNbins()));
    for (Int_t i=1; i<=fBPtA->GetNbins(); i++) {
      AliInfo(Form("pt(a) bin %d, %f to %f", i, fBPtA->GetBinLowEdge(i), fBPtA->GetBinUpEdge(i)));
    }
  }

  Int_t nPtAssc=fBPtA->GetNbins();
  Int_t nPtTrig=fBPtT->GetNbins();
  Int_t nCent=fBCent->GetNbins();
  Int_t nZvtx=fBZvtx->GetNbins();
  Double_t ptt[nPtTrig+1];
  ptt[0] = fBPtT->GetBinLowEdge(1);
  for (Int_t i=1; i<=nPtTrig; i++) {
    ptt[i] = fBPtT->GetBinUpEdge(i);
  }
  Double_t pta[nPtAssc+1];
  pta[0] = fBPtA->GetBinLowEdge(1);
  for (Int_t i=1; i<=nPtAssc; i++) {
    pta[i] = fBPtA->GetBinUpEdge(i);
  }
  Double_t cent[nCent+1];
  cent[0] = fBCent->GetBinLowEdge(1);
  for (Int_t i=1; i<=nCent; i++) {
    cent[i] = fBCent->GetBinUpEdge(i);
  }
  Double_t zvtx[nZvtx+1];
  zvtx[0] = fBZvtx->GetBinLowEdge(1);
  for (Int_t i=1; i<=nZvtx; i++) {
    zvtx[i] = fBZvtx->GetBinUpEdge(i);
  }
  
  fHEvt = new TH2F("fHEvt", "Event-level variables; Zvtx; Cent", nZvtx, zvtx, nCent, cent);
  fOutputList->Add(fHEvt);
  fHEvtWTr = new TH2F("fHEvtWTr", "Events with tracks; Zvtx; Cent", nZvtx, zvtx, nCent, cent);
  fOutputList->Add(fHEvtWTr);
  fHTrk = new TH2F("fHTrk", "Track-level variables",
                   100, 0, TMath::TwoPi(), 100, -fEtaMax, +fEtaMax);
  fOutputList->Add(fHTrk);
  
  // Centrality mixing axis
  Int_t nCentBins=fMixBCent->GetNbins();
  Double_t centBins[nCentBins+1];
  centBins[0] = fMixBCent->GetBinLowEdge(1);
  for (Int_t i=1; i<=nCentBins; i++) {
    centBins[i] = fMixBCent->GetBinUpEdge(i);
  }
  // Z-vertex mixing axis
  Int_t nZvtxBins=fMixBZvtx->GetNbins();
  Double_t zvtxbin[nZvtxBins+1];
  zvtxbin[0] = fMixBZvtx->GetBinLowEdge(1);
  for (Int_t i=1; i<=nZvtxBins; i++) {
    zvtxbin[i] = fMixBZvtx->GetBinUpEdge(i);
  }
  fHPoolReady = new TH2F("fHPoolReady","mixing started", nZvtxBins, zvtxbin, nCentBins, centBins);
  fOutputList->Add(fHPoolReady);
  
  fHPtAss = new TH1F("fHPtAss","PtAssoc;P_{T} (GeV/c) [GeV/c]",nPtAssc,pta);
  fOutputList->Add(fHPtAss);
  fHPtTrg = new TH1F("fHPtTrg","PtTrig;P_{T} (GeV/c) [GeV/c]",nPtTrig,ptt);
  fOutputList->Add(fHPtTrg);
  fHPtTrgEvt = new TH1F("fHPtTrgEvt","PtTrig;P_{T} (GeV/c) [GeV/c]",nPtTrig,ptt);
  fHPtTrgNorm1S = new TH3F("fHPtTrgNorm1S","PtTrig;P_{T} (GeV/c) [GeV/c];centrality;z_{vtx}",nPtTrig,ptt,nCent,cent,nZvtx,zvtx);
  fOutputList->Add(fHPtTrgNorm1S);
  fHPtTrgNorm1M = (TH3*) fHPtTrgNorm1S->Clone("fHPtTrgNorm1M");
  fOutputList->Add(fHPtTrgNorm1M);
  fHPtTrgNorm2S = (TH3*) fHPtTrgNorm1S->Clone("fHPtTrgNorm2S");
  fOutputList->Add(fHPtTrgNorm2S);
  fHPtTrgNorm2M = (TH3*) fHPtTrgNorm1S->Clone("fHPtTrgNorm2M");
  fOutputList->Add(fHPtTrgNorm2M);
  
  fHCent = new TH1F("fHCent","Cent;bins",nCent,cent);
  fOutputList->Add(fHCent);
  fHZvtx = new TH1F("fHZvtx","Zvertex;bins",nZvtx,zvtx);
  fOutputList->Add(fHZvtx);
  
  fHQATp = new TH3F("fHQATp","QA trigger;p_{T} (GeV/c);#eta;#phi",
                    100,0.0,10.0,
                    40,fEtaTLo,fEtaTHi,
                    36,0.0,TMath::TwoPi());
  fOutputList->Add(fHQATp);
  fHQAAp = new TH3F("fHQAAp","QA associated;p_{T} (GeV/c);#eta;#phi",
                    100,0.0,10.0,
                    40,fEtaALo,fEtaAHi,
                    36,0.0,TMath::TwoPi());
  fOutputList->Add(fHQAAp);
  fHQATpCorr = (TH3 *) fHQATp->Clone("fHQATpCorr");
  fOutputList->Add(fHQATpCorr);
  fHQAApCorr = (TH3 *) fHQAAp->Clone("fHQAApCorr");
  fOutputList->Add(fHQAApCorr);
  fHQATm = (TH3 *) fHQATp->Clone("fHQATm");
  fOutputList->Add(fHQATm);
  fHQAAm = (TH3 *) fHQAAp->Clone("fHQAAm");
  fOutputList->Add(fHQAAm);
  fHQATmCorr = (TH3 *) fHQATm->Clone("fHQATmCorr");
  fOutputList->Add(fHQATmCorr);
  fHQAAmCorr = (TH3 *) fHQAAm->Clone("fHQAAmCorr");
  fOutputList->Add(fHQAAmCorr);

  fHPtCentT = new TH2F("fHPtCentT",Form("trigger particles;p_{T} (GeV/c);centrality (%s)",fCentMethod.Data()),
                       100,0.0,10.0,
                       100,cent[0],cent[nCent]);
  fOutputList->Add(fHPtCentT);
  fHPtCentA = new TH2F("fHPtCentA",Form("associated particles;p_{T} (GeV/c);centrality (%s)",fCentMethod.Data()),
                       100,0.0,10.0,
                       100,cent[0],cent[nCent]);
  fOutputList->Add(fHPtCentA);

  fNbins  = nPtTrig*nPtAssc*nCent*nZvtx;
  fHSs    = new TH2*[fNbins];
  fHMs    = new TH2*[fNbins];
  fHPts   = new TH1*[fNbins];
  fHSMass = new TH1*[fNbins];
  fHMMass = new TH1*[fNbins];

  fIndex = new TFormula("GlobIndex","(t-1)*[0]*[1]*[2]+(z-1)*[0]*[1]+(x-1)*[1]+(y-1)");
  fIndex->SetParameters(nPtTrig,nPtAssc,nZvtx);
  fIndex->SetParNames("NTrigBins","NAssocBins","NZvertexBins");
  fOutputList->Add(fIndex);
  
  Double_t dEtaMin = fEtaTLo - fEtaAHi;
  Double_t dEtaMax = fEtaTHi - fEtaALo;
  
  Int_t count = 0;
  for (Int_t c=1; c<=nCent; ++c) {
    for (Int_t z=1; z<=nZvtx; ++z) {
      for (Int_t t=1; t<=nPtTrig; ++t) {
        for (Int_t a=1; a<=nPtAssc; ++a) {
          fHSs[count]    = 0;
          fHMs[count]    = 0;
          fHPts[count]   = 0;
          fHSMass[count] = 0;
          fHMMass[count] = 0;
          if ((a>t)&&!fAllTAHists) {
            ++count;
            continue;
          }
          if (z==1 && t==1 && a==1) {
            TString title(Form("cen=%d (%.1f to %.1f)",
                               c, fBCent->GetBinLowEdge(c), fBCent->GetBinUpEdge(c)));
            fHSMass[count] = new TH1F(Form("hSMass%d",count), Form("Mass Same Event %s;m (GeV)",title.Data()), 10000, 0,10);
            fOutputList->Add(fHSMass[count]);
            fHMMass[count] = new TH1F(Form("hMMass%d",count), Form("Mass Mixed Event %s;m (GeV)",title.Data()), 10000, 0,10);
            fOutputList->Add(fHMMass[count]);
          }
          if (t==1 && a==1) {
            TString title(Form("cen=%d (%.1f to %.1f), zVtx=%d (%.1f to %.1f)",
                               c, fBCent->GetBinLowEdge(c), fBCent->GetBinUpEdge(c),
                               z, fBZvtx->GetBinLowEdge(z), fBZvtx->GetBinUpEdge(z)));
            fHPts[count] = new TH1F(Form("hPt%d",count), Form("Ptdist %s;p_{T} (GeV/c)",title.Data()), 200,0,20);
            fOutputList->Add(fHPts[count]);
          }
          TString title(Form("cen=%d (%.1f to %.1f), zVtx=%d (%.1f to %.1f), trig=%d (%.1f to %.1f), assoc=%d (%.1f to %.1f)",
                             c, fBCent->GetBinLowEdge(c), fBCent->GetBinUpEdge(c),
                             z, fBZvtx->GetBinLowEdge(z), fBZvtx->GetBinUpEdge(z),
                             t, fBPtT->GetBinLowEdge(t),  fBPtT->GetBinUpEdge(t),
                             a, fBPtA->GetBinLowEdge(a),  fBPtA->GetBinUpEdge(a)));
          fHSs[count] = new TH2F(Form("hS%d",count), Form("Signal %s;#Delta #varphi;#Delta #eta",title.Data()),
                                 fNBdphi,-0.5*TMath::Pi(),1.5*TMath::Pi(),fNBdeta,dEtaMin,dEtaMax);
          fHMs[count] = new TH2F(Form("hM%d",count), Form("Mixed %s;#Delta #varphi;#Delta #eta",title.Data()),
                                 fNBdphi,-0.5*TMath::Pi(),1.5*TMath::Pi(),fNBdeta,dEtaMin,dEtaMax);
          fOutputList->Add(fHSs[count]);
          fOutputList->Add(fHMs[count]);
          Int_t tcount = (Int_t)fIndex->Eval(t,a,z,c);
          if (fVerbosity>5)
            cout << count << " " << tcount << ": " << title << endl;
          if (count != tcount)
            AliFatal(Form("Index mismatch: %d %d", count, tcount));
          ++count;
        }
      }
    }
  }
}

//________________________________________________________________________
void AliDhcTask::SetAnaMode(Int_t iAna)
{
  if (iAna==kHH) {
    SetFillMuons(kFALSE);
    fEtaTLo = -1.6;
    fEtaTHi = +1.6;
    fEtaALo = -1.6;
    fEtaAHi = +1.6;
  } else if (iAna==kMuH) {
    SetFillMuons(kTRUE);
    fEtaTLo = -5.0;
    fEtaTHi = -2.0;
    fEtaALo = -1.6;
    fEtaAHi = +1.6;
  } else if (iAna==kHMu) {
    SetFillMuons(kTRUE);
    fEtaTLo = -1.6;
    fEtaTHi = +1.6;
    fEtaALo = -5.0;
    fEtaAHi = -2.0;
  } else if (iAna==kMuMu) {
    SetFillMuons(kTRUE);
    fEtaTLo = -5.0;
    fEtaTHi = -2.0;
    fEtaALo = -5.0;
    fEtaAHi = -2.0;
  } else if (iAna==kPSide) {
    SetFillMuons(kFALSE);
    fEtaTLo = -1.6;
    fEtaTHi = -0.465;
    fEtaALo = -1.6;
    fEtaAHi = +1.6;
  } else if (iAna==kASide) {
    SetFillMuons(kFALSE);
    fEtaTLo = +0.465;
    fEtaTHi = +1.6;
    fEtaALo = -1.6;
    fEtaAHi = +1.6;
  } else {
    AliInfo(Form("Unrecognized analysis option: %d", iAna));
  }
}

//________________________________________________________________________
void AliDhcTask::InitEventMixer()
{
  // The effective pool size in events is set by trackDepth, so more
  // low-mult events are required to maintain the threshold than
  // high-mult events. Centrality pools are indep. of data histogram
  // binning, no need to match.

  // Centrality pools
  Int_t nCentBins=fMixBCent->GetNbins();
  Double_t centBins[nCentBins+1];
  centBins[0] = fMixBCent->GetBinLowEdge(1);
  for (Int_t i=1; i<=nCentBins; i++) {
    centBins[i] = fMixBCent->GetBinUpEdge(i);
  }
 
  // Z-vertex pools
  Int_t nZvtxBins=fMixBZvtx->GetNbins();
  Double_t zvtxbin[nZvtxBins+1];
  zvtxbin[0] = fMixBZvtx->GetBinLowEdge(1);
  for (Int_t i=1; i<=nZvtxBins; i++) {
    zvtxbin[i] = fMixBZvtx->GetBinUpEdge(i);
  }

  fPoolMgr = new AliEvtPoolManager();
  fPoolMgr->SetTargetTrackDepth(fTrackDepth);
  if (fVerbosity>4)
    fPoolMgr->SetDebug(1);
  fPoolMgr->InitEventPools(fPoolSize, nCentBins, centBins, nZvtxBins, zvtxbin);
}

//________________________________________________________________________
void AliDhcTask::UserExec(Option_t *) 
{
  // Main loop, called for each event.

  if (fVerbosity > 10)
    AliInfo(Form("======= Dhc Task %s start next event",fName.Data()));

  LoadBranches();

  if (fOmitFirstEv) {
    if (fUtils->IsFirstEventInChunk(InputEvent())) 
      return;
  }

  // Get event pointers, check for signs of life
  Int_t dType = -1;       // Will be set to kESD or kAOD.
  fESD = dynamic_cast<AliESDEvent*>(InputEvent());
  fAOD = dynamic_cast<AliAODEvent*>(InputEvent());
  if (fESD) {
    dType = kESD;
  } else if (fAOD) {
    dType = kAOD;
  } else {
    AliError("Neither fESD nor fAOD available");
    return;
  }

  // select specific trigger classes?
  if (fClassName.Length()>0) {
    TString strFiredClass;
    if (fESD)
      strFiredClass = fESD->GetFiredTriggerClasses();
    else
      strFiredClass = fAOD->GetFiredTriggerClasses();
    
    if (fVerbosity > 10) {
      AliInfo(Form("Trigger class selection: This event has classes %s", strFiredClass.Data()));
      AliInfo(Form("Trigger class selection: selecting classes %s", fClassName.Data()));
    }

    TObjArray *arrClass = fClassName.Tokenize(",");
    Int_t nClass = arrClass->GetEntries();
    
    TString strOneClass;
    Bool_t bAccEvent = kFALSE;
    for (Int_t iClass=0; iClass<nClass; iClass++) {
      strOneClass = arrClass->At(iClass)->GetName();
      if (strFiredClass.Contains(strOneClass))
        bAccEvent = kTRUE;
    }
    
    if (!bAccEvent)
      return;
    
    if (fVerbosity > 10)
      AliInfo(Form("Passed trigger class selection, this event has classes %s", strFiredClass.Data()));
  }

  Bool_t mcgen = 0;
  if (fTracksName.Contains("Gen"))
    mcgen = 1;

  // Centrality, vertex, other event variables...
  if (mcgen) {
    fZVertex = 0;
    TList *list = InputEvent()->GetList();
    TClonesArray *tcaTracks = 0;
    if (list) 
      tcaTracks = dynamic_cast<TClonesArray*>(list->FindObject(fTracksName));
    if (tcaTracks) 
      fCentrality = tcaTracks->GetEntries();
  } else {
    if (dType == kESD) {
      const AliESDVertex* vertex = fESD->GetPrimaryVertex();
      fZVertex = vertex->GetZ();
      if (fCheckVertex && !VertexOk()) {
        if (fVerbosity > 1)
          AliInfo(Form("Event REJECTED (ESD vertex not OK). z = %.1f", fZVertex));
        return;
      }
      if(fESD->GetCentrality()) {
        fCentrality = 
          fESD->GetCentrality()->GetCentralityPercentile(fCentMethod);
      }
    } else if (dType == kAOD) {
      const AliAODVertex* vertex = fAOD->GetPrimaryVertex();
      fZVertex = vertex->GetZ();
      if (fCheckVertex && !VertexOk()) {
        if (fVerbosity > 1)
          Info("Exec()", "Event REJECTED (AOD vertex not OK). z = %.1f", fZVertex);
        return;
      }
      AliAODHeader * header = dynamic_cast<AliAODHeader*>(fAOD->GetHeader());
      if(!header) AliFatal("Not a standard AOD");

      const AliCentrality *aodCent = header->GetCentralityP();
      if (aodCent) {
        fCentrality = aodCent->GetCentralityPercentile(fCentMethod);
      }
    }
  }

  // Fill event histogram
  fHEvt->Fill(fZVertex, fCentrality);
  if (fCentrality > fBCent->GetXmax() || fCentrality < fBCent->GetXmin()) {
    if (fVerbosity > 1)
      AliInfo(Form("Event REJECTED (centrality out of range). fCentrality = %.1f", fCentrality));
    return;
  }
  if (fZVertex > fBZvtx->GetXmax() || fZVertex < fBZvtx->GetXmin()) {
    if (fVerbosity > 1)
      AliInfo(Form("Event REJECTED (z_vertex out of range). fZVertex = %.1f", fZVertex));
    return;
  }

  // reject events without muon if required
  if (fRequireMuon) {
    Bool_t bHasMuon = kFALSE;
    if (dType == kESD) {
      bHasMuon = HasMuonESD();
    } else if (dType == kAOD) {
      bHasMuon = HasMuonAOD();
    }
    if (!bHasMuon) {
      if (fVerbosity > 1)
        AliInfo(Form("Event REJECTED (no muon). fCentrality = %.1f", fCentrality));
      return;
    }
  }

  // Get pool containing tracks from other events like this one
  AliEvtPool* pool = fPoolMgr->GetEventPool(fCentrality, fZVertex);
  if (!pool) {
    AliWarning(Form("No pool found. Centrality %f, ZVertex %f", 
		    fCentrality, fZVertex));
    return;
  }

  if (fVerbosity > 10)
    AliInfo("--- prepare to get tracks");

  MiniEvent* sTracks = new MiniEvent(0); // deleted by pool mgr.
  if (dType == kESD) {
    GetESDTracks(sTracks);
  } else if (dType == kAOD) {
    GetAODTracks(sTracks);
  }

  if (fVerbosity > 10)
    AliInfo(Form("--- got a track array with %lu tracks",sTracks->size()));

  if (sTracks->size()==0) {
    AliWarning(Form("Track array empty"));
    delete sTracks;
    return;
  }
  
  fHEvtWTr->Fill(fZVertex, fCentrality);

  if (!pool->IsReady()) {
    pool->UpdatePool(sTracks);
    if (fDoFillSame) { // fill same event right away if requested
      Correlate(*sTracks, *sTracks, kSameEvt);  
    }
    PostData(1, fOutputList);
    return;
  }

  if (pool->IsFirstReady()) {
    fHPoolReady->Fill(fZVertex,fCentrality);
    // recover events missed before the pool is ready
    Int_t nEvs = pool->GetCurrentNEvents();
    if (nEvs>1) {
      for (Int_t i=0; i<nEvs; ++i) {
        MiniEvent* evI = pool->GetEvent(i);
        for (Int_t j=0; j<nEvs; ++j) {
          MiniEvent* evJ = pool->GetEvent(j);
          if (i==j) {
            if (!fDoFillSame) { // do not fill the same events twice
              Correlate(*evI, *evJ, kSameEvt);
            }
          } else {
            Correlate(*evI, *evJ, kDiffEvt);
          }
        }
      }
    }
  } else { /* standard case: same event, then mix*/
    Correlate(*sTracks, *sTracks, kSameEvt);  
    Int_t nMix = pool->GetCurrentNEvents();
    for (Int_t jMix=0; jMix<nMix; ++jMix) {
      MiniEvent* bgTracks = pool->GetEvent(jMix);
      Correlate(*sTracks, *bgTracks, kDiffEvt);
    }
  }

  pool->UpdatePool(sTracks);
  PostData(1, fOutputList);
}

//________________________________________________________________________
void AliDhcTask::GetESDTracks(MiniEvent* miniEvt)
{
  
  // Loop twice: 1. Count sel. tracks. 2. Fill vector.
  if (fTracksName.IsNull()) {
    const AliESDVertex *vtxSPD = fESD->GetPrimaryVertexSPD();
    if (!vtxSPD)
      return;
    
    Int_t nTrax = fESD->GetNumberOfTracks();
    if (fVerbosity > 2)
      AliInfo(Form("%d tracks in event",nTrax));

    // Loop 1.
    Int_t nSelTrax = 0;
    TObjArray arr(nTrax);
    arr.SetOwner(1);

    if (!fEsdTPCOnly) {
      fEsdTPCOnly = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
      //fEsdTPCOnly->SetMinNClustersTPC(70);
      fEsdTPCOnly->SetMinNCrossedRowsTPC(70);
      fEsdTPCOnly->SetMinRatioCrossedRowsOverFindableClustersTPC(0.8);
    }

    for (Int_t i = 0; i < nTrax; ++i) {
      AliESDtrack* esdtrack = fESD->GetTrack(i);
      if (!esdtrack) {
        AliError(Form("Couldn't get ESD track %d\n", i));
        continue;
      }
      Bool_t trkOK = fEsdTPCOnly->AcceptTrack(esdtrack);
      if (!trkOK)
        continue;
      Double_t pt = esdtrack->Pt();
      Bool_t ptOK = pt >= fPtMin && pt < fPtMax;
      if (!ptOK)
        continue;
      Double_t eta = esdtrack->Eta();
      if (TMath::Abs(eta) > fEtaMax)
        continue;

      // create a tpc only track
      AliESDtrack *newtrack = AliESDtrackCuts::GetTPCOnlyTrack(fESD,esdtrack->GetID());
      if(!newtrack)
        continue;
      if (newtrack->Pt()<=0) {
        delete newtrack;
        continue;
      }

      AliExternalTrackParam exParam;
      Bool_t relate = newtrack->RelateToVertexTPC(vtxSPD,fESD->GetMagneticField(),kVeryBig,&exParam);
      if (!relate) {
        delete newtrack;
        continue;
      }

      // set the constraint parameters to the track
      newtrack->Set(exParam.GetX(),exParam.GetAlpha(),exParam.GetParameter(),exParam.GetCovariance());

      pt = newtrack->Pt();
      ptOK = pt >= fPtMin && pt < fPtMax;
      if (!ptOK) {
        delete newtrack;
        continue;
      }
      eta  = esdtrack->Eta();
      if (TMath::Abs(eta) > fEtaMax) {
        delete newtrack;
        continue;
      }
      arr.Add(newtrack);
      nSelTrax++;
    }

    for(Int_t itrack = 0; itrack < nSelTrax; itrack++) {
      AliVTrack *esdtrack = static_cast<AliESDtrack*>(arr.At(itrack));
      if(!esdtrack) {
        AliError(Form("ERROR: Could not retrieve esdtrack %d",itrack));
        continue;
      }
      Double_t pt = esdtrack->Pt();
      Double_t eta  = esdtrack->Eta();
      Double_t phi  = esdtrack->Phi();
      Int_t    sign = esdtrack->Charge() > 0 ? 1 : -1;
      if (IsTrigger(eta,pt)||IsAssociated(eta,pt))
        miniEvt->push_back(AliMiniTrack(pt, eta, phi, sign));
    }
  } else {
    TList *list = InputEvent()->GetList();
    TClonesArray *tcaTracks = dynamic_cast<TClonesArray*>(list->FindObject(fTracksName));

    if (!tcaTracks){
      AliError("Ptr to tcaTracks zero");
      return;
    }

    const Int_t ntracks = tcaTracks->GetEntries();
    Int_t nGoodTracks = 0;
    // count good tracks
    for (Int_t itrack = 0; itrack < ntracks; itrack++) {
      AliVTrack *vtrack = static_cast<AliVTrack*>(tcaTracks->At(itrack));
      if (!vtrack) {
        AliError(Form("ERROR: Could not retrieve vtrack %d",itrack));
        continue;
      }
      Double_t pt   = vtrack->Pt();
      Double_t eta  = vtrack->Eta();
      if (IsTrigger(eta,pt)||IsAssociated(eta,pt))
        nGoodTracks++;
    }
    if (miniEvt)
      miniEvt->reserve(nGoodTracks);
    else {
      AliError("Ptr to miniEvt zero");
      return;
    }
    // fill good tracks into minievent
    for (Int_t itrack = 0; itrack < ntracks; itrack++) {
      AliVTrack *vtrack = static_cast<AliVTrack*>(tcaTracks->At(itrack));
      if (!vtrack) {
        AliError(Form("ERROR: Could not retrieve vtrack %d",itrack));
        continue;
      }
      Double_t pt   = vtrack->Pt();
      Double_t eta  = vtrack->Eta();
      Double_t phi  = vtrack->Phi();
      Int_t    sign = vtrack->Charge() > 0 ? 1 : -1;
      if (IsTrigger(eta,pt)||IsAssociated(eta,pt))
        miniEvt->push_back(AliMiniTrack(pt, eta, phi, sign));
    }
  }

  // count and fill muons if required
  if (fFillMuons) {
    // count muons
    Int_t nGoodMuons = 0;
    for (Int_t iMu = 0; iMu<fESD->GetNumberOfMuonTracks(); iMu++) {
      AliESDMuonTrack* muonTrack = fESD->GetMuonTrack(iMu);
      if (muonTrack) {
        if ( !IsGoodMUONtrack(*muonTrack) ) continue;
        Double_t ptMu   = muonTrack->Pt();
        Double_t etaMu  = muonTrack->Eta();
        if (IsTrigger(etaMu,ptMu)||IsAssociated(etaMu,ptMu))
          nGoodMuons++;
      }
    }
    // fill them into the mini event
    miniEvt->reserve(miniEvt->size()+nGoodMuons);
    for (Int_t iMu = 0; iMu<fESD->GetNumberOfMuonTracks(); iMu++) {
      AliESDMuonTrack* muonTrack = fESD->GetMuonTrack(iMu);
      if (muonTrack) {
        if ( !IsGoodMUONtrack(*muonTrack) ) continue;
        Double_t ptMu   = muonTrack->Pt();
        Double_t etaMu  = muonTrack->Eta();
        Double_t phiMu  = muonTrack->Phi();
        Int_t    signMu = muonTrack->Charge() > 0 ? 1 : -1;
        if (IsTrigger(etaMu,ptMu)||IsAssociated(etaMu,ptMu))
          miniEvt->push_back(AliMiniTrack(ptMu, etaMu, phiMu, signMu));
      }
    }
  }

}

//________________________________________________________________________
void AliDhcTask::GetAODTracks(MiniEvent* miniEvt)
{
  
  // Loop twice: 1. Count sel. tracks. 2. Fill vector.
  if (fTracksName.IsNull()) {
    Int_t nTrax = fAOD->GetNumberOfTracks();
    Int_t nSelTrax = 0;

    if (fVerbosity > 2)
      AliInfo(Form("%d tracks in event",nTrax));

    // Loop 1.
    for (Int_t i = 0; i < nTrax; ++i) {
      AliAODTrack* aodtrack = dynamic_cast<AliAODTrack*>(fAOD->GetTrack(i));
      if(!aodtrack) AliFatal("Not a standard AOD");
      if (!aodtrack) {
        AliError(Form("Couldn't get AOD track %d\n", i));
        continue;
      }
      // See $ALICE_ROOT/ANALYSIS/macros/AddTaskESDFilter.C
      UInt_t tpcOnly = 1 << 7;
      Bool_t trkOK = aodtrack->TestFilterBit(tpcOnly);
      if (!trkOK)
        continue;
      Double_t pt = aodtrack->Pt();
      Double_t eta = aodtrack->Eta();
      if (IsTrigger(eta,pt)||IsAssociated(eta,pt))
        nSelTrax++;
    }

    if (miniEvt)
      miniEvt->reserve(nSelTrax);
    else {
      AliError("!miniEvt");
      return;
    }
  
    // Loop 2.  
    for (Int_t i = 0; i < nTrax; ++i) {
      AliAODTrack* aodtrack = dynamic_cast<AliAODTrack*>(fAOD->GetTrack(i));
      if(!aodtrack) AliFatal("Not a standard AOD");
      if (!aodtrack) {
        AliError(Form("Couldn't get AOD track %d\n", i));
        continue;
      }
    
      // See $ALICE_ROOT/ANALYSIS/macros/AddTaskESDFilter.C
      UInt_t tpcOnly = 1 << 7;
      Bool_t trkOK = aodtrack->TestFilterBit(tpcOnly);
      if (!trkOK)
        continue;
      Double_t pt = aodtrack->Pt();
      Double_t eta  = aodtrack->Eta();
      Double_t phi  = aodtrack->Phi();
      Int_t    sign = aodtrack->Charge() > 0 ? 1 : -1;
      if (IsTrigger(eta,pt)||IsAssociated(eta,pt))
        miniEvt->push_back(AliMiniTrack(pt, eta, phi, sign));
    }
  } else {
    TList *list = InputEvent()->GetList();
    TClonesArray *tcaTracks = dynamic_cast<TClonesArray*>(list->FindObject(fTracksName));

    if (!tcaTracks){
      AliError("Ptr to tcaTracks zero");
      return;
    }

    const Int_t ntracks = tcaTracks->GetEntries();
    Int_t nGoodTracks = 0;
    // count good tracks
    for (Int_t itrack = 0; itrack < ntracks; itrack++) {
      AliVTrack *vtrack = static_cast<AliVTrack*>(tcaTracks->At(itrack));
      if (!vtrack) {
        AliError(Form("ERROR: Could not retrieve vtrack %d",itrack));
        continue;
      }
      Double_t pt   = vtrack->Pt();
      Double_t eta  = vtrack->Eta();
      if (IsTrigger(eta,pt)||IsAssociated(eta,pt))
        nGoodTracks++;
    }
    if (miniEvt)
      miniEvt->reserve(nGoodTracks);
    else {
      AliError("Ptr to miniEvt zero");
      return;
    }
    // fill good tracks into minievent
    for (Int_t itrack = 0; itrack < ntracks; itrack++) {
      AliVTrack *vtrack = static_cast<AliVTrack*>(tcaTracks->At(itrack));
      if (!vtrack) {
        AliError(Form("ERROR: Could not retrieve vtrack %d",itrack));
        continue;
      }
      Double_t pt   = vtrack->Pt();
      Double_t eta  = vtrack->Eta();
      Double_t phi  = vtrack->Phi();
      Int_t    sign = vtrack->Charge() > 0 ? 1 : -1;
      if (IsTrigger(eta,pt)||IsAssociated(eta,pt))
        miniEvt->push_back(AliMiniTrack(pt, eta, phi, sign));
    }
  }

  // count and fill muons if required
  if (fFillMuons) {
    // count muons
    Int_t nGoodMuons = 0;
    for (Int_t iMu = 0; iMu<fAOD->GetNumberOfTracks(); iMu++) {
      AliAODTrack* muonTrack = dynamic_cast<AliAODTrack*>(fAOD->GetTrack(iMu));
      if(!muonTrack) AliFatal("Not a standard AOD");
      if (muonTrack) {
        if ( !IsGoodMUONtrack(*muonTrack) ) continue;
        Double_t ptMu   = muonTrack->Pt();
        Double_t etaMu  = muonTrack->Eta();
        if (IsTrigger(etaMu,ptMu)||IsAssociated(etaMu,ptMu))
          nGoodMuons++;
      }
    }
    // fill them into the mini event
    miniEvt->reserve(miniEvt->size()+nGoodMuons);
    for (Int_t iMu = 0; iMu<fAOD->GetNumberOfTracks(); iMu++) {
      AliAODTrack* muonTrack = dynamic_cast<AliAODTrack*>(fAOD->GetTrack(iMu));
      if(!muonTrack) AliFatal("Not a standard AOD");
      if (muonTrack) {
        if ( !IsGoodMUONtrack(*muonTrack) ) continue;
        Double_t ptMu   = muonTrack->Pt();
        Double_t etaMu  = muonTrack->Eta();
        Double_t phiMu  = muonTrack->Phi();
        Int_t    signMu = muonTrack->Charge() > 0 ? 1 : -1;
        if (IsTrigger(etaMu,ptMu)||IsAssociated(etaMu,ptMu))
          miniEvt->push_back(AliMiniTrack(ptMu, etaMu, phiMu, signMu));
      }
    }
  }

}

//________________________________________________________________________
Double_t AliDhcTask::DeltaPhi(Double_t phia, Double_t phib,
			      Double_t rangeMin, Double_t rangeMax) const
{
  Double_t dphi = -999;
  Double_t pi = TMath::Pi();
  
  if (phia < 0)         phia += 2*pi;
  else if (phia > 2*pi) phia -= 2*pi;
  if (phib < 0)         phib += 2*pi;
  else if (phib > 2*pi) phib -= 2*pi;
  dphi = phib - phia;
  if (dphi < rangeMin)      dphi += 2*pi;
  else if (dphi > rangeMax) dphi -= 2*pi;
  
  return dphi;
}

//________________________________________________________________________
Int_t AliDhcTask::Correlate(const MiniEvent &evt1, const MiniEvent &evt2, Int_t pairing)
{
  // Triggered angular correlations. If pairing is kSameEvt, particles
  // within evt1 are correlated. If kDiffEvt, correlate triggers from
  // evt1 with partners from evt2.

  Int_t cbin = fHCent->FindBin(fCentrality);
  if (fHCent->IsBinOverflow(cbin) ||
      fHCent->IsBinUnderflow(cbin))
    return 0;

  Int_t zbin = fHZvtx->FindBin(fZVertex);
  if (fHZvtx->IsBinOverflow(zbin) ||
      fHZvtx->IsBinUnderflow(zbin))
    return 0;

  Int_t iMax = evt1.size();
  Int_t jMax = evt2.size();

  TH2  **hist = fHMs;
  if (pairing == kSameEvt) {
    hist = fHSs;
    fHCent->Fill(fCentrality);
    fHZvtx->Fill(fZVertex);
  }

  Int_t nZvtx = fHZvtx->GetNbinsX();
  Int_t nPtTrig = fHPtTrg->GetNbinsX();
  Int_t nPtAssc = fHPtAss->GetNbinsX();

  Int_t globIndex = (cbin-1)*nZvtx*nPtTrig*nPtAssc+(zbin-1)*nPtTrig*nPtAssc;
  Int_t ptindex   = (Int_t)fIndex->Eval(1,1,zbin,cbin);
  Int_t mindex    = (Int_t)fIndex->Eval(1,1,1,cbin);


  fHPtTrgEvt->Reset();
  for (Int_t i=0; i<iMax; ++i) {
    const AliMiniTrack &a(evt1.at(i));
    Float_t pta  = a.Pt();
    fHPtTrgEvt->Fill(pta);
    if (pairing == kSameEvt) {
      fHPts[ptindex]->Fill(pta);
    }
  }

  Bool_t bCountTrg; // only count the trigger if an associated particle is found

  for (Int_t i=0; i<iMax; ++i) {
    // Trigger particles
    const AliMiniTrack &a(evt1.at(i));

    Float_t pta  = a.Pt();
    Float_t etaa = a.Eta();
    Float_t phia = a.Phi();
    Int_t   sgna = a.Sign();
    
    // brief intermezzo in the trigger particle loop: do associated particle QA here in order to avoid double counting
    if (pairing == kSameEvt) {
      if (IsAssociated(etaa,pta)) {
        Double_t aQAWght = 1.0;
        if (fHEffA) {
          const Int_t nEffDimA = fHEffA->GetNdimensions();
          Int_t effBinA[nEffDimA];
          effBinA[0] = fHEffA->GetAxis(0)->FindBin(etaa);
          effBinA[1] = fHEffA->GetAxis(1)->FindBin(pta);
          effBinA[2] = fHEffA->GetAxis(2)->FindBin(fCentrality);
          effBinA[3] = fHEffA->GetAxis(3)->FindBin(fZVertex);
          if (nEffDimA>4) {
            effBinA[4] = fHEffA->GetAxis(4)->FindBin(phia);
            if (nEffDimA>5) {
              effBinA[5] = fHEffA->GetAxis(5)->FindBin(sgna);
            }
          }
          aQAWght = fHEffA->GetBinContent(effBinA);
        }
        // fill every associated particle once unweighted, once weighted
        if (sgna>0.0) {
          fHQAAp->Fill(pta,etaa,phia);
          fHQAApCorr->Fill(pta,etaa,phia,aQAWght);
        } else {
          fHQAAm->Fill(pta,etaa,phia);
          fHQAAmCorr->Fill(pta,etaa,phia,aQAWght);
        }
        fHPtCentA->Fill(pta,fCentrality);
      }
    }
    
    // back to triggers
    if (!IsTrigger(etaa,pta))
      continue;

    Int_t abin = fHPtAss->FindBin(pta);

    // efficiency weighting
    Double_t effWtT = 1.0;
    if (fHEffT) {
      // trigger particle
      const Int_t nEffDimT = fHEffT->GetNdimensions();
      Int_t effBinT[nEffDimT];
      effBinT[0] = fHEffT->GetAxis(0)->FindBin(etaa);
      effBinT[1] = fHEffT->GetAxis(1)->FindBin(pta);
      effBinT[2] = fHEffT->GetAxis(2)->FindBin(fCentrality);
      effBinT[3] = fHEffT->GetAxis(3)->FindBin(fZVertex);
      if (nEffDimT>4) {
        effBinT[4] = fHEffT->GetAxis(4)->FindBin(phia);
        if (nEffDimT>5) {
          effBinT[5] = fHEffT->GetAxis(5)->FindBin(sgna);
        }
      }
      effWtT = fHEffT->GetBinContent(effBinT);
    }
    
    if (pairing == kSameEvt) {
      fHTrk->Fill(phia,etaa);
      if (sgna>0.0) {
        fHQATp->Fill(pta,etaa,phia);
        fHQATpCorr->Fill(pta,etaa,phia,effWtT);
      } else {
        fHQATm->Fill(pta,etaa,phia);
        fHQATmCorr->Fill(pta,etaa,phia,effWtT);
      }
      fHPtCentT->Fill(pta,fCentrality);
      fHPtTrg->Fill(pta);
      fHPtTrgNorm1S->Fill(pta,fCentrality,fZVertex,effWtT);
    } else {
      fHPtTrgNorm1M->Fill(pta,fCentrality,fZVertex,effWtT);
    }
    bCountTrg = kFALSE;

    for (Int_t j=0; j<jMax; ++j) {
      // Associated particles
      if (pairing == kSameEvt && i==j)
        continue;

      const AliMiniTrack &b(evt2.at(j));
      
      Float_t ptb  = b.Pt();
      Float_t etab = b.Eta();
      Float_t phib = b.Phi();
      Int_t   sgnb = b.Sign();
      if (fPtTACrit&&(pta < ptb)) {
        continue;
      }

      if (!IsAssociated(etab,ptb))
        continue;

      Int_t bbin = fHPtAss->FindBin(ptb);

      Float_t dphi = DeltaPhi(phia, phib);
      Float_t deta = etaa - etab;
      // invariant mass under mu mu assumption
      Float_t muMass2 = 0.1056583715*0.1056583715;
      Float_t ea2  = muMass2 + pta*pta*TMath::CosH(etaa)*TMath::CosH(etaa);
      Float_t eb2  = muMass2 + ptb*ptb*TMath::CosH(etab)*TMath::CosH(etab);
      Float_t papb = pta*TMath::Cos(phia)*ptb*TMath::Cos(phib) +
                     pta*TMath::Sin(phia)*ptb*TMath::Sin(phib) +
                     pta*TMath::SinH(etaa)*ptb*TMath::SinH(etab);
      Float_t mass = TMath::Sqrt(2.0*(muMass2 + TMath::Sqrt(ea2*eb2) - papb));
      Int_t q2 = sgna + sgnb;
      if ((q2==0) && fDoMassCut) {
        if (mass>3.0 && mass<3.2)
          continue;
        if (mass>9.2&&mass<9.8)
          continue;
      }

      Int_t index = globIndex+(abin-1)*nPtAssc+(bbin-1);
      Double_t weight = 1.0;
      // number of trigger weight event-by-event (CMS method)
      if (fDoWeights) {
        Double_t nTrgs = fHPtTrgEvt->GetBinContent(abin);
        if (nTrgs==0.0) {
          AliError(Form("Trying to work with number of triggers weight = %f",nTrgs));
          return 0;
        }
        weight *= 1./nTrgs;
      }

      // efficiency weighting
      if (fHEffT) {
        // trigger particle
        weight *= effWtT;
      }

      if (fHEffA) {
        // associated particle
        const Int_t nEffDimA = fHEffA->GetNdimensions();
        Int_t effBinA[nEffDimA];
        effBinA[0] = fHEffA->GetAxis(0)->FindBin(etab);
        effBinA[1] = fHEffA->GetAxis(1)->FindBin(ptb);
        effBinA[2] = fHEffA->GetAxis(2)->FindBin(fCentrality);
        effBinA[3] = fHEffA->GetAxis(3)->FindBin(fZVertex);
        if (nEffDimA>4) {
          effBinA[4] = fHEffA->GetAxis(4)->FindBin(phib);
          if (nEffDimA>5) {
            effBinA[5] = fHEffA->GetAxis(5)->FindBin(sgnb);
          }
        }
        weight *= fHEffA->GetBinContent(effBinA);
      }

      if (hist[index]) { // check if this histogram exists, relevant in the fPtTACrit==kFALSE case
        hist[index]->Fill(dphi,deta,weight);
        bCountTrg = kTRUE;
        if (pairing == kSameEvt) {
          fHPtAss->Fill(ptb); // fill every associated particle every time it is used
          if (q2==0)
            fHSMass[mindex]->Fill(mass);
        } else {
          if (q2==0)
            fHMMass[mindex]->Fill(mass);
        }
      }
    }
    if (bCountTrg) {
      if (pairing == kSameEvt) {
        fHPtTrgNorm2S->Fill(pta,fCentrality,fZVertex,effWtT);
      } else {
        fHPtTrgNorm2M->Fill(pta,fCentrality,fZVertex,effWtT);
      }
    }
  }

  return 1;
}


//________________________________________________________________________
Bool_t AliDhcTask::HasMuonESD()
{
  // does this ESD event have a good muon?
  for (Int_t iMu = 0; iMu<fESD->GetNumberOfMuonTracks(); iMu++) {
    AliESDMuonTrack* muonTrack = fESD->GetMuonTrack(iMu);
    if (muonTrack) {
      if ( IsGoodMUONtrack(*muonTrack) ) {
        Double_t ptMu   = muonTrack->Pt();
        if (ptMu>fReqPtLo && ptMu<fReqPtHi)
          return kTRUE;
      }
    }
  }
  return kFALSE;
}

//________________________________________________________________________
Bool_t AliDhcTask::HasMuonAOD()
{
  // does this AOD event have a good muon?
  for (Int_t iMu = 0; iMu<fAOD->GetNumberOfTracks(); iMu++) {
    AliAODTrack* muonTrack = dynamic_cast<AliAODTrack*>(fAOD->GetTrack(iMu));
    if(!muonTrack) AliFatal("Not a standard AOD");
    if (muonTrack) {
      if ( IsGoodMUONtrack(*muonTrack) ) {
        Double_t ptMu   = muonTrack->Pt();
        if (ptMu>fReqPtLo && ptMu<fReqPtHi)
          return kTRUE;
      }
    }
  }
  return kFALSE;
}
//________________________________________________________________________
void AliDhcTask::Terminate(Option_t *) 
{
  // Draw result to the screen
  // Called once at the end of the query
}

//________________________________________________________________________
Bool_t AliDhcTask::VertexOk() const
{
  // Modified from AliAnalyseLeadingTrackUE::VertexSelection()
  
  Int_t nContributors  = 0;
  Double_t zVertex     = 999;
  TString name("");

  Int_t runno = InputEvent()->GetRunNumber();
  if (runno>=176326 && runno<=197692) { // year 12 and 13
    if (!fUtils->IsVertexSelected2013pA(InputEvent())) 
      return 0;
  }

  if (fESD) {
    const AliESDVertex* vtx = fESD->GetPrimaryVertex();
    if (!vtx)
      return 0;
    nContributors = vtx->GetNContributors();
    zVertex       = vtx->GetZ();
    name          = vtx->GetName();
  } else {
    if (fAOD->GetNumberOfVertices() < 1)
      return 0;
    const AliAODVertex* vtx = fAOD->GetPrimaryVertex();
    nContributors = vtx->GetNContributors();
    zVertex       = vtx->GetZ();
    name          = vtx->GetName();
  }
  
  // Reject if TPC-only vertex
  if (name.CompareTo("TPCVertex")==0)
    return kFALSE;
  
  // Check # contributors and range...
  if( nContributors < 1 || TMath::Abs(zVertex) > fZVtxMax ) {
    return kFALSE;
  }
  
  return kTRUE;
}

//________________________________________________________________________
Bool_t AliDhcTask::IsGoodMUONtrack(AliESDMuonTrack &track)
{
  // Applying track cuts for MUON tracks
  
  if (fUseMuonUtils) { // muon cut using official class
    return fMuonTrackCuts->IsSelected(&track);
  } else {             // manual muon cut
    if (!track.ContainTrackerData())
      return kFALSE;
    Double_t thetaTrackAbsEnd = TMath::ATan(track.GetRAtAbsorberEnd()/505.) * TMath::RadToDeg();
    if ((thetaTrackAbsEnd < 2.) || (thetaTrackAbsEnd > 10.))
      return kFALSE;
    Double_t eta = track.Eta();
    if ((eta < -4.) || (eta > -2.5))
      return kFALSE;
    if (fTriggerMatch) {
      if (!track.ContainTriggerData())
        return kFALSE;
      if (track.GetMatchTrigger() < 0.5)
        return kFALSE;
    }
    return kTRUE;
  }
}

//________________________________________________________________________
Bool_t AliDhcTask::IsGoodMUONtrack(AliAODTrack &track)
{
  // Applying track cuts for MUON tracks

  if (fUseMuonUtils) { // muon cut using official class
    return fMuonTrackCuts->IsSelected(&track);
  } else {             // manual muon cut
    if (!track.IsMuonTrack())
      return kFALSE;
    Double_t dThetaAbs = TMath::ATan(track.GetRAtAbsorberEnd()/505.)* TMath::RadToDeg();
    if ((dThetaAbs<2.) || (dThetaAbs>10.))
      return kFALSE;
    Double_t dEta = track.Eta();
    if ((dEta<-4.) || (dEta>-2.5))
      return kFALSE;
    if (fTriggerMatch) {
      if (track.GetMatchTrigger()<0.5)
        return kFALSE;
    }
    return kTRUE;
  }
}

//________________________________________________________________________
Bool_t AliDhcTask::IsTrigger(Double_t eta, Double_t pt)
{
  // is in trigger eta,pt range?
  Int_t bin = fHPtTrg->FindBin(pt);
  if (fHPtTrg->IsBinOverflow(bin) || fHPtTrg->IsBinUnderflow(bin))
    return kFALSE;
  
  if (eta<fEtaTLo || eta>fEtaTHi)
    return kFALSE;
  
  return kTRUE;
}

//________________________________________________________________________
Bool_t AliDhcTask::IsAssociated(Double_t eta, Double_t pt)
{
  // is in associated eta,pt range?
  Int_t bin = fHPtAss->FindBin(pt);
  if (fHPtAss->IsBinOverflow(bin) || fHPtAss->IsBinUnderflow(bin))
    return kFALSE;
  
  if (eta<fEtaALo || eta>fEtaAHi)
    return kFALSE;
  
  return kTRUE;
}

//________________________________________________________________________
AliDhcTask::~AliDhcTask()
{
  //Destructor
  if (fPoolMgr) 
    delete fPoolMgr;
}
 AliDhcTask.cxx:1
 AliDhcTask.cxx:2
 AliDhcTask.cxx:3
 AliDhcTask.cxx:4
 AliDhcTask.cxx:5
 AliDhcTask.cxx:6
 AliDhcTask.cxx:7
 AliDhcTask.cxx:8
 AliDhcTask.cxx:9
 AliDhcTask.cxx:10
 AliDhcTask.cxx:11
 AliDhcTask.cxx:12
 AliDhcTask.cxx:13
 AliDhcTask.cxx:14
 AliDhcTask.cxx:15
 AliDhcTask.cxx:16
 AliDhcTask.cxx:17
 AliDhcTask.cxx:18
 AliDhcTask.cxx:19
 AliDhcTask.cxx:20
 AliDhcTask.cxx:21
 AliDhcTask.cxx:22
 AliDhcTask.cxx:23
 AliDhcTask.cxx:24
 AliDhcTask.cxx:25
 AliDhcTask.cxx:26
 AliDhcTask.cxx:27
 AliDhcTask.cxx:28
 AliDhcTask.cxx:29
 AliDhcTask.cxx:30
 AliDhcTask.cxx:31
 AliDhcTask.cxx:32
 AliDhcTask.cxx:33
 AliDhcTask.cxx:34
 AliDhcTask.cxx:35
 AliDhcTask.cxx:36
 AliDhcTask.cxx:37
 AliDhcTask.cxx:38
 AliDhcTask.cxx:39
 AliDhcTask.cxx:40
 AliDhcTask.cxx:41
 AliDhcTask.cxx:42
 AliDhcTask.cxx:43
 AliDhcTask.cxx:44
 AliDhcTask.cxx:45
 AliDhcTask.cxx:46
 AliDhcTask.cxx:47
 AliDhcTask.cxx:48
 AliDhcTask.cxx:49
 AliDhcTask.cxx:50
 AliDhcTask.cxx:51
 AliDhcTask.cxx:52
 AliDhcTask.cxx:53
 AliDhcTask.cxx:54
 AliDhcTask.cxx:55
 AliDhcTask.cxx:56
 AliDhcTask.cxx:57
 AliDhcTask.cxx:58
 AliDhcTask.cxx:59
 AliDhcTask.cxx:60
 AliDhcTask.cxx:61
 AliDhcTask.cxx:62
 AliDhcTask.cxx:63
 AliDhcTask.cxx:64
 AliDhcTask.cxx:65
 AliDhcTask.cxx:66
 AliDhcTask.cxx:67
 AliDhcTask.cxx:68
 AliDhcTask.cxx:69
 AliDhcTask.cxx:70
 AliDhcTask.cxx:71
 AliDhcTask.cxx:72
 AliDhcTask.cxx:73
 AliDhcTask.cxx:74
 AliDhcTask.cxx:75
 AliDhcTask.cxx:76
 AliDhcTask.cxx:77
 AliDhcTask.cxx:78
 AliDhcTask.cxx:79
 AliDhcTask.cxx:80
 AliDhcTask.cxx:81
 AliDhcTask.cxx:82
 AliDhcTask.cxx:83
 AliDhcTask.cxx:84
 AliDhcTask.cxx:85
 AliDhcTask.cxx:86
 AliDhcTask.cxx:87
 AliDhcTask.cxx:88
 AliDhcTask.cxx:89
 AliDhcTask.cxx:90
 AliDhcTask.cxx:91
 AliDhcTask.cxx:92
 AliDhcTask.cxx:93
 AliDhcTask.cxx:94
 AliDhcTask.cxx:95
 AliDhcTask.cxx:96
 AliDhcTask.cxx:97
 AliDhcTask.cxx:98
 AliDhcTask.cxx:99
 AliDhcTask.cxx:100
 AliDhcTask.cxx:101
 AliDhcTask.cxx:102
 AliDhcTask.cxx:103
 AliDhcTask.cxx:104
 AliDhcTask.cxx:105
 AliDhcTask.cxx:106
 AliDhcTask.cxx:107
 AliDhcTask.cxx:108
 AliDhcTask.cxx:109
 AliDhcTask.cxx:110
 AliDhcTask.cxx:111
 AliDhcTask.cxx:112
 AliDhcTask.cxx:113
 AliDhcTask.cxx:114
 AliDhcTask.cxx:115
 AliDhcTask.cxx:116
 AliDhcTask.cxx:117
 AliDhcTask.cxx:118
 AliDhcTask.cxx:119
 AliDhcTask.cxx:120
 AliDhcTask.cxx:121
 AliDhcTask.cxx:122
 AliDhcTask.cxx:123
 AliDhcTask.cxx:124
 AliDhcTask.cxx:125
 AliDhcTask.cxx:126
 AliDhcTask.cxx:127
 AliDhcTask.cxx:128
 AliDhcTask.cxx:129
 AliDhcTask.cxx:130
 AliDhcTask.cxx:131
 AliDhcTask.cxx:132
 AliDhcTask.cxx:133
 AliDhcTask.cxx:134
 AliDhcTask.cxx:135
 AliDhcTask.cxx:136
 AliDhcTask.cxx:137
 AliDhcTask.cxx:138
 AliDhcTask.cxx:139
 AliDhcTask.cxx:140
 AliDhcTask.cxx:141
 AliDhcTask.cxx:142
 AliDhcTask.cxx:143
 AliDhcTask.cxx:144
 AliDhcTask.cxx:145
 AliDhcTask.cxx:146
 AliDhcTask.cxx:147
 AliDhcTask.cxx:148
 AliDhcTask.cxx:149
 AliDhcTask.cxx:150
 AliDhcTask.cxx:151
 AliDhcTask.cxx:152
 AliDhcTask.cxx:153
 AliDhcTask.cxx:154
 AliDhcTask.cxx:155
 AliDhcTask.cxx:156
 AliDhcTask.cxx:157
 AliDhcTask.cxx:158
 AliDhcTask.cxx:159
 AliDhcTask.cxx:160
 AliDhcTask.cxx:161
 AliDhcTask.cxx:162
 AliDhcTask.cxx:163
 AliDhcTask.cxx:164
 AliDhcTask.cxx:165
 AliDhcTask.cxx:166
 AliDhcTask.cxx:167
 AliDhcTask.cxx:168
 AliDhcTask.cxx:169
 AliDhcTask.cxx:170
 AliDhcTask.cxx:171
 AliDhcTask.cxx:172
 AliDhcTask.cxx:173
 AliDhcTask.cxx:174
 AliDhcTask.cxx:175
 AliDhcTask.cxx:176
 AliDhcTask.cxx:177
 AliDhcTask.cxx:178
 AliDhcTask.cxx:179
 AliDhcTask.cxx:180
 AliDhcTask.cxx:181
 AliDhcTask.cxx:182
 AliDhcTask.cxx:183
 AliDhcTask.cxx:184
 AliDhcTask.cxx:185
 AliDhcTask.cxx:186
 AliDhcTask.cxx:187
 AliDhcTask.cxx:188
 AliDhcTask.cxx:189
 AliDhcTask.cxx:190
 AliDhcTask.cxx:191
 AliDhcTask.cxx:192
 AliDhcTask.cxx:193
 AliDhcTask.cxx:194
 AliDhcTask.cxx:195
 AliDhcTask.cxx:196
 AliDhcTask.cxx:197
 AliDhcTask.cxx:198
 AliDhcTask.cxx:199
 AliDhcTask.cxx:200
 AliDhcTask.cxx:201
 AliDhcTask.cxx:202
 AliDhcTask.cxx:203
 AliDhcTask.cxx:204
 AliDhcTask.cxx:205
 AliDhcTask.cxx:206
 AliDhcTask.cxx:207
 AliDhcTask.cxx:208
 AliDhcTask.cxx:209
 AliDhcTask.cxx:210
 AliDhcTask.cxx:211
 AliDhcTask.cxx:212
 AliDhcTask.cxx:213
 AliDhcTask.cxx:214
 AliDhcTask.cxx:215
 AliDhcTask.cxx:216
 AliDhcTask.cxx:217
 AliDhcTask.cxx:218
 AliDhcTask.cxx:219
 AliDhcTask.cxx:220
 AliDhcTask.cxx:221
 AliDhcTask.cxx:222
 AliDhcTask.cxx:223
 AliDhcTask.cxx:224
 AliDhcTask.cxx:225
 AliDhcTask.cxx:226
 AliDhcTask.cxx:227
 AliDhcTask.cxx:228
 AliDhcTask.cxx:229
 AliDhcTask.cxx:230
 AliDhcTask.cxx:231
 AliDhcTask.cxx:232
 AliDhcTask.cxx:233
 AliDhcTask.cxx:234
 AliDhcTask.cxx:235
 AliDhcTask.cxx:236
 AliDhcTask.cxx:237
 AliDhcTask.cxx:238
 AliDhcTask.cxx:239
 AliDhcTask.cxx:240
 AliDhcTask.cxx:241
 AliDhcTask.cxx:242
 AliDhcTask.cxx:243
 AliDhcTask.cxx:244
 AliDhcTask.cxx:245
 AliDhcTask.cxx:246
 AliDhcTask.cxx:247
 AliDhcTask.cxx:248
 AliDhcTask.cxx:249
 AliDhcTask.cxx:250
 AliDhcTask.cxx:251
 AliDhcTask.cxx:252
 AliDhcTask.cxx:253
 AliDhcTask.cxx:254
 AliDhcTask.cxx:255
 AliDhcTask.cxx:256
 AliDhcTask.cxx:257
 AliDhcTask.cxx:258
 AliDhcTask.cxx:259
 AliDhcTask.cxx:260
 AliDhcTask.cxx:261
 AliDhcTask.cxx:262
 AliDhcTask.cxx:263
 AliDhcTask.cxx:264
 AliDhcTask.cxx:265
 AliDhcTask.cxx:266
 AliDhcTask.cxx:267
 AliDhcTask.cxx:268
 AliDhcTask.cxx:269
 AliDhcTask.cxx:270
 AliDhcTask.cxx:271
 AliDhcTask.cxx:272
 AliDhcTask.cxx:273
 AliDhcTask.cxx:274
 AliDhcTask.cxx:275
 AliDhcTask.cxx:276
 AliDhcTask.cxx:277
 AliDhcTask.cxx:278
 AliDhcTask.cxx:279
 AliDhcTask.cxx:280
 AliDhcTask.cxx:281
 AliDhcTask.cxx:282
 AliDhcTask.cxx:283
 AliDhcTask.cxx:284
 AliDhcTask.cxx:285
 AliDhcTask.cxx:286
 AliDhcTask.cxx:287
 AliDhcTask.cxx:288
 AliDhcTask.cxx:289
 AliDhcTask.cxx:290
 AliDhcTask.cxx:291
 AliDhcTask.cxx:292
 AliDhcTask.cxx:293
 AliDhcTask.cxx:294
 AliDhcTask.cxx:295
 AliDhcTask.cxx:296
 AliDhcTask.cxx:297
 AliDhcTask.cxx:298
 AliDhcTask.cxx:299
 AliDhcTask.cxx:300
 AliDhcTask.cxx:301
 AliDhcTask.cxx:302
 AliDhcTask.cxx:303
 AliDhcTask.cxx:304
 AliDhcTask.cxx:305
 AliDhcTask.cxx:306
 AliDhcTask.cxx:307
 AliDhcTask.cxx:308
 AliDhcTask.cxx:309
 AliDhcTask.cxx:310
 AliDhcTask.cxx:311
 AliDhcTask.cxx:312
 AliDhcTask.cxx:313
 AliDhcTask.cxx:314
 AliDhcTask.cxx:315
 AliDhcTask.cxx:316
 AliDhcTask.cxx:317
 AliDhcTask.cxx:318
 AliDhcTask.cxx:319
 AliDhcTask.cxx:320
 AliDhcTask.cxx:321
 AliDhcTask.cxx:322
 AliDhcTask.cxx:323
 AliDhcTask.cxx:324
 AliDhcTask.cxx:325
 AliDhcTask.cxx:326
 AliDhcTask.cxx:327
 AliDhcTask.cxx:328
 AliDhcTask.cxx:329
 AliDhcTask.cxx:330
 AliDhcTask.cxx:331
 AliDhcTask.cxx:332
 AliDhcTask.cxx:333
 AliDhcTask.cxx:334
 AliDhcTask.cxx:335
 AliDhcTask.cxx:336
 AliDhcTask.cxx:337
 AliDhcTask.cxx:338
 AliDhcTask.cxx:339
 AliDhcTask.cxx:340
 AliDhcTask.cxx:341
 AliDhcTask.cxx:342
 AliDhcTask.cxx:343
 AliDhcTask.cxx:344
 AliDhcTask.cxx:345
 AliDhcTask.cxx:346
 AliDhcTask.cxx:347
 AliDhcTask.cxx:348
 AliDhcTask.cxx:349
 AliDhcTask.cxx:350
 AliDhcTask.cxx:351
 AliDhcTask.cxx:352
 AliDhcTask.cxx:353
 AliDhcTask.cxx:354
 AliDhcTask.cxx:355
 AliDhcTask.cxx:356
 AliDhcTask.cxx:357
 AliDhcTask.cxx:358
 AliDhcTask.cxx:359
 AliDhcTask.cxx:360
 AliDhcTask.cxx:361
 AliDhcTask.cxx:362
 AliDhcTask.cxx:363
 AliDhcTask.cxx:364
 AliDhcTask.cxx:365
 AliDhcTask.cxx:366
 AliDhcTask.cxx:367
 AliDhcTask.cxx:368
 AliDhcTask.cxx:369
 AliDhcTask.cxx:370
 AliDhcTask.cxx:371
 AliDhcTask.cxx:372
 AliDhcTask.cxx:373
 AliDhcTask.cxx:374
 AliDhcTask.cxx:375
 AliDhcTask.cxx:376
 AliDhcTask.cxx:377
 AliDhcTask.cxx:378
 AliDhcTask.cxx:379
 AliDhcTask.cxx:380
 AliDhcTask.cxx:381
 AliDhcTask.cxx:382
 AliDhcTask.cxx:383
 AliDhcTask.cxx:384
 AliDhcTask.cxx:385
 AliDhcTask.cxx:386
 AliDhcTask.cxx:387
 AliDhcTask.cxx:388
 AliDhcTask.cxx:389
 AliDhcTask.cxx:390
 AliDhcTask.cxx:391
 AliDhcTask.cxx:392
 AliDhcTask.cxx:393
 AliDhcTask.cxx:394
 AliDhcTask.cxx:395
 AliDhcTask.cxx:396
 AliDhcTask.cxx:397
 AliDhcTask.cxx:398
 AliDhcTask.cxx:399
 AliDhcTask.cxx:400
 AliDhcTask.cxx:401
 AliDhcTask.cxx:402
 AliDhcTask.cxx:403
 AliDhcTask.cxx:404
 AliDhcTask.cxx:405
 AliDhcTask.cxx:406
 AliDhcTask.cxx:407
 AliDhcTask.cxx:408
 AliDhcTask.cxx:409
 AliDhcTask.cxx:410
 AliDhcTask.cxx:411
 AliDhcTask.cxx:412
 AliDhcTask.cxx:413
 AliDhcTask.cxx:414
 AliDhcTask.cxx:415
 AliDhcTask.cxx:416
 AliDhcTask.cxx:417
 AliDhcTask.cxx:418
 AliDhcTask.cxx:419
 AliDhcTask.cxx:420
 AliDhcTask.cxx:421
 AliDhcTask.cxx:422
 AliDhcTask.cxx:423
 AliDhcTask.cxx:424
 AliDhcTask.cxx:425
 AliDhcTask.cxx:426
 AliDhcTask.cxx:427
 AliDhcTask.cxx:428
 AliDhcTask.cxx:429
 AliDhcTask.cxx:430
 AliDhcTask.cxx:431
 AliDhcTask.cxx:432
 AliDhcTask.cxx:433
 AliDhcTask.cxx:434
 AliDhcTask.cxx:435
 AliDhcTask.cxx:436
 AliDhcTask.cxx:437
 AliDhcTask.cxx:438
 AliDhcTask.cxx:439
 AliDhcTask.cxx:440
 AliDhcTask.cxx:441
 AliDhcTask.cxx:442
 AliDhcTask.cxx:443
 AliDhcTask.cxx:444
 AliDhcTask.cxx:445
 AliDhcTask.cxx:446
 AliDhcTask.cxx:447
 AliDhcTask.cxx:448
 AliDhcTask.cxx:449
 AliDhcTask.cxx:450
 AliDhcTask.cxx:451
 AliDhcTask.cxx:452
 AliDhcTask.cxx:453
 AliDhcTask.cxx:454
 AliDhcTask.cxx:455
 AliDhcTask.cxx:456
 AliDhcTask.cxx:457
 AliDhcTask.cxx:458
 AliDhcTask.cxx:459
 AliDhcTask.cxx:460
 AliDhcTask.cxx:461
 AliDhcTask.cxx:462
 AliDhcTask.cxx:463
 AliDhcTask.cxx:464
 AliDhcTask.cxx:465
 AliDhcTask.cxx:466
 AliDhcTask.cxx:467
 AliDhcTask.cxx:468
 AliDhcTask.cxx:469
 AliDhcTask.cxx:470
 AliDhcTask.cxx:471
 AliDhcTask.cxx:472
 AliDhcTask.cxx:473
 AliDhcTask.cxx:474
 AliDhcTask.cxx:475
 AliDhcTask.cxx:476
 AliDhcTask.cxx:477
 AliDhcTask.cxx:478
 AliDhcTask.cxx:479
 AliDhcTask.cxx:480
 AliDhcTask.cxx:481
 AliDhcTask.cxx:482
 AliDhcTask.cxx:483
 AliDhcTask.cxx:484
 AliDhcTask.cxx:485
 AliDhcTask.cxx:486
 AliDhcTask.cxx:487
 AliDhcTask.cxx:488
 AliDhcTask.cxx:489
 AliDhcTask.cxx:490
 AliDhcTask.cxx:491
 AliDhcTask.cxx:492
 AliDhcTask.cxx:493
 AliDhcTask.cxx:494
 AliDhcTask.cxx:495
 AliDhcTask.cxx:496
 AliDhcTask.cxx:497
 AliDhcTask.cxx:498
 AliDhcTask.cxx:499
 AliDhcTask.cxx:500
 AliDhcTask.cxx:501
 AliDhcTask.cxx:502
 AliDhcTask.cxx:503
 AliDhcTask.cxx:504
 AliDhcTask.cxx:505
 AliDhcTask.cxx:506
 AliDhcTask.cxx:507
 AliDhcTask.cxx:508
 AliDhcTask.cxx:509
 AliDhcTask.cxx:510
 AliDhcTask.cxx:511
 AliDhcTask.cxx:512
 AliDhcTask.cxx:513
 AliDhcTask.cxx:514
 AliDhcTask.cxx:515
 AliDhcTask.cxx:516
 AliDhcTask.cxx:517
 AliDhcTask.cxx:518
 AliDhcTask.cxx:519
 AliDhcTask.cxx:520
 AliDhcTask.cxx:521
 AliDhcTask.cxx:522
 AliDhcTask.cxx:523
 AliDhcTask.cxx:524
 AliDhcTask.cxx:525
 AliDhcTask.cxx:526
 AliDhcTask.cxx:527
 AliDhcTask.cxx:528
 AliDhcTask.cxx:529
 AliDhcTask.cxx:530
 AliDhcTask.cxx:531
 AliDhcTask.cxx:532
 AliDhcTask.cxx:533
 AliDhcTask.cxx:534
 AliDhcTask.cxx:535
 AliDhcTask.cxx:536
 AliDhcTask.cxx:537
 AliDhcTask.cxx:538
 AliDhcTask.cxx:539
 AliDhcTask.cxx:540
 AliDhcTask.cxx:541
 AliDhcTask.cxx:542
 AliDhcTask.cxx:543
 AliDhcTask.cxx:544
 AliDhcTask.cxx:545
 AliDhcTask.cxx:546
 AliDhcTask.cxx:547
 AliDhcTask.cxx:548
 AliDhcTask.cxx:549
 AliDhcTask.cxx:550
 AliDhcTask.cxx:551
 AliDhcTask.cxx:552
 AliDhcTask.cxx:553
 AliDhcTask.cxx:554
 AliDhcTask.cxx:555
 AliDhcTask.cxx:556
 AliDhcTask.cxx:557
 AliDhcTask.cxx:558
 AliDhcTask.cxx:559
 AliDhcTask.cxx:560
 AliDhcTask.cxx:561
 AliDhcTask.cxx:562
 AliDhcTask.cxx:563
 AliDhcTask.cxx:564
 AliDhcTask.cxx:565
 AliDhcTask.cxx:566
 AliDhcTask.cxx:567
 AliDhcTask.cxx:568
 AliDhcTask.cxx:569
 AliDhcTask.cxx:570
 AliDhcTask.cxx:571
 AliDhcTask.cxx:572
 AliDhcTask.cxx:573
 AliDhcTask.cxx:574
 AliDhcTask.cxx:575
 AliDhcTask.cxx:576
 AliDhcTask.cxx:577
 AliDhcTask.cxx:578
 AliDhcTask.cxx:579
 AliDhcTask.cxx:580
 AliDhcTask.cxx:581
 AliDhcTask.cxx:582
 AliDhcTask.cxx:583
 AliDhcTask.cxx:584
 AliDhcTask.cxx:585
 AliDhcTask.cxx:586
 AliDhcTask.cxx:587
 AliDhcTask.cxx:588
 AliDhcTask.cxx:589
 AliDhcTask.cxx:590
 AliDhcTask.cxx:591
 AliDhcTask.cxx:592
 AliDhcTask.cxx:593
 AliDhcTask.cxx:594
 AliDhcTask.cxx:595
 AliDhcTask.cxx:596
 AliDhcTask.cxx:597
 AliDhcTask.cxx:598
 AliDhcTask.cxx:599
 AliDhcTask.cxx:600
 AliDhcTask.cxx:601
 AliDhcTask.cxx:602
 AliDhcTask.cxx:603
 AliDhcTask.cxx:604
 AliDhcTask.cxx:605
 AliDhcTask.cxx:606
 AliDhcTask.cxx:607
 AliDhcTask.cxx:608
 AliDhcTask.cxx:609
 AliDhcTask.cxx:610
 AliDhcTask.cxx:611
 AliDhcTask.cxx:612
 AliDhcTask.cxx:613
 AliDhcTask.cxx:614
 AliDhcTask.cxx:615
 AliDhcTask.cxx:616
 AliDhcTask.cxx:617
 AliDhcTask.cxx:618
 AliDhcTask.cxx:619
 AliDhcTask.cxx:620
 AliDhcTask.cxx:621
 AliDhcTask.cxx:622
 AliDhcTask.cxx:623
 AliDhcTask.cxx:624
 AliDhcTask.cxx:625
 AliDhcTask.cxx:626
 AliDhcTask.cxx:627
 AliDhcTask.cxx:628
 AliDhcTask.cxx:629
 AliDhcTask.cxx:630
 AliDhcTask.cxx:631
 AliDhcTask.cxx:632
 AliDhcTask.cxx:633
 AliDhcTask.cxx:634
 AliDhcTask.cxx:635
 AliDhcTask.cxx:636
 AliDhcTask.cxx:637
 AliDhcTask.cxx:638
 AliDhcTask.cxx:639
 AliDhcTask.cxx:640
 AliDhcTask.cxx:641
 AliDhcTask.cxx:642
 AliDhcTask.cxx:643
 AliDhcTask.cxx:644
 AliDhcTask.cxx:645
 AliDhcTask.cxx:646
 AliDhcTask.cxx:647
 AliDhcTask.cxx:648
 AliDhcTask.cxx:649
 AliDhcTask.cxx:650
 AliDhcTask.cxx:651
 AliDhcTask.cxx:652
 AliDhcTask.cxx:653
 AliDhcTask.cxx:654
 AliDhcTask.cxx:655
 AliDhcTask.cxx:656
 AliDhcTask.cxx:657
 AliDhcTask.cxx:658
 AliDhcTask.cxx:659
 AliDhcTask.cxx:660
 AliDhcTask.cxx:661
 AliDhcTask.cxx:662
 AliDhcTask.cxx:663
 AliDhcTask.cxx:664
 AliDhcTask.cxx:665
 AliDhcTask.cxx:666
 AliDhcTask.cxx:667
 AliDhcTask.cxx:668
 AliDhcTask.cxx:669
 AliDhcTask.cxx:670
 AliDhcTask.cxx:671
 AliDhcTask.cxx:672
 AliDhcTask.cxx:673
 AliDhcTask.cxx:674
 AliDhcTask.cxx:675
 AliDhcTask.cxx:676
 AliDhcTask.cxx:677
 AliDhcTask.cxx:678
 AliDhcTask.cxx:679
 AliDhcTask.cxx:680
 AliDhcTask.cxx:681
 AliDhcTask.cxx:682
 AliDhcTask.cxx:683
 AliDhcTask.cxx:684
 AliDhcTask.cxx:685
 AliDhcTask.cxx:686
 AliDhcTask.cxx:687
 AliDhcTask.cxx:688
 AliDhcTask.cxx:689
 AliDhcTask.cxx:690
 AliDhcTask.cxx:691
 AliDhcTask.cxx:692
 AliDhcTask.cxx:693
 AliDhcTask.cxx:694
 AliDhcTask.cxx:695
 AliDhcTask.cxx:696
 AliDhcTask.cxx:697
 AliDhcTask.cxx:698
 AliDhcTask.cxx:699
 AliDhcTask.cxx:700
 AliDhcTask.cxx:701
 AliDhcTask.cxx:702
 AliDhcTask.cxx:703
 AliDhcTask.cxx:704
 AliDhcTask.cxx:705
 AliDhcTask.cxx:706
 AliDhcTask.cxx:707
 AliDhcTask.cxx:708
 AliDhcTask.cxx:709
 AliDhcTask.cxx:710
 AliDhcTask.cxx:711
 AliDhcTask.cxx:712
 AliDhcTask.cxx:713
 AliDhcTask.cxx:714
 AliDhcTask.cxx:715
 AliDhcTask.cxx:716
 AliDhcTask.cxx:717
 AliDhcTask.cxx:718
 AliDhcTask.cxx:719
 AliDhcTask.cxx:720
 AliDhcTask.cxx:721
 AliDhcTask.cxx:722
 AliDhcTask.cxx:723
 AliDhcTask.cxx:724
 AliDhcTask.cxx:725
 AliDhcTask.cxx:726
 AliDhcTask.cxx:727
 AliDhcTask.cxx:728
 AliDhcTask.cxx:729
 AliDhcTask.cxx:730
 AliDhcTask.cxx:731
 AliDhcTask.cxx:732
 AliDhcTask.cxx:733
 AliDhcTask.cxx:734
 AliDhcTask.cxx:735
 AliDhcTask.cxx:736
 AliDhcTask.cxx:737
 AliDhcTask.cxx:738
 AliDhcTask.cxx:739
 AliDhcTask.cxx:740
 AliDhcTask.cxx:741
 AliDhcTask.cxx:742
 AliDhcTask.cxx:743
 AliDhcTask.cxx:744
 AliDhcTask.cxx:745
 AliDhcTask.cxx:746
 AliDhcTask.cxx:747
 AliDhcTask.cxx:748
 AliDhcTask.cxx:749
 AliDhcTask.cxx:750
 AliDhcTask.cxx:751
 AliDhcTask.cxx:752
 AliDhcTask.cxx:753
 AliDhcTask.cxx:754
 AliDhcTask.cxx:755
 AliDhcTask.cxx:756
 AliDhcTask.cxx:757
 AliDhcTask.cxx:758
 AliDhcTask.cxx:759
 AliDhcTask.cxx:760
 AliDhcTask.cxx:761
 AliDhcTask.cxx:762
 AliDhcTask.cxx:763
 AliDhcTask.cxx:764
 AliDhcTask.cxx:765
 AliDhcTask.cxx:766
 AliDhcTask.cxx:767
 AliDhcTask.cxx:768
 AliDhcTask.cxx:769
 AliDhcTask.cxx:770
 AliDhcTask.cxx:771
 AliDhcTask.cxx:772
 AliDhcTask.cxx:773
 AliDhcTask.cxx:774
 AliDhcTask.cxx:775
 AliDhcTask.cxx:776
 AliDhcTask.cxx:777
 AliDhcTask.cxx:778
 AliDhcTask.cxx:779
 AliDhcTask.cxx:780
 AliDhcTask.cxx:781
 AliDhcTask.cxx:782
 AliDhcTask.cxx:783
 AliDhcTask.cxx:784
 AliDhcTask.cxx:785
 AliDhcTask.cxx:786
 AliDhcTask.cxx:787
 AliDhcTask.cxx:788
 AliDhcTask.cxx:789
 AliDhcTask.cxx:790
 AliDhcTask.cxx:791
 AliDhcTask.cxx:792
 AliDhcTask.cxx:793
 AliDhcTask.cxx:794
 AliDhcTask.cxx:795
 AliDhcTask.cxx:796
 AliDhcTask.cxx:797
 AliDhcTask.cxx:798
 AliDhcTask.cxx:799
 AliDhcTask.cxx:800
 AliDhcTask.cxx:801
 AliDhcTask.cxx:802
 AliDhcTask.cxx:803
 AliDhcTask.cxx:804
 AliDhcTask.cxx:805
 AliDhcTask.cxx:806
 AliDhcTask.cxx:807
 AliDhcTask.cxx:808
 AliDhcTask.cxx:809
 AliDhcTask.cxx:810
 AliDhcTask.cxx:811
 AliDhcTask.cxx:812
 AliDhcTask.cxx:813
 AliDhcTask.cxx:814
 AliDhcTask.cxx:815
 AliDhcTask.cxx:816
 AliDhcTask.cxx:817
 AliDhcTask.cxx:818
 AliDhcTask.cxx:819
 AliDhcTask.cxx:820
 AliDhcTask.cxx:821
 AliDhcTask.cxx:822
 AliDhcTask.cxx:823
 AliDhcTask.cxx:824
 AliDhcTask.cxx:825
 AliDhcTask.cxx:826
 AliDhcTask.cxx:827
 AliDhcTask.cxx:828
 AliDhcTask.cxx:829
 AliDhcTask.cxx:830
 AliDhcTask.cxx:831
 AliDhcTask.cxx:832
 AliDhcTask.cxx:833
 AliDhcTask.cxx:834
 AliDhcTask.cxx:835
 AliDhcTask.cxx:836
 AliDhcTask.cxx:837
 AliDhcTask.cxx:838
 AliDhcTask.cxx:839
 AliDhcTask.cxx:840
 AliDhcTask.cxx:841
 AliDhcTask.cxx:842
 AliDhcTask.cxx:843
 AliDhcTask.cxx:844
 AliDhcTask.cxx:845
 AliDhcTask.cxx:846
 AliDhcTask.cxx:847
 AliDhcTask.cxx:848
 AliDhcTask.cxx:849
 AliDhcTask.cxx:850
 AliDhcTask.cxx:851
 AliDhcTask.cxx:852
 AliDhcTask.cxx:853
 AliDhcTask.cxx:854
 AliDhcTask.cxx:855
 AliDhcTask.cxx:856
 AliDhcTask.cxx:857
 AliDhcTask.cxx:858
 AliDhcTask.cxx:859
 AliDhcTask.cxx:860
 AliDhcTask.cxx:861
 AliDhcTask.cxx:862
 AliDhcTask.cxx:863
 AliDhcTask.cxx:864
 AliDhcTask.cxx:865
 AliDhcTask.cxx:866
 AliDhcTask.cxx:867
 AliDhcTask.cxx:868
 AliDhcTask.cxx:869
 AliDhcTask.cxx:870
 AliDhcTask.cxx:871
 AliDhcTask.cxx:872
 AliDhcTask.cxx:873
 AliDhcTask.cxx:874
 AliDhcTask.cxx:875
 AliDhcTask.cxx:876
 AliDhcTask.cxx:877
 AliDhcTask.cxx:878
 AliDhcTask.cxx:879
 AliDhcTask.cxx:880
 AliDhcTask.cxx:881
 AliDhcTask.cxx:882
 AliDhcTask.cxx:883
 AliDhcTask.cxx:884
 AliDhcTask.cxx:885
 AliDhcTask.cxx:886
 AliDhcTask.cxx:887
 AliDhcTask.cxx:888
 AliDhcTask.cxx:889
 AliDhcTask.cxx:890
 AliDhcTask.cxx:891
 AliDhcTask.cxx:892
 AliDhcTask.cxx:893
 AliDhcTask.cxx:894
 AliDhcTask.cxx:895
 AliDhcTask.cxx:896
 AliDhcTask.cxx:897
 AliDhcTask.cxx:898
 AliDhcTask.cxx:899
 AliDhcTask.cxx:900
 AliDhcTask.cxx:901
 AliDhcTask.cxx:902
 AliDhcTask.cxx:903
 AliDhcTask.cxx:904
 AliDhcTask.cxx:905
 AliDhcTask.cxx:906
 AliDhcTask.cxx:907
 AliDhcTask.cxx:908
 AliDhcTask.cxx:909
 AliDhcTask.cxx:910
 AliDhcTask.cxx:911
 AliDhcTask.cxx:912
 AliDhcTask.cxx:913
 AliDhcTask.cxx:914
 AliDhcTask.cxx:915
 AliDhcTask.cxx:916
 AliDhcTask.cxx:917
 AliDhcTask.cxx:918
 AliDhcTask.cxx:919
 AliDhcTask.cxx:920
 AliDhcTask.cxx:921
 AliDhcTask.cxx:922
 AliDhcTask.cxx:923
 AliDhcTask.cxx:924
 AliDhcTask.cxx:925
 AliDhcTask.cxx:926
 AliDhcTask.cxx:927
 AliDhcTask.cxx:928
 AliDhcTask.cxx:929
 AliDhcTask.cxx:930
 AliDhcTask.cxx:931
 AliDhcTask.cxx:932
 AliDhcTask.cxx:933
 AliDhcTask.cxx:934
 AliDhcTask.cxx:935
 AliDhcTask.cxx:936
 AliDhcTask.cxx:937
 AliDhcTask.cxx:938
 AliDhcTask.cxx:939
 AliDhcTask.cxx:940
 AliDhcTask.cxx:941
 AliDhcTask.cxx:942
 AliDhcTask.cxx:943
 AliDhcTask.cxx:944
 AliDhcTask.cxx:945
 AliDhcTask.cxx:946
 AliDhcTask.cxx:947
 AliDhcTask.cxx:948
 AliDhcTask.cxx:949
 AliDhcTask.cxx:950
 AliDhcTask.cxx:951
 AliDhcTask.cxx:952
 AliDhcTask.cxx:953
 AliDhcTask.cxx:954
 AliDhcTask.cxx:955
 AliDhcTask.cxx:956
 AliDhcTask.cxx:957
 AliDhcTask.cxx:958
 AliDhcTask.cxx:959
 AliDhcTask.cxx:960
 AliDhcTask.cxx:961
 AliDhcTask.cxx:962
 AliDhcTask.cxx:963
 AliDhcTask.cxx:964
 AliDhcTask.cxx:965
 AliDhcTask.cxx:966
 AliDhcTask.cxx:967
 AliDhcTask.cxx:968
 AliDhcTask.cxx:969
 AliDhcTask.cxx:970
 AliDhcTask.cxx:971
 AliDhcTask.cxx:972
 AliDhcTask.cxx:973
 AliDhcTask.cxx:974
 AliDhcTask.cxx:975
 AliDhcTask.cxx:976
 AliDhcTask.cxx:977
 AliDhcTask.cxx:978
 AliDhcTask.cxx:979
 AliDhcTask.cxx:980
 AliDhcTask.cxx:981
 AliDhcTask.cxx:982
 AliDhcTask.cxx:983
 AliDhcTask.cxx:984
 AliDhcTask.cxx:985
 AliDhcTask.cxx:986
 AliDhcTask.cxx:987
 AliDhcTask.cxx:988
 AliDhcTask.cxx:989
 AliDhcTask.cxx:990
 AliDhcTask.cxx:991
 AliDhcTask.cxx:992
 AliDhcTask.cxx:993
 AliDhcTask.cxx:994
 AliDhcTask.cxx:995
 AliDhcTask.cxx:996
 AliDhcTask.cxx:997
 AliDhcTask.cxx:998
 AliDhcTask.cxx:999
 AliDhcTask.cxx:1000
 AliDhcTask.cxx:1001
 AliDhcTask.cxx:1002
 AliDhcTask.cxx:1003
 AliDhcTask.cxx:1004
 AliDhcTask.cxx:1005
 AliDhcTask.cxx:1006
 AliDhcTask.cxx:1007
 AliDhcTask.cxx:1008
 AliDhcTask.cxx:1009
 AliDhcTask.cxx:1010
 AliDhcTask.cxx:1011
 AliDhcTask.cxx:1012
 AliDhcTask.cxx:1013
 AliDhcTask.cxx:1014
 AliDhcTask.cxx:1015
 AliDhcTask.cxx:1016
 AliDhcTask.cxx:1017
 AliDhcTask.cxx:1018
 AliDhcTask.cxx:1019
 AliDhcTask.cxx:1020
 AliDhcTask.cxx:1021
 AliDhcTask.cxx:1022
 AliDhcTask.cxx:1023
 AliDhcTask.cxx:1024
 AliDhcTask.cxx:1025
 AliDhcTask.cxx:1026
 AliDhcTask.cxx:1027
 AliDhcTask.cxx:1028
 AliDhcTask.cxx:1029
 AliDhcTask.cxx:1030
 AliDhcTask.cxx:1031
 AliDhcTask.cxx:1032
 AliDhcTask.cxx:1033
 AliDhcTask.cxx:1034
 AliDhcTask.cxx:1035
 AliDhcTask.cxx:1036
 AliDhcTask.cxx:1037
 AliDhcTask.cxx:1038
 AliDhcTask.cxx:1039
 AliDhcTask.cxx:1040
 AliDhcTask.cxx:1041
 AliDhcTask.cxx:1042
 AliDhcTask.cxx:1043
 AliDhcTask.cxx:1044
 AliDhcTask.cxx:1045
 AliDhcTask.cxx:1046
 AliDhcTask.cxx:1047
 AliDhcTask.cxx:1048
 AliDhcTask.cxx:1049
 AliDhcTask.cxx:1050
 AliDhcTask.cxx:1051
 AliDhcTask.cxx:1052
 AliDhcTask.cxx:1053
 AliDhcTask.cxx:1054
 AliDhcTask.cxx:1055
 AliDhcTask.cxx:1056
 AliDhcTask.cxx:1057
 AliDhcTask.cxx:1058
 AliDhcTask.cxx:1059
 AliDhcTask.cxx:1060
 AliDhcTask.cxx:1061
 AliDhcTask.cxx:1062
 AliDhcTask.cxx:1063
 AliDhcTask.cxx:1064
 AliDhcTask.cxx:1065
 AliDhcTask.cxx:1066
 AliDhcTask.cxx:1067
 AliDhcTask.cxx:1068
 AliDhcTask.cxx:1069
 AliDhcTask.cxx:1070
 AliDhcTask.cxx:1071
 AliDhcTask.cxx:1072
 AliDhcTask.cxx:1073
 AliDhcTask.cxx:1074
 AliDhcTask.cxx:1075
 AliDhcTask.cxx:1076
 AliDhcTask.cxx:1077
 AliDhcTask.cxx:1078
 AliDhcTask.cxx:1079
 AliDhcTask.cxx:1080
 AliDhcTask.cxx:1081
 AliDhcTask.cxx:1082
 AliDhcTask.cxx:1083
 AliDhcTask.cxx:1084
 AliDhcTask.cxx:1085
 AliDhcTask.cxx:1086
 AliDhcTask.cxx:1087
 AliDhcTask.cxx:1088
 AliDhcTask.cxx:1089
 AliDhcTask.cxx:1090
 AliDhcTask.cxx:1091
 AliDhcTask.cxx:1092
 AliDhcTask.cxx:1093
 AliDhcTask.cxx:1094
 AliDhcTask.cxx:1095
 AliDhcTask.cxx:1096
 AliDhcTask.cxx:1097
 AliDhcTask.cxx:1098
 AliDhcTask.cxx:1099
 AliDhcTask.cxx:1100
 AliDhcTask.cxx:1101
 AliDhcTask.cxx:1102
 AliDhcTask.cxx:1103
 AliDhcTask.cxx:1104
 AliDhcTask.cxx:1105
 AliDhcTask.cxx:1106
 AliDhcTask.cxx:1107
 AliDhcTask.cxx:1108
 AliDhcTask.cxx:1109
 AliDhcTask.cxx:1110
 AliDhcTask.cxx:1111
 AliDhcTask.cxx:1112
 AliDhcTask.cxx:1113
 AliDhcTask.cxx:1114
 AliDhcTask.cxx:1115
 AliDhcTask.cxx:1116
 AliDhcTask.cxx:1117
 AliDhcTask.cxx:1118
 AliDhcTask.cxx:1119
 AliDhcTask.cxx:1120
 AliDhcTask.cxx:1121
 AliDhcTask.cxx:1122
 AliDhcTask.cxx:1123
 AliDhcTask.cxx:1124
 AliDhcTask.cxx:1125
 AliDhcTask.cxx:1126
 AliDhcTask.cxx:1127
 AliDhcTask.cxx:1128
 AliDhcTask.cxx:1129
 AliDhcTask.cxx:1130
 AliDhcTask.cxx:1131
 AliDhcTask.cxx:1132
 AliDhcTask.cxx:1133
 AliDhcTask.cxx:1134
 AliDhcTask.cxx:1135
 AliDhcTask.cxx:1136
 AliDhcTask.cxx:1137
 AliDhcTask.cxx:1138
 AliDhcTask.cxx:1139
 AliDhcTask.cxx:1140
 AliDhcTask.cxx:1141
 AliDhcTask.cxx:1142
 AliDhcTask.cxx:1143
 AliDhcTask.cxx:1144
 AliDhcTask.cxx:1145
 AliDhcTask.cxx:1146
 AliDhcTask.cxx:1147
 AliDhcTask.cxx:1148
 AliDhcTask.cxx:1149
 AliDhcTask.cxx:1150
 AliDhcTask.cxx:1151
 AliDhcTask.cxx:1152
 AliDhcTask.cxx:1153
 AliDhcTask.cxx:1154
 AliDhcTask.cxx:1155
 AliDhcTask.cxx:1156
 AliDhcTask.cxx:1157
 AliDhcTask.cxx:1158
 AliDhcTask.cxx:1159
 AliDhcTask.cxx:1160
 AliDhcTask.cxx:1161
 AliDhcTask.cxx:1162
 AliDhcTask.cxx:1163
 AliDhcTask.cxx:1164
 AliDhcTask.cxx:1165
 AliDhcTask.cxx:1166
 AliDhcTask.cxx:1167
 AliDhcTask.cxx:1168
 AliDhcTask.cxx:1169
 AliDhcTask.cxx:1170
 AliDhcTask.cxx:1171
 AliDhcTask.cxx:1172
 AliDhcTask.cxx:1173
 AliDhcTask.cxx:1174
 AliDhcTask.cxx:1175
 AliDhcTask.cxx:1176
 AliDhcTask.cxx:1177
 AliDhcTask.cxx:1178
 AliDhcTask.cxx:1179
 AliDhcTask.cxx:1180
 AliDhcTask.cxx:1181
 AliDhcTask.cxx:1182
 AliDhcTask.cxx:1183
 AliDhcTask.cxx:1184
 AliDhcTask.cxx:1185
 AliDhcTask.cxx:1186
 AliDhcTask.cxx:1187
 AliDhcTask.cxx:1188
 AliDhcTask.cxx:1189
 AliDhcTask.cxx:1190
 AliDhcTask.cxx:1191
 AliDhcTask.cxx:1192
 AliDhcTask.cxx:1193
 AliDhcTask.cxx:1194
 AliDhcTask.cxx:1195
 AliDhcTask.cxx:1196
 AliDhcTask.cxx:1197
 AliDhcTask.cxx:1198
 AliDhcTask.cxx:1199
 AliDhcTask.cxx:1200
 AliDhcTask.cxx:1201
 AliDhcTask.cxx:1202
 AliDhcTask.cxx:1203
 AliDhcTask.cxx:1204
 AliDhcTask.cxx:1205
 AliDhcTask.cxx:1206
 AliDhcTask.cxx:1207
 AliDhcTask.cxx:1208
 AliDhcTask.cxx:1209
 AliDhcTask.cxx:1210
 AliDhcTask.cxx:1211
 AliDhcTask.cxx:1212
 AliDhcTask.cxx:1213
 AliDhcTask.cxx:1214
 AliDhcTask.cxx:1215
 AliDhcTask.cxx:1216
 AliDhcTask.cxx:1217
 AliDhcTask.cxx:1218
 AliDhcTask.cxx:1219
 AliDhcTask.cxx:1220
 AliDhcTask.cxx:1221
 AliDhcTask.cxx:1222
 AliDhcTask.cxx:1223
 AliDhcTask.cxx:1224
 AliDhcTask.cxx:1225
 AliDhcTask.cxx:1226
 AliDhcTask.cxx:1227
 AliDhcTask.cxx:1228
 AliDhcTask.cxx:1229
 AliDhcTask.cxx:1230
 AliDhcTask.cxx:1231
 AliDhcTask.cxx:1232
 AliDhcTask.cxx:1233
 AliDhcTask.cxx:1234
 AliDhcTask.cxx:1235
 AliDhcTask.cxx:1236
 AliDhcTask.cxx:1237
 AliDhcTask.cxx:1238
 AliDhcTask.cxx:1239
 AliDhcTask.cxx:1240
 AliDhcTask.cxx:1241
 AliDhcTask.cxx:1242
 AliDhcTask.cxx:1243
 AliDhcTask.cxx:1244
 AliDhcTask.cxx:1245
 AliDhcTask.cxx:1246
 AliDhcTask.cxx:1247
 AliDhcTask.cxx:1248
 AliDhcTask.cxx:1249
 AliDhcTask.cxx:1250
 AliDhcTask.cxx:1251
 AliDhcTask.cxx:1252
 AliDhcTask.cxx:1253
 AliDhcTask.cxx:1254
 AliDhcTask.cxx:1255
 AliDhcTask.cxx:1256
 AliDhcTask.cxx:1257
 AliDhcTask.cxx:1258
 AliDhcTask.cxx:1259
 AliDhcTask.cxx:1260
 AliDhcTask.cxx:1261
 AliDhcTask.cxx:1262
 AliDhcTask.cxx:1263
 AliDhcTask.cxx:1264
 AliDhcTask.cxx:1265
 AliDhcTask.cxx:1266
 AliDhcTask.cxx:1267
 AliDhcTask.cxx:1268
 AliDhcTask.cxx:1269
 AliDhcTask.cxx:1270
 AliDhcTask.cxx:1271
 AliDhcTask.cxx:1272
 AliDhcTask.cxx:1273
 AliDhcTask.cxx:1274
 AliDhcTask.cxx:1275
 AliDhcTask.cxx:1276
 AliDhcTask.cxx:1277
 AliDhcTask.cxx:1278
 AliDhcTask.cxx:1279
 AliDhcTask.cxx:1280
 AliDhcTask.cxx:1281
 AliDhcTask.cxx:1282
 AliDhcTask.cxx:1283
 AliDhcTask.cxx:1284
 AliDhcTask.cxx:1285
 AliDhcTask.cxx:1286
 AliDhcTask.cxx:1287
 AliDhcTask.cxx:1288
 AliDhcTask.cxx:1289
 AliDhcTask.cxx:1290
 AliDhcTask.cxx:1291
 AliDhcTask.cxx:1292
 AliDhcTask.cxx:1293
 AliDhcTask.cxx:1294
 AliDhcTask.cxx:1295
 AliDhcTask.cxx:1296
 AliDhcTask.cxx:1297
 AliDhcTask.cxx:1298
 AliDhcTask.cxx:1299
 AliDhcTask.cxx:1300
 AliDhcTask.cxx:1301
 AliDhcTask.cxx:1302
 AliDhcTask.cxx:1303
 AliDhcTask.cxx:1304
 AliDhcTask.cxx:1305
 AliDhcTask.cxx:1306
 AliDhcTask.cxx:1307
 AliDhcTask.cxx:1308
 AliDhcTask.cxx:1309
 AliDhcTask.cxx:1310
 AliDhcTask.cxx:1311
 AliDhcTask.cxx:1312
 AliDhcTask.cxx:1313
 AliDhcTask.cxx:1314
 AliDhcTask.cxx:1315
 AliDhcTask.cxx:1316
 AliDhcTask.cxx:1317
 AliDhcTask.cxx:1318
 AliDhcTask.cxx:1319
 AliDhcTask.cxx:1320
 AliDhcTask.cxx:1321
 AliDhcTask.cxx:1322
 AliDhcTask.cxx:1323
 AliDhcTask.cxx:1324
 AliDhcTask.cxx:1325
 AliDhcTask.cxx:1326
 AliDhcTask.cxx:1327
 AliDhcTask.cxx:1328
 AliDhcTask.cxx:1329
 AliDhcTask.cxx:1330
 AliDhcTask.cxx:1331
 AliDhcTask.cxx:1332
 AliDhcTask.cxx:1333
 AliDhcTask.cxx:1334
 AliDhcTask.cxx:1335
 AliDhcTask.cxx:1336
 AliDhcTask.cxx:1337
 AliDhcTask.cxx:1338
 AliDhcTask.cxx:1339
 AliDhcTask.cxx:1340
 AliDhcTask.cxx:1341
 AliDhcTask.cxx:1342