2 //----------------------------------------------------------------
3 // Implementation of Class AliAnalysisTaskdNdetaMC
5 // Task used to analize simulations at generation level (i.e. only
6 // needs galice.root and Kinematics.root).
8 // The tasks produces multiplicity, eta and pt histograms for
9 // different event classes (listed in the enum in the header file).
10 // The multiplicity histogram are further produced for different eta
11 // ranges, defined in the constructor.
13 // Author: Michele Floris, CERN
15 //----------------------------------------------------------------
23 #include "AliAnalysisTask.h"
24 #include "AliAnalysisManager.h"
26 #include "AliVEvent.h"
27 #include "AliESDEvent.h"
28 #include "AliMCEvent.h"
29 #include "AliAODEvent.h"
31 #include "AliAnalysisTaskdNdetaMC.h"
32 #include "TGraphErrors.h"
35 #include "AliGenEventHeader.h"
36 #include "AliGenPythiaEventHeader.h"
40 #include "AliGenDPMjetEventHeader.h"
45 ClassImp(AliAnalysisTaskdNdetaMC)
47 Float_t AliAnalysisTaskdNdetaMC::fEtaMax = 0.5;
48 Int_t AliAnalysisTaskdNdetaMC::fPDGCodes[] = {211,2212,321,-11,-13,-211,-2212,-321,11,13,0} ; // 0 ==> all others
49 const char * AliAnalysisTaskdNdetaMC::fPartNames[] = {"PionPos", "ProtonPos", "KaonPos", "ePos", "muPos",
50 "PionNeg", "ProtonNeg", "KaonNeg", "eNeg", "muNeg",
54 AliAnalysisTaskdNdetaMC::AliAnalysisTaskdNdetaMC()
55 : AliAnalysisTaskSE(), fNchDens(0), fMyOut(0),
56 fHistIev(0), fHistNParticlesAtMidRapidity(0), fSkipNormalization(0), fHistSpecies(0)
59 // default constructor
60 for(Int_t ihist = 0; ihist < kNHist; ihist++){
63 for(Int_t ihist2 = 0; ihist2 < kNEtaHist; ihist2++){
64 fHistMult[ihist][ihist2] = 0;
66 for(Int_t ipart = 0; ipart < kNPart+1; ipart++){ // +1 => all others
67 fHistPtID[ihist][ipart] = 0;
74 fEtaBins[kEta05] = 0.5;
75 fEtaBins[kEta10] = 1.0;
76 fEtaBins[kEta14] = 1.3;
84 //________________________________________________________________________
85 AliAnalysisTaskdNdetaMC::AliAnalysisTaskdNdetaMC(const char *name)
86 : AliAnalysisTaskSE(name), fNchDens(0), fMyOut(0),
87 fHistIev(0), fHistNParticlesAtMidRapidity(0), fSkipNormalization(0), fHistSpecies(0)
91 for(Int_t ihist = 0; ihist < kNHist; ihist++){
94 for(Int_t ihist2 = 0; ihist2 < kNEtaHist; ihist2++){
95 fHistMult[ihist][ihist2] = 0;
97 for(Int_t ipart = 0; ipart < kNPart+1; ipart++){ // +1 ==> all others
98 fHistPtID[ihist][ipart] = 0;
101 fEtaBins[kEta05] = 0.5;
102 fEtaBins[kEta10] = 1.0;
103 fEtaBins[kEta14] = 1.3;
108 AliPDG::AddParticlesToPdgDataBase();
110 DefineOutput(1, TList::Class());
113 AliAnalysisTaskdNdetaMC::~AliAnalysisTaskdNdetaMC() {
118 // fMyOut owns the histos
126 AliAnalysisTaskdNdetaMC::AliAnalysisTaskdNdetaMC(const char *name, const char * fname)
127 : AliAnalysisTaskSE(name), fNchDens(0), fMyOut(0),
128 fHistIev(0), fHistNParticlesAtMidRapidity(0), fSkipNormalization(0), fHistSpecies(0)
130 // This constructor open list from a dndeta file (useful to finalize after merging)
131 for(Int_t ihist = 0; ihist < kNHist; ihist++){
134 for(Int_t ihist2 = 0; ihist2 < kNEtaHist; ihist2++){
135 fHistMult[ihist][ihist2] = 0;
137 for(Int_t ipart = 0; ipart < kNPart +1; ipart++){ // all others
138 fHistPtID[ihist][ipart] = 0;
141 fEtaBins[kEta05] = 0.5;
142 fEtaBins[kEta10] = 1.0;
143 fEtaBins[kEta14] = 1.3;
148 AliPDG::AddParticlesToPdgDataBase();
150 TFile * f =new TFile(fname);
151 if (!f) AliFatal(Form("Cannot open file %s!",fname));
152 fMyOut = (TList*) f->Get("coutput");
153 if (!fMyOut) AliFatal(Form("Cannot get output from file %s!",fname));
155 DefineOutput(1, TList::Class());
158 //________________________________________________________________________
159 void AliAnalysisTaskdNdetaMC::UserCreateOutputObjects()
164 fMyOut = new TList();
166 fHistEta[kHistINEL] = BookHetaHist("fHistdNdetaMCInel", "MC dN/deta distribution Inel");
167 fHistEta[kHistNSD] = BookHetaHist("fHistdNdetaMCNSD", "MC dN/deta distribution NSD");
168 fHistEta[kHistSiD] = BookHetaHist("fHistdNdetaMCSiD", "MC dN/deta distribution SiD");
169 fHistEta[kHistND] = BookHetaHist("fHistdNdetaMCND", "MC dN/deta distribution Non-Diffractive");
171 fHistEta[kHistHL] = BookHetaHist("fHistdNdetaMCHL", "MC dN/deta distribution, at least 1 particle |eta| < 1");
174 fHistPt[kHistINEL] = BookHptHist("fHistdNdptMCInel", "MC dN/dpt distribution Inel (|#eta| < 0.8)");
175 fHistPt[kHistNSD] = BookHptHist("fHistdNdptMCNSD", "MC dN/dpt distribution NSD (|#eta| < 0.8)");
176 fHistPt[kHistSiD] = BookHptHist("fHistdNdptMCSiD", "MC dN/dpt distribution SiD (|#eta| < 0.8)");
177 fHistPt[kHistND] = BookHptHist("fHistdNdptMCND", "MC dN/dpt distribution Non-Diffractive (|#eta| < 0.8)");
178 fHistPt[kHistHL] = BookHptHist("fHistdNdptMCHL", "MC dN/dpt distribution at least 1 particle |eta| < 1 (|#eta| < 0.8)");
181 const char * labelType[] = {"INEL", "NSD", "SiD", "ND", "HL"};
182 for(Int_t ihist = 0; ihist < kNHist; ihist++){ // type
183 for(Int_t ihist2 = 0; ihist2 < kNEtaHist; ihist2++) { // eta range
184 fHistMult[ihist][ihist2] = BookMultHisto(Form("fHistMult_%s_%1.1f",labelType[ihist],fEtaBins[ihist2]),
185 Form("(dN/dN_{ch})_{|#eta_{max}|<%1.1f} (%s)",fEtaBins[ihist2],labelType[ihist]));
188 for(Int_t ihist = 0; ihist < kNHist; ihist++){ // type
189 for(Int_t ipart = 0; ipart <= kNPart; ipart++){ // particle (<= for all others)
190 fHistPtID[ihist][ipart] = BookHptHist(Form("fHistPtID_%s_%s",labelType[ihist],fPartNames[ipart]),
191 Form("fHistPtID (%s), %s - |y| < 0.5",labelType[ihist],fPartNames[ipart]));
194 fHistSpecies = new TH1F ("fHistSpecies", "Species contributing to primaries (|#eta| < 0.8)", kNPart+1,-0.5, kNPart+0.5); // One bin for "others"
195 for(Int_t ibin = 1; ibin <= kNPart; ibin++){
196 fHistSpecies->GetXaxis()->SetBinLabel(ibin, fPartNames[ibin-1]);
198 fHistSpecies->GetXaxis()->SetBinLabel(kNPart+1, "Others");
199 fMyOut->Add(fHistSpecies);
203 fNchDens = new TGraphErrors();
204 fNchDens -> SetName ("fNchDens");
205 fNchDens -> SetTitle ("Charged tracks density at mid-rapidity (|#eta| < fEtaMax)");
206 fNchDens->SetMarkerStyle(kFullCircle);
207 fMyOut->Add(fNchDens);
209 fHistNParticlesAtMidRapidity = new TH1I("fHistNParticlesAtMidRapidity","Number of particles at midrapidity", kNHist, -0.5, kNHist-0.5);
210 fMyOut->Add(fHistNParticlesAtMidRapidity);
212 fHistIev = new TH1I("fHistIev","Number of particles at midrapidity", kNHist, -0.5, kNHist-0.5);
213 fMyOut->Add(fHistIev);
218 // Suppress annoying printout
219 AliLog::SetGlobalLogLevel(AliLog::kError);
223 TH1F* AliAnalysisTaskdNdetaMC::BookHetaHist(const char * name, const char * title) {
226 TH1F * h = new TH1F(name, title, 200, -10., 10.);
227 h->GetXaxis()->SetTitle("#eta");
228 h->GetYaxis()->SetTitle("dN/d#eta");
229 h->SetMarkerStyle(kFullCircle);
236 TH1F* AliAnalysisTaskdNdetaMC::BookHptHist(const char * name, const char * title) {
240 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};
243 TH1F * h = new TH1F(name, title, nbinsTempl, templBins);
244 h->GetXaxis()->SetTitle("p_{T}");
245 h->GetYaxis()->SetTitle("dN/dp_{T}");
246 h->SetMarkerStyle(kFullCircle);
253 TH1F* AliAnalysisTaskdNdetaMC::BookMultHisto(const char * name, const char * title) {
255 // Book multiplicity histos
257 TH1F * h = new TH1F(name, title, maxmult, -0.5, maxmult-0.5);
258 h->GetXaxis()->SetTitle("N_{ch}");
259 h->GetYaxis()->SetTitle("dN/dN_{ch}");
260 h->SetMarkerStyle(kFullCircle);
267 //________________________________________________________________________
268 void AliAnalysisTaskdNdetaMC::UserExec(Option_t *)
271 // Called for each event
273 // also a AliEvent...
274 // AliVEvent* mcEvent = MCEvent();
275 AliMCEvent* mcEvent = MCEvent();
276 AliGenPythiaEventHeader * headPy = 0;
277 AliGenDPMjetEventHeader * headPho = 0;
278 AliGenEventHeader * htmp = mcEvent->GenEventHeader();
280 AliError("Cannot Get MC Header!!");
283 if( TString(htmp->IsA()->GetName()) == "AliGenPythiaEventHeader") {
284 headPy = (AliGenPythiaEventHeader*) htmp;
285 } else if (TString(htmp->IsA()->GetName()) == "AliGenDPMjetEventHeader") {
286 headPho = (AliGenDPMjetEventHeader*) htmp;
288 cout << "Unknown header" << endl;
293 Printf("ERROR: Could not retrieve MC event");
297 // Printf("MC particles: %d", mcEvent->GetNumberOfTracks());
298 // Check if the evend is single diffractive
300 Bool_t isSD = kFALSE;
301 Bool_t isND = kFALSE;
303 // cout << "Process: " << headPy->ProcessType() << endl;
304 if(headPy->ProcessType() == 92 || headPy->ProcessType() == 93) {
305 isSD = kTRUE; // is single difractive
307 if(headPy->ProcessType() != 92 && headPy->ProcessType() != 93 && headPy->ProcessType() != 94) {
308 isND = kTRUE; // is non-diffractive
311 } else if (headPho) {
312 if(headPho->ProcessType() == 5 || headPho->ProcessType() == 6 ) {
315 if(headPho->ProcessType() != 5 && headPho->ProcessType() != 6 && headPho->ProcessType() != 7 ) {
320 // HL definition: is there at least one particle in |eta|<1?
321 Bool_t isThereOneCentralPart = kFALSE;
322 for (Int_t iTrack = 0; iTrack < mcEvent->GetNumberOfTracks(); iTrack++) {
323 AliMCParticle *track = (AliMCParticle*)mcEvent->GetTrack(iTrack);
325 Printf("ERROR: Could not receive track %d", iTrack);
328 Bool_t isPrimary = mcEvent->Stack()->IsPhysicalPrimary(iTrack);
329 if (isPrimary && track->Charge() != 0){
330 if (track->Eta() > -1 && track->Eta() < 1) {
331 isThereOneCentralPart = kTRUE;
339 fHistIev->Fill(kHistINEL);
340 if (!isSD) fHistIev->Fill(kHistNSD);
341 if (isSD) fHistIev->Fill(kHistSiD);
342 if (isND) fHistIev->Fill(kHistND);
343 if (isThereOneCentralPart) fHistIev->Fill(kHistHL);
344 if(!(Int_t(fHistIev->GetBinContent(fHistIev->FindBin(kHistINEL)))%500))
345 cout << "Event " << Int_t(fHistIev->GetBinContent(fHistIev->FindBin(kHistINEL))) << endl;
348 static const Float_t ymax =0.5;
350 Int_t multiplicity[kNHist][kNEtaHist] = {{0}};
351 for (Int_t iTrack = 0; iTrack < mcEvent->GetNumberOfTracks(); iTrack++) {
352 AliMCParticle *track = (AliMCParticle*)mcEvent->GetTrack(iTrack);
354 Printf("ERROR: Could not receive track %d", iTrack);
357 Bool_t isPrimary = mcEvent->Stack()->IsPhysicalPrimary(iTrack);
358 if (isPrimary && track->Charge() != 0){
359 Bool_t isEtaLess08 = (track->Eta() > -0.8 && track->Eta() < 0.8);
361 fHistEta[kHistINEL]->Fill(track->Eta());
362 if (isEtaLess08) fHistPt[kHistINEL] ->Fill(track->Pt());
363 if(track->Eta() > -fEtaMax && track->Eta() < fEtaMax) fHistNParticlesAtMidRapidity->Fill(kHistINEL);
365 Int_t particleID = kNPart;
366 for(Int_t ipart = 0; ipart < kNPart; ipart++){
367 if(track->PdgCode() == fPDGCodes[ipart]) particleID = ipart; // Found one otf the expected particles, will be used to fille species histos
368 if(track->Y() > -ymax && track->Y() < ymax && track->PdgCode() == fPDGCodes[ipart]) {
369 fHistPtID[kHistINEL][ipart]->Fill(track->Pt());
371 else if(track->Y() > -ymax && track->Y() < ymax) {
372 // cout << "Filling others " << track->Pt()<< endl;
373 fHistPtID[kHistINEL][kNPart]->Fill(track->Pt()); // all others
374 // fHistPtID[kHistINEL][kNPart]->Print();
379 fHistSpecies->Fill(particleID); //
380 if (particleID == kNPart) {
381 AliInfo(Form("Found other particle: [%d]", track->PdgCode()));
387 fHistEta[kHistNSD]->Fill(track->Eta());
388 if (isEtaLess08) fHistPt [kHistNSD]->Fill(track->Pt());
389 if(track->Eta() > -fEtaMax && track->Eta() < fEtaMax) fHistNParticlesAtMidRapidity->Fill(kHistNSD);
390 for(Int_t ipart = 0; ipart < kNPart; ipart++){
391 if(track->Y() > -ymax && track->Y() < ymax && track->PdgCode() == fPDGCodes[ipart]) fHistPtID[kHistNSD][ipart]->Fill(track->Pt());
392 // else fHistPtID[kHistINEL][kNPart]->Fill(track->Pt()); // all others
396 fHistEta[kHistSiD]->Fill(track->Eta());
397 if (isEtaLess08) fHistPt [kHistSiD]->Fill(track->Pt());
398 if(track->Eta() > -fEtaMax && track->Eta() < fEtaMax) fHistNParticlesAtMidRapidity->Fill(kHistSiD);
399 for(Int_t ipart = 0; ipart < kNPart; ipart++){
400 if(track->Y() > -ymax && track->Y() < ymax && track->PdgCode() == fPDGCodes[ipart]) fHistPtID[kHistSiD][ipart]->Fill(track->Pt());
401 // else fHistPtID[kHistINEL][kNPart]->Fill(track->Pt()); // all others
405 fHistEta[kHistND]->Fill(track->Eta());
406 if (isEtaLess08) fHistPt [kHistND]->Fill(track->Pt());
407 if(track->Eta() > -fEtaMax && track->Eta() < fEtaMax) fHistNParticlesAtMidRapidity->Fill(kHistND);
408 for(Int_t ipart = 0; ipart < kNPart; ipart++){
409 if(track->Y() > -ymax && track->Y() < ymax && track->PdgCode() == fPDGCodes[ipart]) fHistPtID[kHistND][ipart]->Fill(track->Pt());
410 // else fHistPtID[kHistINEL][kNPart]->Fill(track->Pt()); // all others
414 if (isThereOneCentralPart) {
415 fHistEta[kHistHL]->Fill(track->Eta());
416 if (isEtaLess08) fHistPt [kHistHL]->Fill(track->Pt());
417 if(track->Eta() > -fEtaMax && track->Eta() < fEtaMax) fHistNParticlesAtMidRapidity->Fill(kHistHL);
418 for(Int_t ipart = 0; ipart < kNPart; ipart++){
419 if(track->Y() > -ymax && track->Y() < ymax && track->PdgCode() == fPDGCodes[ipart]) fHistPtID[kHistHL][ipart]->Fill(track->Pt());
420 // else fHistPtID[kHistINEL][kNPart]->Fill(track->Pt()); // all others
425 // fill array of multiplicity for different classes of events
426 // and in different eta ranges
427 for(Int_t ihist = 0; ihist < kNEtaHist; ihist++){
428 if(track->Eta() > -fEtaBins[ihist] && track->Eta() < fEtaBins[ihist]) {
429 multiplicity[kHistINEL][ihist]++;
430 if(!isSD) multiplicity[kHistNSD][ihist]++;
431 if(isSD) multiplicity[kHistSiD][ihist]++;
432 if(isND) multiplicity[kHistND] [ihist]++;
433 if(isThereOneCentralPart) multiplicity[kHistHL] [ihist]++;
442 // Fill multiplicity histos
443 for(Int_t ihist = 0; ihist < kNEtaHist; ihist++){
444 fHistMult[kHistINEL][ihist] ->Fill(multiplicity[kHistINEL][ihist]);
445 if(!isSD) fHistMult[kHistNSD][ihist]->Fill(multiplicity[kHistNSD][ihist]);
446 if(isSD) fHistMult[kHistSiD][ihist]->Fill(multiplicity[kHistSiD][ihist]);
447 if(isND) fHistMult[kHistND] [ihist]->Fill(multiplicity[kHistND] [ihist]);
448 if(isThereOneCentralPart) fHistMult[kHistHL] [ihist]->Fill(multiplicity[kHistHL] [ihist]);
455 //________________________________________________________________________
456 void AliAnalysisTaskdNdetaMC::Terminate(Option_t *)
458 // Draw result to the screen
459 // Called once at the end of the query
461 // fHistPt = dynamic_cast<TH1F*> (GetOutputData(1));
462 fMyOut = dynamic_cast<TList*> (GetOutputData(1));
470 void AliAnalysisTaskdNdetaMC::Finalize() {
472 // Scale histos and computes dNdeta
474 fHistEta[kHistINEL] = (TH1F*) fMyOut->FindObject("fHistdNdetaMCInel");
475 fHistEta[kHistNSD] = (TH1F*) fMyOut->FindObject("fHistdNdetaMCNSD" );
476 fHistEta[kHistSiD] = (TH1F*) fMyOut->FindObject("fHistdNdetaMCSiD" );
477 fHistEta[kHistND] = (TH1F*) fMyOut->FindObject("fHistdNdetaMCND" );
478 fHistEta[kHistHL] = (TH1F*) fMyOut->FindObject("fHistdNdetaMCHL" );
479 fHistPt[kHistINEL] = (TH1F*) fMyOut->FindObject("fHistdNdptMCInel");
480 fHistPt[kHistNSD] = (TH1F*) fMyOut->FindObject("fHistdNdptMCNSD" );
481 fHistPt[kHistSiD] = (TH1F*) fMyOut->FindObject("fHistdNdptMCSiD" );
482 fHistPt[kHistND] = (TH1F*) fMyOut->FindObject("fHistdNdptMCND" );
483 fHistPt[kHistHL] = (TH1F*) fMyOut->FindObject("fHistdNdptMCHL" );
484 fNchDens = (TGraphErrors*) fMyOut->FindObject("fNchDens");
486 const char * labelType[] = {"INEL", "NSD", "SiD", "ND", "HL"};
487 for(Int_t ihist = 0; ihist < kNHist; ihist++){
488 for(Int_t ihist2 = 0; ihist2 < kNEtaHist; ihist2++){
489 fHistMult[ihist][ihist2] = (TH1F*) fMyOut->FindObject(Form("fHistMult_%s_%1.1f",labelType[ihist],fEtaBins[ihist2]));
490 if (!fHistMult[ihist][ihist2]) cout << "Cannot get histo " << Form("fHistMult_%s_%1.1f",labelType[ihist],fEtaBins[ihist2]) << endl;
492 for(Int_t ipart = 0; ipart <= kNPart; ipart++){ // <= , all others
493 fHistPtID[ihist][ipart] = (TH1F*) fMyOut->FindObject(Form("fHistPtID_%s_%s",labelType[ihist],fPartNames[ipart]));
494 if(!fHistPtID[ihist][ipart]) AliWarning(Form("Cannot get histo fHistPtID_%s_%s",labelType[ihist],fPartNames[ipart]));
498 fHistIev = (TH1I*) fMyOut->FindObject("fHistIev" );
499 fHistNParticlesAtMidRapidity = (TH1I*) fMyOut->FindObject("fHistNParticlesAtMidRapidity" );
504 cout << "Eta Max: " << fEtaMax << endl;
507 for(Int_t ihist = 0; ihist < kNHist; ihist++){
509 Int_t iev = (Int_t) fHistIev->GetBinContent(fHistIev->FindBin(ihist));
510 Int_t npm = (Int_t) fHistNParticlesAtMidRapidity->GetBinContent(fHistNParticlesAtMidRapidity->FindBin(ihist));
512 // Renormalize dNdeta to the number of events
513 // cout << fHistEta[ihist] << " " << iev << endl;
515 // compute density at midrapidity (Delta_y = 1);
516 Int_t firstbin = fHistEta[ihist]->FindBin(-fEtaMax);
517 Int_t lastbin = fHistEta[ihist]->FindBin(fEtaMax);
519 if (!fSkipNormalization) {
520 fHistEta[ihist]->Scale(1./iev, "width");
521 fHistPt[ihist] ->Scale(1./iev, "width");
522 for(Int_t ihist2 = 0; ihist2 < kNEtaHist; ihist2++){
523 fHistMult[ihist][ihist2]->Scale(1./iev);
525 for(Int_t ipart = 0; ipart <= kNPart; ipart++){
526 fHistPtID[ihist][ipart]->Scale(1./iev, "width");
532 Double_t meaneta = 0;
533 Double_t meanerr = 0;
534 Double_t sumweight = 0;
535 for(Int_t ibin = firstbin; ibin <=lastbin ; ibin++){
536 Double_t x = fHistEta[ihist]->GetBinContent(ibin);
537 Double_t xerr = fHistEta[ihist]->GetBinError(ibin);
540 Double_t xerr2 = xerr*xerr;
542 // cout << "xe2 " << xerr2 << endl;
543 Double_t weight = 1. / xerr2;
545 meaneta += weight * x;
551 meaneta /= sumweight;
552 meanerr = TMath::Sqrt(1./ sumweight);
560 Double_t range = 2*fEtaMax;
562 // meaneta /= fHistEta[ihist]->GetBinWidth(firstbin);
563 // meanerr /= fHistEta[ihist]->GetBinWidth(firstbin);
564 cout << "Histo: " << fHistEta[ihist]->GetName() << endl;
565 cout << " Evts: " << iev << endl;
567 cout << " Density at midrapidity: " << meaneta << "+-" << meanerr << endl;
569 // Direct computation
570 Double_t errdir = TMath::Sqrt(npm) / iev;
571 Double_t etadir = Double_t(npm) / iev;
573 cout << " Density at midrapidity: (dir) " << etadir/range << "+-" << errdir/range << endl;
575 fNchDens->SetPoint (ihist, ihist+1, etadir);
576 fNchDens->SetPointError(ihist, 0, errdir);
578 cout << " Density at midrapidity: (TH1, Eta<0.5) " << fHistMult[ihist][0]->GetMean() << "+-" << fHistMult[ihist][0]->GetMeanError() << endl;
583 TCanvas *c1 = new TCanvas("AliAnalysisTaskdNdetaMC","dNdetaMC",10,10,800,400);
584 // c1->cd(1)->SetLogy();
587 fHistEta[0]->DrawCopy("");
588 fHistEta[1]->SetLineColor(kRed);
589 fHistEta[1]->SetMarkerColor(kRed);
590 fHistEta[1]->SetMarkerStyle(kOpenSquare);
591 fHistEta[1]->DrawCopy("same");
593 fNchDens->Draw("AP");