]>
Commit | Line | Data |
---|---|---|
dc740de4 | 1 | /* $Id$ */ |
2 | ||
3 | #include "AlidNdEtaAnalysisESDSelector.h" | |
4 | ||
5 | #include <TStyle.h> | |
6 | #include <TSystem.h> | |
7 | #include <TCanvas.h> | |
8 | #include <TVector3.h> | |
7029240a | 9 | #include <TChain.h> |
16e24ca3 | 10 | #include <TFile.h> |
9e952c39 | 11 | #include <TH1F.h> |
dc740de4 | 12 | |
13 | #include <AliLog.h> | |
fcf2fb36 | 14 | #include <AliESDVertex.h> |
15 | #include <AliESD.h> | |
dc740de4 | 16 | |
17 | #include "esdTrackCuts/AliESDtrackCuts.h" | |
16e24ca3 | 18 | #include "dNdEta/dNdEtaAnalysis.h" |
45e97e28 | 19 | #include "AliPWG0Helper.h" |
dc740de4 | 20 | |
74fd10b3 | 21 | #include "AliGenEventHeader.h" |
22 | #include "AliHeader.h" | |
23 | #include "AliStack.h" | |
24 | #include "TParticle.h" | |
25 | ||
dc740de4 | 26 | ClassImp(AlidNdEtaAnalysisESDSelector) |
27 | ||
28 | AlidNdEtaAnalysisESDSelector::AlidNdEtaAnalysisESDSelector() : | |
93ec06b5 | 29 | AliSelector(), |
1afae8ff | 30 | fdNdEtaAnalysis(0), |
9e952c39 | 31 | fMult(0), |
74fd10b3 | 32 | fEsdTrackCuts(0) |
33 | { | |
dc740de4 | 34 | // |
35 | // Constructor. Initialization of pointers | |
36 | // | |
16e24ca3 | 37 | |
0ab29cfa | 38 | AliLog::SetClassDebugLevel("AlidNdEtaAnalysisESDSelector", AliLog::kDebug); |
dc740de4 | 39 | } |
40 | ||
41 | AlidNdEtaAnalysisESDSelector::~AlidNdEtaAnalysisESDSelector() | |
42 | { | |
43 | // | |
44 | // Destructor | |
45 | // | |
46 | ||
47 | // histograms are in the output list and deleted when the output | |
48 | // list is deleted by the TSelector dtor | |
49 | } | |
50 | ||
0ab29cfa | 51 | void AlidNdEtaAnalysisESDSelector::Begin(TTree* tree) |
dc740de4 | 52 | { |
0ab29cfa | 53 | // Begin function |
dc740de4 | 54 | |
0ab29cfa | 55 | ReadUserObjects(tree); |
56 | } | |
dc740de4 | 57 | |
0ab29cfa | 58 | void AlidNdEtaAnalysisESDSelector::ReadUserObjects(TTree* tree) |
59 | { | |
60 | // read the user objects, called from slavebegin and begin | |
dc740de4 | 61 | |
16e24ca3 | 62 | if (!fEsdTrackCuts && fInput) |
63 | fEsdTrackCuts = dynamic_cast<AliESDtrackCuts*> (fInput->FindObject("AliESDtrackCuts")); | |
64 | ||
1afae8ff | 65 | if (!fEsdTrackCuts && tree) |
66 | fEsdTrackCuts = dynamic_cast<AliESDtrackCuts*> (tree->GetUserInfo()->FindObject("AliESDtrackCuts")); | |
67 | ||
16e24ca3 | 68 | if (!fEsdTrackCuts) |
69 | AliDebug(AliLog::kError, "ERROR: Could not read EsdTrackCuts from input list."); | |
0ab29cfa | 70 | } |
1afae8ff | 71 | |
0ab29cfa | 72 | void AlidNdEtaAnalysisESDSelector::SlaveBegin(TTree* tree) |
73 | { | |
74 | // The SlaveBegin() function is called after the Begin() function. | |
75 | // When running with PROOF SlaveBegin() is called on each slave server. | |
76 | // The tree argument is deprecated (on PROOF 0 is passed). | |
77 | ||
93ec06b5 | 78 | AliSelector::SlaveBegin(tree); |
0ab29cfa | 79 | |
80 | ReadUserObjects(tree); | |
1afae8ff | 81 | |
16e24ca3 | 82 | fdNdEtaAnalysis = new dNdEtaAnalysis("dndeta", "dndeta"); |
9e952c39 | 83 | fMult = new TH1F("fMult", "fMult;Ntracks;Count", 201, -0.5, 200.5); |
16e24ca3 | 84 | } |
85 | ||
86 | void AlidNdEtaAnalysisESDSelector::Init(TTree* tree) | |
87 | { | |
88 | // read the user objects | |
89 | ||
93ec06b5 | 90 | AliSelector::Init(tree); |
5c495d37 | 91 | |
92 | // Enable only the needed branches | |
93 | if (tree) | |
94 | { | |
95 | tree->SetBranchStatus("*", 0); | |
96 | tree->SetBranchStatus("fTriggerMask", 1); | |
97 | tree->SetBranchStatus("fSPDVertex*", 1); | |
74fd10b3 | 98 | tree->SetBranchStatus("fTracks.fLabel", 1); |
5c495d37 | 99 | |
100 | AliESDtrackCuts::EnableNeededBranches(tree); | |
101 | } | |
dc740de4 | 102 | } |
103 | ||
104 | Bool_t AlidNdEtaAnalysisESDSelector::Process(Long64_t entry) | |
105 | { | |
74fd10b3 | 106 | // loop over all events |
dc740de4 | 107 | |
93ec06b5 | 108 | if (AliSelector::Process(entry) == kFALSE) |
dc740de4 | 109 | return kFALSE; |
110 | ||
111 | // Check prerequisites | |
112 | if (!fESD) | |
113 | { | |
114 | AliDebug(AliLog::kError, "ESD branch not available"); | |
115 | return kFALSE; | |
116 | } | |
117 | ||
118 | if (!fEsdTrackCuts) | |
119 | { | |
120 | AliDebug(AliLog::kError, "fESDTrackCuts not available"); | |
121 | return kFALSE; | |
122 | } | |
123 | ||
847489f7 | 124 | if (AliPWG0Helper::IsEventTriggered(fESD) == kFALSE) |
5c495d37 | 125 | { |
126 | AliDebug(AliLog::kDebug+1, Form("Skipping event %d because it was not triggered", (Int_t) entry)); | |
847489f7 | 127 | return kTRUE; |
5c495d37 | 128 | } |
847489f7 | 129 | |
45e97e28 | 130 | if (AliPWG0Helper::IsVertexReconstructed(fESD) == kFALSE) |
5c495d37 | 131 | { |
132 | AliDebug(AliLog::kDebug+1, Form("Skipping event %d because its vertex was not reconstructed", (Int_t) entry)); | |
dc740de4 | 133 | return kTRUE; |
5c495d37 | 134 | } |
dc740de4 | 135 | |
74fd10b3 | 136 | // get the ESD vertex |
45e97e28 | 137 | const AliESDVertex* vtxESD = fESD->GetVertex(); |
dc740de4 | 138 | Double_t vtx[3]; |
139 | vtxESD->GetXYZ(vtx); | |
140 | ||
45e97e28 | 141 | // get number of "good" tracks |
142 | TObjArray* list = fEsdTrackCuts->GetAcceptedTracks(fESD); | |
143 | Int_t nGoodTracks = list->GetEntries(); | |
144 | ||
dc740de4 | 145 | // loop over esd tracks |
45e97e28 | 146 | for (Int_t t=0; t<nGoodTracks; t++) |
dc740de4 | 147 | { |
45e97e28 | 148 | AliESDtrack* esdTrack = dynamic_cast<AliESDtrack*> (list->At(t)); |
dc740de4 | 149 | if (!esdTrack) |
150 | { | |
151 | AliDebug(AliLog::kError, Form("ERROR: Could not retrieve track %d.", t)); | |
152 | continue; | |
153 | } | |
154 | ||
dc740de4 | 155 | Double_t p[3]; |
38233af1 | 156 | esdTrack->GetConstrainedPxPyPz(p); // ### TODO should be okay because we have a vertex, however GetInnerPxPyPy / GetOuterPxPyPy also exist |
dc740de4 | 157 | TVector3 vector(p); |
158 | ||
159 | Float_t theta = vector.Theta(); | |
160 | Float_t eta = -TMath::Log(TMath::Tan(theta/2.)); | |
45e97e28 | 161 | Float_t pt = vector.Pt(); |
162 | ||
74fd10b3 | 163 | fdNdEtaAnalysis->FillTrack(vtx[2], eta, pt); |
dc740de4 | 164 | } // end of track loop |
165 | ||
45e97e28 | 166 | delete list; |
167 | list = 0; | |
168 | ||
dc740de4 | 169 | // for event count per vertex |
74fd10b3 | 170 | fdNdEtaAnalysis->FillEvent(vtx[2], nGoodTracks); |
9e952c39 | 171 | fMult->Fill(nGoodTracks); |
dc740de4 | 172 | |
173 | return kTRUE; | |
174 | } | |
175 | ||
16e24ca3 | 176 | void AlidNdEtaAnalysisESDSelector::SlaveTerminate() |
177 | { | |
178 | // The SlaveTerminate() function is called after all entries or objects | |
179 | // have been processed. When running with PROOF SlaveTerminate() is called | |
180 | // on each slave server. | |
181 | ||
93ec06b5 | 182 | AliSelector::SlaveTerminate(); |
16e24ca3 | 183 | |
184 | // Add the histograms to the output on each slave server | |
185 | if (!fOutput) | |
186 | { | |
187 | AliDebug(AliLog::kError, Form("ERROR: Output list not initialized.")); | |
188 | return; | |
189 | } | |
190 | ||
38233af1 | 191 | // Add the objects to the output list and set them to 0, so that the destructor does not delete them. |
192 | ||
16e24ca3 | 193 | fOutput->Add(fdNdEtaAnalysis); |
9e952c39 | 194 | fOutput->Add(fMult); |
195 | ||
38233af1 | 196 | fdNdEtaAnalysis = 0; |
16e24ca3 | 197 | } |
198 | ||
199 | void AlidNdEtaAnalysisESDSelector::Terminate() | |
dc740de4 | 200 | { |
16e24ca3 | 201 | // The Terminate() function is the last function to be called during |
202 | // a query. It always runs on the client, it can be used to present | |
203 | // the results graphically or save the results to file. | |
204 | ||
93ec06b5 | 205 | AliSelector::Terminate(); |
16e24ca3 | 206 | |
207 | fdNdEtaAnalysis = dynamic_cast<dNdEtaAnalysis*> (fOutput->FindObject("dndeta")); | |
9e952c39 | 208 | fMult = dynamic_cast<TH1F*> (fOutput->FindObject("fMult")); |
16e24ca3 | 209 | |
74fd10b3 | 210 | if (!fdNdEtaAnalysis) |
16e24ca3 | 211 | { |
74fd10b3 | 212 | AliDebug(AliLog::kError, "ERROR: Histograms not available"); |
16e24ca3 | 213 | return; |
214 | } | |
215 | ||
74fd10b3 | 216 | TFile* fout = new TFile("analysis_esd_raw.root", "RECREATE"); |
16e24ca3 | 217 | |
218 | if (fdNdEtaAnalysis) | |
219 | fdNdEtaAnalysis->SaveHistograms(); | |
dc740de4 | 220 | |
221 | if (fEsdTrackCuts) | |
222 | fEsdTrackCuts->SaveHistograms("esd_tracks_cuts"); | |
16e24ca3 | 223 | |
9e952c39 | 224 | if (fMult) |
225 | fMult->Write(); | |
226 | ||
16e24ca3 | 227 | fout->Write(); |
228 | fout->Close(); | |
dc740de4 | 229 | } |