#include "TList.h"
#include "TH1F.h"
#include "TH2F.h"
+#include "TTree.h"
#include <iostream>
#include "AliAnalysisEtCuts.h"
#include "AliVEvent.h"
,fEPlusCode(0)
,fEMinusCode(0)
,fPionMass(0)
- ,fSumEt(0)
- ,fSumEtAcc(0)
,fTotEt(0)
,fTotEtAcc(0)
,fTotNeutralEt(0)
,fHistElectronEtAcc(0)
,fHistEtRecvsEtMC(0)
,fHistTMDeltaR(0)
+ ,fTree(0)
{
}
list->Add(fHistEtRecvsEtMC);
list->Add(fHistTMDeltaR);
+
+ if (fCuts) {
+ if (fCuts->GetHistMakeTree()) {
+ list->Add(fTree);
+ }
+ }
+
}
void AliAnalysisEt::Init()
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
+ // see if we should change histogram limits etc, and possibly create a tree
+ if (fCuts) {
+ if (fCuts->GetHistMakeTree()) {
+ CreateTree();
+ }
+ }
+
TString histname = "fHistEt" + fHistogramNameSuffix;
fHistEt = new TH1F(histname.Data(), "Total E_{T} Distribution", nbinsEt, minEt, maxEt);
fHistEt->GetXaxis()->SetTitle("E_{T} (GeV/c^{2})");
}
+void AliAnalysisEt::CreateTree()
+{ // create tree..
+ TString treename = "fTree" + fHistogramNameSuffix;
+ fTree = new TTree(treename, treename);
+ fTree->Branch("fTotEt",&fTotEt,"fTotEt/D");
+ fTree->Branch("fTotEtAcc",&fTotEtAcc,"fTotEtAcc/D");
+ fTree->Branch("fTotNeutralEt",&fTotNeutralEt,"fTotNeutralEt/D");
+ fTree->Branch("fTotNeutralEtAcc",&fTotNeutralEtAcc,"fTotNeutralEtAcc/D");
+ fTree->Branch("fTotChargedEt",&fTotChargedEt,"fTotChargedEt/D");
+ fTree->Branch("fTotChargedEtAcc",&fTotChargedEtAcc,"fTotChargedEtAcc/D");
+ fTree->Branch("fMultiplicity",&fMultiplicity,"fMultiplicity/I");
+ fTree->Branch("fChargedMultiplicity",&fChargedMultiplicity,"fChargedMultiplicity/I");
+ fTree->Branch("fNeutralMultiplicity",&fNeutralMultiplicity,"fNeutralMultiplicity/I");
+ fTree->Branch("fBaryonEt",&fBaryonEt,"fBaryonEt/D");
+ fTree->Branch("fAntiBaryonEt",&fAntiBaryonEt,"fAntiBaryonEt/D");
+ fTree->Branch("fMesonEt",&fMesonEt,"fMesonEt/D");
+ fTree->Branch("fBaryonEtAcc",&fBaryonEtAcc,"fBaryonEtAcc/D");
+ fTree->Branch("fAntiBaryonEtAcc",&fAntiBaryonEtAcc,"fAntiBaryonEtAcc/D");
+ fTree->Branch("fMesonEtAcc",&fMesonEtAcc,"fMesonEtAcc/D");
+ fTree->Branch("fProtonEt",&fProtonEt,"fProtonEt/D");
+ fTree->Branch("fChargedKaonEt",&fChargedKaonEt,"fChargedKaonEt/D");
+ fTree->Branch("fMuonEt",&fMuonEt,"fMuonEt/D");
+ fTree->Branch("fElectronEt",&fElectronEt,"fElectronEt/D");
+ fTree->Branch("fProtonEtAcc",&fProtonEtAcc,"fProtonEtAcc/D");
+ fTree->Branch("fChargedKaonEtAcc",&fChargedKaonEtAcc,"fChargedKaonEtAcc/D");
+ fTree->Branch("fMuonEtAcc",&fMuonEtAcc,"fMuonEtAcc/D");
+ fTree->Branch("fElectronEtAcc",&fElectronEtAcc,"fElectronEtAcc/D");
+
+ return;
+}
+
void AliAnalysisEt::FillHistograms()
{ // fill histograms..
fHistEt->Fill(fTotEt);
fHistChargedMult->Fill(fChargedMultiplicity);
fHistNeutralMult->Fill(fNeutralMultiplicity);
- /* // DS commented out non-fills to prevent compilation warnings
- fHistPhivsPtPos;
- fHistPhivsPtNeg;
-
- fHistBaryonEt;
- fHistAntiBaryonEt;
- fHistMesonEt;
-
- fHistBaryonEtAcc;
- fHistAntiBaryonEtAcc;
- fHistMesonEtAcc;
+ fHistBaryonEt->Fill(fBaryonEt);
+ fHistAntiBaryonEt->Fill(fAntiBaryonEt);
+ fHistMesonEt->Fill(fMesonEt);
- fHistTMDeltaR;
- */
+ fHistBaryonEtAcc->Fill(fBaryonEtAcc);
+ fHistAntiBaryonEtAcc->Fill(fAntiBaryonEtAcc);
+ fHistMesonEtAcc->Fill(fMesonEtAcc);
+
fHistProtonEt->Fill(fProtonEt);
fHistChargedKaonEt->Fill(fChargedKaonEt);
fHistMuonEt->Fill(fMuonEt);
fHistChargedKaonEtAcc->Fill(fChargedKaonEtAcc);
fHistMuonEtAcc->Fill(fMuonEtAcc);
fHistElectronEtAcc->Fill(fElectronEtAcc);
+
+ if (fCuts) {
+ if (fCuts->GetHistMakeTree()) {
+ fTree->Fill();
+ }
+ }
+
}
Int_t AliAnalysisEt::AnalyseEvent(AliVEvent *event)
fProtonEtAcc = 0;
fChargedKaonEtAcc = 0;
fMuonEtAcc = 0;
+ fElectronEtAcc = 0;
if (!fCuts || !fPdgDB || fPiPlusCode==0) { // some Init's needed
cout << __FILE__ << ":" << __LINE__ << " : Init " << endl;
#include "TString.h"
+class TTree;
class TH2F;
class TH1F;
class AliVEvent;
* Uses the fHistogramNameSuffix to create proper histogram names
*/
virtual void CreateHistograms();
+ virtual void CreateTree();
/** Fills the histograms, must be overloaded if you want to add your own */
virtual void FillHistograms();
virtual void SetCuts(const AliAnalysisEtCuts *cuts)
{ fCuts = (AliAnalysisEtCuts *) cuts; }
- /** Sum of the total Et for all events */
- Double_t GetSumEt() const { return fSumEt; }
-
- /** Sum of the total Et within our acceptance for all events */
- Double_t GetSumEtAcc() const { return fSumEtAcc; }
-
/** Total Et in the event (without acceptance cuts) */
Double_t GetTotEt() const { return fTotEt; }
Int_t fEMinusCode;//pdg electron code
Float_t fPionMass;//pdg pion mass
- Double_t fSumEt;/** Sum of the total Et for all events */
- Double_t fSumEtAcc;/** Sum of the total Et within our acceptance for all events */
Double_t fTotEt;/** Total Et in the event (without acceptance cuts) */
Double_t fTotEtAcc;/** Total Et in the event within the acceptance cuts */
Int_t fChargedMultiplicity;/** Multiplicity of charged particles in the event */
Int_t fNeutralMultiplicity; /** Multiplicity of neutral particles in the event */
- /** Et of identified baryons */
- Double_t fBaryonEt;
-
- /** Et of identified anti-baryons */
- Double_t fAntiBaryonEt;
-
- /** Et of identified mesons */
- Double_t fMesonEt;
+ Double_t fBaryonEt; /** Et of identified baryons */
+ Double_t fAntiBaryonEt; /** Et of identified anti-baryons */
+ Double_t fMesonEt; /** Et of identified mesons */
- /** Et of identified baryons in calorimeter acceptance */
- Double_t fBaryonEtAcc;
-
- /** Et of identified anti-baryons in calorimeter acceptance */
- Double_t fAntiBaryonEtAcc;
-
- /** Et of identified mesons in calorimeter acceptance */
- Double_t fMesonEtAcc;
-
- /** Et of identified protons */
- Double_t fProtonEt;
-
- /** Et of identified charged kaons */
- Double_t fChargedKaonEt;
+ Double_t fBaryonEtAcc; /** Et of identified baryons in calorimeter acceptance */
+ Double_t fAntiBaryonEtAcc; /** Et of identified anti-baryons in calorimeter acceptance */
+ Double_t fMesonEtAcc; /** Et of identified mesons in calorimeter acceptance */
- /** Et of identified muons */
- Double_t fMuonEt;
+ Double_t fProtonEt; /** Et of identified protons */
+ Double_t fChargedKaonEt; /** Et of identified charged kaons */
+ Double_t fMuonEt; /** Et of identified muons */
+ Double_t fElectronEt; /** Et of identified electrons */
- /** Et of identified electrons */
- Double_t fElectronEt;
-
- /** Et of identified protons in calorimeter acceptance */
- Double_t fProtonEtAcc;
-
- /** Et of identified charged kaons in calorimeter acceptance */
- Double_t fChargedKaonEtAcc;
-
- /** Et of identified muons in calorimeter acceptance */
- Double_t fMuonEtAcc;
-
- /** Et of identified electrons in calorimeter acceptance */
- Double_t fElectronEtAcc;
-
- /** Cut in eta (standard |eta| < 0.5 )*/
- Double_t fEtaCut;
+ Double_t fProtonEtAcc; /** Et of identified protons in calorimeter acceptance */
+ Double_t fChargedKaonEtAcc; /** Et of identified charged kaons in calorimeter acceptance */
+ Double_t fMuonEtAcc; /** Et of identified muons in calorimeter acceptance */
+ Double_t fElectronEtAcc; /** Et of identified electrons in calorimeter acceptance */
+
+ Double_t fEtaCut;/** Cut in eta (standard |eta| < 0.5 )*/
Double_t fEtaCutAcc;/** Eta cut for our acceptance */
Double_t fPhiCutAccMin; /** Min phi cut for our acceptance in radians */
TH2F *fHistPhivsPtNeg; //phi vs pT plot for negative tracks
/* PID plots */
- TH1F *fHistBaryonEt;
- TH1F *fHistAntiBaryonEt;
- TH1F *fHistMesonEt;
-
- TH1F *fHistBaryonEtAcc;
- TH1F *fHistAntiBaryonEtAcc;
- TH1F *fHistMesonEtAcc;
-
- TH1F *fHistProtonEt;
- TH1F *fHistChargedKaonEt;
- TH1F *fHistMuonEt;
- TH1F *fHistElectronEt;
+ TH1F *fHistBaryonEt; /** Et of identified baryons */
+ TH1F *fHistAntiBaryonEt; /** Et of identified anti-baryons */
+ TH1F *fHistMesonEt; /** Et of identified mesons */
+
+ TH1F *fHistBaryonEtAcc; /** Et of identified baryons in calorimeter acceptance */
+ TH1F *fHistAntiBaryonEtAcc; /** Et of identified anti-baryons in calorimeter acceptance */
+ TH1F *fHistMesonEtAcc; /** Et of identified mesons in calorimeter acceptance */
+
+ TH1F *fHistProtonEt; /** Et of identified protons */
+ TH1F *fHistChargedKaonEt; /** Et of identified charged kaons */
+ TH1F *fHistMuonEt; /** Et of identified muons */
+ TH1F *fHistElectronEt; /** Et of identified electrons */
- TH1F *fHistProtonEtAcc;
- TH1F *fHistChargedKaonEtAcc;
- TH1F *fHistMuonEtAcc;
- TH1F *fHistElectronEtAcc;
+ TH1F *fHistProtonEtAcc; /** Et of identified protons in calorimeter acceptance */
+ TH1F *fHistChargedKaonEtAcc; /** Et of identified charged kaons in calorimeter acceptance */
+ TH1F *fHistMuonEtAcc; /** Et of identified muons in calorimeter acceptance */
+ TH1F *fHistElectronEtAcc; /** Et of identified electrons in calorimeter acceptance */
/* Correction plots */
TH2F *fHistEtRecvsEtMC; //Reconstructed Et versus MC Et
+
+ TH1F *fHistTMDeltaR; /* Track matching plots */
- /* Track matching plots */
- TH1F *fHistTMDeltaR;
+ TTree *fTree; // optional TTree
private:
//Declare private to avoid compilation warning
,fMonteCarloSingleChargedParticle(3)
,fMonteCarloNeutralParticle(0)
+
+ ,fHistMakeTree(kTRUE)
{ // ctor
}
// MonteCarlo
Double_t GetMonteCarloSingleChargedParticle() const { return fMonteCarloSingleChargedParticle; }
Double_t GetMonteCarloNeutralParticle() const { return fMonteCarloNeutralParticle; }
+ // Hist: TTree and histogram info
+ Bool_t GetHistMakeTree() const { return fHistMakeTree; }
// Setters
// Common
// MonteCarlo
void SetMonteCarloSingleChargedParticle(const Double_t val) { fMonteCarloSingleChargedParticle = val; }
void SetMonteCarloNeutralParticle(const Double_t val) { fMonteCarloNeutralParticle = val; }
+ // Hist: TTree and histogram info
+ void SetHistMakeTree(const Bool_t val) { fHistMakeTree = val; }
protected:
Double_t fMonteCarloSingleChargedParticle; // MC charged
Double_t fMonteCarloNeutralParticle; // MC neutral
+ // Hist: TTree and histogram info
+ Bool_t fHistMakeTree; // whether to make a summary tree or not
+
private:
//Declare private to avoid compilation warning
AliAnalysisEtCuts & operator = (const AliAnalysisEtCuts & g) ;//copy assignment
#include "AliMCEvent.h"
#include "TH2F.h"
#include "TParticle.h"
+#include "AliGenHijingEventHeader.h"
+#include "AliGenPythiaEventHeader.h"
+
+// ctor
+AliAnalysisEtMonteCarlo::AliAnalysisEtMonteCarlo() :
+ AliAnalysisEt()
+ ,fImpactParameter(0)
+ ,fNcoll(0)
+ ,fNpart(0)
+{
+}
+
+// dtor
+AliAnalysisEtMonteCarlo::~AliAnalysisEtMonteCarlo()
+{
+}
Int_t AliAnalysisEtMonteCarlo::AnalyseEvent(AliVEvent* ev)
{ // analyse MC event
// Get us an mc event
AliMCEvent *event = dynamic_cast<AliMCEvent*>(ev);
+ // Hijing header
+ AliGenEventHeader* genHeader = event->GenEventHeader();
+ AliGenHijingEventHeader* hijingGenHeader = dynamic_cast<AliGenHijingEventHeader*>(genHeader);
+ if (hijingGenHeader) {
+ fImpactParameter = hijingGenHeader->ImpactParameter();
+ fNcoll = hijingGenHeader->HardScatters(); // or should this be some combination of NN() NNw() NwN() NwNw() ?
+ fNpart = hijingGenHeader->ProjectileParticipants() + hijingGenHeader->TargetParticipants();
+ /*
+ printf("Hijing: ImpactParameter %g ReactionPlaneAngle %g \n",
+ hijingGenHeader->ImpactParameter(), hijingGenHeader->ReactionPlaneAngle());
+ printf("HardScatters %d ProjecileParticipants %d TargetParticipants %d\n",
+ hijingGenHeader->HardScatters(), hijingGenHeader->ProjectileParticipants(), hijingGenHeader->TargetParticipants());
+ printf("ProjSpectatorsn %d ProjSpectatorsp %d TargSpectatorsn %d TargSpectatorsp %d\n",
+ hijingGenHeader->ProjSpectatorsn(), hijingGenHeader->ProjSpectatorsp(), hijingGenHeader->TargSpectatorsn(), hijingGenHeader->TargSpectatorsp());
+ printf("NN %d NNw %d NwN %d, NwNw %d\n",
+ hijingGenHeader->NN(), hijingGenHeader->NNw(), hijingGenHeader->NwN(), hijingGenHeader->NwNw());
+ */
+ }
+
+ /* // placeholder if we want to get some Pythia info later
+ AliGenPythiaEventHeader* pythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(genHeader);
+ if (pythiaGenHeader) { // not Hijing; try with Pythia
+ printf("Pythia: ProcessType %d GetPtHard %g \n",
+ pythiaGenHeader->ProcessType(), pythiaGenHeader->GetPtHard());
+ }
+ */
+
// Let's play with the stack!
AliStack *stack = event->Stack();
}
void AliAnalysisEtMonteCarlo::Init()
-{
+{ // init
AliAnalysisEt::Init();
}
+void AliAnalysisEtMonteCarlo::ResetEventValues()
+{ // reset event values
+ AliAnalysisEt::ResetEventValues();
+
+ // collision geometry defaults for p+p:
+ fImpactParameter = 0;
+ fNcoll = 1;
+ fNpart = 2;
+}
+
+void AliAnalysisEtMonteCarlo::CreateHistograms()
+{ // histogram related additions
+ AliAnalysisEt::CreateHistograms();
+ if (fTree) {
+ fTree->Branch("fImpactParameter",&fImpactParameter,"fImpactParameter/D");
+ fTree->Branch("fNcoll",&fNcoll,"fNcoll/I");
+ fTree->Branch("fNpart",&fNpart,"fNpart/I");
+ }
+}
+
bool AliAnalysisEtMonteCarlo::TrackHitsCalorimeter(TParticle* part, Double_t magField)
{
// printf(" TrackHitsCalorimeter - magField %f\n", magField);
public:
- AliAnalysisEtMonteCarlo() {}
- virtual ~AliAnalysisEtMonteCarlo() {}
+ AliAnalysisEtMonteCarlo();
+ virtual ~AliAnalysisEtMonteCarlo();
virtual Int_t AnalyseEvent(AliVEvent* event);
virtual void Init();
+ virtual void ResetEventValues();
+ virtual void CreateHistograms();
protected:
virtual bool TrackHitsCalorimeter(TParticle *part, Double_t magField=0.5);
+protected:
+
+ Double_t fImpactParameter; // b(fm), for Hijing; 0 otherwise
+ Int_t fNcoll; // Ncoll, for Hijing; 1 otherwise
+ Int_t fNpart; // Ncoll, for Hijing; 2 otherwise
+
};
#endif // ALIANALYSISETMONTECARLO_H
AliAnalysisEtReconstructed::AliAnalysisEtReconstructed() :
AliAnalysisEt()
- ,fNTpcClustersCut(0)
- ,fNItsClustersCut(0)
,fTrackDistanceCut(0)
,fPidCut(0)
,fClusterType(0)
void AliAnalysisEtReconstructed::Init()
{ // Init
AliAnalysisEt::Init();
- fNItsClustersCut = fCuts->GetReconstructedNItsClustersCut();
- fNTpcClustersCut = fCuts->GetReconstructedNTpcClustersCut();
fPidCut = fCuts->GetReconstructedPidCut();
TGeoGlobalMagField::Instance()->SetField(new AliMagF("Maps","Maps", 1., 1., AliMagF::k5kG));
}
void AliAnalysisEtReconstructed::FillOutputList(TList* list)
-{
+{ // add some extra histograms to the ones from base class
AliAnalysisEt::FillOutputList(list);
list->Add(fHistChargedPionEnergyDeposit);
}
void AliAnalysisEtReconstructed::CreateHistograms()
-{
+{ // add some extra histograms to the ones from base class
AliAnalysisEt::CreateHistograms();
TString histname;
}
Double_t
-AliAnalysisEtReconstructed::CalcTrackClusterDistance(Float_t clsPos[3],
+AliAnalysisEtReconstructed::CalcTrackClusterDistance(const Float_t clsPos[3],
Int_t *trkMatchId,
- AliESDEvent *event)
+ const AliESDEvent *event)
{ // calculate distance between cluster and closest track
Double_t trkPos[3] = {0,0,0};
bool CheckGoodVertex(AliVParticle *track);
virtual bool TrackHitsCalorimeter(AliVParticle *track, Double_t magField);
- Int_t fNTpcClustersCut;
- Int_t fNItsClustersCut;
-
Double_t fTrackDistanceCut; // cut on track distance
-
Double_t fPidCut; // cut on the pid probability
Char_t fClusterType; // selection on cluster type
-
- /** Energy deposited in calorimeter by charged pions */
- TH2F *fHistChargedPionEnergyDeposit;
-
- /** Energy deposited in calorimeter by protons */
- TH2F *fHistProtonEnergyDeposit;
-
- /** Energy deposited in calorimeter by anti-protons */
- TH2F *fHistAntiProtonEnergyDeposit;
-
- /** Energy deposited in calorimeter by charged kaons */
- TH2F *fHistChargedKaonEnergyDeposit;
-
- /** Energy deposited in calorimeter by muons */
- TH2F *fHistMuonEnergyDeposit;
+
+ TH2F *fHistChargedPionEnergyDeposit; /** Energy deposited in calorimeter by charged pions */
+ TH2F *fHistProtonEnergyDeposit; /** Energy deposited in calorimeter by protons */
+ TH2F *fHistAntiProtonEnergyDeposit; /** Energy deposited in calorimeter by anti-protons */
+ TH2F *fHistChargedKaonEnergyDeposit; /** Energy deposited in calorimeter by charged kaons */
+ TH2F *fHistMuonEnergyDeposit; /** Energy deposited in calorimeter by muons */
private:
AliAnalysisEtReconstructed(const AliAnalysisEtReconstructed& g);
AliAnalysisEtReconstructed & operator=(const AliAnalysisEtReconstructed&);
- Double_t CalcTrackClusterDistance(Float_t pos[3],Int_t *trkMatchId, AliESDEvent *event);
+ Double_t CalcTrackClusterDistance(const Float_t pos[3],Int_t *trkMatchId, const AliESDEvent *event);
};
cout << " MC " << endl;
if ( dataStr.Contains("PbPb") ) { // a la: simPbPb/LHC10e18a
cout << " PbPb " << endl;
- TString fileLocation = "/home/dsilverm/data/E_T/" + dataStr + "/198000/001/AliESDs.root";
+ TString fileLocation = "/home/dsilverm/data/E_T/" + dataStr + "/dir/AliESDs.root";
cout << "fileLocation " << fileLocation.Data() << endl;
chain->Add(fileLocation.Data()); // link to local test file
}