+//_________________________________________________________________________
+// Utility Class for transverse energy studies
+// Base class for ESD & MC analysis
+// - reconstruction and MonteCarlo output
+// implementation file
+//
+//*-- Authors: Oystein Djuvsland (Bergen), David Silvermyr (ORNL)
+//_________________________________________________________________________
+
#include "AliAnalysisEt.h"
#include "TMath.h"
#include "TList.h"
#include <iostream>
#include "AliAnalysisEtCuts.h"
#include "AliVEvent.h"
+#include "TDatabasePDG.h"
+#include "Rtypes.h"
using namespace std;
ClassImp(AliAnalysisEt);
AliAnalysisEt::AliAnalysisEt() :
fHistogramNameSuffix("")
+ ,fCuts(0)
,fPdgDB(0)
- ,PiPlusCode(0)
- ,PiMinusCode(0)
- ,KPlusCode(0)
- ,KMinusCode(0)
- ,ProtonCode(0)
- ,AntiProtonCode(0)
- ,LambdaCode(0)
- ,AntiLambdaCode(0)
- ,K0SCode(0)
- ,OmegaCode(0)
- ,AntiOmegaCode(0)
- ,Xi0Code(0)
- ,AntiXi0Code(0)
- ,XiCode(0)
- ,AntiXiCode(0)
- ,SigmaCode(0)
- ,AntiSigmaCode(0)
- ,K0LCode(0)
- ,NeutronCode(0)
- ,AntiNeutronCode(0)
- ,EPlusCode(0)
- ,EMinusCode(0)
- ,PionMass(0)
+ ,fPiPlusCode(0)
+ ,fPiMinusCode(0)
+ ,fKPlusCode(0)
+ ,fKMinusCode(0)
+ ,fProtonCode(0)
+ ,fAntiProtonCode(0)
+ ,fLambdaCode(0)
+ ,fAntiLambdaCode(0)
+ ,fK0SCode(0)
+ ,fOmegaCode(0)
+ ,fAntiOmegaCode(0)
+ ,fXi0Code(0)
+ ,fAntiXi0Code(0)
+ ,fXiCode(0)
+ ,fAntiXiCode(0)
+ ,fSigmaCode(0)
+ ,fAntiSigmaCode(0)
+ ,fK0LCode(0)
+ ,fNeutronCode(0)
+ ,fAntiNeutronCode(0)
+ ,fEPlusCode(0)
+ ,fEMinusCode(0)
+ ,fPionMass(0)
,fSumEt(0)
,fSumEtAcc(0)
,fTotEt(0)
,fMultiplicity(0)
,fChargedMultiplicity(0)
,fNeutralMultiplicity(0)
- ,fEtaCut(EtCommonCuts::kEtaCut)
- ,fEtaCutAcc(0)
- ,fPhiCutAccMin(0)
- ,fPhiCutAccMax(360.)
- ,fDetectorRadius(460.)
- ,fVertexXCut(0)
- ,fVertexYCut(0)
- ,fVertexZCut(0)
- ,fIPxyCut(0)
- ,fIPzCut(0)
- ,fClusterEnergyCut(EtCommonCuts::kClusterEnergyCut)
- ,fTrackPtCut(EtCommonCuts::kTrackPtCut)
- ,fSingleCellEnergyCut(0)
+ ,fBaryonEt(0)
+ ,fAntiBaryonEt(0)
+ ,fMesonEt(0)
+ ,fBaryonEtAcc(0)
+ ,fAntiBaryonEtAcc(0)
+ ,fMesonEtAcc(0)
+ ,fProtonEt(0)
+ ,fChargedKaonEt(0)
+ ,fMuonEt(0)
+ ,fElectronEt(0)
+ ,fProtonEtAcc(0)
+ ,fChargedKaonEtAcc(0)
+ ,fMuonEtAcc(0)
+ ,fElectronEtAcc(0)
+ ,fEtaCut(0)
+ ,fEtaCutAcc(0)
+ ,fPhiCutAccMin(0)
+ ,fPhiCutAccMax(0)
+ ,fDetectorRadius(0)
+ ,fClusterEnergyCut(0)
+ ,fSingleCellEnergyCut(0)
,fHistEt(0)
,fHistChargedEt(0)
,fHistNeutralEt(0)
,fHistBaryonEtAcc(0)
,fHistAntiBaryonEtAcc(0)
,fHistMesonEtAcc(0)
+ ,fHistProtonEt(0)
+ ,fHistChargedKaonEt(0)
+ ,fHistMuonEt(0)
+ ,fHistElectronEt(0)
+ ,fHistProtonEtAcc(0)
+ ,fHistChargedKaonEtAcc(0)
+ ,fHistMuonEtAcc(0)
+ ,fHistElectronEtAcc(0)
,fHistEtRecvsEtMC(0)
,fHistTMDeltaR(0)
{
-
}
AliAnalysisEt::~AliAnalysisEt()
}
void AliAnalysisEt::FillOutputList(TList *list)
-{
+{ // histograms to be added to output
list->Add(fHistEt);
list->Add(fHistChargedEt);
list->Add(fHistNeutralEt);
list->Add(fHistAntiBaryonEtAcc);
list->Add(fHistMesonEtAcc);
+ list->Add(fHistProtonEtAcc);
+ list->Add(fHistChargedKaonEtAcc);
+ list->Add(fHistMuonEtAcc);
+ list->Add(fHistElectronEtAcc);
+
list->Add(fHistEtRecvsEtMC);
list->Add(fHistTMDeltaR);
}
void AliAnalysisEt::Init()
-{
-
- if(!fPdgDB) fPdgDB = new TDatabasePDG();
- SetParticleCodes();
+{// clear variables, set up cuts and PDG info
+ ResetEventValues();
}
void AliAnalysisEt::CreateHistograms()
-{
+{ // create histograms..
+ // histogram binning for E_T, p_T and Multiplicity: defaults for p+p
+ Int_t nbinsEt = 1000;
+ Double_t minEt = 0.0001;
+ Double_t maxEt = 100;
+ Int_t nbinsPt = 200;
+ Double_t minPt = 0;
+ Double_t maxPt = 20;
+ Int_t nbinsMult = 200;
+ Double_t minMult = -0.5; // offset -0.5 to have integer bins centered around 0
+ Double_t maxMult = nbinsMult + minMult; // 1 bin per integer value
TString histname = "fHistEt" + fHistogramNameSuffix;
-
- fHistEt = new TH1F(histname.Data(), "Total E_{T} Distribution", 1000, 0.00, 99);
+ fHistEt = new TH1F(histname.Data(), "Total E_{T} Distribution", nbinsEt, minEt, maxEt);
fHistEt->GetXaxis()->SetTitle("E_{T} (GeV/c^{2})");
fHistEt->GetYaxis()->SetTitle("dN/dE_{T} (c^{2}/GeV)");
histname = "fHistChargedEt" + fHistogramNameSuffix;
- fHistChargedEt = new TH1F(histname.Data(), "Total Charged E_{T} Distribution", 1000, 0.00, 99);
+ fHistChargedEt = new TH1F(histname.Data(), "Total Charged E_{T} Distribution", nbinsEt, minEt, maxEt);
fHistChargedEt->GetXaxis()->SetTitle("E_{T} (GeV/c^{2})");
fHistChargedEt->GetYaxis()->SetTitle("dN/dE_{T} (c^{2}/GeV)");
histname = "fHistNeutralEt" + fHistogramNameSuffix;
- fHistNeutralEt = new TH1F(histname.Data(), "Total Neutral E_{T} Distribution", 1000, 0.00, 99);
+ fHistNeutralEt = new TH1F(histname.Data(), "Total Neutral E_{T} Distribution", nbinsEt, minEt, maxEt);
fHistNeutralEt->GetXaxis()->SetTitle("E_{T} (GeV/c^{2})");
fHistNeutralEt->GetYaxis()->SetTitle("dN/dE_{T} (c^{2}/GeV)");
histname = "fHistEtAcc" + fHistogramNameSuffix;
- fHistEtAcc = new TH1F(histname.Data(), "Total E_{T} Distribution in Acceptance", 1000, 0.00, 99);
+ fHistEtAcc = new TH1F(histname.Data(), "Total E_{T} Distribution in Acceptance", nbinsEt, minEt, maxEt);
fHistEtAcc->GetXaxis()->SetTitle("E_{T} (GeV/c^{2})");
fHistEtAcc->GetYaxis()->SetTitle("dN/dE_{T} (c^{2}/GeV)");
histname = "fHistChargedEtAcc" + fHistogramNameSuffix;
- fHistChargedEtAcc = new TH1F(histname.Data(), "Total Charged E_{T} Distribution in Acceptance", 1000, 0.00, 99);
+ fHistChargedEtAcc = new TH1F(histname.Data(), "Total Charged E_{T} Distribution in Acceptance", nbinsEt, minEt, maxEt);
fHistChargedEtAcc->GetXaxis()->SetTitle("E_{T} (GeV/c^{2})");
fHistChargedEtAcc->GetYaxis()->SetTitle("dN/dE_{T} (c^{2}/GeV)");
histname = "fHistNeutralEtAcc" + fHistogramNameSuffix;
- fHistNeutralEtAcc = new TH1F(histname.Data(), "Total Neutral E_{T} Distribution in Acceptance", 1000, 0.00, 99);
+ fHistNeutralEtAcc = new TH1F(histname.Data(), "Total Neutral E_{T} Distribution in Acceptance", nbinsEt, minEt, maxEt);
fHistNeutralEtAcc->GetXaxis()->SetTitle("E_{T} (GeV/c^{2})");
fHistNeutralEtAcc->GetYaxis()->SetTitle("dN/dE_{T} (c^{2}/GeV)");
std::cout << histname << std::endl;
histname = "fHistMult" + fHistogramNameSuffix;
- fHistMult = new TH1F(histname.Data(), "Total Multiplicity", 200, 0, 199);
+ fHistMult = new TH1F(histname.Data(), "Total Multiplicity", nbinsMult, minMult, maxMult);
fHistMult->GetXaxis()->SetTitle("N");
fHistMult->GetYaxis()->SetTitle("Multiplicity");
histname = "fHistChargedMult" + fHistogramNameSuffix;
- fHistChargedMult = new TH1F(histname.Data(), "Charged Multiplicity", 200, 0, 199);
+ fHistChargedMult = new TH1F(histname.Data(), "Charged Multiplicity", nbinsMult, minMult, maxMult);
fHistChargedMult->GetXaxis()->SetTitle("N");
fHistChargedMult->GetYaxis()->SetTitle("Multiplicity");
histname = "fHistNeutralMult" + fHistogramNameSuffix;
- fHistNeutralMult = new TH1F(histname.Data(), "Charged Multiplicity", 200, 0, 199);
+ fHistNeutralMult = new TH1F(histname.Data(), "Neutral Multiplicity", nbinsMult, minMult, maxMult);
fHistNeutralMult->GetXaxis()->SetTitle("N");
fHistNeutralMult->GetYaxis()->SetTitle("Multiplicity");
histname = "fHistPhivsPtPos" + fHistogramNameSuffix;
- fHistPhivsPtPos = new TH2F(histname.Data(), "Phi vs pT of positively charged tracks hitting the calorimeter", 200, 0, 2*TMath::Pi(), 2000, 0, 100);
+ fHistPhivsPtPos = new TH2F(histname.Data(), "Phi vs pT of positively charged tracks hitting the calorimeter", 200, 0, 2*TMath::Pi(), nbinsPt, minPt, maxPt);
histname = "fHistPhivsPtNeg" + fHistogramNameSuffix;
- fHistPhivsPtNeg = new TH2F(histname.Data(), "Phi vs pT of negatively charged tracks hitting the calorimeter", 200, 0, 2*TMath::Pi(), 2000, 0, 100);
+ fHistPhivsPtNeg = new TH2F(histname.Data(), "Phi vs pT of negatively charged tracks hitting the calorimeter", 200, 0, 2*TMath::Pi(), nbinsPt, minPt, maxPt);
histname = "fHistBaryonEt" + fHistogramNameSuffix;
- fHistBaryonEt = new TH1F(histname.Data(), "E_{T} for baryons", 1000, 0.0001, 100);
+ fHistBaryonEt = new TH1F(histname.Data(), "E_{T} for baryons", nbinsEt, minEt, maxEt);
histname = "fHistAntiBaryonEt" + fHistogramNameSuffix;
- fHistAntiBaryonEt = new TH1F(histname.Data(), "E_{T} for anti baryons", 1000, 0.0001, 100);
+ fHistAntiBaryonEt = new TH1F(histname.Data(), "E_{T} for anti baryons", nbinsEt, minEt, maxEt);
histname = "fHistMesonEt" + fHistogramNameSuffix;
- fHistMesonEt = new TH1F(histname.Data(), "E_{T} for mesons", 1000, 0.0001, 100);
+ fHistMesonEt = new TH1F(histname.Data(), "E_{T} for mesons", nbinsEt, minEt, maxEt);
histname = "fHistBaryonEtAcc" + fHistogramNameSuffix;
- fHistBaryonEtAcc = new TH1F(histname.Data(), "E_{T} for baryons in calorimeter acceptance", 1000, 0.0001, 100);
+ fHistBaryonEtAcc = new TH1F(histname.Data(), "E_{T} for baryons in calorimeter acceptance", nbinsEt, minEt, maxEt);
histname = "fHistAntiBaryonEtAcc" + fHistogramNameSuffix;
- fHistAntiBaryonEtAcc = new TH1F(histname.Data(), "E_{T} for anti baryons in calorimeter acceptance", 1000, 0.0001, 100);
+ fHistAntiBaryonEtAcc = new TH1F(histname.Data(), "E_{T} for anti baryons in calorimeter acceptance", nbinsEt, minEt, maxEt);
histname = "fHistMesonEtAcc" + fHistogramNameSuffix;
- fHistMesonEtAcc = new TH1F(histname.Data(), "E_{T} for mesons in calorimeter acceptance", 1000, 0.0001, 100);
+ fHistMesonEtAcc = new TH1F(histname.Data(), "E_{T} for mesons in calorimeter acceptance", nbinsEt, minEt, maxEt);
+
+ histname = "fHistProtonEt" + fHistogramNameSuffix;
+ fHistProtonEt = new TH1F(histname.Data(), "E_{T} for (anti-)protons", nbinsEt, minEt, maxEt);
+
+ histname = "fHistKaonEt" + fHistogramNameSuffix;
+ fHistChargedKaonEt = new TH1F(histname.Data(), "E_{T} for charged kaons", nbinsEt, minEt, maxEt);
+
+ histname = "fHistMuonEt" + fHistogramNameSuffix;
+ fHistMuonEt = new TH1F(histname.Data(), "E_{T} for muons", nbinsEt, minEt, maxEt);
+
+ histname = "fHistElectronEt" + fHistogramNameSuffix;
+ fHistElectronEt = new TH1F(histname.Data(), "E_{T} for electrons/positrons", nbinsEt, minEt, maxEt);
+
+ histname = "fHistProtonEtAcc" + fHistogramNameSuffix;
+ fHistProtonEtAcc = new TH1F(histname.Data(), "E_{T} for (anti-)protons in calorimeter acceptance", nbinsEt, minEt, maxEt);
+
+ histname = "fHistKaonEtAcc" + fHistogramNameSuffix;
+ fHistChargedKaonEtAcc = new TH1F(histname.Data(), "E_{T} for charged kaons in calorimeter acceptance", nbinsEt, minEt, maxEt);
+
+ histname = "fHistMuonEtAcc" + fHistogramNameSuffix;
+ fHistMuonEtAcc = new TH1F(histname.Data(), "E_{T} for muons in calorimeter acceptance", nbinsEt, minEt, maxEt);
+
+ histname = "fHistElectronEtAcc" + fHistogramNameSuffix;
+ fHistElectronEtAcc = new TH1F(histname.Data(), "E_{T} for electrons/positrons in calorimeter acceptance", nbinsEt, minEt, maxEt);
histname = "fHistEtRecvsEtMC" + fHistogramNameSuffix;
- fHistEtRecvsEtMC = new TH2F(histname.Data(), "Reconstructed E_{t} vs MC E_{t}", 1000, 0.000, 100, 1000, 0.0001, 100);
+ fHistEtRecvsEtMC = new TH2F(histname.Data(), "Reconstructed E_{t} vs MC E_{t}", nbinsEt, minEt, maxEt, nbinsEt, minEt, maxEt);
+ //
histname = "fHistTMDeltaR" + fHistogramNameSuffix;
fHistTMDeltaR = new TH1F(histname.Data(), "#Delta R for calorimeter clusters", 200, 0, 50);
}
void AliAnalysisEt::FillHistograms()
-{
+{ // fill histograms..
fHistEt->Fill(fTotEt);
fHistChargedEt->Fill(fTotChargedEt);
fHistNeutralEt->Fill(fTotNeutralEt);
fHistTMDeltaR;
*/
+ fHistProtonEt->Fill(fProtonEt);
+ fHistChargedKaonEt->Fill(fChargedKaonEt);
+ fHistMuonEt->Fill(fMuonEt);
+ fHistElectronEt->Fill(fElectronEt);
+
+ fHistProtonEtAcc->Fill(fProtonEtAcc);
+ fHistChargedKaonEtAcc->Fill(fChargedKaonEtAcc);
+ fHistMuonEtAcc->Fill(fMuonEtAcc);
+ fHistElectronEtAcc->Fill(fElectronEtAcc);
}
+
Int_t AliAnalysisEt::AnalyseEvent(AliVEvent *event)
-{
- //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.
- cout<<"This event has "<<event->GetNumberOfTracks()<<" tracks"<<endl;
+{ //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.
+ cout << "This event has " << event->GetNumberOfTracks() << " tracks" << endl;
+ ResetEventValues();
return 0;
}
void AliAnalysisEt::ResetEventValues()
-{
- fTotEt = 0;
- fTotEtAcc = 0;
- fTotNeutralEt = 0;
- fTotNeutralEtAcc = 0;
- fTotChargedEt = 0;
- fTotChargedEtAcc = 0;
- fMultiplicity = 0;
- fChargedMultiplicity = 0;
- fNeutralMultiplicity = 0;
-
- if(!fPdgDB) fPdgDB = new TDatabasePDG();
-
- if(PiPlusCode==0){
+{ // clear
+ fTotEt = 0;
+ fTotEtAcc = 0;
+ fTotNeutralEt = 0;
+ fTotNeutralEtAcc = 0;
+ fTotChargedEt = 0;
+ fTotChargedEtAcc = 0;
+ fMultiplicity = 0;
+ fChargedMultiplicity = 0;
+ fNeutralMultiplicity = 0;
+ fBaryonEt = 0;
+ fAntiBaryonEt = 0;
+ fMesonEt = 0;
+ fBaryonEtAcc = 0;
+ fAntiBaryonEtAcc = 0;
+ fMesonEtAcc = 0;
+ fProtonEt = 0;
+ fChargedKaonEt = 0;
+ fMuonEt = 0;
+ fElectronEt = 0;
+ fProtonEtAcc = 0;
+ fChargedKaonEtAcc = 0;
+ fMuonEtAcc = 0;
+
+ if (!fCuts || !fPdgDB || fPiPlusCode==0) { // some Init's needed
+ cout << __FILE__ << ":" << __LINE__ << " : Init " << endl;
+ if (!fCuts) {
+ cout << " setting up Cuts " << endl;
+ fCuts = new AliAnalysisEtCuts();
+ }
+ if(!fPdgDB) {
+ cout << " setting up PdgDB " << endl;
+ fPdgDB = new TDatabasePDG();
+ }
+
+ if (fPiPlusCode==0) {
SetParticleCodes();
}
+ }
+ return;
}
+
void AliAnalysisEt::SetParticleCodes()
-{
- PionMass = fPdgDB->GetParticle("pi+")->Mass();
- PiPlusCode = fPdgDB->GetParticle("pi+")->PdgCode();
- PiMinusCode = fPdgDB->GetParticle("pi-")->PdgCode();
- KPlusCode = fPdgDB->GetParticle("K+")->PdgCode();
- KMinusCode = fPdgDB->GetParticle("K-")->PdgCode();
- ProtonCode = fPdgDB->GetParticle("proton")->PdgCode();
- AntiProtonCode = fPdgDB->GetParticle("antiproton")->PdgCode();
- LambdaCode = fPdgDB->GetParticle("Lambda0")->PdgCode();
- AntiLambdaCode = fPdgDB->GetParticle("Lambda0_bar")->PdgCode();
- K0SCode = fPdgDB->GetParticle("K_S0")->PdgCode();
- OmegaCode = fPdgDB->GetParticle("Omega-")->PdgCode();
- AntiOmegaCode = fPdgDB->GetParticle("Omega+")->PdgCode();
- Xi0Code = fPdgDB->GetParticle("Xi0")->PdgCode();
- AntiXi0Code = fPdgDB->GetParticle("Xi0_bar")->PdgCode();
- XiCode = fPdgDB->GetParticle("Xi-")->PdgCode();
- AntiXiCode = fPdgDB->GetParticle("Xi-_bar")->PdgCode();
- SigmaCode = fPdgDB->GetParticle("Sigma-")->PdgCode();
- AntiSigmaCode = fPdgDB->GetParticle("Sigma+")->PdgCode();
- K0LCode = fPdgDB->GetParticle("K_L0")->PdgCode();
- NeutronCode = fPdgDB->GetParticle("neutron")->PdgCode();
- AntiNeutronCode = fPdgDB->GetParticle("antineutron")->PdgCode();
- EPlusCode = fPdgDB->GetParticle("e+")->PdgCode();
- EMinusCode = fPdgDB->GetParticle("e-")->PdgCode();
- cout << "Resetting Codes: Pion " << PiPlusCode
- << "," << PiMinusCode
- << " Kaon " << KPlusCode
- << "," << KMinusCode << endl;
+{ // set PDG info
+ fPionMass = fPdgDB->GetParticle("pi+")->Mass();
+ fPiPlusCode = fPdgDB->GetParticle("pi+")->PdgCode();
+ fPiMinusCode = fPdgDB->GetParticle("pi-")->PdgCode();
+ fKPlusCode = fPdgDB->GetParticle("K+")->PdgCode();
+ fKMinusCode = fPdgDB->GetParticle("K-")->PdgCode();
+ fProtonCode = fPdgDB->GetParticle("proton")->PdgCode();
+ fAntiProtonCode = fPdgDB->GetParticle("antiproton")->PdgCode();
+ fLambdaCode = fPdgDB->GetParticle("Lambda0")->PdgCode();
+ fAntiLambdaCode = fPdgDB->GetParticle("Lambda0_bar")->PdgCode();
+ fK0SCode = fPdgDB->GetParticle("K_S0")->PdgCode();
+ fOmegaCode = fPdgDB->GetParticle("Omega-")->PdgCode();
+ fAntiOmegaCode = fPdgDB->GetParticle("Omega+")->PdgCode();
+ fXi0Code = fPdgDB->GetParticle("Xi0")->PdgCode();
+ fAntiXi0Code = fPdgDB->GetParticle("Xi0_bar")->PdgCode();
+ fXiCode = fPdgDB->GetParticle("Xi-")->PdgCode();
+ fAntiXiCode = fPdgDB->GetParticle("Xi-_bar")->PdgCode();
+ fSigmaCode = fPdgDB->GetParticle("Sigma-")->PdgCode();
+ fAntiSigmaCode = fPdgDB->GetParticle("Sigma+")->PdgCode();
+ fK0LCode = fPdgDB->GetParticle("K_L0")->PdgCode();
+ fNeutronCode = fPdgDB->GetParticle("neutron")->PdgCode();
+ fAntiNeutronCode = fPdgDB->GetParticle("antineutron")->PdgCode();
+ fEPlusCode = fPdgDB->GetParticle("e+")->PdgCode();
+ fEMinusCode = fPdgDB->GetParticle("e-")->PdgCode();
+ cout << "Resetting Codes: Pion " << fPiPlusCode
+ << "," << fPiMinusCode
+ << " Kaon " << fKPlusCode
+ << "," << fKMinusCode << endl;
}