1 //_________________________________________________________________________
2 // Utility Class for transverse energy studies
3 // Base class for ESD & MC analysis
4 // - reconstruction and MonteCarlo output
7 //*-- Authors: Oystein Djuvsland (Bergen), David Silvermyr (ORNL)
8 //_________________________________________________________________________
10 #include "AliAnalysisEt.h"
16 #include "AliAnalysisEtCuts.h"
17 #include "AliVEvent.h"
18 #include "TDatabasePDG.h"
22 ClassImp(AliAnalysisEt);
25 AliAnalysisEt::AliAnalysisEt() :
26 fHistogramNameSuffix("")
61 ,fChargedMultiplicity(0)
62 ,fNeutralMultiplicity(0)
68 ,fSingleCellEnergyCut(0)
84 ,fHistAntiBaryonEtAcc(0)
90 AliAnalysisEt::~AliAnalysisEt()
95 void AliAnalysisEt::FillOutputList(TList *list)
96 { // histograms to be added to output
98 list->Add(fHistChargedEt);
99 list->Add(fHistNeutralEt);
101 list->Add(fHistEtAcc);
102 list->Add(fHistChargedEtAcc);
103 list->Add(fHistNeutralEtAcc);
105 list->Add(fHistMult);
106 list->Add(fHistChargedMult);
107 list->Add(fHistNeutralMult);
109 list->Add(fHistPhivsPtPos);
110 list->Add(fHistPhivsPtNeg);
112 list->Add(fHistBaryonEt);
113 list->Add(fHistAntiBaryonEt);
114 list->Add(fHistMesonEt);
116 list->Add(fHistBaryonEtAcc);
117 list->Add(fHistAntiBaryonEtAcc);
118 list->Add(fHistMesonEtAcc);
120 list->Add(fHistTMDeltaR);
123 void AliAnalysisEt::Init()
124 {// clear variables, set up cuts and PDG info
128 void AliAnalysisEt::CreateHistograms()
129 { // create histograms..
130 // histogram binning for E_T, p_T and Multiplicity: defaults for p+p
131 Int_t nbinsEt = 1000;
132 Double_t minEt = 0.0001;
133 Double_t maxEt = 100;
137 Int_t nbinsMult = 200;
138 Double_t minMult = -0.5; // offset -0.5 to have integer bins centered around 0
139 Double_t maxMult = nbinsMult + minMult; // 1 bin per integer value
141 TString histname = "fHistEt" + fHistogramNameSuffix;
142 fHistEt = new TH1F(histname.Data(), "Total E_{T} Distribution", nbinsEt, minEt, maxEt);
143 fHistEt->GetXaxis()->SetTitle("E_{T} (GeV/c^{2})");
144 fHistEt->GetYaxis()->SetTitle("dN/dE_{T} (c^{2}/GeV)");
146 histname = "fHistChargedEt" + fHistogramNameSuffix;
147 fHistChargedEt = new TH1F(histname.Data(), "Total Charged E_{T} Distribution", nbinsEt, minEt, maxEt);
148 fHistChargedEt->GetXaxis()->SetTitle("E_{T} (GeV/c^{2})");
149 fHistChargedEt->GetYaxis()->SetTitle("dN/dE_{T} (c^{2}/GeV)");
151 histname = "fHistNeutralEt" + fHistogramNameSuffix;
152 fHistNeutralEt = new TH1F(histname.Data(), "Total Neutral E_{T} Distribution", nbinsEt, minEt, maxEt);
153 fHistNeutralEt->GetXaxis()->SetTitle("E_{T} (GeV/c^{2})");
154 fHistNeutralEt->GetYaxis()->SetTitle("dN/dE_{T} (c^{2}/GeV)");
156 histname = "fHistEtAcc" + fHistogramNameSuffix;
157 fHistEtAcc = new TH1F(histname.Data(), "Total E_{T} Distribution in Acceptance", nbinsEt, minEt, maxEt);
158 fHistEtAcc->GetXaxis()->SetTitle("E_{T} (GeV/c^{2})");
159 fHistEtAcc->GetYaxis()->SetTitle("dN/dE_{T} (c^{2}/GeV)");
161 histname = "fHistChargedEtAcc" + fHistogramNameSuffix;
162 fHistChargedEtAcc = new TH1F(histname.Data(), "Total Charged E_{T} Distribution in Acceptance", nbinsEt, minEt, maxEt);
163 fHistChargedEtAcc->GetXaxis()->SetTitle("E_{T} (GeV/c^{2})");
164 fHistChargedEtAcc->GetYaxis()->SetTitle("dN/dE_{T} (c^{2}/GeV)");
166 histname = "fHistNeutralEtAcc" + fHistogramNameSuffix;
167 fHistNeutralEtAcc = new TH1F(histname.Data(), "Total Neutral E_{T} Distribution in Acceptance", nbinsEt, minEt, maxEt);
168 fHistNeutralEtAcc->GetXaxis()->SetTitle("E_{T} (GeV/c^{2})");
169 fHistNeutralEtAcc->GetYaxis()->SetTitle("dN/dE_{T} (c^{2}/GeV)");
170 std::cout << histname << std::endl;
171 histname = "fHistMult" + fHistogramNameSuffix;
172 fHistMult = new TH1F(histname.Data(), "Total Multiplicity", nbinsMult, minMult, maxMult);
173 fHistMult->GetXaxis()->SetTitle("N");
174 fHistMult->GetYaxis()->SetTitle("Multiplicity");
176 histname = "fHistChargedMult" + fHistogramNameSuffix;
177 fHistChargedMult = new TH1F(histname.Data(), "Charged Multiplicity", nbinsMult, minMult, maxMult);
178 fHistChargedMult->GetXaxis()->SetTitle("N");
179 fHistChargedMult->GetYaxis()->SetTitle("Multiplicity");
181 histname = "fHistNeutralMult" + fHistogramNameSuffix;
182 fHistNeutralMult = new TH1F(histname.Data(), "Neutral Multiplicity", nbinsMult, minMult, maxMult);
183 fHistNeutralMult->GetXaxis()->SetTitle("N");
184 fHistNeutralMult->GetYaxis()->SetTitle("Multiplicity");
186 histname = "fHistPhivsPtPos" + fHistogramNameSuffix;
187 fHistPhivsPtPos = new TH2F(histname.Data(), "Phi vs pT of positively charged tracks hitting the calorimeter", 200, 0, 2*TMath::Pi(), nbinsPt, minPt, maxPt);
189 histname = "fHistPhivsPtNeg" + fHistogramNameSuffix;
190 fHistPhivsPtNeg = new TH2F(histname.Data(), "Phi vs pT of negatively charged tracks hitting the calorimeter", 200, 0, 2*TMath::Pi(), nbinsPt, minPt, maxPt);
192 histname = "fHistBaryonEt" + fHistogramNameSuffix;
193 fHistBaryonEt = new TH1F(histname.Data(), "E_{T} for baryons", nbinsEt, minEt, maxEt);
195 histname = "fHistAntiBaryonEt" + fHistogramNameSuffix;
196 fHistAntiBaryonEt = new TH1F(histname.Data(), "E_{T} for anti baryons", nbinsEt, minEt, maxEt);
198 histname = "fHistMesonEt" + fHistogramNameSuffix;
199 fHistMesonEt = new TH1F(histname.Data(), "E_{T} for mesons", nbinsEt, minEt, maxEt);
201 histname = "fHistBaryonEtAcc" + fHistogramNameSuffix;
202 fHistBaryonEtAcc = new TH1F(histname.Data(), "E_{T} for baryons in calorimeter acceptance", nbinsEt, minEt, maxEt);
204 histname = "fHistAntiBaryonEtAcc" + fHistogramNameSuffix;
205 fHistAntiBaryonEtAcc = new TH1F(histname.Data(), "E_{T} for anti baryons in calorimeter acceptance", nbinsEt, minEt, maxEt);
207 histname = "fHistMesonEtAcc" + fHistogramNameSuffix;
208 fHistMesonEtAcc = new TH1F(histname.Data(), "E_{T} for mesons in calorimeter acceptance", nbinsEt, minEt, maxEt);
211 histname = "fHistTMDeltaR" + fHistogramNameSuffix;
212 fHistTMDeltaR = new TH1F(histname.Data(), "#Delta R for calorimeter clusters", 200, 0, 50);
216 void AliAnalysisEt::FillHistograms()
217 { // fill histograms..
218 fHistEt->Fill(fTotEt);
219 fHistChargedEt->Fill(fTotChargedEt);
220 fHistNeutralEt->Fill(fTotNeutralEt);
222 fHistEtAcc->Fill(fTotEtAcc);
223 fHistChargedEtAcc->Fill(fTotChargedEtAcc);
224 fHistNeutralEtAcc->Fill(fTotNeutralEtAcc);
226 fHistMult->Fill(fMultiplicity);
227 fHistChargedMult->Fill(fChargedMultiplicity);
228 fHistNeutralMult->Fill(fNeutralMultiplicity);
230 /* // DS commented out non-fills to prevent compilation warnings
239 fHistAntiBaryonEtAcc;
246 Int_t AliAnalysisEt::AnalyseEvent(AliVEvent *event)
247 { //this line is basically here to eliminate a compiler warning that event is not used. Making it a virtual function did not work with the plugin.
248 cout << "This event has " << event->GetNumberOfTracks() << " tracks" << endl;
253 void AliAnalysisEt::ResetEventValues()
258 fTotNeutralEtAcc = 0;
260 fTotChargedEtAcc = 0;
262 fChargedMultiplicity = 0;
263 fNeutralMultiplicity = 0;
265 if (!fCuts || !fPdgDB || fPiPlusCode==0) { // some Init's needed
266 cout << __FILE__ << ":" << __LINE__ << " : Init " << endl;
268 cout << " setting up Cuts " << endl;
269 fCuts = new AliAnalysisEtCuts();
272 cout << " setting up PdgDB " << endl;
273 fPdgDB = new TDatabasePDG();
276 if (fPiPlusCode==0) {
284 void AliAnalysisEt::SetParticleCodes()
286 fPionMass = fPdgDB->GetParticle("pi+")->Mass();
287 fPiPlusCode = fPdgDB->GetParticle("pi+")->PdgCode();
288 fPiMinusCode = fPdgDB->GetParticle("pi-")->PdgCode();
289 fKPlusCode = fPdgDB->GetParticle("K+")->PdgCode();
290 fKMinusCode = fPdgDB->GetParticle("K-")->PdgCode();
291 fProtonCode = fPdgDB->GetParticle("proton")->PdgCode();
292 fAntiProtonCode = fPdgDB->GetParticle("antiproton")->PdgCode();
293 fLambdaCode = fPdgDB->GetParticle("Lambda0")->PdgCode();
294 fAntiLambdaCode = fPdgDB->GetParticle("Lambda0_bar")->PdgCode();
295 fK0SCode = fPdgDB->GetParticle("K_S0")->PdgCode();
296 fOmegaCode = fPdgDB->GetParticle("Omega-")->PdgCode();
297 fAntiOmegaCode = fPdgDB->GetParticle("Omega+")->PdgCode();
298 fXi0Code = fPdgDB->GetParticle("Xi0")->PdgCode();
299 fAntiXi0Code = fPdgDB->GetParticle("Xi0_bar")->PdgCode();
300 fXiCode = fPdgDB->GetParticle("Xi-")->PdgCode();
301 fAntiXiCode = fPdgDB->GetParticle("Xi-_bar")->PdgCode();
302 fSigmaCode = fPdgDB->GetParticle("Sigma-")->PdgCode();
303 fAntiSigmaCode = fPdgDB->GetParticle("Sigma+")->PdgCode();
304 fK0LCode = fPdgDB->GetParticle("K_L0")->PdgCode();
305 fNeutronCode = fPdgDB->GetParticle("neutron")->PdgCode();
306 fAntiNeutronCode = fPdgDB->GetParticle("antineutron")->PdgCode();
307 fEPlusCode = fPdgDB->GetParticle("e+")->PdgCode();
308 fEMinusCode = fPdgDB->GetParticle("e-")->PdgCode();
309 cout << "Resetting Codes: Pion " << fPiPlusCode
310 << "," << fPiMinusCode
311 << " Kaon " << fKPlusCode
312 << "," << fKMinusCode << endl;