ROOT logo

//----------------------------------------------------------------
//      Implementation of Class AliAnalysisTaskdNdetaMC
//
// Task used to analize simulations at generation level (i.e. only
// needs galice.root and Kinematics.root).
// 
// The tasks produces multiplicity, eta and pt histograms for
// different event classes (listed in the enum in the header file).
// The multiplicity histogram are further produced for different eta
// ranges, defined in the constructor.
//
// Author: Michele Floris, CERN
//
//----------------------------------------------------------------


#include "TChain.h"
#include "TTree.h"
#include "TH1F.h"
#include "TCanvas.h"

#include "AliAnalysisTask.h"
#include "AliAnalysisManager.h"

#include "AliVEvent.h"
#include "AliESDEvent.h"
#include "AliMCEvent.h"
#include "AliAODEvent.h"

#include "AliAnalysisTaskdNdetaMC.h"
#include "TGraphErrors.h"
#include "AliLog.h"
#include "AliStack.h"
#include "AliGenEventHeader.h"
#include "AliGenPythiaEventHeader.h"

#include <iostream>
#include "AliPDG.h"
#include "AliGenDPMjetEventHeader.h"
#include "TFile.h"

using namespace std;

ClassImp(AliAnalysisTaskdNdetaMC)

Float_t      AliAnalysisTaskdNdetaMC::fEtaMax = 0.5;
Int_t        AliAnalysisTaskdNdetaMC::fPDGCodes[]  = {211,2212,321,-11,-13,
						      -211,-2212,-321,11,13,
						      3122,-3122,3122,-3122,
						      0} ; // 0 ==> all others
const char * AliAnalysisTaskdNdetaMC::fPartNames[] = {"PionPos", "ProtonPos", "KaonPos", "ePos", "muPos", 
						      "PionNeg", "ProtonNeg", "KaonNeg", "eNeg", "muNeg", 
						      "Lambda", "Lambda_bar", "LambdaInclusive", "Lambda_barInclusive",
						      "Others"} ;


AliAnalysisTaskdNdetaMC::AliAnalysisTaskdNdetaMC() 
  : AliAnalysisTaskSE(), fNchDens(0), fMyOut(0), 
    fHistIev(0), fHistNParticlesAtMidRapidity(0), fSkipNormalization(0), fHistSpecies(0)
{

  // default constructor
  for(Int_t ihist = 0; ihist < kNHist; ihist++){
    fHistEta[ihist]  = 0;
    fHistPt[ihist]  = 0;
    for(Int_t ihist2 = 0; ihist2 < kNEtaHist; ihist2++){
      fHistMult[ihist][ihist2] = 0;    
    }
    for(Int_t ipart = 0; ipart < kNPart+1; ipart++){ //  +1 => all others
      fHistPtID[ihist][ipart] = 0;
    }
  }  

  


  fEtaBins[kEta05] = 0.5;
  fEtaBins[kEta10] = 1.0;
  fEtaBins[kEta14] = 1.3;


  
  fEtaMax=0.5;

}

//________________________________________________________________________
AliAnalysisTaskdNdetaMC::AliAnalysisTaskdNdetaMC(const char *name) 
  : AliAnalysisTaskSE(name), fNchDens(0), fMyOut(0),
    fHistIev(0), fHistNParticlesAtMidRapidity(0), fSkipNormalization(0), fHistSpecies(0)
{
  // constructor

  for(Int_t ihist = 0; ihist < kNHist; ihist++){
    fHistEta[ihist]  = 0;
    fHistPt[ihist]  = 0;
    for(Int_t ihist2 = 0; ihist2 < kNEtaHist; ihist2++){
      fHistMult[ihist][ihist2] = 0;    
    }
    for(Int_t ipart = 0; ipart < kNPart+1; ipart++){  // +1 ==> all others
      fHistPtID[ihist][ipart] = 0;
    }
  }
  fEtaBins[kEta05] = 0.5;
  fEtaBins[kEta10] = 1.0;
  fEtaBins[kEta14] = 1.3;


  fEtaMax=0.5;

  AliPDG::AddParticlesToPdgDataBase();

  DefineOutput(1, TList::Class());
}

AliAnalysisTaskdNdetaMC::~AliAnalysisTaskdNdetaMC() {

  // destructor

  if(fMyOut) {
    // fMyOut owns the histos
    delete fMyOut;
    fMyOut = 0;
  }

}


AliAnalysisTaskdNdetaMC::AliAnalysisTaskdNdetaMC(const char *name, const char * fname) 
  : AliAnalysisTaskSE(name), fNchDens(0), fMyOut(0),
    fHistIev(0), fHistNParticlesAtMidRapidity(0), fSkipNormalization(0), fHistSpecies(0)
{
  // This constructor open list from a dndeta file (useful to finalize after merging)
  for(Int_t ihist = 0; ihist < kNHist; ihist++){
    fHistEta[ihist]  = 0;
    fHistPt[ihist]  = 0;
    for(Int_t ihist2 = 0; ihist2 < kNEtaHist; ihist2++){
      fHistMult[ihist][ihist2] = 0;    
    }
    for(Int_t ipart = 0; ipart < kNPart +1; ipart++){ // all others
      fHistPtID[ihist][ipart] = 0;
    }
  }
  fEtaBins[kEta05] = 0.5;
  fEtaBins[kEta10] = 1.0;
  fEtaBins[kEta14] = 1.3;


  fEtaMax=0.5;

  AliPDG::AddParticlesToPdgDataBase();

  TFile * f =new TFile(fname);
  if (!f) AliFatal(Form("Cannot open file %s!",fname));
  fMyOut  = (TList*) f->Get("coutput");
  if (!fMyOut) AliFatal(Form("Cannot get output from file %s!",fname));

  DefineOutput(1, TList::Class());
}

//________________________________________________________________________
void AliAnalysisTaskdNdetaMC::UserCreateOutputObjects()
{
  // Create histograms
  // Called once

  fMyOut = new TList();

  fHistEta[kHistINEL] = BookHetaHist("fHistdNdetaMCInel", "MC dN/deta distribution Inel");
  fHistEta[kHistNSD]  = BookHetaHist("fHistdNdetaMCNSD",  "MC dN/deta distribution NSD");
  fHistEta[kHistSiD]  = BookHetaHist("fHistdNdetaMCSiD",  "MC dN/deta distribution SiD");
  fHistEta[kHistND]   = BookHetaHist("fHistdNdetaMCND",   "MC dN/deta distribution Non-Diffractive");

  fHistEta[kHistHL]   = BookHetaHist("fHistdNdetaMCHL",     "MC dN/deta distribution, at least 1 particle |eta| < 1");


  fHistPt[kHistINEL] = BookHptHist("fHistdNdptMCInel", "MC dN/dpt distribution Inel (|#eta| < 0.8)");
  fHistPt[kHistNSD]  = BookHptHist("fHistdNdptMCNSD",  "MC dN/dpt distribution NSD (|#eta| < 0.8)");
  fHistPt[kHistSiD]  = BookHptHist("fHistdNdptMCSiD",  "MC dN/dpt distribution SiD (|#eta| < 0.8)");
  fHistPt[kHistND]   = BookHptHist("fHistdNdptMCND",   "MC dN/dpt distribution Non-Diffractive (|#eta| < 0.8)");
  fHistPt[kHistHL]   = BookHptHist("fHistdNdptMCHL",   "MC dN/dpt distribution at least 1 particle |eta| < 1 (|#eta| < 0.8)");


  const char * labelType[] = {"INEL", "NSD", "SiD", "ND", "HL"};
  for(Int_t ihist = 0; ihist < kNHist; ihist++){ // type
    for(Int_t ihist2 = 0; ihist2 < kNEtaHist; ihist2++) { // eta range
      fHistMult[ihist][ihist2] = BookMultHisto(Form("fHistMult_%s_%1.1f",labelType[ihist],fEtaBins[ihist2]),
					       Form("(dN/dN_{ch})_{|#eta_{max}|<%1.1f} (%s)",fEtaBins[ihist2],labelType[ihist]));    
    }
  }
  for(Int_t ihist = 0; ihist < kNHist; ihist++){ // type
    for(Int_t ipart = 0; ipart <= kNPart; ipart++){ // particle (<= for all others)
      fHistPtID[ihist][ipart] = BookHptHist(Form("fHistPtID_%s_%s",labelType[ihist],fPartNames[ipart]),
					    Form("fHistPtID (%s), %s - |y| < 0.5",labelType[ihist],fPartNames[ipart]));
    }
  }
  fHistSpecies = new TH1F ("fHistSpecies", "Species contributing to primaries (|#eta| < 0.8)", kNPart+1,-0.5, kNPart+0.5); // One bin for "others"
  for(Int_t ibin = 1; ibin <= kNPart; ibin++){
    fHistSpecies->GetXaxis()->SetBinLabel(ibin, fPartNames[ibin-1]);
  }
  fHistSpecies->GetXaxis()->SetBinLabel(kNPart+1, "Others");
  fMyOut->Add(fHistSpecies);  


  
  fNchDens = new TGraphErrors();
  fNchDens -> SetName  ("fNchDens");
  fNchDens -> SetTitle ("Charged tracks density at mid-rapidity (|#eta| < fEtaMax)");
  fNchDens->SetMarkerStyle(kFullCircle);
  fMyOut->Add(fNchDens);

  fHistNParticlesAtMidRapidity = new TH1I("fHistNParticlesAtMidRapidity","Number of particles at midrapidity", kNHist, -0.5, kNHist-0.5); 
  fMyOut->Add(fHistNParticlesAtMidRapidity);

  fHistIev = new TH1I("fHistIev","Number of particles at midrapidity", kNHist, -0.5, kNHist-0.5); 
  fMyOut->Add(fHistIev);


  fMyOut->SetOwner();

  // Suppress annoying printout
  AliLog::SetGlobalLogLevel(AliLog::kError);

}

TH1F* AliAnalysisTaskdNdetaMC::BookHetaHist(const char * name, const char * title) {

  // Book Eta histos
  TH1F * h = new TH1F(name, title, 200, -10., 10.);
  h->GetXaxis()->SetTitle("#eta");
  h->GetYaxis()->SetTitle("dN/d#eta");
  h->SetMarkerStyle(kFullCircle);
  h->Sumw2();
  fMyOut->Add(h);
  return h;

}

TH1F* AliAnalysisTaskdNdetaMC::BookHptHist(const char * name, const char * title) {

  // Book Pt histos

  const Float_t templBins[] = {0.05,0.1,0.15,0.20,0.25,0.30,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,2,2.2,2.4,2.6};
  Int_t nbinsTempl=31;

  TH1F * h = new TH1F(name, title, nbinsTempl, templBins);
  h->GetXaxis()->SetTitle("p_{T}");
  h->GetYaxis()->SetTitle("dN/dp_{T}");
  h->SetMarkerStyle(kFullCircle);
  h->Sumw2();
  fMyOut->Add(h);
  return h;

}

TH1F* AliAnalysisTaskdNdetaMC::BookMultHisto(const char * name, const char * title) {

  // Book multiplicity histos
  Int_t maxmult = 100;
  TH1F * h = new TH1F(name, title, maxmult, -0.5, maxmult-0.5);
  h->GetXaxis()->SetTitle("N_{ch}");
  h->GetYaxis()->SetTitle("dN/dN_{ch}");
  h->SetMarkerStyle(kFullCircle);
  h->Sumw2();
  fMyOut->Add(h);
  return h;

}

//________________________________________________________________________
void AliAnalysisTaskdNdetaMC::UserExec(Option_t *) 
{
  // Main loop
  // Called for each event

  // also a AliEvent...
  //  AliVEvent* mcEvent = MCEvent();
  AliMCEvent* mcEvent = MCEvent();
  if (!mcEvent) {
     Printf("ERROR: Could not retrieve MC event");
     return;
  }
  AliGenPythiaEventHeader * headPy  = 0;
  AliGenDPMjetEventHeader * headPho = 0;
  AliGenEventHeader * htmp = mcEvent->GenEventHeader();
  if(!htmp) {
    AliError("Cannot Get MC Header!!");
    return;
  }
  if( TString(htmp->IsA()->GetName()) == "AliGenPythiaEventHeader") {
    headPy =  (AliGenPythiaEventHeader*) htmp;
  } else if (TString(htmp->IsA()->GetName()) == "AliGenDPMjetEventHeader") {
    headPho = (AliGenDPMjetEventHeader*) htmp;
  } else {
    cout << "Unknown header" << endl;
    
  }


  //  Printf("MC particles: %d", mcEvent->GetNumberOfTracks());
  //  Check if the evend is single diffractive

  Bool_t isSD = kFALSE;
  Bool_t isND = kFALSE;
  if(headPy)   {
    //    cout << "Process: " << headPy->ProcessType() << endl;
    if(headPy->ProcessType() == 92 || headPy->ProcessType() == 93) {
      isSD = kTRUE; // is single difractive
    }
    if(headPy->ProcessType() != 92 && headPy->ProcessType() != 93 && headPy->ProcessType() != 94) {     
      isND = kTRUE; // is non-diffractive
    }

  } else if (headPho) {
    if(headPho->ProcessType() == 5 || headPho->ProcessType() == 6 ) {
      isSD = kTRUE;
    }       
    if(headPho->ProcessType() != 5 && headPho->ProcessType() != 6  && headPho->ProcessType() != 7 ) {
      isND = kTRUE;
    }       
  } 

  // HL definition: is there at least one particle in |eta|<1?
  Bool_t isThereOneCentralPart = kFALSE;
  for (Int_t iTrack = 0; iTrack < mcEvent->GetNumberOfTracks(); iTrack++) {
    AliMCParticle *track = (AliMCParticle*)mcEvent->GetTrack(iTrack);
    if (!track) {
      Printf("ERROR: Could not receive track %d", iTrack);
      continue;
    }
    Bool_t isPrimary = mcEvent->Stack()->IsPhysicalPrimary(iTrack);
    if (isPrimary && track->Charge() != 0){
      if (track->Eta() > -1 && track->Eta() < 1) {
	isThereOneCentralPart = kTRUE;
	break;
      }
    }
  }

    
  

  static const Float_t ymax =0.5;
  // Track loop
  Int_t multiplicity[kNHist][kNEtaHist] = {{0}};  

  // first loop to determine multiplicity
  for (Int_t iTrack = 0; iTrack < mcEvent->GetNumberOfTracks(); iTrack++) {
    AliMCParticle *track = (AliMCParticle*)mcEvent->GetTrack(iTrack);
    if (!track) {
      Printf("ERROR: Could not receive track %d", iTrack);
      continue;
    }
    Bool_t isPrimary = mcEvent->Stack()->IsPhysicalPrimary(iTrack);
    if (isPrimary && track->Charge() != 0){
      for(Int_t ihist = 0; ihist < kNEtaHist; ihist++){
	if(track->Eta() > -fEtaBins[ihist] && track->Eta() < fEtaBins[ihist]) {
	  multiplicity[kHistINEL][ihist]++;
	  if(!isSD)                  multiplicity[kHistNSD][ihist]++;
	  if(isSD)                   multiplicity[kHistSiD][ihist]++;
	  if(isND)                   multiplicity[kHistND] [ihist]++;
	  if(isThereOneCentralPart)  multiplicity[kHistHL] [ihist]++;
  
	}
      }
    }
  }

  // if(multiplicity[kHistINEL][kEta05] < 1450 || multiplicity[kHistINEL][kEta05] > 1750) return; // FIXME:  ONLY CENTRAL EVENTS 1600 +- 150
  // fHistIev->Fill(kHistINEL);
  // if (!isSD)                 fHistIev->Fill(kHistNSD);
  // if (isSD)                  fHistIev->Fill(kHistSiD);
  // if (isND)                  fHistIev->Fill(kHistND);
  // if (isThereOneCentralPart) fHistIev->Fill(kHistHL);
  // if(!(Int_t(fHistIev->GetBinContent(fHistIev->FindBin(kHistINEL)))%500)) 
    
    cout << "Event " << Int_t(fHistIev->GetBinContent(fHistIev->FindBin(kHistINEL))) << endl;
	  

  for (Int_t iTrack = 0; iTrack < mcEvent->GetNumberOfTracks(); iTrack++) {
    AliMCParticle *track = (AliMCParticle*)mcEvent->GetTrack(iTrack);
    if (!track) {
      Printf("ERROR: Could not receive track %d", iTrack);
      continue;
    }
    Bool_t isPrimary = mcEvent->Stack()->IsPhysicalPrimary(iTrack);
    if (isPrimary && track->Charge() != 0){
      Bool_t isEtaLess08 = (track->Eta() > -0.8 && track->Eta() < 0.8);

      fHistEta[kHistINEL]->Fill(track->Eta());            
      if (isEtaLess08) fHistPt[kHistINEL] ->Fill(track->Pt());            
      if(track->Eta() > -fEtaMax && track->Eta() < fEtaMax) fHistNParticlesAtMidRapidity->Fill(kHistINEL);

      Int_t particleID = kNPart;
      for(Int_t ipart = 0; ipart < kNPart; ipart++){
	if(track->PdgCode() == fPDGCodes[ipart]) particleID = ipart; // Found one otf the expected particles, will be used to fille species histos
	
	if(track->Y() > -ymax && track->Y() < ymax && track->PdgCode() == fPDGCodes[ipart]) {
	  cout << "Found " << iTrack <<" "  << fPartNames[ipart] << endl;
	  fHistPtID[kHistINEL][ipart]->Fill(track->Pt());
	}
	else if(track->Y() > -ymax && track->Y() < ymax) {
	  //	  cout << "Filling others " << track->Pt()<< endl;
	  fHistPtID[kHistINEL][kNPart]->Fill(track->Pt()); // all others
	  //	  fHistPtID[kHistINEL][kNPart]->Print();	  
	}
      }
      
      if(isEtaLess08) {
	fHistSpecies->Fill(particleID); //
	if (particleID == kNPart) {
	  AliInfo(Form("Found other particle: [%d]", track->PdgCode()));
	} 
      }


      if(!isSD) {
	fHistEta[kHistNSD]->Fill(track->Eta());      
	if (isEtaLess08) fHistPt [kHistNSD]->Fill(track->Pt());      
	if(track->Eta() > -fEtaMax && track->Eta() < fEtaMax) fHistNParticlesAtMidRapidity->Fill(kHistNSD);
	for(Int_t ipart = 0; ipart < kNPart; ipart++){
	  if(track->Y() > -ymax && track->Y() < ymax && track->PdgCode() == fPDGCodes[ipart])  fHistPtID[kHistNSD][ipart]->Fill(track->Pt());
	  //	  else fHistPtID[kHistINEL][kNPart]->Fill(track->Pt()); // all others
	}
      }
      if(isSD) {
	fHistEta[kHistSiD]->Fill(track->Eta());      
	if (isEtaLess08) fHistPt [kHistSiD]->Fill(track->Pt());      
	if(track->Eta() > -fEtaMax && track->Eta() < fEtaMax) fHistNParticlesAtMidRapidity->Fill(kHistSiD);
	for(Int_t ipart = 0; ipart < kNPart; ipart++){
	  if(track->Y() > -ymax && track->Y() < ymax && track->PdgCode() == fPDGCodes[ipart])  fHistPtID[kHistSiD][ipart]->Fill(track->Pt());
	  //	  else fHistPtID[kHistINEL][kNPart]->Fill(track->Pt()); // all others
	}
      }
      if (isND) {
	fHistEta[kHistND]->Fill(track->Eta());      
	if (isEtaLess08) fHistPt [kHistND]->Fill(track->Pt());      
	if(track->Eta() > -fEtaMax && track->Eta() < fEtaMax) fHistNParticlesAtMidRapidity->Fill(kHistND);
	for(Int_t ipart = 0; ipart < kNPart; ipart++){
	  if(track->Y() > -ymax && track->Y() < ymax && track->PdgCode() == fPDGCodes[ipart])  fHistPtID[kHistND][ipart]->Fill(track->Pt());
	  //	  else fHistPtID[kHistINEL][kNPart]->Fill(track->Pt()); // all others
	}

      }
      if (isThereOneCentralPart) {
	fHistEta[kHistHL]->Fill(track->Eta());      
	if (isEtaLess08) fHistPt [kHistHL]->Fill(track->Pt());      
	if(track->Eta() > -fEtaMax && track->Eta() < fEtaMax) fHistNParticlesAtMidRapidity->Fill(kHistHL);
	for(Int_t ipart = 0; ipart < kNPart; ipart++){
	  if(track->Y() > -ymax && track->Y() < ymax && track->PdgCode() == fPDGCodes[ipart])  fHistPtID[kHistHL][ipart]->Fill(track->Pt());
	  //	  else fHistPtID[kHistINEL][kNPart]->Fill(track->Pt()); // all others
	}

      }

      // fill array of multiplicity for different classes of events
      // and in different eta ranges 
      // MOVED IN A SEPARATE LOOP
      // for(Int_t ihist = 0; ihist < kNEtaHist; ihist++){
      // 	if(track->Eta() > -fEtaBins[ihist] && track->Eta() < fEtaBins[ihist]) {
      // 	  multiplicity[kHistINEL][ihist]++;
      // 	  if(!isSD)                  multiplicity[kHistNSD][ihist]++;
      // 	  if(isSD)                   multiplicity[kHistSiD][ihist]++;
      // 	  if(isND)                   multiplicity[kHistND] [ihist]++;
      // 	  if(isThereOneCentralPart)  multiplicity[kHistHL] [ihist]++;
  
      // 	}
      //}
    } // if (primary and charged)
    // extra loop to check for lambdas
    for(Int_t ipart = kLambda; ipart < kLambdaInclusive; ipart++){
      //	if(track->PdgCode() == fPDGCodes[ipart]) particleID = ipart; // Found one otf the expected particles, will be used to fille species histos
      if(track->Y() > -ymax && track->Y() < ymax && track->PdgCode() == fPDGCodes[ipart]) {
	//	cout << "Found (LAMBDA)" << " " << iTrack << " " << isPrimary << " " << fPartNames[ipart] << " " << fPartNames[ipart+2] << endl;
	if(isPrimary) {
	  //	  cout << " - prim" << endl;
	  fHistPtID[kHistINEL][ipart]->Fill(track->Pt());
	} else if(mcEvent->Stack()->IsSecondaryFromWeakDecay(iTrack)) {
	  fHistPtID[kHistINEL][ipart+2]->Fill(track->Pt()); // inclusive lambdas are offset by 2 elements
	}       
      }
    }

  } //track loop 



  // Fill multiplicity histos
  for(Int_t ihist = 0; ihist < kNEtaHist; ihist++){
    fHistMult[kHistINEL][ihist] ->Fill(multiplicity[kHistINEL][ihist]);
    if(!isSD)                  fHistMult[kHistNSD][ihist]->Fill(multiplicity[kHistNSD][ihist]);
    if(isSD)                   fHistMult[kHistSiD][ihist]->Fill(multiplicity[kHistSiD][ihist]);
    if(isND)                   fHistMult[kHistND] [ihist]->Fill(multiplicity[kHistND] [ihist]);
    if(isThereOneCentralPart)  fHistMult[kHistHL] [ihist]->Fill(multiplicity[kHistHL] [ihist]);    
  }

  // Post output data.
  PostData(1, fMyOut);
}      

//________________________________________________________________________
void AliAnalysisTaskdNdetaMC::Terminate(Option_t *) 
{
  // Draw result to the screen
  // Called once at the end of the query   

  //  fHistPt = dynamic_cast<TH1F*> (GetOutputData(1));
  fMyOut  = dynamic_cast<TList*> (GetOutputData(1));
  
  Finalize();

}



void AliAnalysisTaskdNdetaMC::Finalize() {

  // Scale histos and computes dNdeta

  fHistEta[kHistINEL] = (TH1F*) fMyOut->FindObject("fHistdNdetaMCInel");
  fHistEta[kHistNSD]  = (TH1F*) fMyOut->FindObject("fHistdNdetaMCNSD" );
  fHistEta[kHistSiD]  = (TH1F*) fMyOut->FindObject("fHistdNdetaMCSiD" );
  fHistEta[kHistND]   = (TH1F*) fMyOut->FindObject("fHistdNdetaMCND"  );
  fHistEta[kHistHL]   = (TH1F*) fMyOut->FindObject("fHistdNdetaMCHL"  );
  fHistPt[kHistINEL] = (TH1F*) fMyOut->FindObject("fHistdNdptMCInel");
  fHistPt[kHistNSD]  = (TH1F*) fMyOut->FindObject("fHistdNdptMCNSD" );
  fHistPt[kHistSiD]  = (TH1F*) fMyOut->FindObject("fHistdNdptMCSiD" );
  fHistPt[kHistND]   = (TH1F*) fMyOut->FindObject("fHistdNdptMCND"  );
  fHistPt[kHistHL]   = (TH1F*) fMyOut->FindObject("fHistdNdptMCHL"  );
  fNchDens            = (TGraphErrors*) fMyOut->FindObject("fNchDens");

  const char * labelType[] = {"INEL", "NSD", "SiD", "ND", "HL"};
  for(Int_t ihist = 0; ihist < kNHist; ihist++){
    for(Int_t ihist2 = 0; ihist2 < kNEtaHist; ihist2++){
      fHistMult[ihist][ihist2] = (TH1F*) fMyOut->FindObject(Form("fHistMult_%s_%1.1f",labelType[ihist],fEtaBins[ihist2]));      
      if (!fHistMult[ihist][ihist2]) cout << "Cannot get histo " << Form("fHistMult_%s_%1.1f",labelType[ihist],fEtaBins[ihist2]) << endl;
    }
    for(Int_t ipart = 0; ipart <= kNPart; ipart++){ // <= , all others
      fHistPtID[ihist][ipart] = (TH1F*) fMyOut->FindObject(Form("fHistPtID_%s_%s",labelType[ihist],fPartNames[ipart]));      
      if(!fHistPtID[ihist][ipart]) AliWarning(Form("Cannot get histo fHistPtID_%s_%s",labelType[ihist],fPartNames[ipart]));
    }
  }

  fHistIev  = (TH1I*) fMyOut->FindObject("fHistIev"  );
  fHistNParticlesAtMidRapidity  = (TH1I*) fMyOut->FindObject("fHistNParticlesAtMidRapidity"  );
    

//   fHistIev->Draw();

  cout << "Eta Max: " << fEtaMax << endl;


  for(Int_t ihist = 0; ihist < kNHist; ihist++){

    Int_t iev = (Int_t) fHistIev->GetBinContent(fHistIev->FindBin(ihist));
    Int_t npm = (Int_t) fHistNParticlesAtMidRapidity->GetBinContent(fHistNParticlesAtMidRapidity->FindBin(ihist));

    // Renormalize dNdeta to the number of events
    //    cout << fHistEta[ihist] << " " << iev << endl;
    
    // compute density at midrapidity (Delta_y = 1);
    Int_t firstbin =  fHistEta[ihist]->FindBin(-fEtaMax);
    Int_t lastbin =  fHistEta[ihist]->FindBin(fEtaMax);

    if (!fSkipNormalization) {
      fHistEta[ihist]->Scale(1./iev, "width");       
      fHistPt[ihist] ->Scale(1./iev, "width");       
      for(Int_t ihist2 = 0; ihist2 < kNEtaHist; ihist2++){
	fHistMult[ihist][ihist2]->Scale(1./iev);
      }
      for(Int_t ipart = 0; ipart <= kNPart; ipart++){
	fHistPtID[ihist][ipart]->Scale(1./iev, "width");
      }
      
    }


    Double_t meaneta = 0;
    Double_t meanerr = 0;
    Double_t sumweight  = 0;
    for(Int_t ibin = firstbin; ibin <=lastbin ; ibin++){
      Double_t x    = fHistEta[ihist]->GetBinContent(ibin);
      Double_t xerr = fHistEta[ihist]->GetBinError(ibin);
      
      
      Double_t xerr2 = xerr*xerr;
      if(xerr2){
	//      cout << "xe2 " << xerr2 << endl;
	Double_t weight = 1. / xerr2;
	sumweight += weight;
	meaneta += weight * x;
      }
      
    }
    
    if(sumweight){
      meaneta /= sumweight;
      meanerr = TMath::Sqrt(1./ sumweight);
    }
    else {
      meaneta = 0;
      meanerr = 0;
    }


    Double_t range = 2*fEtaMax;

//     meaneta /= fHistEta[ihist]->GetBinWidth(firstbin);
//     meanerr /= fHistEta[ihist]->GetBinWidth(firstbin);
    cout << "Histo: " << fHistEta[ihist]->GetName() << endl;
    cout << " Evts: " << iev << endl;
    
    cout << " Density at midrapidity:       " << meaneta << "+-" << meanerr << endl;

    // Direct computation
    Double_t errdir = TMath::Sqrt(npm) / iev;
    Double_t etadir = Double_t(npm) / iev;
    
    cout << " Density at midrapidity: (dir) " << etadir/range << "+-" << errdir/range << endl;
  
    fNchDens->SetPoint     (ihist, ihist+1, etadir);
    fNchDens->SetPointError(ihist, 0, errdir);

    cout << " Density at midrapidity: (TH1, Eta<0.5) " << fHistMult[ihist][0]->GetMean() << "+-" << fHistMult[ihist][0]->GetMeanError() << endl;

  }
  
  // Draw fHistEtaAll
  TCanvas *c1 = new TCanvas("AliAnalysisTaskdNdetaMC","dNdetaMC",10,10,800,400);
  //  c1->cd(1)->SetLogy();
  c1->Divide(2,1);
  c1->cd(1);
  fHistEta[0]->DrawCopy("");
  fHistEta[1]->SetLineColor(kRed);
  fHistEta[1]->SetMarkerColor(kRed);
  fHistEta[1]->SetMarkerStyle(kOpenSquare);
  fHistEta[1]->DrawCopy("same");
  c1->cd(2);
  fNchDens->Draw("AP");

}
 AliAnalysisTaskdNdetaMC.cxx:1
 AliAnalysisTaskdNdetaMC.cxx:2
 AliAnalysisTaskdNdetaMC.cxx:3
 AliAnalysisTaskdNdetaMC.cxx:4
 AliAnalysisTaskdNdetaMC.cxx:5
 AliAnalysisTaskdNdetaMC.cxx:6
 AliAnalysisTaskdNdetaMC.cxx:7
 AliAnalysisTaskdNdetaMC.cxx:8
 AliAnalysisTaskdNdetaMC.cxx:9
 AliAnalysisTaskdNdetaMC.cxx:10
 AliAnalysisTaskdNdetaMC.cxx:11
 AliAnalysisTaskdNdetaMC.cxx:12
 AliAnalysisTaskdNdetaMC.cxx:13
 AliAnalysisTaskdNdetaMC.cxx:14
 AliAnalysisTaskdNdetaMC.cxx:15
 AliAnalysisTaskdNdetaMC.cxx:16
 AliAnalysisTaskdNdetaMC.cxx:17
 AliAnalysisTaskdNdetaMC.cxx:18
 AliAnalysisTaskdNdetaMC.cxx:19
 AliAnalysisTaskdNdetaMC.cxx:20
 AliAnalysisTaskdNdetaMC.cxx:21
 AliAnalysisTaskdNdetaMC.cxx:22
 AliAnalysisTaskdNdetaMC.cxx:23
 AliAnalysisTaskdNdetaMC.cxx:24
 AliAnalysisTaskdNdetaMC.cxx:25
 AliAnalysisTaskdNdetaMC.cxx:26
 AliAnalysisTaskdNdetaMC.cxx:27
 AliAnalysisTaskdNdetaMC.cxx:28
 AliAnalysisTaskdNdetaMC.cxx:29
 AliAnalysisTaskdNdetaMC.cxx:30
 AliAnalysisTaskdNdetaMC.cxx:31
 AliAnalysisTaskdNdetaMC.cxx:32
 AliAnalysisTaskdNdetaMC.cxx:33
 AliAnalysisTaskdNdetaMC.cxx:34
 AliAnalysisTaskdNdetaMC.cxx:35
 AliAnalysisTaskdNdetaMC.cxx:36
 AliAnalysisTaskdNdetaMC.cxx:37
 AliAnalysisTaskdNdetaMC.cxx:38
 AliAnalysisTaskdNdetaMC.cxx:39
 AliAnalysisTaskdNdetaMC.cxx:40
 AliAnalysisTaskdNdetaMC.cxx:41
 AliAnalysisTaskdNdetaMC.cxx:42
 AliAnalysisTaskdNdetaMC.cxx:43
 AliAnalysisTaskdNdetaMC.cxx:44
 AliAnalysisTaskdNdetaMC.cxx:45
 AliAnalysisTaskdNdetaMC.cxx:46
 AliAnalysisTaskdNdetaMC.cxx:47
 AliAnalysisTaskdNdetaMC.cxx:48
 AliAnalysisTaskdNdetaMC.cxx:49
 AliAnalysisTaskdNdetaMC.cxx:50
 AliAnalysisTaskdNdetaMC.cxx:51
 AliAnalysisTaskdNdetaMC.cxx:52
 AliAnalysisTaskdNdetaMC.cxx:53
 AliAnalysisTaskdNdetaMC.cxx:54
 AliAnalysisTaskdNdetaMC.cxx:55
 AliAnalysisTaskdNdetaMC.cxx:56
 AliAnalysisTaskdNdetaMC.cxx:57
 AliAnalysisTaskdNdetaMC.cxx:58
 AliAnalysisTaskdNdetaMC.cxx:59
 AliAnalysisTaskdNdetaMC.cxx:60
 AliAnalysisTaskdNdetaMC.cxx:61
 AliAnalysisTaskdNdetaMC.cxx:62
 AliAnalysisTaskdNdetaMC.cxx:63
 AliAnalysisTaskdNdetaMC.cxx:64
 AliAnalysisTaskdNdetaMC.cxx:65
 AliAnalysisTaskdNdetaMC.cxx:66
 AliAnalysisTaskdNdetaMC.cxx:67
 AliAnalysisTaskdNdetaMC.cxx:68
 AliAnalysisTaskdNdetaMC.cxx:69
 AliAnalysisTaskdNdetaMC.cxx:70
 AliAnalysisTaskdNdetaMC.cxx:71
 AliAnalysisTaskdNdetaMC.cxx:72
 AliAnalysisTaskdNdetaMC.cxx:73
 AliAnalysisTaskdNdetaMC.cxx:74
 AliAnalysisTaskdNdetaMC.cxx:75
 AliAnalysisTaskdNdetaMC.cxx:76
 AliAnalysisTaskdNdetaMC.cxx:77
 AliAnalysisTaskdNdetaMC.cxx:78
 AliAnalysisTaskdNdetaMC.cxx:79
 AliAnalysisTaskdNdetaMC.cxx:80
 AliAnalysisTaskdNdetaMC.cxx:81
 AliAnalysisTaskdNdetaMC.cxx:82
 AliAnalysisTaskdNdetaMC.cxx:83
 AliAnalysisTaskdNdetaMC.cxx:84
 AliAnalysisTaskdNdetaMC.cxx:85
 AliAnalysisTaskdNdetaMC.cxx:86
 AliAnalysisTaskdNdetaMC.cxx:87
 AliAnalysisTaskdNdetaMC.cxx:88
 AliAnalysisTaskdNdetaMC.cxx:89
 AliAnalysisTaskdNdetaMC.cxx:90
 AliAnalysisTaskdNdetaMC.cxx:91
 AliAnalysisTaskdNdetaMC.cxx:92
 AliAnalysisTaskdNdetaMC.cxx:93
 AliAnalysisTaskdNdetaMC.cxx:94
 AliAnalysisTaskdNdetaMC.cxx:95
 AliAnalysisTaskdNdetaMC.cxx:96
 AliAnalysisTaskdNdetaMC.cxx:97
 AliAnalysisTaskdNdetaMC.cxx:98
 AliAnalysisTaskdNdetaMC.cxx:99
 AliAnalysisTaskdNdetaMC.cxx:100
 AliAnalysisTaskdNdetaMC.cxx:101
 AliAnalysisTaskdNdetaMC.cxx:102
 AliAnalysisTaskdNdetaMC.cxx:103
 AliAnalysisTaskdNdetaMC.cxx:104
 AliAnalysisTaskdNdetaMC.cxx:105
 AliAnalysisTaskdNdetaMC.cxx:106
 AliAnalysisTaskdNdetaMC.cxx:107
 AliAnalysisTaskdNdetaMC.cxx:108
 AliAnalysisTaskdNdetaMC.cxx:109
 AliAnalysisTaskdNdetaMC.cxx:110
 AliAnalysisTaskdNdetaMC.cxx:111
 AliAnalysisTaskdNdetaMC.cxx:112
 AliAnalysisTaskdNdetaMC.cxx:113
 AliAnalysisTaskdNdetaMC.cxx:114
 AliAnalysisTaskdNdetaMC.cxx:115
 AliAnalysisTaskdNdetaMC.cxx:116
 AliAnalysisTaskdNdetaMC.cxx:117
 AliAnalysisTaskdNdetaMC.cxx:118
 AliAnalysisTaskdNdetaMC.cxx:119
 AliAnalysisTaskdNdetaMC.cxx:120
 AliAnalysisTaskdNdetaMC.cxx:121
 AliAnalysisTaskdNdetaMC.cxx:122
 AliAnalysisTaskdNdetaMC.cxx:123
 AliAnalysisTaskdNdetaMC.cxx:124
 AliAnalysisTaskdNdetaMC.cxx:125
 AliAnalysisTaskdNdetaMC.cxx:126
 AliAnalysisTaskdNdetaMC.cxx:127
 AliAnalysisTaskdNdetaMC.cxx:128
 AliAnalysisTaskdNdetaMC.cxx:129
 AliAnalysisTaskdNdetaMC.cxx:130
 AliAnalysisTaskdNdetaMC.cxx:131
 AliAnalysisTaskdNdetaMC.cxx:132
 AliAnalysisTaskdNdetaMC.cxx:133
 AliAnalysisTaskdNdetaMC.cxx:134
 AliAnalysisTaskdNdetaMC.cxx:135
 AliAnalysisTaskdNdetaMC.cxx:136
 AliAnalysisTaskdNdetaMC.cxx:137
 AliAnalysisTaskdNdetaMC.cxx:138
 AliAnalysisTaskdNdetaMC.cxx:139
 AliAnalysisTaskdNdetaMC.cxx:140
 AliAnalysisTaskdNdetaMC.cxx:141
 AliAnalysisTaskdNdetaMC.cxx:142
 AliAnalysisTaskdNdetaMC.cxx:143
 AliAnalysisTaskdNdetaMC.cxx:144
 AliAnalysisTaskdNdetaMC.cxx:145
 AliAnalysisTaskdNdetaMC.cxx:146
 AliAnalysisTaskdNdetaMC.cxx:147
 AliAnalysisTaskdNdetaMC.cxx:148
 AliAnalysisTaskdNdetaMC.cxx:149
 AliAnalysisTaskdNdetaMC.cxx:150
 AliAnalysisTaskdNdetaMC.cxx:151
 AliAnalysisTaskdNdetaMC.cxx:152
 AliAnalysisTaskdNdetaMC.cxx:153
 AliAnalysisTaskdNdetaMC.cxx:154
 AliAnalysisTaskdNdetaMC.cxx:155
 AliAnalysisTaskdNdetaMC.cxx:156
 AliAnalysisTaskdNdetaMC.cxx:157
 AliAnalysisTaskdNdetaMC.cxx:158
 AliAnalysisTaskdNdetaMC.cxx:159
 AliAnalysisTaskdNdetaMC.cxx:160
 AliAnalysisTaskdNdetaMC.cxx:161
 AliAnalysisTaskdNdetaMC.cxx:162
 AliAnalysisTaskdNdetaMC.cxx:163
 AliAnalysisTaskdNdetaMC.cxx:164
 AliAnalysisTaskdNdetaMC.cxx:165
 AliAnalysisTaskdNdetaMC.cxx:166
 AliAnalysisTaskdNdetaMC.cxx:167
 AliAnalysisTaskdNdetaMC.cxx:168
 AliAnalysisTaskdNdetaMC.cxx:169
 AliAnalysisTaskdNdetaMC.cxx:170
 AliAnalysisTaskdNdetaMC.cxx:171
 AliAnalysisTaskdNdetaMC.cxx:172
 AliAnalysisTaskdNdetaMC.cxx:173
 AliAnalysisTaskdNdetaMC.cxx:174
 AliAnalysisTaskdNdetaMC.cxx:175
 AliAnalysisTaskdNdetaMC.cxx:176
 AliAnalysisTaskdNdetaMC.cxx:177
 AliAnalysisTaskdNdetaMC.cxx:178
 AliAnalysisTaskdNdetaMC.cxx:179
 AliAnalysisTaskdNdetaMC.cxx:180
 AliAnalysisTaskdNdetaMC.cxx:181
 AliAnalysisTaskdNdetaMC.cxx:182
 AliAnalysisTaskdNdetaMC.cxx:183
 AliAnalysisTaskdNdetaMC.cxx:184
 AliAnalysisTaskdNdetaMC.cxx:185
 AliAnalysisTaskdNdetaMC.cxx:186
 AliAnalysisTaskdNdetaMC.cxx:187
 AliAnalysisTaskdNdetaMC.cxx:188
 AliAnalysisTaskdNdetaMC.cxx:189
 AliAnalysisTaskdNdetaMC.cxx:190
 AliAnalysisTaskdNdetaMC.cxx:191
 AliAnalysisTaskdNdetaMC.cxx:192
 AliAnalysisTaskdNdetaMC.cxx:193
 AliAnalysisTaskdNdetaMC.cxx:194
 AliAnalysisTaskdNdetaMC.cxx:195
 AliAnalysisTaskdNdetaMC.cxx:196
 AliAnalysisTaskdNdetaMC.cxx:197
 AliAnalysisTaskdNdetaMC.cxx:198
 AliAnalysisTaskdNdetaMC.cxx:199
 AliAnalysisTaskdNdetaMC.cxx:200
 AliAnalysisTaskdNdetaMC.cxx:201
 AliAnalysisTaskdNdetaMC.cxx:202
 AliAnalysisTaskdNdetaMC.cxx:203
 AliAnalysisTaskdNdetaMC.cxx:204
 AliAnalysisTaskdNdetaMC.cxx:205
 AliAnalysisTaskdNdetaMC.cxx:206
 AliAnalysisTaskdNdetaMC.cxx:207
 AliAnalysisTaskdNdetaMC.cxx:208
 AliAnalysisTaskdNdetaMC.cxx:209
 AliAnalysisTaskdNdetaMC.cxx:210
 AliAnalysisTaskdNdetaMC.cxx:211
 AliAnalysisTaskdNdetaMC.cxx:212
 AliAnalysisTaskdNdetaMC.cxx:213
 AliAnalysisTaskdNdetaMC.cxx:214
 AliAnalysisTaskdNdetaMC.cxx:215
 AliAnalysisTaskdNdetaMC.cxx:216
 AliAnalysisTaskdNdetaMC.cxx:217
 AliAnalysisTaskdNdetaMC.cxx:218
 AliAnalysisTaskdNdetaMC.cxx:219
 AliAnalysisTaskdNdetaMC.cxx:220
 AliAnalysisTaskdNdetaMC.cxx:221
 AliAnalysisTaskdNdetaMC.cxx:222
 AliAnalysisTaskdNdetaMC.cxx:223
 AliAnalysisTaskdNdetaMC.cxx:224
 AliAnalysisTaskdNdetaMC.cxx:225
 AliAnalysisTaskdNdetaMC.cxx:226
 AliAnalysisTaskdNdetaMC.cxx:227
 AliAnalysisTaskdNdetaMC.cxx:228
 AliAnalysisTaskdNdetaMC.cxx:229
 AliAnalysisTaskdNdetaMC.cxx:230
 AliAnalysisTaskdNdetaMC.cxx:231
 AliAnalysisTaskdNdetaMC.cxx:232
 AliAnalysisTaskdNdetaMC.cxx:233
 AliAnalysisTaskdNdetaMC.cxx:234
 AliAnalysisTaskdNdetaMC.cxx:235
 AliAnalysisTaskdNdetaMC.cxx:236
 AliAnalysisTaskdNdetaMC.cxx:237
 AliAnalysisTaskdNdetaMC.cxx:238
 AliAnalysisTaskdNdetaMC.cxx:239
 AliAnalysisTaskdNdetaMC.cxx:240
 AliAnalysisTaskdNdetaMC.cxx:241
 AliAnalysisTaskdNdetaMC.cxx:242
 AliAnalysisTaskdNdetaMC.cxx:243
 AliAnalysisTaskdNdetaMC.cxx:244
 AliAnalysisTaskdNdetaMC.cxx:245
 AliAnalysisTaskdNdetaMC.cxx:246
 AliAnalysisTaskdNdetaMC.cxx:247
 AliAnalysisTaskdNdetaMC.cxx:248
 AliAnalysisTaskdNdetaMC.cxx:249
 AliAnalysisTaskdNdetaMC.cxx:250
 AliAnalysisTaskdNdetaMC.cxx:251
 AliAnalysisTaskdNdetaMC.cxx:252
 AliAnalysisTaskdNdetaMC.cxx:253
 AliAnalysisTaskdNdetaMC.cxx:254
 AliAnalysisTaskdNdetaMC.cxx:255
 AliAnalysisTaskdNdetaMC.cxx:256
 AliAnalysisTaskdNdetaMC.cxx:257
 AliAnalysisTaskdNdetaMC.cxx:258
 AliAnalysisTaskdNdetaMC.cxx:259
 AliAnalysisTaskdNdetaMC.cxx:260
 AliAnalysisTaskdNdetaMC.cxx:261
 AliAnalysisTaskdNdetaMC.cxx:262
 AliAnalysisTaskdNdetaMC.cxx:263
 AliAnalysisTaskdNdetaMC.cxx:264
 AliAnalysisTaskdNdetaMC.cxx:265
 AliAnalysisTaskdNdetaMC.cxx:266
 AliAnalysisTaskdNdetaMC.cxx:267
 AliAnalysisTaskdNdetaMC.cxx:268
 AliAnalysisTaskdNdetaMC.cxx:269
 AliAnalysisTaskdNdetaMC.cxx:270
 AliAnalysisTaskdNdetaMC.cxx:271
 AliAnalysisTaskdNdetaMC.cxx:272
 AliAnalysisTaskdNdetaMC.cxx:273
 AliAnalysisTaskdNdetaMC.cxx:274
 AliAnalysisTaskdNdetaMC.cxx:275
 AliAnalysisTaskdNdetaMC.cxx:276
 AliAnalysisTaskdNdetaMC.cxx:277
 AliAnalysisTaskdNdetaMC.cxx:278
 AliAnalysisTaskdNdetaMC.cxx:279
 AliAnalysisTaskdNdetaMC.cxx:280
 AliAnalysisTaskdNdetaMC.cxx:281
 AliAnalysisTaskdNdetaMC.cxx:282
 AliAnalysisTaskdNdetaMC.cxx:283
 AliAnalysisTaskdNdetaMC.cxx:284
 AliAnalysisTaskdNdetaMC.cxx:285
 AliAnalysisTaskdNdetaMC.cxx:286
 AliAnalysisTaskdNdetaMC.cxx:287
 AliAnalysisTaskdNdetaMC.cxx:288
 AliAnalysisTaskdNdetaMC.cxx:289
 AliAnalysisTaskdNdetaMC.cxx:290
 AliAnalysisTaskdNdetaMC.cxx:291
 AliAnalysisTaskdNdetaMC.cxx:292
 AliAnalysisTaskdNdetaMC.cxx:293
 AliAnalysisTaskdNdetaMC.cxx:294
 AliAnalysisTaskdNdetaMC.cxx:295
 AliAnalysisTaskdNdetaMC.cxx:296
 AliAnalysisTaskdNdetaMC.cxx:297
 AliAnalysisTaskdNdetaMC.cxx:298
 AliAnalysisTaskdNdetaMC.cxx:299
 AliAnalysisTaskdNdetaMC.cxx:300
 AliAnalysisTaskdNdetaMC.cxx:301
 AliAnalysisTaskdNdetaMC.cxx:302
 AliAnalysisTaskdNdetaMC.cxx:303
 AliAnalysisTaskdNdetaMC.cxx:304
 AliAnalysisTaskdNdetaMC.cxx:305
 AliAnalysisTaskdNdetaMC.cxx:306
 AliAnalysisTaskdNdetaMC.cxx:307
 AliAnalysisTaskdNdetaMC.cxx:308
 AliAnalysisTaskdNdetaMC.cxx:309
 AliAnalysisTaskdNdetaMC.cxx:310
 AliAnalysisTaskdNdetaMC.cxx:311
 AliAnalysisTaskdNdetaMC.cxx:312
 AliAnalysisTaskdNdetaMC.cxx:313
 AliAnalysisTaskdNdetaMC.cxx:314
 AliAnalysisTaskdNdetaMC.cxx:315
 AliAnalysisTaskdNdetaMC.cxx:316
 AliAnalysisTaskdNdetaMC.cxx:317
 AliAnalysisTaskdNdetaMC.cxx:318
 AliAnalysisTaskdNdetaMC.cxx:319
 AliAnalysisTaskdNdetaMC.cxx:320
 AliAnalysisTaskdNdetaMC.cxx:321
 AliAnalysisTaskdNdetaMC.cxx:322
 AliAnalysisTaskdNdetaMC.cxx:323
 AliAnalysisTaskdNdetaMC.cxx:324
 AliAnalysisTaskdNdetaMC.cxx:325
 AliAnalysisTaskdNdetaMC.cxx:326
 AliAnalysisTaskdNdetaMC.cxx:327
 AliAnalysisTaskdNdetaMC.cxx:328
 AliAnalysisTaskdNdetaMC.cxx:329
 AliAnalysisTaskdNdetaMC.cxx:330
 AliAnalysisTaskdNdetaMC.cxx:331
 AliAnalysisTaskdNdetaMC.cxx:332
 AliAnalysisTaskdNdetaMC.cxx:333
 AliAnalysisTaskdNdetaMC.cxx:334
 AliAnalysisTaskdNdetaMC.cxx:335
 AliAnalysisTaskdNdetaMC.cxx:336
 AliAnalysisTaskdNdetaMC.cxx:337
 AliAnalysisTaskdNdetaMC.cxx:338
 AliAnalysisTaskdNdetaMC.cxx:339
 AliAnalysisTaskdNdetaMC.cxx:340
 AliAnalysisTaskdNdetaMC.cxx:341
 AliAnalysisTaskdNdetaMC.cxx:342
 AliAnalysisTaskdNdetaMC.cxx:343
 AliAnalysisTaskdNdetaMC.cxx:344
 AliAnalysisTaskdNdetaMC.cxx:345
 AliAnalysisTaskdNdetaMC.cxx:346
 AliAnalysisTaskdNdetaMC.cxx:347
 AliAnalysisTaskdNdetaMC.cxx:348
 AliAnalysisTaskdNdetaMC.cxx:349
 AliAnalysisTaskdNdetaMC.cxx:350
 AliAnalysisTaskdNdetaMC.cxx:351
 AliAnalysisTaskdNdetaMC.cxx:352
 AliAnalysisTaskdNdetaMC.cxx:353
 AliAnalysisTaskdNdetaMC.cxx:354
 AliAnalysisTaskdNdetaMC.cxx:355
 AliAnalysisTaskdNdetaMC.cxx:356
 AliAnalysisTaskdNdetaMC.cxx:357
 AliAnalysisTaskdNdetaMC.cxx:358
 AliAnalysisTaskdNdetaMC.cxx:359
 AliAnalysisTaskdNdetaMC.cxx:360
 AliAnalysisTaskdNdetaMC.cxx:361
 AliAnalysisTaskdNdetaMC.cxx:362
 AliAnalysisTaskdNdetaMC.cxx:363
 AliAnalysisTaskdNdetaMC.cxx:364
 AliAnalysisTaskdNdetaMC.cxx:365
 AliAnalysisTaskdNdetaMC.cxx:366
 AliAnalysisTaskdNdetaMC.cxx:367
 AliAnalysisTaskdNdetaMC.cxx:368
 AliAnalysisTaskdNdetaMC.cxx:369
 AliAnalysisTaskdNdetaMC.cxx:370
 AliAnalysisTaskdNdetaMC.cxx:371
 AliAnalysisTaskdNdetaMC.cxx:372
 AliAnalysisTaskdNdetaMC.cxx:373
 AliAnalysisTaskdNdetaMC.cxx:374
 AliAnalysisTaskdNdetaMC.cxx:375
 AliAnalysisTaskdNdetaMC.cxx:376
 AliAnalysisTaskdNdetaMC.cxx:377
 AliAnalysisTaskdNdetaMC.cxx:378
 AliAnalysisTaskdNdetaMC.cxx:379
 AliAnalysisTaskdNdetaMC.cxx:380
 AliAnalysisTaskdNdetaMC.cxx:381
 AliAnalysisTaskdNdetaMC.cxx:382
 AliAnalysisTaskdNdetaMC.cxx:383
 AliAnalysisTaskdNdetaMC.cxx:384
 AliAnalysisTaskdNdetaMC.cxx:385
 AliAnalysisTaskdNdetaMC.cxx:386
 AliAnalysisTaskdNdetaMC.cxx:387
 AliAnalysisTaskdNdetaMC.cxx:388
 AliAnalysisTaskdNdetaMC.cxx:389
 AliAnalysisTaskdNdetaMC.cxx:390
 AliAnalysisTaskdNdetaMC.cxx:391
 AliAnalysisTaskdNdetaMC.cxx:392
 AliAnalysisTaskdNdetaMC.cxx:393
 AliAnalysisTaskdNdetaMC.cxx:394
 AliAnalysisTaskdNdetaMC.cxx:395
 AliAnalysisTaskdNdetaMC.cxx:396
 AliAnalysisTaskdNdetaMC.cxx:397
 AliAnalysisTaskdNdetaMC.cxx:398
 AliAnalysisTaskdNdetaMC.cxx:399
 AliAnalysisTaskdNdetaMC.cxx:400
 AliAnalysisTaskdNdetaMC.cxx:401
 AliAnalysisTaskdNdetaMC.cxx:402
 AliAnalysisTaskdNdetaMC.cxx:403
 AliAnalysisTaskdNdetaMC.cxx:404
 AliAnalysisTaskdNdetaMC.cxx:405
 AliAnalysisTaskdNdetaMC.cxx:406
 AliAnalysisTaskdNdetaMC.cxx:407
 AliAnalysisTaskdNdetaMC.cxx:408
 AliAnalysisTaskdNdetaMC.cxx:409
 AliAnalysisTaskdNdetaMC.cxx:410
 AliAnalysisTaskdNdetaMC.cxx:411
 AliAnalysisTaskdNdetaMC.cxx:412
 AliAnalysisTaskdNdetaMC.cxx:413
 AliAnalysisTaskdNdetaMC.cxx:414
 AliAnalysisTaskdNdetaMC.cxx:415
 AliAnalysisTaskdNdetaMC.cxx:416
 AliAnalysisTaskdNdetaMC.cxx:417
 AliAnalysisTaskdNdetaMC.cxx:418
 AliAnalysisTaskdNdetaMC.cxx:419
 AliAnalysisTaskdNdetaMC.cxx:420
 AliAnalysisTaskdNdetaMC.cxx:421
 AliAnalysisTaskdNdetaMC.cxx:422
 AliAnalysisTaskdNdetaMC.cxx:423
 AliAnalysisTaskdNdetaMC.cxx:424
 AliAnalysisTaskdNdetaMC.cxx:425
 AliAnalysisTaskdNdetaMC.cxx:426
 AliAnalysisTaskdNdetaMC.cxx:427
 AliAnalysisTaskdNdetaMC.cxx:428
 AliAnalysisTaskdNdetaMC.cxx:429
 AliAnalysisTaskdNdetaMC.cxx:430
 AliAnalysisTaskdNdetaMC.cxx:431
 AliAnalysisTaskdNdetaMC.cxx:432
 AliAnalysisTaskdNdetaMC.cxx:433
 AliAnalysisTaskdNdetaMC.cxx:434
 AliAnalysisTaskdNdetaMC.cxx:435
 AliAnalysisTaskdNdetaMC.cxx:436
 AliAnalysisTaskdNdetaMC.cxx:437
 AliAnalysisTaskdNdetaMC.cxx:438
 AliAnalysisTaskdNdetaMC.cxx:439
 AliAnalysisTaskdNdetaMC.cxx:440
 AliAnalysisTaskdNdetaMC.cxx:441
 AliAnalysisTaskdNdetaMC.cxx:442
 AliAnalysisTaskdNdetaMC.cxx:443
 AliAnalysisTaskdNdetaMC.cxx:444
 AliAnalysisTaskdNdetaMC.cxx:445
 AliAnalysisTaskdNdetaMC.cxx:446
 AliAnalysisTaskdNdetaMC.cxx:447
 AliAnalysisTaskdNdetaMC.cxx:448
 AliAnalysisTaskdNdetaMC.cxx:449
 AliAnalysisTaskdNdetaMC.cxx:450
 AliAnalysisTaskdNdetaMC.cxx:451
 AliAnalysisTaskdNdetaMC.cxx:452
 AliAnalysisTaskdNdetaMC.cxx:453
 AliAnalysisTaskdNdetaMC.cxx:454
 AliAnalysisTaskdNdetaMC.cxx:455
 AliAnalysisTaskdNdetaMC.cxx:456
 AliAnalysisTaskdNdetaMC.cxx:457
 AliAnalysisTaskdNdetaMC.cxx:458
 AliAnalysisTaskdNdetaMC.cxx:459
 AliAnalysisTaskdNdetaMC.cxx:460
 AliAnalysisTaskdNdetaMC.cxx:461
 AliAnalysisTaskdNdetaMC.cxx:462
 AliAnalysisTaskdNdetaMC.cxx:463
 AliAnalysisTaskdNdetaMC.cxx:464
 AliAnalysisTaskdNdetaMC.cxx:465
 AliAnalysisTaskdNdetaMC.cxx:466
 AliAnalysisTaskdNdetaMC.cxx:467
 AliAnalysisTaskdNdetaMC.cxx:468
 AliAnalysisTaskdNdetaMC.cxx:469
 AliAnalysisTaskdNdetaMC.cxx:470
 AliAnalysisTaskdNdetaMC.cxx:471
 AliAnalysisTaskdNdetaMC.cxx:472
 AliAnalysisTaskdNdetaMC.cxx:473
 AliAnalysisTaskdNdetaMC.cxx:474
 AliAnalysisTaskdNdetaMC.cxx:475
 AliAnalysisTaskdNdetaMC.cxx:476
 AliAnalysisTaskdNdetaMC.cxx:477
 AliAnalysisTaskdNdetaMC.cxx:478
 AliAnalysisTaskdNdetaMC.cxx:479
 AliAnalysisTaskdNdetaMC.cxx:480
 AliAnalysisTaskdNdetaMC.cxx:481
 AliAnalysisTaskdNdetaMC.cxx:482
 AliAnalysisTaskdNdetaMC.cxx:483
 AliAnalysisTaskdNdetaMC.cxx:484
 AliAnalysisTaskdNdetaMC.cxx:485
 AliAnalysisTaskdNdetaMC.cxx:486
 AliAnalysisTaskdNdetaMC.cxx:487
 AliAnalysisTaskdNdetaMC.cxx:488
 AliAnalysisTaskdNdetaMC.cxx:489
 AliAnalysisTaskdNdetaMC.cxx:490
 AliAnalysisTaskdNdetaMC.cxx:491
 AliAnalysisTaskdNdetaMC.cxx:492
 AliAnalysisTaskdNdetaMC.cxx:493
 AliAnalysisTaskdNdetaMC.cxx:494
 AliAnalysisTaskdNdetaMC.cxx:495
 AliAnalysisTaskdNdetaMC.cxx:496
 AliAnalysisTaskdNdetaMC.cxx:497
 AliAnalysisTaskdNdetaMC.cxx:498
 AliAnalysisTaskdNdetaMC.cxx:499
 AliAnalysisTaskdNdetaMC.cxx:500
 AliAnalysisTaskdNdetaMC.cxx:501
 AliAnalysisTaskdNdetaMC.cxx:502
 AliAnalysisTaskdNdetaMC.cxx:503
 AliAnalysisTaskdNdetaMC.cxx:504
 AliAnalysisTaskdNdetaMC.cxx:505
 AliAnalysisTaskdNdetaMC.cxx:506
 AliAnalysisTaskdNdetaMC.cxx:507
 AliAnalysisTaskdNdetaMC.cxx:508
 AliAnalysisTaskdNdetaMC.cxx:509
 AliAnalysisTaskdNdetaMC.cxx:510
 AliAnalysisTaskdNdetaMC.cxx:511
 AliAnalysisTaskdNdetaMC.cxx:512
 AliAnalysisTaskdNdetaMC.cxx:513
 AliAnalysisTaskdNdetaMC.cxx:514
 AliAnalysisTaskdNdetaMC.cxx:515
 AliAnalysisTaskdNdetaMC.cxx:516
 AliAnalysisTaskdNdetaMC.cxx:517
 AliAnalysisTaskdNdetaMC.cxx:518
 AliAnalysisTaskdNdetaMC.cxx:519
 AliAnalysisTaskdNdetaMC.cxx:520
 AliAnalysisTaskdNdetaMC.cxx:521
 AliAnalysisTaskdNdetaMC.cxx:522
 AliAnalysisTaskdNdetaMC.cxx:523
 AliAnalysisTaskdNdetaMC.cxx:524
 AliAnalysisTaskdNdetaMC.cxx:525
 AliAnalysisTaskdNdetaMC.cxx:526
 AliAnalysisTaskdNdetaMC.cxx:527
 AliAnalysisTaskdNdetaMC.cxx:528
 AliAnalysisTaskdNdetaMC.cxx:529
 AliAnalysisTaskdNdetaMC.cxx:530
 AliAnalysisTaskdNdetaMC.cxx:531
 AliAnalysisTaskdNdetaMC.cxx:532
 AliAnalysisTaskdNdetaMC.cxx:533
 AliAnalysisTaskdNdetaMC.cxx:534
 AliAnalysisTaskdNdetaMC.cxx:535
 AliAnalysisTaskdNdetaMC.cxx:536
 AliAnalysisTaskdNdetaMC.cxx:537
 AliAnalysisTaskdNdetaMC.cxx:538
 AliAnalysisTaskdNdetaMC.cxx:539
 AliAnalysisTaskdNdetaMC.cxx:540
 AliAnalysisTaskdNdetaMC.cxx:541
 AliAnalysisTaskdNdetaMC.cxx:542
 AliAnalysisTaskdNdetaMC.cxx:543
 AliAnalysisTaskdNdetaMC.cxx:544
 AliAnalysisTaskdNdetaMC.cxx:545
 AliAnalysisTaskdNdetaMC.cxx:546
 AliAnalysisTaskdNdetaMC.cxx:547
 AliAnalysisTaskdNdetaMC.cxx:548
 AliAnalysisTaskdNdetaMC.cxx:549
 AliAnalysisTaskdNdetaMC.cxx:550
 AliAnalysisTaskdNdetaMC.cxx:551
 AliAnalysisTaskdNdetaMC.cxx:552
 AliAnalysisTaskdNdetaMC.cxx:553
 AliAnalysisTaskdNdetaMC.cxx:554
 AliAnalysisTaskdNdetaMC.cxx:555
 AliAnalysisTaskdNdetaMC.cxx:556
 AliAnalysisTaskdNdetaMC.cxx:557
 AliAnalysisTaskdNdetaMC.cxx:558
 AliAnalysisTaskdNdetaMC.cxx:559
 AliAnalysisTaskdNdetaMC.cxx:560
 AliAnalysisTaskdNdetaMC.cxx:561
 AliAnalysisTaskdNdetaMC.cxx:562
 AliAnalysisTaskdNdetaMC.cxx:563
 AliAnalysisTaskdNdetaMC.cxx:564
 AliAnalysisTaskdNdetaMC.cxx:565
 AliAnalysisTaskdNdetaMC.cxx:566
 AliAnalysisTaskdNdetaMC.cxx:567
 AliAnalysisTaskdNdetaMC.cxx:568
 AliAnalysisTaskdNdetaMC.cxx:569
 AliAnalysisTaskdNdetaMC.cxx:570
 AliAnalysisTaskdNdetaMC.cxx:571
 AliAnalysisTaskdNdetaMC.cxx:572
 AliAnalysisTaskdNdetaMC.cxx:573
 AliAnalysisTaskdNdetaMC.cxx:574
 AliAnalysisTaskdNdetaMC.cxx:575
 AliAnalysisTaskdNdetaMC.cxx:576
 AliAnalysisTaskdNdetaMC.cxx:577
 AliAnalysisTaskdNdetaMC.cxx:578
 AliAnalysisTaskdNdetaMC.cxx:579
 AliAnalysisTaskdNdetaMC.cxx:580
 AliAnalysisTaskdNdetaMC.cxx:581
 AliAnalysisTaskdNdetaMC.cxx:582
 AliAnalysisTaskdNdetaMC.cxx:583
 AliAnalysisTaskdNdetaMC.cxx:584
 AliAnalysisTaskdNdetaMC.cxx:585
 AliAnalysisTaskdNdetaMC.cxx:586
 AliAnalysisTaskdNdetaMC.cxx:587
 AliAnalysisTaskdNdetaMC.cxx:588
 AliAnalysisTaskdNdetaMC.cxx:589
 AliAnalysisTaskdNdetaMC.cxx:590
 AliAnalysisTaskdNdetaMC.cxx:591
 AliAnalysisTaskdNdetaMC.cxx:592
 AliAnalysisTaskdNdetaMC.cxx:593
 AliAnalysisTaskdNdetaMC.cxx:594
 AliAnalysisTaskdNdetaMC.cxx:595
 AliAnalysisTaskdNdetaMC.cxx:596
 AliAnalysisTaskdNdetaMC.cxx:597
 AliAnalysisTaskdNdetaMC.cxx:598
 AliAnalysisTaskdNdetaMC.cxx:599
 AliAnalysisTaskdNdetaMC.cxx:600
 AliAnalysisTaskdNdetaMC.cxx:601
 AliAnalysisTaskdNdetaMC.cxx:602
 AliAnalysisTaskdNdetaMC.cxx:603
 AliAnalysisTaskdNdetaMC.cxx:604
 AliAnalysisTaskdNdetaMC.cxx:605
 AliAnalysisTaskdNdetaMC.cxx:606
 AliAnalysisTaskdNdetaMC.cxx:607
 AliAnalysisTaskdNdetaMC.cxx:608
 AliAnalysisTaskdNdetaMC.cxx:609
 AliAnalysisTaskdNdetaMC.cxx:610
 AliAnalysisTaskdNdetaMC.cxx:611
 AliAnalysisTaskdNdetaMC.cxx:612
 AliAnalysisTaskdNdetaMC.cxx:613
 AliAnalysisTaskdNdetaMC.cxx:614
 AliAnalysisTaskdNdetaMC.cxx:615
 AliAnalysisTaskdNdetaMC.cxx:616
 AliAnalysisTaskdNdetaMC.cxx:617
 AliAnalysisTaskdNdetaMC.cxx:618
 AliAnalysisTaskdNdetaMC.cxx:619
 AliAnalysisTaskdNdetaMC.cxx:620
 AliAnalysisTaskdNdetaMC.cxx:621
 AliAnalysisTaskdNdetaMC.cxx:622
 AliAnalysisTaskdNdetaMC.cxx:623
 AliAnalysisTaskdNdetaMC.cxx:624
 AliAnalysisTaskdNdetaMC.cxx:625
 AliAnalysisTaskdNdetaMC.cxx:626
 AliAnalysisTaskdNdetaMC.cxx:627
 AliAnalysisTaskdNdetaMC.cxx:628
 AliAnalysisTaskdNdetaMC.cxx:629
 AliAnalysisTaskdNdetaMC.cxx:630
 AliAnalysisTaskdNdetaMC.cxx:631
 AliAnalysisTaskdNdetaMC.cxx:632
 AliAnalysisTaskdNdetaMC.cxx:633
 AliAnalysisTaskdNdetaMC.cxx:634
 AliAnalysisTaskdNdetaMC.cxx:635
 AliAnalysisTaskdNdetaMC.cxx:636
 AliAnalysisTaskdNdetaMC.cxx:637
 AliAnalysisTaskdNdetaMC.cxx:638
 AliAnalysisTaskdNdetaMC.cxx:639
 AliAnalysisTaskdNdetaMC.cxx:640
 AliAnalysisTaskdNdetaMC.cxx:641
 AliAnalysisTaskdNdetaMC.cxx:642