fTrigger(0),
fRecoVersion(0),
fMagneticField(0),
+ fT0zVertex(0),
fPrimaryVertex(),
fTracks("AliESDtrack",15000),
fCaloTracks("AliESDCaloTrack",500),
Int_t GetNumberOfMuonTracks() const {return fMuonTracks.GetEntriesFast();}
Int_t GetNumberOfV0s() const {return fV0s.GetEntriesFast();}
Int_t GetNumberOfCascades() const {return fCascades.GetEntriesFast();}
+
+ Float_t GetT0zVertex() const {return fT0zVertex;}
+ void SetT0zVertex(Float_t z) {fT0zVertex=z;}
void Print(Option_t *option="") const;
Int_t fRecoVersion; // Version of reconstruction
Float_t fMagneticField; // Solenoid Magnetic Field in kG : for compatibility with AliMagF
- AliESDVertex fPrimaryVertex; // Primary vertex
+ Float_t fT0zVertex; // vertex z position estimated by the START
+ AliESDVertex fPrimaryVertex; // Primary vertex estimated by the ITS
TClonesArray fTracks; // ESD tracks
TClonesArray fCaloTracks; // Calorimeters' ESD tracks
for (Int_t i=0; i<ntrk; i++) {
Int_t ns=AliESDtrack::kSPECIES;
Double_t p[10]={1.,1.,1.,1.,1.,1.,1.,1.,1.,1.};
+ const Double_t eps=1e-13;
AliESDtrack *t=event->GetTrack(i);
if ((t->GetStatus()&AliESDtrack::kITSpid )!=0) {
Double_t d[10];
t->GetITSpid(d);
- for (Int_t j=0; j<ns; j++) p[j]*=d[j];
+ Int_t j, ok=0;
+ for (j=0; j<ns; j++) if (d[j]>eps) ok=1;
+ if (ok)
+ for (j=0; j<ns; j++) p[j]*=d[j];
}
if ((t->GetStatus()&AliESDtrack::kTPCpid )!=0) {
Double_t d[10];
t->GetTPCpid(d);
- for (Int_t j=0; j<ns; j++) p[j]*=d[j];
+ Int_t j, ok=0;
+ for (j=0; j<ns; j++) if (d[j]>eps) ok=1;
+ if (ok)
+ for (j=0; j<ns; j++) p[j]*=d[j];
}
if ((t->GetStatus()&AliESDtrack::kTRDpid )!=0) {
Double_t d[10];
t->GetTRDpid(d);
- for (Int_t j=0; j<ns; j++) p[j]*=d[j];
+ Int_t j, ok=0;
+ for (j=0; j<ns; j++) if (d[j]>eps) ok=1;
+ if (ok)
+ for (j=0; j<ns; j++) p[j]*=d[j];
}
if (t->GetP()>0.7) // accept the TOF only for the high momenta
- if ((t->GetStatus()&AliESDtrack::kTOFpid )!=0) {
- Double_t d[10];
- t->GetTOFpid(d);
- for (Int_t j=0; j<ns; j++) p[j]*=d[j];
- }
+ if ((t->GetStatus()&AliESDtrack::kTOFpid )!=0) {
+ Double_t d[10];
+ t->GetTOFpid(d);
+ Int_t j, ok=0;
+ for (j=0; j<ns; j++) if (d[j]>eps) ok=1;
+ if (ok)
+ for (j=0; j<ns; j++) p[j]*=d[j];
+ }
+
+ if ((t->GetStatus()&AliESDtrack::kPHOSpid )!=0) {
+ Double_t d[10];
+ t->GetPHOSpid(d);
+ Int_t j, ok=0;
+ for (j=0; j<ns; j++) if (d[j]>eps) ok=1;
+ if (ok)
+ for (j=0; j<ns; j++) p[j]*=d[j];
+ }
+
+ if ((t->GetStatus()&AliESDtrack::kRICHpid )!=0) {
+ Double_t d[10];
+ t->GetRICHpid(d);
+ Int_t j, ok=0;
+ for (j=0; j<ns; j++) if (d[j]>eps) ok=1;
+ if (ok)
+ for (j=0; j<ns; j++) p[j]*=d[j];
+ }
t->SetESDpid(p);
}
fTRDsignal(0),
fTOFchi2(0),
fTOFindex(0),
-fTOFsignal(-1)
+fTOFsignal(-1),
+fPHOSsignal(-1),
+fRICHsignal(-1)
{
//
// The default ESD constructor
//
for (Int_t i=0; i<kSPECIES; i++) {
- fTrackTime[i]=0;
- fR[i]=0;
- fITSr[i]=0;
- fTPCr[i]=0;
- fTRDr[i]=0;
- fTOFr[i]=0;
+ fTrackTime[i]=0.;
+ fR[i]=1.;
+ fITSr[i]=1.;
+ fTPCr[i]=1.;
+ fTRDr[i]=1.;
+ fTOFr[i]=1.;
+ fPHOSr[i]=1.;
+ fRICHr[i]=1.;
}
+ fPHOSpos[0]=fPHOSpos[1]=fPHOSpos[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.; }
}
//_______________________________________________________________________
-Float_t AliESDtrack::GetMass() const {
+Double_t AliESDtrack::GetMass() const {
// Returns the mass of the most probable particle type
Float_t max=0.;
Int_t k=-1;
for (Int_t i=0; i<kSPECIES; i++) p[i]=fTOFr[i];
}
+
+
+//_______________________________________________________________________
+void AliESDtrack::SetPHOSpid(const Double_t *p) {
+ // Sets the probability of each particle type (in PHOS)
+ for (Int_t i=0; i<kSPECIES; i++) fPHOSr[i]=p[i];
+ SetStatus(AliESDtrack::kPHOSpid);
+}
+
+//_______________________________________________________________________
+void AliESDtrack::GetPHOSpid(Double_t *p) const {
+ // Gets probabilities of each particle type (in PHOS)
+ for (Int_t i=0; i<kSPECIES; i++) p[i]=fPHOSr[i];
+}
+
+
+//_______________________________________________________________________
+void AliESDtrack::SetRICHpid(const Double_t *p) {
+ // Sets the probability of each particle type (in RICH)
+ for (Int_t i=0; i<kSPECIES; i++) fRICHr[i]=p[i];
+ SetStatus(AliESDtrack::kRICHpid);
+}
+
+//_______________________________________________________________________
+void AliESDtrack::GetRICHpid(Double_t *p) const {
+ // Gets probabilities of each particle type (in RICH)
+ for (Int_t i=0; i<kSPECIES; i++) p[i]=fRICHr[i];
+}
+
+
+
//_______________________________________________________________________
void AliESDtrack::SetESDpid(const Double_t *p) {
// Sets the probability of each particle type for the ESD track
void GetExternalCovariance(Double_t cov[15]) const;
Double_t GetIntegratedLength() const {return fTrackLength;}
void GetIntegratedTimes(Double_t *times) const;
- Float_t GetMass() const;
+ Double_t GetMass() const;
Double_t GetP() const;
void GetPxPyPz(Double_t *p) const;
void GetXYZ(Double_t *r) const;
void GetTOFpid(Double_t *p) const;
UInt_t GetTOFcluster() const {return fTOFindex;}
void SetTOFcluster(UInt_t index) {fTOFindex=index;}
+
+ void SetRICHsignal(Double_t beta) {fRICHsignal=beta;}
+ Float_t GetRICHsignal() const {return fRICHsignal;}
+ void SetRICHpid(const Double_t *p);
+ void GetRICHpid(Double_t *p) const;
+
+ void SetPHOSposition(const Double_t *pos) {
+ fPHOSpos[0] = pos[0]; fPHOSpos[1]=pos[1]; fPHOSpos[2]=pos[2];
+ }
+ void SetPHOSsignal(Double_t ene) {fPHOSsignal = ene; }
+ void SetPHOSpid(const Double_t *p);
+ void GetPHOSposition(Double_t *pos) const {
+ pos[0]=fPHOSpos[0]; pos[1]=fPHOSpos[1]; pos[2]=fPHOSpos[2];
+ }
+ Float_t GetPHOSsignal() const {return fPHOSsignal;}
+ void GetPHOSpid(Double_t *p) const;
+
Bool_t IsOn(Int_t mask){ return (fFlags&mask)>0;}
+ Bool_t IsRICH(){ return fFlags&kRICHpid;}
enum {
kITSin=0x0001,kITSout=0x0002,kITSrefit=0x0004,kITSpid=0x0008,
kTPCin=0x0010,kTPCout=0x0020,kTPCrefit=0x0040,kTPCpid=0x0080,
kTRDin=0x0100,kTRDout=0x0200,kTRDrefit=0x0400,kTRDpid=0x0800,
kTOFin=0x1000,kTOFout=0x2000,kTOFrefit=0x4000,kTOFpid=0x8000,
- kTRDStop=0x10000,
+ kPHOSpid=0x10000, kRICHpid=0x20000,
+ kTRDStop=0x20000000,
kESDpid=0x40000000,
kTIME=0x80000000
};
Float_t fTPCsignal; // detector's PID signal
Float_t fTPCr[kSPECIES]; // "detector response probabilities" (for the PID)
Int_t fTPCLabel; // label according TPC
+
// TRD related track information
Float_t fTRDchi2; // chi2 in the TRD
Int_t fTRDncls; // number of clusters assigned in the TRD
Float_t fTOFsignal; // detector's PID signal
Float_t fTOFr[kSPECIES]; // "detector response probabilities" (for the PID)
- // HMPID related track information
+ // 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
+ // 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,2) //ESDtrack
};