ROOT logo
//
// Calculate flow on MC data in the forward and central regions using the Q cumulants method.
//
// Inputs:
//  - AliAODEvent
//
// Outputs:
//  - AnalysisResults.root
//
#include "AliForwardMCFlowTaskQC.h"
#include "AliAODMCParticle.h"
#include "AliAODMCHeader.h"
#include "TGraph.h"
#include "TF1.h"
#include "AliAODEvent.h"
#include "AliAODForwardMult.h"
#include "AliAODCentralMult.h"
#include "AliGenEventHeader.h"
#include "AliAnalysisManager.h"
#include "AliInputEventHandler.h"
#include "AliGenEventHeaderTunedPbPb.h"

ClassImp(AliForwardMCFlowTaskQC)
#if 0
;
#endif
//_____________________________________________________________________
AliForwardMCFlowTaskQC::AliForwardMCFlowTaskQC() 
  : AliForwardFlowTaskQC(), 
    fBinsForwardTR(),      // List of FMDTR analysis objects
    fBinsCentralTR(),      // List of SPDTR analysis objects
    fBinsMC(),             // List of MC particle analysis objects
    fAODMCHeader(),        // MC Header
    fHistdNdedpMC(),       // MC particle d^2N/detadphi histogram
    fHistFMDMCCorr(),      // FMD MC correlation
    fHistSPDMCCorr(),      // SPD MC correlation
    fWeights(0),            // Flow weights
    fImpactParToCent(),    // Impact parameter to centrality graph
    fUseImpactPar(0),      // Use impact par for centrality
    fUseMCVertex(0),       // Get vertex from MC header?
    fUseFlowWeights(0)     // Add flow to MC particles
{} 
  //
  // Default Constructor
  //
//_____________________________________________________________________
AliForwardMCFlowTaskQC::AliForwardMCFlowTaskQC(const char* name) 
  : AliForwardFlowTaskQC(name),
    fBinsForwardTR(),      // List of FMDTR analysis objects
    fBinsCentralTR(),      // List of SPDTR analysis objects
    fBinsMC(),             // List of MC particles analysis objects
    fAODMCHeader(0),       // MC Header
    fHistdNdedpMC(),       // MC particles d^2N/detadphi histogram
    fHistFMDMCCorr(),      // FMD MC correlation
    fHistSPDMCCorr(),      // SPD MC correlation
    fWeights(0),            // Flow weights
    fImpactParToCent(),    // Impact parameter to centrality graph
    fUseImpactPar(0),      // Use impact par for centrality
    fUseMCVertex(0),       // Get vertex from MC header?
    fUseFlowWeights(0)     // Add flow to MC particles
{ 
  // 
  // Constructor
  // Parameters:
  //  name: Name of task
  //
  
  //  Double_t impactParam[] = {0.,1.75,4.225,5.965,7.765,9.215,10.46,
  //                            11.565,12.575,13.515,16.679};
  //  Double_t centrality[] = {0.,2.5,7.5,15,25,35,45,55,65,75,90};
  Double_t impactParam[] = { 0.00,  3.72,  5.23,  7.31,  8.88, 10.20, 
			    11.38, 12.47, 13.50, 14.51, 16.679};
  Double_t centrality[]  = { 0.,    5.,   10.,   20.,   30.,   40., 
			    50.,   60.,   70.,   80.,  100.};

  Int_t nPoints = sizeof(impactParam)/sizeof(Double_t);
  fImpactParToCent = new TGraph(nPoints, impactParam, centrality);

}
//_____________________________________________________________________
AliForwardMCFlowTaskQC::AliForwardMCFlowTaskQC(const AliForwardMCFlowTaskQC& o) 
  : AliForwardFlowTaskQC(o), 
    fBinsForwardTR(),                      // List of FMDTR analysis objects
    fBinsCentralTR(),                      // List of SPDTR analysis objects
    fBinsMC(),                             // List of MC particles analysis objects
    fAODMCHeader(o.fAODMCHeader),          // MC Header
    fHistdNdedpMC(o.fHistdNdedpMC),        // MC particles d^2N/detadphi histogram
    fHistFMDMCCorr(o.fHistFMDMCCorr),      // FMD MC correlation
    fHistSPDMCCorr(o.fHistSPDMCCorr),      // SPD MC correlation
    fWeights(o.fWeights),                  // Flow weights
    fImpactParToCent(o.fImpactParToCent),  // Impact parameter to centrality
    fUseImpactPar(o.fUseImpactPar),        // Use impact par for centrality
    fUseMCVertex(o.fUseMCVertex),          // Get vertex from MC header?
    fUseFlowWeights(o.fUseFlowWeights)     // Add flow to MC particles
{
  //
  // Copy Constructor
  //
} 
//_____________________________________________________________________
AliForwardMCFlowTaskQC&
AliForwardMCFlowTaskQC::operator=(const AliForwardMCFlowTaskQC& o)
{
  // 
  // Assignment operator
  // Parameters:
  //    o Object to copy from 
  //
  if (&o == this) return *this;
  fAODMCHeader     = o.fAODMCHeader;
  fHistdNdedpMC    = o.fHistdNdedpMC;
  fHistFMDMCCorr   = o.fHistFMDMCCorr;
  fHistSPDMCCorr   = o.fHistSPDMCCorr;
  fWeights         = o.fWeights;
  fImpactParToCent = o.fImpactParToCent;
  fUseImpactPar    = o.fUseImpactPar;
  fUseMCVertex     = o.fUseMCVertex;
  fUseFlowWeights  = o.fUseFlowWeights;
  return *this;
}
//_____________________________________________________________________
void AliForwardMCFlowTaskQC::InitVertexBins()
{
  //
  // Initiate VertexBin lists
  //
  AliForwardFlowTaskQC::InitVertexBins();

  Bool_t isNUA = (fFlowFlags & kNUAcorr);
  for (Int_t v = 1; v <= fVtxAxis->GetNbins(); v++) {
    Int_t vL = Int_t(fVtxAxis->GetBinLowEdge(v));
    Int_t vH = Int_t(fVtxAxis->GetBinUpEdge(v));
    // FMD
    if ((fFlowFlags & kFMD)) {
      fBinsForwardTR.Add(new VertexBin(vL, vH, fMaxMoment, "FMDTR", fFlowFlags, fFMDCut, fEtaGap));
      if (!(fFlowFlags & k3Cor)) 
        fBinsCentralTR.Add(new VertexBin(vL, vH, fMaxMoment, "SPDTR", fFlowFlags|kSPD, fSPDCut, fEtaGap));
      if (isNUA) fFlowFlags ^= kNUAcorr;
      fBinsMC.Add(new VertexBin(vL, vH, fMaxMoment, "MC-FMD", fFlowFlags|kMC, -1, fEtaGap));
      if ((fFlowFlags & kStdQC)) 
	fBinsMC.Add(new VertexBin(vL, vH, fMaxMoment, "MC-SPD", fFlowFlags|kMC|kSPD, -1, fEtaGap));
      if (isNUA) fFlowFlags ^= kNUAcorr;
    }
    // VZERO
    else if ((fFlowFlags & kVZERO)) {
      fBinsMC.Add(new VertexBin(vL, vH, fMaxMoment, "MC-VZERO", fFlowFlags|kMC, -1, fEtaGap));
    }
  }
}
//_____________________________________________________________________
void AliForwardMCFlowTaskQC::InitHists()
{
  //
  // Initiate diagnostics hists and add to outputlist
  //
  AliForwardFlowTaskQC::InitHists();

  TString subDetName = ((fFlowFlags & kFMD) ? "FMD" : ((fFlowFlags & kVZERO) ? "VZERO" : "none"));
  fHistdNdedpMC = TH2D(Form("fdNdedpMC%s%s", subDetName.Data(), GetQCType(fFlowFlags)),
		   Form("fdNdedpMC%s%s", subDetName.Data(), GetQCType(fFlowFlags)),
		   240, -6., 6., 200, 0., TMath::TwoPi());
  
  fHistFMDMCCorr = new TH2D("hFMDMCCorr", "hFMDMCCorr", 200, 0., 15000., 200, 0, 20000);
  fHistSPDMCCorr = new TH2D("hSPDMCCorr", "hSPDMCCorr", 200, 0., 7500., 200, 0, 20000);
  TList* dList = (TList*)fSumList->FindObject("Diagnostics");
  if (!dList) {
    dList = new TList();
    dList->SetName("Diagnostics");
    fSumList->Add(dList);
  }
  dList->Add(fHistFMDMCCorr);
  dList->Add(fHistSPDMCCorr);

  TIter nextForwardTR(&fBinsForwardTR);
  VertexBin* bin = 0;
  while ((bin = static_cast<VertexBin*>(nextForwardTR()))) {
    bin->AddOutput(fSumList, fCentAxis);
  }
  TIter nextCentralTR(&fBinsCentralTR);
  while ((bin = static_cast<VertexBin*>(nextCentralTR()))) {
    bin->AddOutput(fSumList, fCentAxis);
  }
  TIter nextMC(&fBinsMC);
  while ((bin = static_cast<VertexBin*>(nextMC()))) {
    bin->AddOutput(fSumList, fCentAxis);
  }
  if (fWeights) {
    TList* wList = new TList();
    wList->SetName("FlowWeights");
    fWeights->Init(wList);
    fSumList->Add(wList);
  }

}
//_____________________________________________________________________
Bool_t AliForwardMCFlowTaskQC::Analyze() 
{
  // 
  // Load FMD and SPD MC objects from aod tree and call the cumulants 
  // calculation for the correct vertexbin
  //
  if (!AliForwardFlowTaskQC::Analyze()) return kFALSE;

  // Run analysis on trackrefs from FMD and SPD
  AliAODForwardMult* aodfmult = static_cast<AliAODForwardMult*>(fAOD->FindListObject("ForwardMC"));
  AliAODCentralMult* aodcmult = static_cast<AliAODCentralMult*>(fAOD->FindListObject("CentralClustersMC"));
  Int_t vtx = fVtxAxis->FindBin(fVtx)-1;
  
  // if objects are present, get histograms
  if (aodfmult) {
    TH2D& fmdTRdNdetadphi = aodfmult->GetHistogram();
    if ((fFlowFlags & kStdQC)) {
      FillVtxBinList(fBinsForwardTR, fmdTRdNdetadphi, vtx);
    } else if ((fFlowFlags & kEtaGap)) {
      FillVtxBinListEtaGap(fBinsForwardTR, fmdTRdNdetadphi, fmdTRdNdetadphi, vtx/*, kDoVtxCut*/);
    }
    if (aodcmult) {
      TH2D& spdTRdNdetadphi = aodcmult->GetHistogram();
      if ((fFlowFlags & kStdQC)) {
	FillVtxBinList(fBinsCentralTR, spdTRdNdetadphi, vtx);
      } else if ((fFlowFlags & kEtaGap)) {
	FillVtxBinListEtaGap(fBinsCentralTR, fmdTRdNdetadphi, spdTRdNdetadphi, vtx/*, kDoVtxCut*/);
      } else if ((fFlowFlags & k3Cor)) {
	FillVtxBinList3Cor(fBinsForwardTR, spdTRdNdetadphi, fmdTRdNdetadphi, vtx);
      }
    }
  }
  // Run analysis on MC branch
  if (!FillMCHist()) return kFALSE;
  if ((fFlowFlags & kStdQC)) {
    FillVtxBinList(fBinsMC, fHistdNdedpMC, vtx, kMC);
  } else if ((fFlowFlags & kEtaGap)) {
    FillVtxBinListEtaGap(fBinsMC, fHistdNdedpMC, fHistdNdedpMC, vtx, kMC);
  } else if ((fFlowFlags & k3Cor)) {
    FillVtxBinList3Cor(fBinsMC, fHistdNdedpMC, fHistdNdedpMC, vtx);
  }

  // Mult correlation diagnostics
  if (aodfmult && aodcmult) {
    AliAODForwardMult* fmult = static_cast<AliAODForwardMult*>(fAOD->FindListObject("Forward"));
    AliAODCentralMult* cmult = static_cast<AliAODCentralMult*>(fAOD->FindListObject("CentralClusters"));
    const TH2D& fhist = fmult->GetHistogram();
    const TH2D& chist = cmult->GetHistogram();

    Double_t totForward = fhist.Integral(1, fhist.GetNbinsX(), 1, fhist.GetNbinsY());
    Double_t totSPD = chist.Integral(1, chist.GetNbinsX(), 1, chist.GetNbinsY());
    Double_t totMC = fHistdNdedpMC.Integral(1, fHistdNdedpMC.GetNbinsX(), 1, fHistdNdedpMC.GetNbinsY());
    fHistFMDMCCorr->Fill(totForward, totMC);
    fHistSPDMCCorr->Fill(totSPD, totMC);
  }

  return kTRUE;
}
//_____________________________________________________________________
void AliForwardMCFlowTaskQC::Finalize() 
{
  //
  // Finalize command, called by Terminate()
  //
  AliForwardFlowTaskQC::Finalize();

  EndVtxBinList(fBinsForwardTR);
  EndVtxBinList(fBinsCentralTR);
  EndVtxBinList(fBinsMC);

  return;
}
//_____________________________________________________________________
Bool_t AliForwardMCFlowTaskQC::CheckEvent(const AliAODForwardMult* aodfm) 
{
  // 
  //  Function to check that an AOD event meets the cuts
  //
  //  Parameters: 
  //   AliAODForwardMult: forward mult object with trigger and vertex info
  //
  //  Return: false if there is no trigger or if the centrality or vertex
  //  is out of range. Otherwise true.
  //
  fAODMCHeader = static_cast<AliAODMCHeader*>(fAOD->FindListObject(AliAODMCHeader::StdBranchName()));
  return AliForwardFlowTaskQC::CheckEvent(aodfm);
}
//_____________________________________________________________________
Bool_t AliForwardMCFlowTaskQC::CheckTrigger(const AliAODForwardMult* aodfm) const 
{
  //
  // Function to look for a trigger string in the event.
  //
  // Parameters: 
  //  AliAODForwardMult: forward mult object with trigger and vertex info
  //
  // Returns true if B trigger is present - for some reason this is the one we use in MC
  //
  if (aodfm) return aodfm->IsTriggerBits(AliAODForwardMult::kB);
  else return (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))
                 ->IsEventSelected() & AliVEvent::kMB);

}
// _____________________________________________________________________
Bool_t AliForwardMCFlowTaskQC::GetCentrality(const AliAODForwardMult* aodfm)
{
  // 
  // Function to use centrality parametrization from impact parameter
  // if flag is not set call AliForwardFlowTaskQC::GetCentrality
  //
  // Parameters:
  //  AliAODForwardMult: forward mult object with trigger and vertex info
  //
  // Returns true when centrality is set.
  //
  AliGenEventHeaderTunedPbPb* header = 
    dynamic_cast<AliGenEventHeaderTunedPbPb*>(fAODMCHeader->GetCocktailHeader(0));
  if (header) fCent = header->GetCentrality();
  else if (fUseImpactPar) fCent = GetCentFromB();
  else return AliForwardFlowTaskQC::GetCentrality(aodfm);
  
  if (fCentAxis->GetXmin() > fCent || fCent >= fCentAxis->GetXmax()) {
    fHistEventSel->Fill(kInvCent);
    return kFALSE;
  }
  if (fCent != 0) return kTRUE;
  else {
    fHistEventSel->Fill(kNoCent);
    return kFALSE;
  }
}
//_____________________________________________________________________
Bool_t AliForwardMCFlowTaskQC::GetVertex(const AliAODForwardMult* aodfm)
{
  //
  // Function to look for vertex determination in the event using the MC header.
  //
  // Parameters: 
  //  AliAODForwardMult: Not used
  //
  // Returns true if vertex is determined
  //
  if (fUseMCVertex) {
    if (fAODMCHeader) {
      fVtx = fAODMCHeader->GetVtxZ();
      if (fVtx < fVtxAxis->GetXmin() || fVtx > fVtxAxis->GetXmax()) {
        fHistEventSel->Fill(kInvVtx);
	return kFALSE;
      }
      return kTRUE;
    } else {
      fHistEventSel->Fill(kNoVtx);
      return kFALSE;
    }
  } else 
    return AliForwardFlowTaskQC::GetVertex(aodfm);
}
//_____________________________________________________________________
Bool_t AliForwardMCFlowTaskQC::FillMCHist()  
{
  // 
  // Loop over AliAODParticle branch and fill d^2N/detadphi-histograms.
  // Add flow if set to do so in AddTask function
  //
  fHistdNdedpMC.Reset();
  Double_t minEta = -3.75;
  Double_t maxEta = 5.;

  //retreive MC particles from event
  TClonesArray* mcArray = 
    static_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
  if(!mcArray){
    AliWarning("No MC array found in AOD. Try making it again.");
    return kFALSE;
  }

  if (!fAODMCHeader) AliWarning("No MC header found.");

  Int_t ntracks = mcArray->GetEntriesFast();
//  Double_t rp = -1, b = -1;
  if (fAODMCHeader) {
//    rp = fAODMCHeader->GetReactionPlaneAngle();
//    b = fAODMCHeader->GetImpactParameter();
    if (fAODMCHeader->GetNCocktailHeaders() > 1) {
      ntracks = fAODMCHeader->GetCocktailHeader(0)->NProduced();
    }
  }
  
  for (Int_t it = 0; it < ntracks; it++) { // Track loop
    Double_t weight = 1;
    AliAODMCParticle* particle = (AliAODMCParticle*)mcArray->At(it);
    if (!particle) {
      AliError(Form("Could not receive track %d", it));
      continue;
    }
    if (!particle->IsPrimary()) continue;
    if (particle->Charge() == 0) continue;
//    Double_t pT = particle->Pt();
    Double_t eta = particle->Eta();
    Double_t phi = particle->Phi();
    if (eta >= minEta && eta < maxEta) {
      // Add flow if it is in the argument
      // FLOW WEIGHTS DISABLED IN THE VERSION - COMING BACK SOON
      if (fUseFlowWeights && fWeights) { 
        weight = 1.;//fWeights->CalcWeight(eta, pT, phi, particle->PdgCode(), rp, b); 
//      Printf("%f", weight);
      }
      fHistdNdedpMC.Fill(eta, phi, weight);
    }
  }
  // Set underflow bins for acceptance checks
  Int_t sBin = fHistdNdedpMC.GetXaxis()->FindBin(minEta);
  Int_t eBin = fHistdNdedpMC.GetXaxis()->FindBin(maxEta);
  for ( ; sBin <= eBin; sBin++) {
    fHistdNdedpMC.SetBinContent(sBin, 0, 1);
  } // End of eta bin loop

  return kTRUE;
}
//_____________________________________________________________________
Double_t AliForwardMCFlowTaskQC::GetCentFromB() const
{
  //
  // Get centrality from MC impact parameter.
  //
  Double_t cent = -1.;
  if (!fAODMCHeader) return cent;
  Double_t b = fAODMCHeader->GetImpactParameter();
  cent = fImpactParToCent->Eval(b);

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