]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/CheckESD.C
Commit message
[u/mrichter/AliRoot.git] / STEER / CheckESD.C
index ef0b4a9a2040dd1a1d2ea40eb9f14e8ce8601c97..31864186459c1721a172d5d67d6d81b3f03669f9 100644 (file)
@@ -1,4 +1,5 @@
 #if !defined( __CINT__) || defined(__MAKECINT__)
+#include <TROOT.h>
 #include <TFile.h>
 #include <TError.h>
 #include <TH1.h>
@@ -7,20 +8,23 @@
 #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"
-#else
-const Int_t kXiMinus = 3312;
-const Int_t kOmegaMinus = 3334;
+#include "AliPID.h"
+#include "AliESDpid.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)
@@ -155,8 +159,19 @@ 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);
+
+  // PID
 
-  // efficienc and resolution histograms
+  AliESDpid * pid = new AliESDpid(kTRUE);
+
+  // efficiency and resolution histograms
   Int_t nBinsPt = 15;
   Float_t minPt = 0.1;
   Float_t maxPt = 3.1;
@@ -176,15 +191,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;
     }
   }
@@ -211,8 +226,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, 
@@ -240,7 +255,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);
@@ -291,14 +306,15 @@ 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;
     }
 
+    // PID for MC
+    pid->MakePID(esd,kTRUE);
+
     // loop over tracks
     for (Int_t iTrack = 0; iTrack < esd->GetNumberOfTracks(); iTrack++) {
       AliESDtrack* track = esd->GetTrack(iTrack);
@@ -317,25 +333,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];
@@ -346,35 +359,21 @@ 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::kSPECIESC];
       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* caloTrack = esd->GetCaloTrack(iTrack);
-      TParticle* recParticle = caloTrack->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++) {
@@ -389,18 +388,19 @@ Bool_t CheckESD(const char* gAliceFileName = "galice.root",
     // 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;
@@ -414,18 +414,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);
@@ -442,6 +442,16 @@ Bool_t CheckESD(const char* gAliceFileName = "galice.root",
       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
@@ -512,13 +522,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");
@@ -677,12 +687,14 @@ Bool_t CheckESD(const char* gAliceFileName = "galice.root",
   delete hMassXi;
   delete hMassOmega;
 
+  delete esd;
   esdFile->Close();
   delete esdFile;
 
   runLoader->UnloadHeader();
   runLoader->UnloadKinematics();
   delete runLoader;
+  delete pid;
 
   // result of check
   Info("CheckESD", "check of ESD was successfull");