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() :
35 // Constructor. Initialization of pointers
39 AlidNdEtaAnalysisMCSelector::~AlidNdEtaAnalysisMCSelector()
46 void AlidNdEtaAnalysisMCSelector::SlaveBegin(TTree * tree)
48 // The SlaveBegin() function is called after the Begin() function.
49 // When running with PROOF SlaveBegin() is called on each slave server.
50 // The tree argument is deprecated (on PROOF 0 is passed).
52 AliSelectorRL::SlaveBegin(tree);
54 fdNdEtaAnalysis = new dNdEtaAnalysis("dndeta", "dndeta");
55 fVertex = new TH3F("vertex_check", "vertex_check", 50, -50, 50, 50, -50, 50, 50, -50, 50);
56 fPartEta = new TH1F("dndeta_check", "dndeta_check", 120, -6, 6);
60 void AlidNdEtaAnalysisMCSelector::Init(TTree *tree)
62 AliSelectorRL::Init(tree);
64 tree->SetBranchStatus("ESD", 0);
67 Bool_t AlidNdEtaAnalysisMCSelector::Process(Long64_t entry)
69 // fill the dNdEtaAnalysis class from the monte carlo
71 if (AliSelectorRL::Process(entry) == kFALSE)
74 AliStack* stack = GetStack();
77 AliDebug(AliLog::kError, "Stack not available");
81 AliHeader* header = GetHeader();
84 AliDebug(AliLog::kError, "Header not available");
89 AliGenEventHeader* genHeader = header->GenEventHeader();
92 genHeader->PrimaryVertex(vtxMC);
94 // loop over mc particles
95 Int_t nPrim = stack->GetNprimary();
97 for (Int_t iMc = 0; iMc < nPrim; ++iMc)
99 TParticle* particle = stack->Particle(iMc);
104 if (AliPWG0Helper::IsPrimaryCharged(particle, nPrim) == kFALSE)
107 AliDebug(AliLog::kDebug+1, Form("Accepted primary %d, unique ID: %d", iMc, particle->GetUniqueID()));
109 fdNdEtaAnalysis->FillTrack(vtxMC[2], particle->Eta(), particle->Pt(), 1);
110 fVertex->Fill(particle->Vx(), particle->Vy(), particle->Vz());
112 fPartEta->Fill(particle->Eta());
114 fdNdEtaAnalysis->FillEvent(vtxMC[2], 1);
121 void AlidNdEtaAnalysisMCSelector::SlaveTerminate()
123 // The SlaveTerminate() function is called after all entries or objects
124 // have been processed. When running with PROOF SlaveTerminate() is called
125 // on each slave server.
127 AliSelectorRL::SlaveTerminate();
129 // Add the histograms to the output on each slave server
132 AliDebug(AliLog::kError, Form("ERROR: Output list not initialized."));
136 fOutput->Add(fdNdEtaAnalysis);
139 void AlidNdEtaAnalysisMCSelector::Terminate()
143 AliSelectorRL::Terminate();
145 fdNdEtaAnalysis = dynamic_cast<dNdEtaAnalysis*> (fOutput->FindObject("dndeta"));
147 if (!fdNdEtaAnalysis)
149 AliDebug(AliLog::kError, Form("ERROR: Histograms not available %p", (void*) fdNdEtaAnalysis));
153 fdNdEtaAnalysis->Finish(0, -1);
155 TFile* fout = new TFile("analysis_mc.root","RECREATE");
157 fdNdEtaAnalysis->SaveHistograms();
164 fPartEta->Scale(1.0/fEvents);
165 fPartEta->Scale(1.0/fPartEta->GetBinWidth(1));
167 TCanvas* canvas = new TCanvas("control", "control", 900, 450);
168 canvas->Divide(2, 1);