X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=STEER%2FCheckESD.C;h=1f700d32b409b3c59f8f36feb6110839cd575313;hb=c1ae51a3dbeaf220236a3c7b7c92d9f811008bd0;hp=daed5e963c5f49b641d9447b43c8bb203a85677a;hpb=5e00415f92e63d977287908fab9a70b2f8fb2859;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/CheckESD.C b/STEER/CheckESD.C index daed5e963c5..1f700d32b40 100644 --- a/STEER/CheckESD.C +++ b/STEER/CheckESD.C @@ -1,4 +1,5 @@ #if !defined( __CINT__) || defined(__MAKECINT__) +#include #include #include #include @@ -7,17 +8,22 @@ #include #include #include +#include #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) @@ -152,8 +158,15 @@ Bool_t CheckESD(const char* gAliceFileName = "galice.root", 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; @@ -173,15 +186,15 @@ Bool_t CheckESD(const char* gAliceFileName = "galice.root", "#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; } } @@ -208,8 +221,8 @@ Bool_t CheckESD(const char* gAliceFileName = "galice.root", 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, @@ -237,7 +250,7 @@ Bool_t CheckESD(const char* gAliceFileName = "galice.root", 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); @@ -288,9 +301,7 @@ Bool_t CheckESD(const char* gAliceFileName = "galice.root", } // 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; @@ -314,25 +325,22 @@ Bool_t CheckESD(const char* gAliceFileName = "galice.root", 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]; @@ -343,59 +351,48 @@ Bool_t CheckESD(const char* gAliceFileName = "galice.root", 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; @@ -409,18 +406,18 @@ Bool_t CheckESD(const char* gAliceFileName = "galice.root", 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); @@ -437,6 +434,16 @@ Bool_t CheckESD(const char* gAliceFileName = "galice.root", selCascades.Remove(particle); nRecCascades++; } + + // loop over the clusters + { + for (Int_t iCluster=0; iClusterGetNumberOfCaloClusters(); iCluster++) { + AliESDCaloCluster * clust = esd->GetCaloCluster(iCluster); + if (clust->IsPHOS()) hEPHOS->Fill(clust->E()); + if (clust->IsEMCAL()) hEEMCAL->Fill(clust->E()); + } + } + } // perform checks @@ -507,13 +514,13 @@ Bool_t CheckESD(const char* gAliceFileName = "galice.root", } 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"); @@ -672,6 +679,7 @@ Bool_t CheckESD(const char* gAliceFileName = "galice.root", delete hMassXi; delete hMassOmega; + delete esd; esdFile->Close(); delete esdFile;