New version of AliESD
authoralibrary <alibrary@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 6 May 2004 12:42:30 +0000 (12:42 +0000)
committeralibrary <alibrary@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 6 May 2004 12:42:30 +0000 (12:42 +0000)
STEER/AliESD.cxx
STEER/AliESD.h
STEER/AliESDtrack.cxx
STEER/AliESDtrack.h
STEER/AliRunLoader.cxx

index 6a7627b..fffee71 100644 (file)
@@ -41,7 +41,9 @@ AliESD::AliESD():
   fV0s("AliESDv0",200),
   fCascades("AliESDcascade",20),
   fPHOSParticles(0), 
-  fFirstPHOSParticle(-1){
+  fEMCALParticles(0), 
+  fFirstPHOSParticle(-1), 
+  fFirstEMCALParticle(-1){
 }
 
 //______________________________________________________________________________
@@ -76,8 +78,9 @@ void AliESD::Print(Option_t *) const
         fPrimaryVertex.GetZv(), fPrimaryVertex.GetZRes());
   printf("Event from reconstruction version %d \n",fRecoVersion);
   printf("Number of tracks: \n");
-  printf("                 charged   %d\n",GetNumberOfTracks()-GetNumberOfPHOSParticles());
+  printf("                 charged   %d\n",GetNumberOfTracks()-GetNumberOfPHOSParticles()-GetNumberOfEMCALParticles());
   printf("                 phos      %d\n", GetNumberOfPHOSParticles());
+  printf("                 emcal     %d\n", GetNumberOfEMCALParticles());
   printf("                 muon      %d\n", GetNumberOfMuonTracks());
   printf("                 pmd       %d\n", GetNumberOfPmdTracks());
   printf("                 v0        %d\n", GetNumberOfV0s());
index bf466be..c80dda9 100644 (file)
@@ -86,6 +86,10 @@ public:
   Int_t GetNumberOfPHOSParticles() const {return fPHOSParticles;}
   void  SetNumberOfPHOSParticles(Int_t part) { fPHOSParticles = part ; }
   void  SetFirstPHOSParticle(Int_t index) { fFirstPHOSParticle = index ; } 
+  Int_t GetNumberOfEMCALParticles() const {return fEMCALParticles;}
+  void  SetNumberOfEMCALParticles(Int_t part) { fEMCALParticles = part ; }
+  void  SetFirstEMCALParticle(Int_t index) { fFirstEMCALParticle = index ; } 
+
 
   Float_t GetT0zVertex() const {return fT0zVertex;}
   void SetT0zVertex(Float_t z) {fT0zVertex=z;}
@@ -110,9 +114,11 @@ protected:
   TClonesArray  fV0s;            // V0 vertices
   TClonesArray  fCascades;       // Cascade vertices
   Int_t         fPHOSParticles;  // Number of PHOS particles (stored as fTracks)
+  Int_t         fEMCALParticles; // Number of EMCAL particles (stored as fTracks)
   Int_t         fFirstPHOSParticle; // First PHOS particle in the fTracks list 
-  
-  ClassDef(AliESD,5)  //ESD class 
+  Int_t         fFirstEMCALParticle;// First EMCAL particle in the fTracks list 
+  ClassDef(AliESD,6)  //ESD class 
                       //ver. 2: Magnetic Field Added; skowron
 };
 
index cfbb8cd..dccac3a 100644 (file)
@@ -21,6 +21,7 @@
 //-----------------------------------------------------------------
 
 #include "TMath.h"
+#include "TString.h"
 
 #include "AliESDtrack.h"
 #include "AliKalmanTrack.h"
@@ -56,6 +57,7 @@ fTOFchi2(0),
 fTOFindex(0),
 fTOFsignal(-1),
 fPHOSsignal(-1),
+fEMCALsignal(-1),
 fRICHsignal(-1)
 {
   //
@@ -71,10 +73,14 @@ fRICHsignal(-1)
     fRICHr[i]=1.;
   }
   
-  for (Int_t i=0; i<kSPECIESN; i++)
-    fPHOSr[i]= 1.;
+  for (Int_t i=0; i<kSPECIESN; i++) {
+    fPHOSr[i]  = 1.;
+    fEMCALr[i] = 1.;
+  }
+
  
   fPHOSpos[0]=fPHOSpos[1]=fPHOSpos[2]=0.;
+  fEMCALpos[0]=fEMCALpos[1]=fEMCALpos[2]=0.;
   Int_t i;
   for (i=0; i<5; i++)  { fRp[i]=0.; fCp[i]=0.; fIp[i]=0.; fOp[i]=0.;}
   for (i=0; i<15; i++) { fRc[i]=0.; fCc[i]=0.; fIc[i]=0.; fOc[i]=0.;   }
@@ -205,13 +211,19 @@ Bool_t AliESDtrack::UpdateTrackParams(AliKalmanTrack *t, ULong_t flags) {
     break;
 
   case kTRDout:
-    { //requested by the PHOS  ("temporary solution")
+    { //requested by the PHOS/EMCAL  ("temporary solution")
       Double_t r=460.;
       if (t->PropagateTo(r,30.,0.)) {  
          fOalpha=t->GetAlpha();
          t->GetExternalParameters(fOx,fOp);
          t->GetExternalCovariance(fOc);
       }
+      r=450.;
+      if (t->PropagateTo(r,30.,0.)) {  
+         fXalpha=t->GetAlpha();
+         t->GetExternalParameters(fXx,fXp);
+         t->GetExternalCovariance(fXc);
+      }
     }
   case kTOFin: 
     break;
@@ -377,26 +389,56 @@ void AliESDtrack::GetInnerExternalCovariance(Double_t cov[15]) const
  
 }
 
-void AliESDtrack::GetOuterPxPyPz(Double_t *p) const {
+void AliESDtrack::GetOuterPxPyPz(Double_t *p, TString det) const {
   //---------------------------------------------------------------------
   // This function returns the global track momentum components
   // af the radius of the PHOS
   //---------------------------------------------------------------------
-  if (fOx==0) {p[0]=p[1]=p[2]=0.; return;}
-  Double_t phi=TMath::ASin(fOp[2]) + fOalpha;
-  Double_t pt=1./TMath::Abs(fOp[4]);
-  p[0]=pt*TMath::Cos(phi); p[1]=pt*TMath::Sin(phi); p[2]=pt*fOp[3]; 
+  p[0]=p[1]=p[2]=0. ; 
+  if (det == "PHOS") { 
+    if (fOx==0) 
+      return;
+    Double_t phi=TMath::ASin(fOp[2]) + fOalpha;
+    Double_t pt=1./TMath::Abs(fOp[4]);
+    p[0]=pt*TMath::Cos(phi); 
+    p[1]=pt*TMath::Sin(phi); 
+    p[2]=pt*fOp[3];
+  } 
+  else if (det == "EMCAL" ) {
+    if (fXx==0)
+      return;
+    Double_t phi=TMath::ASin(fXp[2]) + fXalpha;
+    Double_t pt=1./TMath::Abs(fXp[4]);
+    p[0]=pt*TMath::Cos(phi); 
+    p[1]=pt*TMath::Sin(phi); 
+    p[2]=pt*fXp[3];
+  }
+  else 
+    Warning("GetOuterPxPyPz", "Only valid for PHOS or EMCAL") ; 
 }
 
-void AliESDtrack::GetOuterXYZ(Double_t *xyz) const {
+void AliESDtrack::GetOuterXYZ(Double_t *xyz, TString det) const {
   //---------------------------------------------------------------------
   // This function returns the global track position
-  // af the radius of the PHOS
-  //---------------------------------------------------------------------
-  if (fOx==0) {xyz[0]=xyz[1]=xyz[2]=0.; return;}
-  Double_t phi=TMath::ATan2(fOp[0],fOx) + fOalpha;
-  Double_t r=TMath::Sqrt(fOx*fOx + fOp[0]*fOp[0]);
-  xyz[0]=r*TMath::Cos(phi); xyz[1]=r*TMath::Sin(phi); xyz[2]=fOp[1]; 
+  // af the radius of the PHOS/EMCAL
+  //---------------------------------------------------------------------
+  xyz[0]=xyz[1]=xyz[2]=0.;
+  if ( det == "PHOS" ) {
+    if (fOx==0) 
+      return;
+    Double_t phi=TMath::ATan2(fOp[0],fOx) + fOalpha;
+    Double_t r=TMath::Sqrt(fOx*fOx + fOp[0]*fOp[0]);
+    xyz[0]=r*TMath::Cos(phi); xyz[1]=r*TMath::Sin(phi); xyz[2]=fOp[1]; 
+  } 
+  else if ( det == "EMCAL" ) {
+    if (fXx==0) 
+      return;
+    Double_t phi=TMath::ATan2(fXp[0],fOx) + fXalpha;
+    Double_t r=TMath::Sqrt(fXx*fXx + fXp[0]*fXp[0]);
+    xyz[0]=r*TMath::Cos(phi); 
+    xyz[1]=r*TMath::Sin(phi); 
+    xyz[2]=fXp[1]; 
+  } 
 }
 
 //_______________________________________________________________________
@@ -523,6 +565,18 @@ void AliESDtrack::GetPHOSpid(Double_t *p) const {
   for (Int_t i=0; i<kSPECIESN; i++) p[i]=fPHOSr[i];
 }
 
+//_______________________________________________________________________
+void AliESDtrack::SetEMCALpid(const Double_t *p) {  
+  // Sets the probability of each particle type (in EMCAL)
+  for (Int_t i=0; i<kSPECIESN; i++) fEMCALr[i]=p[i];
+  SetStatus(AliESDtrack::kEMCALpid);
+}
+
+//_______________________________________________________________________
+void AliESDtrack::GetEMCALpid(Double_t *p) const {
+  // Gets probabilities of each particle type (in EMCAL)
+  for (Int_t i=0; i<kSPECIESN; i++) p[i]=fEMCALr[i];
+}
 
 //_______________________________________________________________________
 void AliESDtrack::SetRICHpid(const Double_t *p) {  
@@ -601,4 +655,11 @@ void AliESDtrack::Print(Option_t *) const {
       printf("%f, ", p[index]) ;
     printf("\n           signal = %f\n", GetPHOSsignal()) ;
   }
+  if( IsOn(kEMCALpid) ){
+    printf("From EMCAL: ") ; 
+    GetEMCALpid(p) ; 
+    for(index = 0 ; index < kSPECIESN; index++) 
+      printf("%f, ", p[index]) ;
+    printf("\n           signal = %f\n", GetEMCALsignal()) ;
+  }
 } 
index a022b21..2d2e60f 100644 (file)
@@ -14,7 +14,7 @@
 
 #include <TBits.h>
 #include <TObject.h>
-
+class TString ; 
 class AliKalmanTrack;
 
 class AliESDtrack : public TObject {
@@ -59,8 +59,8 @@ public:
   Double_t GetInnerAlpha() const {return fIalpha;}
   
   
-  void GetOuterPxPyPz(Double_t *p) const;
-  void GetOuterXYZ(Double_t *r) const;
+  void GetOuterPxPyPz(Double_t *p, TString det) const;
+  void GetOuterXYZ(Double_t *r, TString det) const;
 
   void SetITSpid(const Double_t *p);
   void SetITSChi2MIP(const Float_t *chi2mip);
@@ -114,9 +114,21 @@ public:
   Float_t GetPHOSsignal() const {return fPHOSsignal;}
   void GetPHOSpid(Double_t *p) const;  
 
+  void SetEMCALposition(const Double_t *pos)  {
+    fEMCALpos[0] = pos[0]; fEMCALpos[1]=pos[1]; fEMCALpos[2]=pos[2];
+  }
+  void SetEMCALsignal(Double_t ene) {fEMCALsignal = ene; }
+  void SetEMCALpid(const Double_t *p);
+  void GetEMCALposition(Double_t *pos) const {
+    pos[0]=fEMCALpos[0]; pos[1]=fEMCALpos[1]; pos[2]=fEMCALpos[2];
+  }
+  Float_t GetEMCALsignal() const {return fEMCALsignal;}
+  void GetEMCALpid(Double_t *p) const;  
+
   Bool_t IsOn(Int_t mask) const {return (fFlags&mask)>0;}
-  Bool_t IsRICH() const {return fFlags&kRICHpid;}
-  Bool_t IsPHOS() const {return fFlags&kPHOSpid;}
+  Bool_t IsRICH()  const {return fFlags&kRICHpid;}
+  Bool_t IsPHOS()  const {return fFlags&kPHOSpid;}
+  Bool_t IsEMCAL() const {return fFlags&kEMCALpid;}
 
   virtual void Print(Option_t * opt) const ; 
 
@@ -125,16 +137,16 @@ public:
     kTPCin=0x0010,kTPCout=0x0020,kTPCrefit=0x0040,kTPCpid=0x0080,
     kTRDin=0x0100,kTRDout=0x0200,kTRDrefit=0x0400,kTRDpid=0x0800,
     kTOFin=0x1000,kTOFout=0x2000,kTOFrefit=0x4000,kTOFpid=0x8000,
-    kPHOSpid=0x10000, kRICHpid=0x20000,
+    kPHOSpid=0x10000, kRICHpid=0x20000, kEMCALpid=0x40000, 
     kTRDStop=0x20000000,
     kESDpid=0x40000000,
     kTIME=0x80000000
   }; 
   enum {
     kSPECIES=5, // Number of particle species recognized by the PID
-    kSPECIESN=10, //  Number of charged+neutral particle species recognized by the PHOS PID
+    kSPECIESN=10, //  Number of charged+neutral particle species recognized by the PHOS/EMCAL PID
     kElectron=0, kMuon=1, kPion=2, kKaon=3, kProton=4, kPhoton=5, 
-    kPi0=6, kNeutron=7, kKaon0=8, kEleCon=9 // PHOS definition
+    kPi0=6, kNeutron=7, kKaon0=8, kEleCon=9 // PHOS/EMCAL definition
   };
 protected:
   ULong_t   fFlags;        // Reconstruction status flags 
@@ -171,6 +183,12 @@ protected:
   Double_t fOp[5];    // external track parameters
   Double_t fOc[15];   // external cov. matrix of the track parameters
 
+//Track parameters at the radius of the EMCAL
+  Double_t fXalpha;   // Track rotation angle
+  Double_t fXx;       // x-coordinate of the track reference plane
+  Double_t fXp[5];    // external track parameters
+  Double_t fXc[15];   // external cov. matrix of the track parameters
+
   // ITS related track information
   Float_t fITSchi2;        // chi2 in the ITS
   Float_t fITSchi2MIP[6];     // chi2s in the ITS
@@ -206,13 +224,18 @@ protected:
   // PHOS related track information 
   Float_t fPHOSpos[3]; //position localised by PHOS in global coordinate system
   Float_t fPHOSsignal; // energy measured by PHOS
-  Float_t fPHOSr[kSPECIES]; // PID information from PHOS
+  Float_t fPHOSr[kSPECIESN]; // PID information from PHOS
+
+  // EMCAL related track information 
+  Float_t fEMCALpos[3]; //position localised by EMCAL in global coordinate system
+  Float_t fEMCALsignal; // energy measured by EMCAL
+  Float_t fEMCALr[kSPECIESN]; // PID information from EMCAL
 
   // HMPID related track information
   Float_t fRICHsignal;     // detector's PID signal (beta for RICH)
   Float_t fRICHr[kSPECIES];// "detector response probabilities" (for the PID)
        
-  ClassDef(AliESDtrack,4)  //ESDtrack 
+  ClassDef(AliESDtrack,5)  //ESDtrack 
 };
 
 #endif 
index cb9fd79..1d03489 100644 (file)
@@ -423,7 +423,7 @@ AliRunLoader* AliRunLoader::Open
  TFile * gAliceFile = TFile::Open(filename,option);//open a file
  if (!gAliceFile) 
   {//null pointer returned
-    ::Error("AliRunLoader::Open","Can not open file %s.",filename);
+    ::Fatal("AliRunLoader::Open","Can not open file %s.",filename);
     return 0x0;
   }