#include <TCanvas.h>
#include <TRegexp.h>
#include <TTime.h>
+#include <TParticle.h>
+#include <TParticlePDG.h>
#include <AliLog.h>
AliDebug(AliLog::kDebug, Form("Time: %s", gSystem->Now().AsString()));
TFile *f = fChain->GetCurrentFile();
- AliDebug(AliLog::kDebug, f->GetName());
+ AliDebug(AliLog::kInfo, Form("Processing file %s", f->GetName()));
DeleteKinematicsFile();
DeleteRunLoader();
}
}
+Bool_t AliSelector::IsPrimaryCharged(TParticle* aParticle, Int_t aTotalPrimaries) const
+{
+ //
+ // Returns if the given particle is a primary particle
+ // This function or a equivalent should be available in some common place of AliRoot
+ //
+
+ // if the particle has a daughter primary, we do not want to count it
+ if (aParticle->GetFirstDaughter() != -1 && aParticle->GetFirstDaughter() < aTotalPrimaries)
+ return kFALSE;
+
+ Int_t pdgCode = TMath::Abs(aParticle->GetPdgCode());
+
+ // skip quarks and gluon
+ if (pdgCode <= 10 || pdgCode == 21)
+ return kFALSE;
+
+ if (strcmp(aParticle->GetName(),"XXX") == 0)
+ {
+ AliDebug(AliLog::kDebug, Form("WARNING: There is a particle named XXX."));
+ return kFALSE;
+ }
+
+ TParticlePDG* pdgPart = aParticle->GetPDG();
+
+ if (strcmp(pdgPart->ParticleClass(),"Unknown") == 0)
+ {
+ AliDebug(AliLog::kDebug, Form("WARNING: There is a particle with an unknown particle class (pdg code %d).", pdgCode));
+ return kFALSE;
+ }
+
+ if (pdgPart->Charge() == 0)
+ return kFALSE;
+
+ return kTRUE;
+}
#include <AliRun.h>
#include <AliRunLoader.h>
+class TParticle;
+
class AliSelector : public TSelector {
public:
AliSelector(TTree *tree=0);
TTree* GetKinematics();
AliRun* GetAliRun();
+ Bool_t IsPrimaryCharged(TParticle* aParticle, Int_t aTotalPrimaries) const;
+
TChain *fChain; //! pointer to the analyzed TTree or TChain
AliESD* fESD; //! "ESD" branch in fChain
#pragma link C++ class AlidNdEtaCorrectionSelector+;
#pragma link C++ class AlidNdEtaAnalysisSelector+;
+#pragma link C++ class AlidNdEtaAnalysisMCSelector+;
#pragma link C++ class dNdEtaAnalysis+;
#pragma link C++ class dNdEtaCorrection+;
--- /dev/null
+#include "AlidNdEtaAnalysisMCSelector.h"
+
+#include <TStyle.h>
+#include <TSystem.h>
+#include <TCanvas.h>
+#include <TParticle.h>
+#include <TParticlePDG.h>
+#include <TVector3.h>
+
+#include <AliLog.h>
+#include <AliGenEventHeader.h>
+#include <AliTracker.h>
+
+#include "../esdTrackCuts/AliESDtrackCuts.h"
+#include "dNdEtaCorrection.h"
+#include "dNdEtaAnalysis.h"
+
+ClassImp(AlidNdEtaAnalysisMCSelector)
+
+AlidNdEtaAnalysisMCSelector::AlidNdEtaAnalysisMCSelector(TTree * tree) :
+ AlidNdEtaAnalysisSelector(tree)
+{
+ //
+ // Constructor. Initialization of pointers
+ //
+}
+
+AlidNdEtaAnalysisMCSelector::~AlidNdEtaAnalysisMCSelector()
+{
+ //
+ // Destructor
+ //
+}
+
+Bool_t AlidNdEtaAnalysisMCSelector::Process(Long64_t entry)
+{
+ //
+
+ if (AliSelector::Process(entry) == kFALSE)
+ return kFALSE;
+
+ TTree* particleTree = GetKinematics();
+ if (!fHeader || !particleTree)
+ return kFALSE;
+
+ // get the MC vertex
+ AliGenEventHeader* genHeader = fHeader->GenEventHeader();
+
+ TArrayF vtxMC(3);
+ genHeader->PrimaryVertex(vtxMC);
+
+ TParticle* particle = 0;
+ particleTree->SetBranchAddress("Particles", &particle);
+
+ Int_t nPrim = fHeader->GetNprimary();
+ Int_t nTotal = fHeader->GetNtrack();
+
+ for (Int_t i_mc = nTotal - nPrim; i_mc < nTotal; ++i_mc)
+ {
+ particleTree->GetEntry(i_mc);
+
+ if (!particle)
+ continue;
+
+ if (IsPrimaryCharged(particle, nPrim) == kFALSE)
+ continue;
+
+ fdNdEtaAnalysis->FillTrack(vtxMC[2], particle->Eta(), 1);
+ }
+ fdNdEtaAnalysis->FillEvent(vtxMC[2]);
+
+ return kTRUE;
+}
--- /dev/null
+#ifndef ALIDNDETAANALYSISSELECTORMC_H
+#define ALIDNDETAANALYSISSELECTORMC_H
+
+#include "AlidNdEtaAnalysisSelector.h"
+
+class AlidNdEtaAnalysisMCSelector : public AlidNdEtaAnalysisSelector {
+ public:
+ AlidNdEtaAnalysisMCSelector(TTree *tree=0);
+ virtual ~AlidNdEtaAnalysisMCSelector();
+
+ virtual Bool_t Process(Long64_t entry);
+
+ protected:
+
+ private:
+
+ ClassDef(AlidNdEtaAnalysisMCSelector, 0);
+};
+
+#endif
#include <TStyle.h>
#include <TSystem.h>
#include <TCanvas.h>
-#include <TParticle.h>
-#include <TParticlePDG.h>
#include <TVector3.h>
#include <AliLog.h>
continue;
Double_t p[3];
- esdTrack->GetConstrainedPxPyPz(p); // ### TODO or GetInnerPxPyPy / GetOuter
+ esdTrack->GetConstrainedPxPyPz(p); // ### TODO or GetInnerPxPyPy / GetOuterPxPyPy
TVector3 vector(p);
Float_t theta = vector.Theta();
class dNdEtaCorrection;
class dNdEtaAnalysis;
-class TParticle;
-
class AlidNdEtaAnalysisSelector : public AliSelector {
public:
AlidNdEtaAnalysisSelector(TTree *tree=0);
return kTRUE;
}
-Bool_t AlidNdEtaCorrectionSelector::IsPrimary(const TParticle* aParticle, Int_t aTotalPrimaries)
-{
- //
- // Returns if the given particle is a primary particle
- // This function or a equivalent should be available in some common place of AliRoot
- //
-
- // if the particle has a daughter primary, we do not want to count it
- if (aParticle->GetFirstDaughter() != -1 && aParticle->GetFirstDaughter() < aTotalPrimaries)
- return kFALSE;
-
- Int_t pdgCode = TMath::Abs(aParticle->GetPdgCode());
-
- // skip quarks and gluon
- if (pdgCode > 10 && pdgCode != 21)
- return kTRUE;
-
- return kFALSE;
-}
-
Bool_t AlidNdEtaCorrectionSelector::Process(Long64_t entry)
{
// The Process() function is called for each entry in the tree (or possibly
if (!particle)
continue;
- if (strcmp(particle->GetName(),"XXX") == 0)
- {
- AliDebug(AliLog::kWarning, Form("WARNING: There is a particle named XXX (%d).", i_mc));
- continue;
- }
-
- TParticlePDG* pdgPart = particle->GetPDG();
-
- if (strcmp(pdgPart->ParticleClass(),"Unknown") == 0)
- {
- AliDebug(AliLog::kError, Form("WARNING: There is a particle with an unknown particle class (%d pdg code %d).", i_mc, particle->GetPdgCode()));
- continue;
- }
-
- if (IsPrimary(particle, nPrim) == kFALSE)
- continue;
-
- if (pdgPart->Charge() == 0)
+ if (IsPrimaryCharged(particle, nPrim) == kFALSE)
continue;
fdNdEtaCorrection->FillGene(vtxMC[2], particle->Eta());
-
}// end of mc particle
// ########################################################
virtual void Terminate();
protected:
- Bool_t IsPrimary(const TParticle* aParticle, Int_t aTotalPrimaries);
-
AliESDtrackCuts* fEsdTrackCuts; // Object containing the parameters of the esd track cuts
dNdEtaCorrection* fdNdEtaCorrection; // contains the intermediate histograms (on each slave)
fName = TString(name);
hEtaVsVtx = new TH2F("eta_vs_vtx","",80,-20,20,120,-6,6);
- hEtaVsVtxUncorrected = new TH2F("eta_vs_vtx_uncorrected","",80,-20,20,120,-6,6);
- hVtx = hEtaVsVtx->ProjectionX("vtx");
- hdNdEta = hEtaVsVtx->ProjectionY("dNdEta");
-
hEtaVsVtx->SetXTitle("vtx z [cm]");
hEtaVsVtx->SetYTitle("#eta");
- hVtx->SetXTitle("vtx z [cm]");
- hdNdEta->SetXTitle("#eta");
+
+ hEtaVsVtxUncorrected = dynamic_cast<TH2F*> (hEtaVsVtx->Clone("eta_vs_vtx_uncorrected"));
+ hVtx = hEtaVsVtx->ProjectionX("vtx");
+ hdNdEta = hEtaVsVtx->ProjectionY("dNdEta");
+
hdNdEta->SetYTitle("dN/d#eta");
hEtaVsVtx->Sumw2();
// - add functionality to set the bin sizes
// - figure out correct way to treat the errors
// - add functionality to make dn/deta for different mult classes?
+// - implement destructor
#include <TObject.h>
#include <TString.h>
chain->GetUserInfo()->Add(fEsdTrackCuts);
- AliLog::SetClassDebugLevel("AlidNdEtaCorrectionSelector", AliLog::kWarning);
+ AliLog::SetClassDebugLevel("AlidNdEtaCorrectionSelector", AliLog::kInfo);
chain->Process("AlidNdEtaCorrectionSelector.cxx+");
}
#include "../CreateESDChain.C"
-testAnalysis2(Char_t* dataDir, Int_t nRuns=20)
+testAnalysis2(Char_t* dataDir, Int_t nRuns=20, Bool_t aMC = kFALSE)
{
gSystem->Load("libPWG0base");
chain->GetUserInfo()->Add(dNdEtaCorrection);
- AliLog::SetClassDebugLevel("AlidNdEtaAnalysisSelector", AliLog::kWarning);
-
- chain->Process("AlidNdEtaAnalysisSelector.cxx+");
+ TString selectorName = ((aMC == kFALSE) ? "AlidNdEtaAnalysisSelector" : "AlidNdEtaAnalysisMCSelector");
+
+ AliLog::SetClassDebugLevel(selectorName, AliLog::kInfo);
+
+ chain->Process(selectorName + ".cxx+");
}
SRCS= AliSelector.cxx \
dNdEta/AlidNdEtaCorrectionSelector.cxx \
dNdEta/AlidNdEtaAnalysisSelector.cxx \
+ dNdEta/AlidNdEtaAnalysisMCSelector.cxx \
dNdEta/dNdEtaAnalysis.cxx \
dNdEta/dNdEtaCorrection.cxx \
esdTrackCuts/AliESDtrackCuts.cxx