3 #include "AlidNdEtaAnalysisMCSelector.h"
9 #include <TParticlePDG.h>
17 #include <AliGenEventHeader.h>
18 #include <AliHeader.h>
21 #include "dNdEta/dNdEtaAnalysis.h"
22 #include "AliPWG0Helper.h"
25 ClassImp(AlidNdEtaAnalysisMCSelector)
27 AlidNdEtaAnalysisMCSelector::AlidNdEtaAnalysisMCSelector() :
36 // Constructor. Initialization of pointers
40 AlidNdEtaAnalysisMCSelector::~AlidNdEtaAnalysisMCSelector()
47 void AlidNdEtaAnalysisMCSelector::SlaveBegin(TTree * tree)
49 // The SlaveBegin() function is called after the Begin() function.
50 // When running with PROOF SlaveBegin() is called on each slave server.
51 // The tree argument is deprecated (on PROOF 0 is passed).
53 AliSelectorRL::SlaveBegin(tree);
55 fdNdEtaAnalysis = new dNdEtaAnalysis("dndeta", "dndeta");
56 fVertex = new TH3F("vertex_check", "vertex_check", 50, -50, 50, 50, -50, 50, 50, -50, 50);
57 fPartEta = new TH1F("dndeta_check", "dndeta_check", 120, -6, 6);
58 fPartPt = new TH1F("dndeta_check_pt", "dndeta_check_pt", 1000, 0, 10);
62 void AlidNdEtaAnalysisMCSelector::Init(TTree *tree)
64 AliSelectorRL::Init(tree);
66 tree->SetBranchStatus("*", 0);
69 Bool_t AlidNdEtaAnalysisMCSelector::Process(Long64_t entry)
71 // fill the dNdEtaAnalysis class from the monte carlo
73 if (AliSelectorRL::Process(entry) == kFALSE)
76 AliStack* stack = GetStack();
79 AliDebug(AliLog::kError, "Stack not available");
83 AliHeader* header = GetHeader();
86 AliDebug(AliLog::kError, "Header not available");
91 AliGenEventHeader* genHeader = header->GenEventHeader();
94 genHeader->PrimaryVertex(vtxMC);
96 // loop over mc particles
97 Int_t nPrim = stack->GetNprimary();
99 for (Int_t iMc = 0; iMc < nPrim; ++iMc)
101 TParticle* particle = stack->Particle(iMc);
106 if (AliPWG0Helper::IsPrimaryCharged(particle, nPrim) == kFALSE)
109 AliDebug(AliLog::kDebug+1, Form("Accepted primary %d, unique ID: %d", iMc, particle->GetUniqueID()));
111 fdNdEtaAnalysis->FillTrack(vtxMC[2], particle->Eta(), particle->Pt(), 1);
112 fVertex->Fill(particle->Vx(), particle->Vy(), particle->Vz());
114 fPartEta->Fill(particle->Eta());
116 if (TMath::Abs(particle->Eta()) < 0.8)
117 fPartPt->Fill(particle->Pt());
119 fdNdEtaAnalysis->FillEvent(vtxMC[2], 1);
126 void AlidNdEtaAnalysisMCSelector::SlaveTerminate()
128 // The SlaveTerminate() function is called after all entries or objects
129 // have been processed. When running with PROOF SlaveTerminate() is called
130 // on each slave server.
132 AliSelectorRL::SlaveTerminate();
134 // Add the histograms to the output on each slave server
137 AliDebug(AliLog::kError, Form("ERROR: Output list not initialized."));
141 fOutput->Add(fdNdEtaAnalysis);
142 fOutput->Add(fPartPt);
145 void AlidNdEtaAnalysisMCSelector::Terminate()
149 AliSelectorRL::Terminate();
151 fdNdEtaAnalysis = dynamic_cast<dNdEtaAnalysis*> (fOutput->FindObject("dndeta"));
152 fPartPt = dynamic_cast<TH1F*> (fOutput->FindObject("dndeta_check_pt"));
154 if (!fdNdEtaAnalysis || !fPartPt)
156 AliDebug(AliLog::kError, Form("ERROR: Histograms not available %p %p", (void*) fdNdEtaAnalysis, (void*) fPartPt));
160 fdNdEtaAnalysis->Finish(0, -1);
162 TFile* fout = new TFile("analysis_mc.root","RECREATE");
164 fdNdEtaAnalysis->SaveHistograms();
171 fPartEta->Scale(1.0/fEvents);
172 fPartEta->Scale(1.0/fPartEta->GetBinWidth(1));
174 TCanvas* canvas = new TCanvas("control", "control", 900, 450);
175 canvas->Divide(2, 1);
186 fPartPt->Scale(1.0/fEvents);
187 fPartPt->Scale(1.0/fPartPt->GetBinWidth(1));
189 new TCanvas("control2", "control2", 500, 500);