#if !defined( __CINT__) || defined(__MAKECINT__)
+#include <TROOT.h>
#include <TFile.h>
#include <TError.h>
#include <TH1.h>
#include <TCanvas.h>
#include <TVector3.h>
#include <TPDGCode.h>
+#include <TParticle.h>
#include "AliRunLoader.h"
#include "AliLoader.h"
-#include "AliESD.h"
+#include "AliESDEvent.h"
+#include "AliESDv0.h"
+#include "AliESDcascade.h"
+#include "AliESDMuonTrack.h"
+#include "AliESDCaloCluster.h"
#include "AliRun.h"
#include "AliStack.h"
#include "AliHeader.h"
#include "AliGenEventHeader.h"
+#include "AliPID.h"
#endif
-
TH1F* CreateHisto(const char* name, const char* title,
Int_t nBins, Double_t xMin, Double_t xMax,
const char* xLabel = NULL, const char* yLabel = NULL)
Error("CheckESD", "opening ESD file %s failed", esdFileName);
return kFALSE;
}
+ AliESDEvent * esd = new AliESDEvent;
+ TTree* tree = (TTree*) esdFile->Get("esdTree");
+ if (!tree) {
+ Error("CheckESD", "no ESD tree found");
+ return kFALSE;
+ }
+ esd->ReadFromTree(tree);
- // efficienc and resolution histograms
+ // efficiency and resolution histograms
Int_t nBinsPt = 15;
Float_t minPt = 0.1;
Float_t maxPt = 3.1;
"#theta_{rec}-#theta_{sim} [mrad]", "N");
// PID
- Int_t partCode[AliESDtrack::kSPECIES] =
+ Int_t partCode[AliPID::kSPECIES] =
{kElectron, kMuonMinus, kPiPlus, kKPlus, kProton};
- const char* partName[AliESDtrack::kSPECIES+1] =
+ const char* partName[AliPID::kSPECIES+1] =
{"electron", "muon", "pion", "kaon", "proton", "other"};
- Double_t partFrac[AliESDtrack::kSPECIES] =
+ Double_t partFrac[AliPID::kSPECIES] =
{0.01, 0.01, 0.85, 0.10, 0.05};
- Int_t identified[AliESDtrack::kSPECIES+1][AliESDtrack::kSPECIES];
- for (Int_t iGen = 0; iGen < AliESDtrack::kSPECIES+1; iGen++) {
- for (Int_t iRec = 0; iRec < AliESDtrack::kSPECIES; iRec++) {
+ Int_t identified[AliPID::kSPECIES+1][AliPID::kSPECIES];
+ for (Int_t iGen = 0; iGen < AliPID::kSPECIES+1; iGen++) {
+ for (Int_t iRec = 0; iRec < AliPID::kSPECIES; iRec++) {
identified[iGen][iRec] = 0;
}
}
hResTOFWrong->SetLineColor(kRed);
// calorimeters
- TH1F* hEPHOS = CreateHisto("hEPHOS", "PHOS", 100, 0, 5, "E [GeV]", "N");
- TH1F* hEEMCAL = CreateHisto("hEEMCAL", "EMCAL", 100, 0, 2, "E [GeV]", "N");
+ TH1F* hEPHOS = CreateHisto("hEPHOS", "PHOS", 100, 0, 50, "E [GeV]", "N");
+ TH1F* hEEMCAL = CreateHisto("hEEMCAL", "EMCAL", 100, 0, 50, "E [GeV]", "N");
// muons
TH1F* hPtMUON = CreateHisto("hPtMUON", "MUON", 100, 0, 20,
runLoader->GetEvent(iEvent);
// select simulated primary particles, V0s and cascades
- AliStack* stack = gAlice->Stack();
+ AliStack* stack = runLoader->Stack();
Int_t nParticles = stack->GetNtrack();
TArrayF vertex(3);
runLoader->GetHeader()->GenEventHeader()->PrimaryVertex(vertex);
}
// get the event summary data
- char esdName[256];
- sprintf(esdName, "ESD%d", iEvent);
- AliESD* esd = (AliESD*) esdFile->Get(esdName);
+ tree->GetEvent(iEvent);
if (!esd) {
Error("CheckESD", "no ESD object found for event %d", iEvent);
return kFALSE;
if (track->GetLabel() < 0) nFake++;
// resolutions
- Double_t p[3];
- track->GetConstrainedPxPyPz(p);
- TVector3 pTrack(p);
- hResPtInv->Fill(100. * (1./pTrack.Pt() - 1./particle->Pt()) *
+ hResPtInv->Fill(100. * (TMath::Abs(track->GetSigned1Pt()) - 1./particle->Pt()) *
particle->Pt());
- hResPhi->Fill(1000. * (pTrack.Phi() - particle->Phi()));
- hResTheta->Fill(1000. * (pTrack.Theta() - particle->Theta()));
+ hResPhi->Fill(1000. * (track->Phi() - particle->Phi()));
+ hResTheta->Fill(1000. * (track->Theta() - particle->Theta()));
// PID
if ((track->GetStatus() & AliESDtrack::kESDpid) == 0) continue;
Int_t iGen = 5;
- for (Int_t i = 0; i < AliESDtrack::kSPECIES; i++) {
+ for (Int_t i = 0; i < AliPID::kSPECIES; i++) {
if (TMath::Abs(particle->GetPdgCode()) == partCode[i]) iGen = i;
}
- Double_t probability[AliESDtrack::kSPECIES];
+ Double_t probability[AliPID::kSPECIES];
track->GetESDpid(probability);
Double_t pMax = 0;
Int_t iRec = 0;
- for (Int_t i = 0; i < AliESDtrack::kSPECIES; i++) {
+ for (Int_t i = 0; i < AliPID::kSPECIES; i++) {
probability[i] *= partFrac[i];
if (probability[i] > pMax) {
pMax = probability[i];
if (iGen == iRec) nIdentified++;
// dE/dx and TOF
- Double_t time[AliESDtrack::kSPECIES];
+ Double_t time[AliPID::kSPECIES];
track->GetIntegratedTimes(time);
if (iGen == iRec) {
- hDEdxRight->Fill(pTrack.Mag(), track->GetTPCsignal());
+ hDEdxRight->Fill(particle->P(), track->GetTPCsignal());
if ((track->GetStatus() & AliESDtrack::kTOFpid) != 0) {
hResTOFRight->Fill(track->GetTOFsignal() - time[iRec]);
}
} else {
- hDEdxWrong->Fill(pTrack.Mag(), track->GetTPCsignal());
+ hDEdxWrong->Fill(particle->P(), track->GetTPCsignal());
if ((track->GetStatus() & AliESDtrack::kTOFpid) != 0) {
hResTOFWrong->Fill(track->GetTOFsignal() - time[iRec]);
}
}
}
- // loop over calo tracks
- for (Int_t iTrack = 0; iTrack < esd->GetNumberOfCaloTracks(); iTrack++) {
- AliESDCaloTrack* track = esd->GetCaloTrack(iTrack);
- TParticle* recParticle = track->GetRecParticle();
- if (recParticle->InheritsFrom("AliPHOSRecParticle")) {
- hEPHOS->Fill(recParticle->Energy());
- } else if (recParticle->InheritsFrom("AliEMCALRecParticle")) {
- hEEMCAL->Fill(recParticle->Energy());
- } else {
- Warning("CheckESD", "unknown calo particle");
- recParticle->Dump();
- }
- }
-
// loop over muon tracks
+ {
for (Int_t iTrack = 0; iTrack < esd->GetNumberOfMuonTracks(); iTrack++) {
- AliESDMuonTrack* track = esd->GetMuonTrack(iTrack);
- Double_t ptInv = TMath::Abs(track->GetInverseBendingMomentum());
+ AliESDMuonTrack* muonTrack = esd->GetMuonTrack(iTrack);
+ Double_t ptInv = TMath::Abs(muonTrack->GetInverseBendingMomentum());
if (ptInv > 0.001) {
hPtMUON->Fill(1./ptInv);
}
}
+ }
// loop over V0s
for (Int_t iV0 = 0; iV0 < esd->GetNumberOfV0s(); iV0++) {
AliESDv0* v0 = esd->GetV0(iV0);
- switch (v0->GetPdgCode()) {
- case kK0Short : hMassK0->Fill(v0->GetEffMass()); break;
- case kLambda0 : hMassLambda->Fill(v0->GetEffMass()); break;
- case kLambda0Bar: hMassLambdaBar->Fill(v0->GetEffMass()); break;
- default : break;
- }
+ if (v0->GetOnFlyStatus()) continue;
+ v0->ChangeMassHypothesis(kK0Short);
+ hMassK0->Fill(v0->GetEffMass());
+ v0->ChangeMassHypothesis(kLambda0);
+ hMassLambda->Fill(v0->GetEffMass());
+ v0->ChangeMassHypothesis(kLambda0Bar);
+ hMassLambdaBar->Fill(v0->GetEffMass());
Int_t negLabel = TMath::Abs(esd->GetTrack(v0->GetNindex())->GetLabel());
if (negLabel > stack->GetNtrack()) continue; // background
Int_t negMother = stack->Particle(negLabel)->GetMother(0);
if (negMother < 0) continue;
- Int_t posLabel = TMath::Abs(esd->GetTrack(v0->GetNindex())->GetLabel());
+ Int_t posLabel = TMath::Abs(esd->GetTrack(v0->GetPindex())->GetLabel());
if (posLabel > stack->GetNtrack()) continue; // background
Int_t posMother = stack->Particle(posLabel)->GetMother(0);
if (negMother != posMother) continue;
for (Int_t iCascade = 0; iCascade < esd->GetNumberOfCascades();
iCascade++) {
AliESDcascade* cascade = esd->GetCascade(iCascade);
- switch (TMath::Abs(cascade->GetPdgCode())) {
- case kXiMinus : hMassXi->Fill(cascade->GetEffMass()); break;
- case kOmegaMinus: hMassOmega->Fill(cascade->GetEffMass()); break;
- default : break;
- }
+ Double_t v0q;
+ cascade->ChangeMassHypothesis(v0q,kXiMinus);
+ hMassXi->Fill(cascade->GetEffMassXi());
+ cascade->ChangeMassHypothesis(v0q,kOmegaMinus);
+ hMassOmega->Fill(cascade->GetEffMassXi());
Int_t negLabel = TMath::Abs(esd->GetTrack(cascade->GetNindex())
->GetLabel());
if (negLabel > stack->GetNtrack()) continue; // background
Int_t negMother = stack->Particle(negLabel)->GetMother(0);
if (negMother < 0) continue;
- Int_t posLabel = TMath::Abs(esd->GetTrack(cascade->GetNindex())
+ Int_t posLabel = TMath::Abs(esd->GetTrack(cascade->GetPindex())
->GetLabel());
if (posLabel > stack->GetNtrack()) continue; // background
Int_t posMother = stack->Particle(posLabel)->GetMother(0);
selCascades.Remove(particle);
nRecCascades++;
}
+
+ // loop over the clusters
+ {
+ for (Int_t iCluster=0; iCluster<esd->GetNumberOfCaloClusters(); iCluster++) {
+ AliESDCaloCluster * clust = esd->GetCaloCluster(iCluster);
+ if (clust->IsPHOS()) hEPHOS->Fill(clust->E());
+ if (clust->IsEMCAL()) hEEMCAL->Fill(clust->E());
+ }
+ }
+
}
// perform checks
}
printf("%9s:", "gen\\rec");
- for (Int_t iRec = 0; iRec < AliESDtrack::kSPECIES; iRec++) {
+ for (Int_t iRec = 0; iRec < AliPID::kSPECIES; iRec++) {
printf("%9s", partName[iRec]);
}
printf("\n");
- for (Int_t iGen = 0; iGen < AliESDtrack::kSPECIES+1; iGen++) {
+ for (Int_t iGen = 0; iGen < AliPID::kSPECIES+1; iGen++) {
printf("%9s:", partName[iGen]);
- for (Int_t iRec = 0; iRec < AliESDtrack::kSPECIES; iRec++) {
+ for (Int_t iRec = 0; iRec < AliPID::kSPECIES; iRec++) {
printf("%9d", identified[iGen][iRec]);
}
printf("\n");
delete hMassXi;
delete hMassOmega;
+ delete esd;
esdFile->Close();
delete esdFile;