fITSLabel(0),
fTPCLabel(0),
fTRDLabel(0),
- fTOFCalChannel(0),
+ fTOFCalChannel(-1),
fTOFindex(-1),
fHMPIDqn(0),
fHMPIDcluIdx(-1),
fTRDsignal(0),
fTRDQuality(0),
fTRDBudget(0),
- fTOFsignal(0),
- fTOFsignalToT(0),
- fTOFsignalRaw(0),
- fTOFsignalDz(0),
- fTOFsignalDx(0),
+ fTOFsignal(99999),
+ fTOFsignalToT(99999),
+ fTOFsignalRaw(99999),
+ fTOFsignalDz(999),
+ fTOFsignalDx(999),
+ fTOFdeltaBC(999),
+ fTOFl0l1(999),
fCaloDx(0),
fCaloDz(0),
fHMPIDtrkX(0),
fTPCnclsFIter1(0),
fITSncls(0),
fITSClusterMap(0),
+ fITSSharedMap(0),
fTRDncls(0),
fTRDncls0(0),
fTRDntracklets(0),
}
for (i=0;i<4;i++) {fITSdEdxSamples[i]=0.;}
for (i=0;i<4;i++) {fTPCPoints[i]=0;}
- for (i=0;i<3;i++) {fTOFLabel[i]=0;}
+ for (i=0;i<3;i++) {fTOFLabel[i]=-1;}
for (i=0;i<10;i++) {fTOFInfo[i]=0;}
for (i=0;i<12;i++) {fITSModule[i]=-1;}
}
fTOFsignalRaw(track.fTOFsignalRaw),
fTOFsignalDz(track.fTOFsignalDz),
fTOFsignalDx(track.fTOFsignalDx),
+ fTOFdeltaBC(track.fTOFdeltaBC),
+ fTOFl0l1(track.fTOFl0l1),
fCaloDx(track.fCaloDx),
fCaloDz(track.fCaloDz),
fHMPIDtrkX(track.fHMPIDtrkX),
fTPCnclsFIter1(track.fTPCnclsIter1),
fITSncls(track.fITSncls),
fITSClusterMap(track.fITSClusterMap),
+ fITSSharedMap(track.fITSSharedMap),
fTRDncls(track.fTRDncls),
fTRDncls0(track.fTRDncls0),
fTRDntracklets(track.fTRDntracklets),
fITSLabel(0),
fTPCLabel(0),
fTRDLabel(0),
- fTOFCalChannel(0),
+ fTOFCalChannel(-1),
fTOFindex(-1),
fHMPIDqn(0),
fHMPIDcluIdx(-1),
fTRDsignal(0),
fTRDQuality(0),
fTRDBudget(0),
- fTOFsignal(0),
- fTOFsignalToT(0),
- fTOFsignalRaw(0),
- fTOFsignalDz(0),
- fTOFsignalDx(0),
+ fTOFsignal(99999),
+ fTOFsignalToT(99999),
+ fTOFsignalRaw(99999),
+ fTOFsignalDz(999),
+ fTOFsignalDx(999),
+ fTOFdeltaBC(999),
+ fTOFl0l1(999),
fCaloDx(0),
fCaloDz(0),
fHMPIDtrkX(0),
fTPCnclsFIter1(0),
fITSncls(0),
fITSClusterMap(0),
+ fITSSharedMap(0),
fTRDncls(0),
fTRDncls0(0),
fTRDntracklets(0),
}
for (i=0;i<4;i++) {fITSdEdxSamples[i]=0.;}
for (i=0;i<4;i++) {fTPCPoints[i]=0;}
- for (i=0;i<3;i++) {fTOFLabel[i]=0;}
+ for (i=0;i<3;i++) {fTOFLabel[i]=-1;}
for (i=0;i<10;i++) {fTOFInfo[i]=0;}
for (i=0;i<12;i++) {fITSModule[i]=-1;}
// Set ITS cluster map
fITSClusterMap=track->GetITSClusterMap();
+ fITSSharedMap=0;
fITSncls=0;
for(i=0; i<6; i++) {
if(HasPointOnITSLayer(i)) fITSncls++;
}
+ // Set TPC ncls
+ fTPCncls=track->GetTPCNcls();
+
+
// Set the combined PID
const Double_t *pid = track->PID();
if(pid){
fITSLabel(0),
fTPCLabel(0),
fTRDLabel(0),
- fTOFCalChannel(0),
+ fTOFCalChannel(-1),
fTOFindex(-1),
fHMPIDqn(0),
fHMPIDcluIdx(-1),
fTRDsignal(0),
fTRDQuality(0),
fTRDBudget(0),
- fTOFsignal(0),
- fTOFsignalToT(0),
- fTOFsignalRaw(0),
- fTOFsignalDz(0),
- fTOFsignalDx(0),
+ fTOFsignal(99999),
+ fTOFsignalToT(99999),
+ fTOFsignalRaw(99999),
+ fTOFsignalDz(999),
+ fTOFsignalDx(999),
+ fTOFdeltaBC(999),
+ fTOFl0l1(999),
fCaloDx(0),
fCaloDz(0),
fHMPIDtrkX(0),
fTPCnclsFIter1(0),
fITSncls(0),
fITSClusterMap(0),
+ fITSSharedMap(0),
fTRDncls(0),
fTRDncls0(0),
fTRDntracklets(0),
}
for (i=0;i<4;i++) {fITSdEdxSamples[i]=0.;}
for (i=0;i<4;i++) {fTPCPoints[i]=0;}
- for (i=0;i<3;i++) {fTOFLabel[i]=0;}
+ for (i=0;i<3;i++) {fTOFLabel[i]=-1;}
for (i=0;i<10;i++) {fTOFInfo[i]=0;}
for (i=0;i<12;i++) {fITSModule[i]=-1;}
fTOFsignalRaw = source.fTOFsignalRaw;
fTOFsignalDz = source.fTOFsignalDz;
fTOFsignalDx = source.fTOFsignalDx;
-
+ fTOFdeltaBC = source.fTOFdeltaBC;
+ fTOFl0l1 = source.fTOFl0l1;
+
for(int i = 0;i<10;++i){
fTOFInfo[i] = source.fTOFInfo[i];
}
fITSncls = source.fITSncls;
fITSClusterMap = source.fITSClusterMap;
+ fITSSharedMap = source.fITSSharedMap;
fTRDncls = source.fTRDncls;
fTRDncls0 = source.fTRDncls0;
fTRDntracklets = source.fTRDntracklets;
track.fCdz = fCdzTPC;
track.fCzz = fCzzTPC;
+ // copy the inner params
+ if(track.fIp) *track.fIp = *fIp;
+ else track.fIp = new AliExternalTrackParam(*fIp);
+
// copy the TPCinner parameters
if(track.fTPCInner) *track.fTPCInner = *fTPCInner;
else track.fTPCInner = new AliExternalTrackParam(*fTPCInner);
track.fCzzTPC = fCzzTPC;
track.fCchi2TPC = fCchi2TPC;
-
// copy all other TPC specific parameters
// replace label by TPC label
fITSchi2 = 0;
fITSncls = 0;
fITSClusterMap=0;
+ fITSSharedMap=0;
fITSsignal = 0;
for (Int_t i=0;i<4;i++) fITSdEdxSamples[i] = 0.;
for (Int_t i=0;i<AliPID::kSPECIES;i++) fITSr[i]=0;
// Reset TOF related track information
fTOFchi2 = 0;
fTOFindex = -1;
- fTOFsignal = 0;
- fTOFCalChannel = 0;
- fTOFsignalToT = 0;
- fTOFsignalRaw = 0;
- fTOFsignalDz = 0;
- fTOFsignalDx = 0;
+ fTOFsignal = 99999;
+ fTOFCalChannel = -1;
+ fTOFsignalToT = 99999;
+ fTOFsignalRaw = 99999;
+ fTOFsignalDz = 999;
+ fTOFsignalDx = 999;
+ fTOFdeltaBC = 999;
+ fTOFl0l1 = 999;
for (Int_t i=0;i<AliPID::kSPECIES;i++) fTOFr[i] = 0;
- for (Int_t i=0;i<3;i++) fTOFLabel[i] = 0;
+ for (Int_t i=0;i<3;i++) fTOFLabel[i] = -1;
for (Int_t i=0;i<10;i++) fTOFInfo[i] = 0;
// Reset HMPID related track information
//_______________________________________________________________________
Double_t AliESDtrack::GetMass() const {
// Returns the mass of the most probable particle type
+
+ Int_t i;
+ for (i=0; i<AliPID::kSPECIES-1; i++) {
+ if (fR[i] != fR[i+1]) break;
+ }
+ // If all the probabilities are equal, return the pion mass
+ if (i == AliPID::kSPECIES-1) return AliPID::ParticleMass(AliPID::kPion);
+
Float_t max=0.;
Int_t k=-1;
- for (Int_t i=0; i<AliPID::kSPECIES; i++) {
+ for (i=0; i<AliPID::kSPECIES; i++) {
if (fR[i]>max) {k=i; max=fR[i];}
}
if (k==0) { // dE/dx "crossing points" in the TPC
return AliPID::ParticleMass(AliPID::kPion);
}
+//______________________________________________________________________________
+Double_t AliESDtrack::M() const
+{
+ // Returns the assumed mass
+ // (the pion mass, if the particle can't be identified properly).
+
+ AliWarning("This is the ESD mass. Use it with care !");
+ return GetMass();
+}
+
//______________________________________________________________________________
Double_t AliESDtrack::E() const
{
return fTPCncls;
}
+//_______________________________________________________________________
+Float_t AliESDtrack::GetTPCClusterInfo(Int_t nNeighbours/*=3*/, Int_t type/*=0*/, Int_t row0, Int_t row1) const
+{
+ //
+ // TPC cluster information
+ // type 0: get fraction of found/findable clusters with neighbourhood definition
+ // 1: findable clusters with neighbourhood definition
+ // 2: found clusters
+ //
+ // definition of findable clusters:
+ // a cluster is defined as findable if there is another cluster
+ // within +- nNeighbours pad rows. The idea is to overcome threshold
+ // effects with a very simple algorithm.
+ //
+
+ if (type==2) return fTPCClusterMap.CountBits();
+
+ Int_t found=0;
+ Int_t findable=0;
+ Int_t last=-nNeighbours;
+
+ for (Int_t i=row0; i<row1; ++i){
+ //look to current row
+ if (fTPCClusterMap[i]) {
+ last=i;
+ ++found;
+ ++findable;
+ continue;
+ }
+ //look to nNeighbours before
+ if ((i-last)<=nNeighbours) {
+ ++findable;
+ continue;
+ }
+ //look to nNeighbours after
+ for (Int_t j=i+1; j<i+1+nNeighbours; ++j){
+ if (fTPCClusterMap[j]){
+ ++findable;
+ break;
+ }
+ }
+ }
+ if (type==1) return findable;
+
+ if (type==0){
+ Float_t fraction=0;
+ if (findable>0)
+ fraction=(Float_t)found/(Float_t)findable;
+ else
+ fraction=0;
+ return fraction;
+ }
+ return 0; // undefined type - default value
+}
+
+//_______________________________________________________________________
Double_t AliESDtrack::GetTPCdensity(Int_t row0, Int_t row1) const{
//
// GetDensity of the clusters on given region between row0 and row1
// in TRD layer "plane".
if (!fTRDnSlices) {
- AliError("No TRD info allocated for this track !");
+ AliDebug(2, "No TRD info allocated for this track.");
return -1.;
}
if ((plane<0) || (plane>=kTRDnPlanes)) {
- AliError("Info for TRD plane not available!");
+ AliWarning(Form("Request for TRD plane[%d] outside range.", plane));
return -1.;
}
UShort_t AliESDtrack::GetTPCnclsS(Int_t i0,Int_t i1) const{
//
- // get number of shared clusters
+ // get number of shared TPC clusters
//
return fTPCSharedMap.CountBits(i0)-fTPCSharedMap.CountBits(i1);
}
+
+UShort_t AliESDtrack::GetTPCncls(Int_t i0,Int_t i1) const{
+ //
+ // get number of TPC clusters
+ //
+ return fTPCClusterMap.CountBits(i0)-fTPCClusterMap.CountBits(i1);
+}