3 #include "AlidNdEtaAnalysisMCSelector.h"
9 #include <TParticlePDG.h>
17 #include <AliGenEventHeader.h>
18 #include <AliHeader.h>
20 #include "dNdEta/dNdEtaAnalysis.h"
21 #include "AliPWG0Helper.h"
24 ClassImp(AlidNdEtaAnalysisMCSelector)
26 AlidNdEtaAnalysisMCSelector::AlidNdEtaAnalysisMCSelector() :
34 // Constructor. Initialization of pointers
38 AlidNdEtaAnalysisMCSelector::~AlidNdEtaAnalysisMCSelector()
45 void AlidNdEtaAnalysisMCSelector::SlaveBegin(TTree * tree)
47 // The SlaveBegin() function is called after the Begin() function.
48 // When running with PROOF SlaveBegin() is called on each slave server.
49 // The tree argument is deprecated (on PROOF 0 is passed).
51 AliSelectorRL::SlaveBegin(tree);
53 fdNdEtaAnalysis = new dNdEtaAnalysis("dndeta", "dndeta");
56 void AlidNdEtaAnalysisMCSelector::Init(TTree *tree)
58 AliSelectorRL::Init(tree);
60 tree->SetBranchStatus("ESD", 0);
62 fVertex = new TH3F("vertex_check", "vertex_check", 50, -50, 50, 50, -50, 50, 50, -50, 50);
63 fPartEta = new TH1F("dndeta_check", "dndeta_check", 120, -6, 6);
67 Bool_t AlidNdEtaAnalysisMCSelector::Process(Long64_t entry)
69 // fill the dNdEtaAnalysis class from the monte carlo
71 if (AliSelectorRL::Process(entry) == kFALSE)
74 TTree* particleTree = GetKinematics();
77 AliDebug(AliLog::kError, "Kinematics not available");
81 AliHeader* header = GetHeader();
84 AliDebug(AliLog::kError, "Header not available");
89 AliGenEventHeader* genHeader = header->GenEventHeader();
92 genHeader->PrimaryVertex(vtxMC);
94 particleTree->SetBranchStatus("*", 0);
95 particleTree->SetBranchStatus("fDaughter[2]", 1);
96 particleTree->SetBranchStatus("fPdgCode", 1);
97 particleTree->SetBranchStatus("fPx", 1);
98 particleTree->SetBranchStatus("fPy", 1);
99 particleTree->SetBranchStatus("fPz", 1);
100 particleTree->SetBranchStatus("fVx", 1);
101 particleTree->SetBranchStatus("fVy", 1);
102 particleTree->SetBranchStatus("fVz", 1);
104 TParticle* particle = 0;
105 particleTree->SetBranchAddress("Particles", &particle);
107 Int_t nPrim = header->GetNprimary();
108 Int_t nTotal = header->GetNtrack();
110 for (Int_t i_mc = nTotal - nPrim; i_mc < nTotal; ++i_mc)
112 particleTree->GetEntry(i_mc);
117 if (AliPWG0Helper::IsPrimaryCharged(particle, nPrim) == kFALSE)
120 AliDebug(AliLog::kDebug+1, Form("Accepted primary %d, unique ID: %d", i_mc, particle->GetUniqueID()));
122 fdNdEtaAnalysis->FillTrack(vtxMC[2], particle->Eta(), particle->Pt(), 1);
123 fVertex->Fill(particle->Vx(), particle->Vy(), particle->Vz());
125 fPartEta->Fill(particle->Eta());
127 fdNdEtaAnalysis->FillEvent(vtxMC[2], 1);
134 void AlidNdEtaAnalysisMCSelector::SlaveTerminate()
136 // The SlaveTerminate() function is called after all entries or objects
137 // have been processed. When running with PROOF SlaveTerminate() is called
138 // on each slave server.
140 AliSelectorRL::SlaveTerminate();
142 // Add the histograms to the output on each slave server
145 AliDebug(AliLog::kError, Form("ERROR: Output list not initialized."));
149 fOutput->Add(fdNdEtaAnalysis);
152 void AlidNdEtaAnalysisMCSelector::Terminate()
156 AliSelectorRL::Terminate();
158 fdNdEtaAnalysis = dynamic_cast<dNdEtaAnalysis*> (fOutput->FindObject("dndeta"));
160 if (!fdNdEtaAnalysis)
162 AliDebug(AliLog::kError, Form("ERROR: Histograms not available %p", (void*) fdNdEtaAnalysis));
166 TFile* fout = new TFile("analysis_mc.root","RECREATE");
168 fdNdEtaAnalysis->SaveHistograms();
173 fPartEta->Scale(1.0/fEvents);
174 fPartEta->Scale(1.0/fPartEta->GetBinWidth(1));
176 TCanvas* canvas = new TCanvas("control", "control", 900, 450);
177 canvas->Divide(2, 1);