ROOT logo
/* $Id$ */

#include "AliMultiplicityTask.h"

#include <TStyle.h>
#include <TSystem.h>
#include <TCanvas.h>
#include <TVector3.h>
#include <TChain.h>
#include <TFile.h>
#include <TH1D.h>
#include <TH2F.h>
#include <TH3F.h>
#include <TParticle.h>
#include <TRandom.h>
#include <TNtuple.h>
#include <TObjString.h>
#include <TF1.h>

#include <AliLog.h>
#include <AliESDVertex.h>
#include <AliESDEvent.h>
#include <AliStack.h>
#include <AliHeader.h>
#include <AliGenEventHeader.h>
#include <AliMultiplicity.h>
#include <AliAnalysisManager.h>
#include <AliMCEventHandler.h>
#include <AliMCEvent.h>
#include <AliESDInputHandler.h>

#include "AliESDtrackCuts.h"
#include "AliPWG0Helper.h"
#include "AliMultiplicityCorrection.h"
#include "AliCorrection.h"
#include "AliCorrectionMatrix3D.h"
#include "AliPhysicsSelection.h"
#include "AliTriggerAnalysis.h"
#include "AliVEvent.h"

ClassImp(AliMultiplicityTask)

AliMultiplicityTask::AliMultiplicityTask(const char* opt) :
  AliAnalysisTask("AliMultiplicityTask", ""),
  fESD(0),
  fOption(opt),
  fAnalysisMode((AliPWG0Helper::AnalysisMode) (AliPWG0Helper::kSPD | AliPWG0Helper::kFieldOn)),
  fTrigger(AliTriggerAnalysis::kMB1),
  fDeltaPhiCut(-1),
  fDiffTreatment(AliPWG0Helper::kMCFlags),
  fReadMC(kFALSE),
  fUseMCVertex(kFALSE),
  fMultiplicity(0),
  fEsdTrackCuts(0),
  fSystSkipParticles(kFALSE),
  fSelectProcessType(0),
  fParticleSpecies(0),
  fdNdpT(0),
  fPtSpectrum(0),
  fTemp1(0),
  fTemp2(0),
  fVertex(0),
  fEtaPhi(0),
  fOutput(0)
{
  //
  // Constructor. Initialization of pointers
  //

  for (Int_t i = 0; i<8; i++)
    fParticleCorrection[i] = 0;
    
  for (Int_t i=0; i<3; i++)
    fEta[i] = 0;

  // Define input and output slots here
  DefineInput(0, TChain::Class());
  DefineOutput(0, TList::Class());

  if (fOption.Contains("only-process-type-nd"))
    fSelectProcessType = 1;

  if (fOption.Contains("only-process-type-sd"))
    fSelectProcessType = 2;

  if (fOption.Contains("only-process-type-dd"))
    fSelectProcessType = 3;

  if (fSelectProcessType != 0)
    AliInfo(Form("WARNING: Systematic study enabled. Only considering process type %d", fSelectProcessType));
}

AliMultiplicityTask::~AliMultiplicityTask()
{
  //
  // Destructor
  //

  // histograms are in the output list and deleted when the output
  // list is deleted by the TSelector dtor

  if (fOutput&& !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) {
    delete fOutput;
    fOutput = 0;
  }
}

//________________________________________________________________________
void AliMultiplicityTask::ConnectInputData(Option_t *)
{
  // Connect ESD
  // Called once

  Printf("AliMultiplicityTask::ConnectInputData called");

  TTree* tree = dynamic_cast<TTree*> (GetInputData(0));
  if (!tree) {
    Printf("ERROR: Could not read tree from input slot 0");
  } else {
    // Disable all branches and enable only the needed ones
    /*
    tree->SetBranchStatus("*", 0);

    tree->SetBranchStatus("AliESDHeader*", 1);
    tree->SetBranchStatus("*Vertex*", 1);

    if (fAnalysisMode & AliPWG0Helper::kSPD) {
      tree->SetBranchStatus("AliMultiplicity*", 1);
    }

    if (fAnalysisMode & AliPWG0Helper::kTPC || fAnalysisMode & AliPWG0Helper::kTPCITS) {
      //AliESDtrackCuts::EnableNeededBranches(tree);
      tree->SetBranchStatus("Tracks*", 1);
    }
    */

    AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());

    if (!esdH) {
      Printf("ERROR: Could not get ESDInputHandler");
    } else
      fESD = esdH->GetEvent();
  }

  // disable info messages of AliMCEvent (per event)
  AliLog::SetClassDebugLevel("AliMCEvent", AliLog::kWarning - AliLog::kDebug + 1);
}

void AliMultiplicityTask::CreateOutputObjects()
{
  // create result objects and add to output list

  fOutput = new TList;
  fOutput->SetOwner();

  fMultiplicity = new AliMultiplicityCorrection("Multiplicity", "Multiplicity");
  fOutput->Add(fMultiplicity);
  
  fdNdpT = new TH1F("fdNdpT", "fdNdpT", 1000, 0, 10);
  fdNdpT->Sumw2();
  fOutput->Add(fdNdpT);

  if (fOption.Contains("particle-efficiency"))
    for (Int_t i = 0; i<8; i++)
    {
      fParticleCorrection[i] = new AliCorrection(Form("correction_%d", i), Form("correction_%d", i));
      fOutput->Add(fParticleCorrection[i]);
    }

  if (fOption.Contains("pt-spectrum-hist"))
  {
    TFile* file = TFile::Open("ptspectrum_fit.root");
    if (file)
    {
      TString subStr(fOption(fOption.Index("pt-spectrum")+17, 3));
      TString histName(Form("ptspectrum_%s", subStr.Data()));
      AliInfo(Form("Pt-Spectrum modification. Using %s.", histName.Data()));
      fPtSpectrum = (TH1D*) file->Get(histName);
      if (!fPtSpectrum)   
        AliError("Histogram not found");
    }
    else
      AliError("Could not open ptspectrum_fit.root. Pt Spectrum study could not be enabled.");
  }

  if (fOption.Contains("pt-spectrum-func"))
  {
    if (fPtSpectrum)
    {
      Printf("Using function for systematic p_t study");
    }
    else
    {
      Printf("ERROR: Could not find function for systematic p_t study");
      fPtSpectrum = new TH1D("fPtSpectrum", "fPtSpectrum", 1, 0, 100);
      fPtSpectrum->SetBinContent(1, 1);
    }
  }

  if (fPtSpectrum)
    Printf("WARNING: Systematic study enabled. Pt spectrum will be modified");
  
  if (fOption.Contains("particle-species")) {
    fParticleSpecies = new TNtuple("fParticleSpecies", "fParticleSpecies", "vtx:Pi_True:K_True:p_True:o_True:Pi_Rec:K_Rec:p_Rec:o_Rec:nolabel:doublePrim:doubleCount");
    fOutput->Add(fParticleSpecies);
  }

  fTemp1 = new TH2F("fTemp1", "fTemp1", 100, -0.5, 99.5, 100, -0.5, 99.5);
  fOutput->Add(fTemp1);
  
  for (Int_t i=0; i<3; i++)
  {
    fEta[i] = new TH1F(Form("fEta_%d", i), ";#eta", 100, -2, 2);
    fOutput->Add(fEta[i]);
  }
  
  fVertex = new TH3F("vertex_check", "vertex_check;x;y;z", 100, -1, 1, 100, -1, 1, 100, -30, 30);
  fOutput->Add(fVertex);
  
  fEtaPhi = new TH2F("fEtaPhi", "fEtaPhi;#eta;#phi in rad.;count", 80, -4, 4, 18*20, 0, 2 * TMath::Pi());
  fOutput->Add(fEtaPhi);
  
  // TODO set seed for random generator
}

void AliMultiplicityTask::Exec(Option_t*)
{
  // process the event

  // Check prerequisites
  if (!fESD)
  {
    AliDebug(AliLog::kError, "ESD not available");
    return;
  }

  AliInputEventHandler* inputHandler = (AliInputEventHandler*) AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();
  if (!inputHandler)
  {
    Printf("ERROR: Could not receive input handler");
    return;
  }
    
  Bool_t eventTriggered = inputHandler->IsEventSelected() & AliVEvent::kMB;

  static AliTriggerAnalysis* triggerAnalysis = 0;
  if (!triggerAnalysis)
  {
    AliPhysicsSelection* physicsSelection = static_cast<AliPhysicsSelection*> (inputHandler->GetEventSelection());
    triggerAnalysis = physicsSelection->GetTriggerAnalysis();
  }
  if (eventTriggered)
    eventTriggered = triggerAnalysis->IsTriggerFired(fESD, fTrigger);
    
  const AliESDVertex* vtxESD = AliPWG0Helper::GetVertex(fESD, fAnalysisMode);
  if (vtxESD && !AliPWG0Helper::TestVertex(vtxESD, fAnalysisMode))
    vtxESD = 0;
    
  // remove vertices outside +- 15 cm
  if (vtxESD && TMath::Abs(vtxESD->GetZ()) > 15)
    vtxESD = 0;
  
  Bool_t eventVertex = (vtxESD != 0);

  Double_t vtx[3];
  if (vtxESD)
  {
    vtxESD->GetXYZ(vtx);
    fVertex->Fill(vtxESD->GetX(), vtxESD->GetY(), vtxESD->GetZ());
  }
  
  // post the data already here
  PostData(0, fOutput);
  
  //const Float_t kPtCut = 0.3;

  // create list of (label, eta) tuples
  Int_t inputCount = 0;
  Int_t* labelArr = 0;
  Float_t* etaArr = 0;
  Int_t nGoodTracks = 0;  // number of total good tracks is needed both in SPD and TPC loops if the mode is kTPCSPD
  Int_t nESDTracks  = 0; // Total number of ESD tracks (including those not passing the cuts);
  const int kRejBit = BIT(15); // set this bit in ESD tracks if it is rejected by a cut

  if (fAnalysisMode & AliPWG0Helper::kTPC || fAnalysisMode & AliPWG0Helper::kTPCITS || fAnalysisMode & AliPWG0Helper::kTPCSPD)
  {
    if (!fEsdTrackCuts)
    {
      AliDebug(AliLog::kError, "fESDTrackCuts not available");
      return;
    }

    if (vtxESD)
    {
      // get multiplicity from ESD tracks
      TObjArray* list = fEsdTrackCuts->GetAcceptedTracks(fESD, (fAnalysisMode & AliPWG0Helper::kTPC));
      nGoodTracks = list->GetEntries();
  
      Int_t arraySize = nGoodTracks; // if we're also using tracklets, we need to increase this
      if (fAnalysisMode & AliPWG0Helper::kTPCSPD) {
	// if I have to also count clusters later on, I have to make sure the arrays are big enough
	// Moreover, we need to keep track of rejected tracks to avoid double-counting
	Printf( "Processing tracks");
	const AliMultiplicity* mult = fESD->GetMultiplicity();
	if (!mult)
	  {
	    AliDebug(AliLog::kError, "AliMultiplicity not available");
	    return;
	  }
	arraySize += mult->GetNumberOfTracklets();
	// allocate and fill array for rejected tracks
	nESDTracks = fESD->GetNumberOfTracks();
	for(Int_t itracks = 0; itracks < nESDTracks; itracks++){
	  AliESDtrack* track = fESD->GetTrack(itracks);
	  if( itracks!=track->GetID() ){
	    AliFatal("Track ID not matching track index!");
	  }
	  if (!fEsdTrackCuts->AcceptTrack(track)) {	    
	    track->SetBit(kRejBit);
	  }
	}
      }

      labelArr = new Int_t[arraySize];
      etaArr = new Float_t[arraySize];
  
      // loop over esd tracks
      for (Int_t i=0; i<nGoodTracks; i++)
      {
        AliESDtrack* esdTrack = dynamic_cast<AliESDtrack*> (list->At(i));
        if (!esdTrack)
        {
          AliDebug(AliLog::kError, Form("ERROR: Could not retrieve track %d.", i));
          continue;
        }
        
        if (esdTrack->Pt() < 0.15){
	  esdTrack->SetBit(kRejBit);
          continue;
	}

	if (fAnalysisMode & AliPWG0Helper::kTPCSPD) {
	  // Cuts by ruben to flag secondaries
	  if (esdTrack->IsOn(AliESDtrack::kMultSec) ) continue;
	  if (esdTrack->IsOn(AliESDtrack::kMultInV0)) continue;
	}
        
        Float_t d0z0[2],covd0z0[3];
        esdTrack->GetImpactParameters(d0z0,covd0z0);
        Float_t sigma= 0.0050+0.0060/TMath::Power(esdTrack->Pt(),0.9);
        Float_t d0max = 7.*sigma;
        if (TMath::Abs(d0z0[0]) > d0max) {
	  //	  rejLabelArr[irejCount++] = esdTrack->GetID(); // We
	  //	  don't count the tracklet if the track is a
	  //	  secondary, so this must be commented out
          continue;
	}
  
        if (vtxESD && TMath::Abs(vtx[2]) < 10)
          fEtaPhi->Fill(esdTrack->Eta(), esdTrack->Phi());
        
        etaArr[inputCount] = esdTrack->Eta();
        labelArr[inputCount] = TMath::Abs(esdTrack->GetLabel());
        ++inputCount;
      }
  
      delete list;
    }
  }
  // SPD tracklets are used either in SPD standalone mode or in TPC+SPD mode (tracks + tracklets not using any cluster already used in tracks)
  if (fAnalysisMode & AliPWG0Helper::kSPD || fAnalysisMode & AliPWG0Helper::kTPCSPD)
  {

    if (vtxESD)
    {
      AliDebug(AliLog::kInfo, "Processing tracklets");
      // get tracklets
      const AliMultiplicity* mult = fESD->GetMultiplicity();
      if (!mult)
      {
        AliDebug(AliLog::kError, "AliMultiplicity not available");
	if (labelArr) delete[] labelArr;
	if (etaArr) delete[] etaArr;
        return;
      }
  
      Bool_t foundInEta10 = kFALSE;
      if ((fAnalysisMode & AliPWG0Helper::kSPD) && !(fAnalysisMode & AliPWG0Helper::kTPC || fAnalysisMode & AliPWG0Helper::kTPCITS || fAnalysisMode & AliPWG0Helper::kTPCSPD)) {
	// if we are counting both tracks and tracklets, these arrays were already initialized above 
	AliDebug(AliLog::kInfo, "Booking arrays");
	if (!labelArr) labelArr = new Int_t[mult->GetNumberOfTracklets()];
	if (!etaArr) etaArr = new Float_t[mult->GetNumberOfTracklets()];
      }
      if (inputCount) foundInEta10 = kTRUE; // by definition, if we found a track.
      
      // get multiplicity from ITS tracklets
      for (Int_t i=0; i<mult->GetNumberOfTracklets(); ++i)
      {
        //printf("%d %f %f %f\n", i, mult->GetTheta(i), mult->GetPhi(i), mult->GetDeltaPhi(i));
  
        Float_t deltaPhi = mult->GetDeltaPhi(i);
        
        if (fDeltaPhiCut > 0 && TMath::Abs(deltaPhi) > fDeltaPhiCut)
          continue;
  
        if (fSystSkipParticles && gRandom->Uniform() < (0.0153))
	  {
          Printf("Skipped tracklet!");
          continue;
	  }
	
	// if counting tracks+tracklets, check if clusters where already used in tracks
	if (fAnalysisMode & AliPWG0Helper::kTPCSPD) { 
	    Int_t id1,id2;
	    mult->GetTrackletTrackIDs(i,0,id1,id2);
	    if ( (id1>=0&& !fESD->GetTrack(id1)->TestBit(kRejBit) ) ||
		 (id2>=0&& !fESD->GetTrack(id2)->TestBit(kRejBit) )
		 ) {
	      printf ("Skipping tracklet: already used in track");  
	      continue; 
	    }
	// Ruben also had this, but we're not using pure ITSSA tracks here:
	// if (fSPDMult->FreeClustersTracklet(itr,1)) trITSSApure++; // not used in ITS_SA_Pure track
	}
	       

        etaArr[inputCount] = mult->GetEta(i);
        if (mult->GetLabel(i, 0) == mult->GetLabel(i, 1))
        {
          labelArr[inputCount] = mult->GetLabel(i, 0);
        }
        else
          labelArr[inputCount] = -1;
          
        for (Int_t j=0; j<3; j++)
        {
          if (vtx[2] > fMultiplicity->GetVertexBegin(j) && vtx[2] < fMultiplicity->GetVertexEnd(j))
            fEta[j]->Fill(etaArr[inputCount]);
        }
        
        if (vtxESD && TMath::Abs(vtx[2]) < 10)
          fEtaPhi->Fill(etaArr[inputCount], mult->GetPhi(i));
        
          // we have to repeat the trigger here, because the tracklet might have been kicked out fSystSkipParticles
        if (TMath::Abs(etaArr[inputCount]) < 1)
          foundInEta10 = kTRUE;
          
        ++inputCount;
      }
      
      if (fSystSkipParticles && (fTrigger & AliTriggerAnalysis::kOneParticle) && !foundInEta10)
        eventTriggered = kFALSE;
    }
  }

  // eta range for nMCTracksSpecies, nESDTracksSpecies
  Float_t etaRange = 1.0;
//   switch (fAnalysisMode) {
//     case AliPWG0Helper::kInvalid: break;
//     case AliPWG0Helper::kTPC:
//     case AliPWG0Helper::kTPCITS:
//     	etaRange = 1.0; break;
//     case AliPWG0Helper::kSPD: etaRange = 1.0; break;
//     default: break;
//   }

  if (!fReadMC) // Processing of ESD information
  {
    Int_t nESDTracks05 = 0;
    Int_t nESDTracks10 = 0;
    Int_t nESDTracks14 = 0;
    
    for (Int_t i=0; i<inputCount; ++i)
    {
      Float_t eta = etaArr[i];

      if (TMath::Abs(eta) < 0.5)
        nESDTracks05++;

      if (TMath::Abs(eta) < 1.0)
        nESDTracks10++;

      if (TMath::Abs(eta) < 1.3)
        nESDTracks14++;
    }
    
    //if (nESDTracks05 >= 20 || nESDTracks10 >= 30 || nESDTracks14 >= 32)
    //  Printf("File: %s, IEV: %d, TRG: ---, Orbit: 0x%x, Period: %d, BC: %d; Tracks: %d %d %d", ((TTree*) GetInputData(0))->GetCurrentFile()->GetName(), fESD->GetEventNumberInFile(), fESD->GetOrbitNumber(),fESD->GetPeriodNumber(),fESD->GetBunchCrossNumber(), nESDTracks05, nESDTracks10, nESDTracks14);

    if (eventTriggered)
      fMultiplicity->FillTriggeredEvent(nESDTracks05, nESDTracks10, nESDTracks14);
    
    if (eventTriggered && eventVertex)
      fMultiplicity->FillMeasured(vtx[2], nESDTracks05, nESDTracks10, nESDTracks14);
  }
  else if (fReadMC)   // Processing of MC information
  {
    AliMCEventHandler* eventHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
    if (!eventHandler) {
      Printf("ERROR: Could not retrieve MC event handler");
      if (labelArr) delete[] labelArr;
      if (etaArr) delete[] etaArr;
      return;
    }

    AliMCEvent* mcEvent = eventHandler->MCEvent();
    if (!mcEvent) {
      Printf("ERROR: Could not retrieve MC event");
      if (labelArr) delete[] labelArr;
      if (etaArr) delete[] etaArr;
      return;
    }

    AliStack* stack = mcEvent->Stack();
    if (!stack)
    {
      AliDebug(AliLog::kError, "Stack not available");
      if (labelArr) delete[] labelArr;
      if (etaArr) delete[] etaArr;
      return;
    }
    
    AliHeader* header = mcEvent->Header();
    if (!header)
    {
      AliDebug(AliLog::kError, "Header not available");
      if (labelArr) delete[] labelArr;
      if (etaArr) delete[] etaArr;
      return;
    }

    if (fUseMCVertex)
    {
      Printf("WARNING: Replacing vertex by MC vertex. This is for systematical checks only.");
      // get the MC vertex
      AliGenEventHeader* genHeader = header->GenEventHeader();
      TArrayF vtxMC(3);
      genHeader->PrimaryVertex(vtxMC);

      vtx[2] = vtxMC[2];
    }
    
    // get process information
    AliPWG0Helper::MCProcessType processType = AliPWG0Helper::GetEventProcessType(fESD, header, stack, fDiffTreatment);

    Bool_t processEvent = kTRUE;
    if (fSelectProcessType > 0)
    {
      processEvent = kFALSE;

      // non diffractive
      if (fSelectProcessType == 1 && processType == AliPWG0Helper::kND)
        processEvent = kTRUE;

      // single diffractive
      if (fSelectProcessType == 2 && processType == AliPWG0Helper::kSD)
        processEvent = kTRUE;

      // double diffractive
      if (fSelectProcessType == 3 && processType == AliPWG0Helper::kDD)
        processEvent = kTRUE;

      if (!processEvent)
        Printf("Skipping this event, because it is not of the requested process type (%d)", (Int_t) processType);
    }

    if (processEvent)
    {
      // get the MC vertex
      AliGenEventHeader* genHeader = header->GenEventHeader();
      TArrayF vtxMC(3);
      genHeader->PrimaryVertex(vtxMC);

      // get number of tracks from MC
      // loop over mc particles
      Int_t nPrim  = stack->GetNprimary();
      Int_t nMCPart = stack->GetNtrack();

      // tracks in different eta ranges
      Int_t nMCTracks05 = 0;
      Int_t nMCTracks10 = 0;
      Int_t nMCTracks14 = 0;
      Int_t nMCTracksAll = 0;

      // tracks per particle species, in |eta| < 2 (systematic study)
      Int_t nMCTracksSpecies[4]; // (pi, K, p, other)
      for (Int_t i = 0; i<4; ++i)
        nMCTracksSpecies[i] = 0;

      for (Int_t iMc = 0; iMc < nPrim; ++iMc)
      {
        AliDebug(AliLog::kDebug+1, Form("MC Loop: Processing particle %d.", iMc));

        TParticle* particle = stack->Particle(iMc);

        if (!particle)
        {
          AliDebug(AliLog::kError, Form("UNEXPECTED: particle with label %d not found in stack (mc loop).", iMc));
          continue;
        }

        Bool_t debug = kFALSE;
        if (AliPWG0Helper::IsPrimaryCharged(particle, nPrim, debug) == kFALSE)
        {
          //printf("%d) DROPPED ", iMC);
          //particle->Print();
          continue;
        }

        //printf("%d) OK      ", iMC);
        //particle->Print();

        //if (particle->Pt() < kPtCut)
        //  continue;

        Int_t particleWeight = 1;

        Float_t pt = particle->Pt();

        // in case of systematic study, weight according to the change of the pt spectrum
        // it cannot be just multiplied because we cannot count "half of a particle"
        // instead a random generator decides if the particle is counted twice (if value > 1)
        // or not (if value < 0)
        if (fPtSpectrum)
        {
          Int_t bin = fPtSpectrum->FindBin(pt);
          if (bin > 0 && bin <= fPtSpectrum->GetNbinsX())
          {
            Float_t factor = fPtSpectrum->GetBinContent(bin);
            if (factor > 0)
            {
              Float_t random = gRandom->Uniform();
              if (factor > 1 && random < factor - 1)
              {
                particleWeight = 2;
              }
              else if (factor < 1 && random < 1 - factor)
                particleWeight = 0;
            }
          }
        }

        //Printf("MC weight is: %d", particleWeight);

        if (TMath::Abs(particle->Eta()) < 0.5)
          nMCTracks05 += particleWeight;

        if (TMath::Abs(particle->Eta()) < 1.0)
          nMCTracks10 += particleWeight;

        if (TMath::Abs(particle->Eta()) < 1.3)
          nMCTracks14 += particleWeight;

        nMCTracksAll += particleWeight;
        
        if (particle->Pt() > 0 && TMath::Abs(particle->Eta()) < 1.0)
          fdNdpT->Fill(particle->Pt(), 1.0 / particle->Pt());

        if (fParticleCorrection[0] || fParticleSpecies)
        {
          Int_t id = -1;
          switch (TMath::Abs(particle->GetPdgCode()))
          {
            case 211: id = 0; break;
            case 321: id = 1; break;
            case 2212: id = 2; break;
            default: id = 3; break;
          }

          if (TMath::Abs(particle->Eta()) < etaRange)
            nMCTracksSpecies[id]++;
            
          if (fParticleCorrection[id])
            fParticleCorrection[id]->GetTrackCorrection()->FillGene(vtxMC[2], particle->Eta(), particle->Pt());
        }
      } // end of mc particle

      fMultiplicity->FillGenerated(vtxMC[2], eventTriggered, eventVertex, processType, (Int_t) nMCTracks05, (Int_t) nMCTracks10, (Int_t) nMCTracks14, (Int_t) nMCTracksAll);

      // ESD processing
      Int_t nESDTracks05 = 0;
      Int_t nESDTracks10 = 0;
      Int_t nESDTracks14 = 0;

      // tracks per particle species, in |eta| < 2 (systematic study)
      Int_t nESDTracksSpecies[7]; // (pi, K, p, other, nolabel, doublecount_prim, doublecount_all)
      for (Int_t i = 0; i<7; ++i)
        nESDTracksSpecies[i] = 0;

      Bool_t* foundPrimaries = new Bool_t[nMCPart];   // to prevent double counting
      for (Int_t i=0; i<nPrim; i++)
        foundPrimaries[i] = kFALSE;

      Bool_t* foundPrimaries2 = new Bool_t[nMCPart];   // to prevent double counting
      for (Int_t i=0; i<nPrim; i++)
        foundPrimaries2[i] = kFALSE;

      Bool_t* foundTracks = new Bool_t[nMCPart];    // to prevent double counting
      for (Int_t i=0; i<nMCPart; i++)
        foundTracks[i] = kFALSE;

      for (Int_t i=0; i<inputCount; ++i)
      {
        Float_t eta = etaArr[i];
        Int_t label = labelArr[i];

        Int_t particleWeight = 1;

        // in case of systematic study, weight according to the change of the pt spectrum
        if (fPtSpectrum)
        {
          TParticle* mother = 0;

          // preserve label for later
          Int_t labelCopy = label;
          if (labelCopy >= 0)
            labelCopy = AliPWG0Helper::FindPrimaryMotherLabel(stack, labelCopy);
          if (labelCopy >= 0)
            mother = stack->Particle(labelCopy);

          // in case of pt study we do not count particles w/o label, because they cannot be scaled
          if (!mother)
            continue;

          // it cannot be just multiplied because we cannot count "half of a particle"
          // instead a random generator decides if the particle is counted twice (if value > 1) 
          // or not (if value < 0)
          Int_t bin = fPtSpectrum->FindBin(mother->Pt());
          if (bin > 0 && bin <= fPtSpectrum->GetNbinsX())
          {
            Float_t factor = fPtSpectrum->GetBinContent(bin);
            if (factor > 0)
            {
              Float_t random = gRandom->Uniform();
              if (factor > 1 && random < factor - 1)
              {
                particleWeight = 2;
              }
              else if (factor < 1 && random < 1 - factor)
                particleWeight = 0;
            }
          }
        }

        //Printf("ESD weight is: %d", particleWeight);

        if (TMath::Abs(eta) < 0.5)
          nESDTracks05 += particleWeight;

        if (TMath::Abs(eta) < 1.0)
          nESDTracks10 += particleWeight;

        if (TMath::Abs(eta) < 1.3)
          nESDTracks14 += particleWeight;

        if (fParticleSpecies)
        {
          Int_t motherLabel = -1;
          TParticle* mother = 0;

          // find mother
          if (label >= 0)
            motherLabel = AliPWG0Helper::FindPrimaryMotherLabel(stack, label);
          if (motherLabel >= 0)
            mother = stack->Particle(motherLabel);

          if (!mother)
          {
            // count tracks that did not have a label
            if (TMath::Abs(eta) < etaRange)
              nESDTracksSpecies[4]++;
          }
          else
          {
            // get particle type (pion, proton, kaon, other) of mother
            Int_t idMother = -1;
            switch (TMath::Abs(mother->GetPdgCode()))
            {
              case 211: idMother = 0; break;
              case 321: idMother = 1; break;
              case 2212: idMother = 2; break;
              default: idMother = 3; break;
            }

            // double counting is ok for particle ratio study
            if (TMath::Abs(eta) < etaRange)
              nESDTracksSpecies[idMother]++;

            // double counting is not ok for efficiency study

            // check if we already counted this particle, this way distinguishes double counted particles (bug/artefact in tracking) or double counted primaries due to secondaries (physics)
            if (foundTracks[label])
            {
              if (TMath::Abs(eta) < etaRange)
                nESDTracksSpecies[6]++;
            }
            else
            {
              foundTracks[label] = kTRUE;

              // particle (primary) already counted?
              if (foundPrimaries[motherLabel])
              {
                if (TMath::Abs(eta) < etaRange)
                  nESDTracksSpecies[5]++;
              }
              else
                foundPrimaries[motherLabel] = kTRUE;
            }
          }
        }

        if (fParticleCorrection[0])
        {
          if (label >= 0 && stack->IsPhysicalPrimary(label))
          {
            TParticle* particle = stack->Particle(label);

            // get particle type (pion, proton, kaon, other)
            Int_t id = -1;
            switch (TMath::Abs(particle->GetPdgCode()))
            {
              case 211: id = 0; break;
              case 321: id = 1; break;
              case 2212: id = 2; break;
              default: id = 3; break;
            }

            // todo check if values are not completely off??

            // particle (primary) already counted?
            if (!foundPrimaries2[label])
            {
              foundPrimaries2[label] = kTRUE;
              fParticleCorrection[id]->GetTrackCorrection()->FillMeas(vtxMC[2], particle->Eta(), particle->Pt());
            }
          }
        }
      }
        
      if (fParticleCorrection[0])
      {
        // if the particle decays/stops before this radius we do not see it
        // 8cm larger than SPD layer 2
        // 123cm TPC radius where a track has about 50 clusters (cut limit)          
        const Float_t endRadius = (fAnalysisMode & AliPWG0Helper::kSPD) ? 8. : 123;
                
        // loop over all primaries that have not been found
        for (Int_t i=0; i<nPrim; i++)
        {
          // already found
          if (foundPrimaries2[i])
            continue;
            
          TParticle* particle = 0;
          TClonesArray* trackrefs = 0;
          mcEvent->GetParticleAndTR(i, particle, trackrefs);
          
          // true primary and charged
          if (!AliPWG0Helper::IsPrimaryCharged(particle, nPrim))
            continue;              
          
          //skip particles with larger |eta| than 3, to keep the log clean, is anyway not included in correction map
          if (TMath::Abs(particle->Eta()) > 3)
            continue;
          
          // skipping checking of process type of daughter: Neither kPBrem, kPDeltaRay nor kPCerenkov should appear in the event generation
          
          // get particle type (pion, proton, kaon, other)
          Int_t id = -1;
          switch (TMath::Abs(particle->GetPdgCode()))
          {
            case 211: id = 4; break;
            case 321: id = 5; break;
            case 2212: id = 6; break;
            default: id = 7; break;
          }            
          
          if (!fParticleCorrection[id])
            continue;
            
          // get last track reference
          AliTrackReference* trackref = dynamic_cast<AliTrackReference*> (trackrefs->Last());
          
          if (!trackref)
          {
            Printf("ERROR: Could not get trackref of %d (count %d)", i, trackrefs->GetEntries());
            particle->Print();
            continue;
          }
            
          // particle in tracking volume long enough...
          if (trackref->R() > endRadius)
            continue;  
          
          if (particle->GetLastDaughter() >= 0)
          {
            Int_t uID = stack->Particle(particle->GetLastDaughter())->GetUniqueID();
            //if (uID != kPBrem && uID != kPDeltaRay && uID < kPCerenkov)
            if (uID == kPDecay)
            {
              // decayed
              
              Printf("Particle %d (%s) decayed at %f, daugher uniqueID: %d:", i, particle->GetName(), trackref->R(), uID);
              particle->Print();
              Printf("Daugthers:");
              for (Int_t d = particle->GetFirstDaughter(); d <= particle->GetLastDaughter(); d++)
                stack->Particle(d)->Print();
              Printf(" ");
              
              fParticleCorrection[id]->GetTrackCorrection()->FillGene(vtxMC[2], particle->Eta(), particle->Pt());
              continue;
            }
          }
          
          if (trackref->DetectorId() == -1)
          {
            // stopped
            Printf("Particle %d stopped at %f:", i, trackref->R());
            particle->Print();
            Printf(" ");
            
            fParticleCorrection[id]->GetTrackCorrection()->FillMeas(vtxMC[2], particle->Eta(), particle->Pt());
            continue;
          }
          
          Printf("Particle %d simply not tracked", i);
          particle->Print();
          Printf(" ");
        }
      }
      
      delete[] foundTracks;
      delete[] foundPrimaries;
      delete[] foundPrimaries2;

//         if ((Int_t) nMCTracks14 > 10 && nESDTracks14 <= 3)
//         {
//             TTree* tree = dynamic_cast<TTree*> (GetInputData(0));
//             printf("WARNING: Event %lld %s (vtx-z = %f, recon: %f, contrib: %d, res: %f) has %d generated and %d reconstructed...\n", tree->GetReadEntry(), tree->GetCurrentFile()->GetName(), vtxMC[2], vtx[2], vtxESD->GetNContributors(), vtxESD->GetZRes(), nMCTracks14, nESDTracks14);
//         }

      if (eventTriggered)
      {
        fMultiplicity->FillTriggeredEvent(nESDTracks05, nESDTracks10, nESDTracks14);
        fMultiplicity->FillNoVertexEvent(vtxMC[2], eventVertex, nMCTracks05, nMCTracks10, nMCTracks14, nESDTracks05, nESDTracks10, nESDTracks14);
//         if (!eventVertex)
//         {
//           if (nESDTracks05 == 0)
//             fTemp1->Fill(nMCTracks05, nESDTracks05);
//         }
      }
      
      if (eventTriggered && eventVertex)
      {
        // fill response matrix using vtxMC (best guess)
        fMultiplicity->FillCorrection(vtxMC[2],  nMCTracks05,  nMCTracks10,  nMCTracks14,  nMCTracksAll,  nESDTracks05, nESDTracks10, nESDTracks14);

        fMultiplicity->FillMeasured(vtx[2], nESDTracks05, nESDTracks10, nESDTracks14);

        if (fParticleSpecies)
          fParticleSpecies->Fill(vtxMC[2], nMCTracksSpecies[0], nMCTracksSpecies[1], nMCTracksSpecies[2], nMCTracksSpecies[3], nESDTracksSpecies[0], nESDTracksSpecies[1], nESDTracksSpecies[2], nESDTracksSpecies[3], nESDTracksSpecies[4], nESDTracksSpecies[5], nESDTracksSpecies[6]);
      }
    }
  }

  if (etaArr)
    delete[] etaArr;
  if (labelArr)
    delete[] labelArr;

}

void AliMultiplicityTask::Terminate(Option_t *)
{
  // The Terminate() function is the last function to be called during
  // a query. It always runs on the client, it can be used to present
  // the results graphically or save the results to file.

  fOutput = dynamic_cast<TList*> (GetOutputData(0));
  if (!fOutput) {
    Printf("ERROR: fOutput not available");
    return;
  }

  fMultiplicity = dynamic_cast<AliMultiplicityCorrection*> (fOutput->FindObject("Multiplicity"));
  for (Int_t i = 0; i < 8; ++i)
    fParticleCorrection[i] = dynamic_cast<AliCorrection*> (fOutput->FindObject(Form("correction_%d", i)));
  fParticleSpecies = dynamic_cast<TNtuple*> (fOutput->FindObject("fParticleSpecies"));
  
  fdNdpT = dynamic_cast<TH1*> (fOutput->FindObject("fdNdpT"));

  if (!fMultiplicity)
  {
    AliDebug(AliLog::kError, Form("ERROR: Histograms not available %p", (void*) fMultiplicity));
    return;
  }

  TString fileName("multiplicity");
  if (fSelectProcessType == 1)
    fileName += "ND";
  if (fSelectProcessType == 2)
    fileName += "SD";
  if (fSelectProcessType == 3)
    fileName += "DD";
  fileName += ".root";
  TFile* file = TFile::Open(fileName, "RECREATE");

  fMultiplicity->SaveHistograms();
  for (Int_t i = 0; i < 8; ++i)
    if (fParticleCorrection[i])
      fParticleCorrection[i]->SaveHistograms();
  if (fParticleSpecies)
    fParticleSpecies->Write();
  if (fdNdpT)
    fdNdpT->Write();

  fTemp1 = dynamic_cast<TH1*> (fOutput->FindObject("fTemp1"));
  if (fTemp1)
    fTemp1->Write();
    
  fEtaPhi = dynamic_cast<TH2F*> (fOutput->FindObject("fEtaPhi"));
  if (fEtaPhi)
    fEtaPhi->Write();
  
  fVertex = dynamic_cast<TH3F*> (fOutput->FindObject("vertex_check"));
  if (fVertex)
    fVertex->Write();
  
  for (Int_t i=0; i<3; i++)
  {
    fEta[i] = dynamic_cast<TH1*> (fOutput->FindObject(Form("fEta_%d", i)));
    if (fEta[i])
    {
      fEta[i]->Sumw2();
      Float_t events = fMultiplicity->GetMultiplicityESD(i)->Integral(1, fMultiplicity->GetMultiplicityESD(i)->GetNbinsX());
      if (events > 0)
        fEta[i]->Scale(1.0 / events);
      fEta[i]->Scale(1.0 / fEta[i]->GetXaxis()->GetBinWidth(1));
      fEta[i]->Write();
    }
  }
  
  TObjString option(fOption);
  option.Write();

  file->Close();

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