#include "AliESDVertex.h"
#include "AliESDtrack.h"
+#include "AliESDfriendTrack.h"
#include "AliKalmanTrack.h"
-#include "AliTrackPointArray.h"
#include "AliLog.h"
+#include "AliTrackPointArray.h"
ClassImp(AliESDtrack)
fITSsignal(0),
fITSLabel(0),
fITSFakeRatio(0),
- fITStrack(0),
fTPCchi2(0),
fTPCncls(0),
fTPCnclsF(0),
fTRDLabel(0),
fTRDQuality(0),
fTRDBudget(0),
- fTRDtrack(0),
fTOFchi2(0),
fTOFindex(0),
fTOFCalChannel(-1),
fTOFsignal(-1),
fTOFsignalToT(0),
- // fPHOSsignal(-1),
fRICHchi2(1e10),
fRICHncls(0),
fRICHindex(0),
fRICHdy(-1),
fRICHmipX(-1),
fRICHmipY(-1),
- fPoints(0)
+ fPoints(0),
+ fFriendTrack(new AliESDfriendTrack())
{
//
// The default ESD constructor
//
- for (Int_t i=0; i<AliPID::kSPECIES; i++) {
+ Int_t i;
+ for (i=0; i<AliPID::kSPECIES; i++) {
fTrackTime[i]=0.;
fR[i]=1.;
fITSr[i]=1.;
fRICHr[i]=1.;
}
- // for (Int_t i=0; i<AliPID::kSPECIESN; i++) {
- // fPHOSr[i] = 1.;
- // }
- // fPHOSpos[0]=fPHOSpos[1]=fPHOSpos[2]=0.;
-
- Int_t i;
- for (i=0; i<12; i++) fITSchi2MIP[i]=1e10;
- for (i=0; i<12; i++) { fITSindex[i]=-1; }
- for (i=0; i<180; i++) { fTPCindex[i]=-2; }
for (i=0; i<3; i++) { fKinkIndexes[i]=0;}
for (i=0; i<3; i++) { fV0Indexes[i]=-1;}
- for (i=0; i<180; i++) { fTRDindex[i]=-2; }
for (i=0;i<kNPlane;i++) {fTRDsignals[i]=0.; fTRDTimBin[i]=-1;}
for (i=0;i<4;i++) {fTPCPoints[i]=-1;}
for (i=0;i<3;i++) {fTOFLabel[i]=-1;}
for (i=0;i<10;i++) {fTOFInfo[i]=-1;}
- fTPCLabel = 0;
- fTRDLabel = 0;
- fTRDQuality =0;
- fTRDBudget =0;
- fITSLabel = 0;
- fITStrack = 0;
- fTRDtrack = 0;
}
//_______________________________________________________________________
fITSsignal(track.fITSsignal),
fITSLabel(track.fITSLabel),
fITSFakeRatio(track.fITSFakeRatio),
- fITStrack(0), //coping separatelly - in user code
fTPCchi2(track.fTPCchi2),
fTPCncls(track.fTPCncls),
fTPCnclsF(track.fTPCnclsF),
fTRDLabel(track.fTRDLabel),
fTRDQuality(track.fTRDQuality),
fTRDBudget(track.fTRDBudget),
- fTRDtrack(0),
fTOFchi2(track.fTOFchi2),
fTOFindex(track.fTOFindex),
fTOFCalChannel(track.fTOFCalChannel),
fTOFsignal(track.fTOFsignal),
fTOFsignalToT(track.fTOFsignalToT),
- //fPHOSsignal(track.fPHOSsignal),
fRICHchi2(track.fRICHchi2),
fRICHncls(track.fRICHncls),
fRICHindex(track.fRICHindex),
fRICHtheta(track.fRICHtheta),
fRICHphi(track.fRICHphi),
fRICHdx(track.fRICHdx),
- fRICHdy(track.fRICHdy)
+ fRICHdy(track.fRICHdy),
+ fRICHmipX(track.fRICHmipX),
+ fRICHmipY(track.fRICHmipY),
+ fPoints(0),
+ fFriendTrack(new AliESDfriendTrack(*(track.fFriendTrack)))
{
//
//copy constructor
for (Int_t i=0;i<AliPID::kSPECIES;i++) fTrackTime[i]=track.fTrackTime[i];
for (Int_t i=0;i<AliPID::kSPECIES;i++) fR[i]=track.fR[i];
//
- for (Int_t i=0;i<12;i++) fITSchi2MIP[i]=track.fITSchi2MIP[i];
- for (Int_t i=0;i<12;i++) fITSindex[i]=track.fITSindex[i];
for (Int_t i=0;i<AliPID::kSPECIES;i++) fITSr[i]=track.fITSr[i];
//
- for (Int_t i=0;i<180;i++) fTPCindex[i]=track.fTPCindex[i];
for (Int_t i=0;i<AliPID::kSPECIES;i++) fTPCr[i]=track.fTPCr[i];
for (Int_t i=0;i<4;i++) {fTPCPoints[i]=track.fTPCPoints[i];}
for (Int_t i=0; i<3;i++) { fKinkIndexes[i]=track.fKinkIndexes[i];}
for (Int_t i=0; i<3;i++) { fV0Indexes[i]=track.fV0Indexes[i];}
//
- for (Int_t i=0;i<180;i++) fTRDindex[i]=track.fTRDindex[i];
for (Int_t i=0;i<kNPlane;i++) {
fTRDsignals[i]=track.fTRDsignals[i];
fTRDTimBin[i]=track.fTRDTimBin[i];
}
for (Int_t i=0;i<AliPID::kSPECIES;i++) fTRDr[i]=track.fTRDr[i];
- //
for (Int_t i=0;i<AliPID::kSPECIES;i++) fTOFr[i]=track.fTOFr[i];
for (Int_t i=0;i<3;i++) fTOFLabel[i]=track.fTOFLabel[i];
for (Int_t i=0;i<10;i++) fTOFInfo[i]=track.fTOFInfo[i];
- //
- // for (Int_t i=0;i<3;i++) fPHOSpos[i]=track.fPHOSpos[i];
- //for (Int_t i=0;i<AliPID::kSPECIESN;i++) fPHOSr[i]=track.fPHOSr[i];
- //
for (Int_t i=0;i<AliPID::kSPECIES;i++) fRICHr[i]=track.fRICHr[i];
if (track.fCp) fCp=new AliExternalTrackParam(*track.fCp);
if (track.fIp) fIp=new AliExternalTrackParam(*track.fIp);
if (track.fOp) fOp=new AliExternalTrackParam(*track.fOp);
- fPoints =0;
- if (track.fPoints){
- fPoints = new AliTrackPointArray(*(track.fPoints));
- }
+
+ if (track.fPoints) fPoints=new AliTrackPointArray(*(track.fPoints));
}
+
//_______________________________________________________________________
AliESDtrack::~AliESDtrack(){
//
delete fIp;
delete fOp;
delete fCp;
- delete fITStrack;
- delete fTRDtrack;
+ delete fFriendTrack;
delete fPoints;
}
// Reset ITS track related information
fITSchi2 = 0;
- for (Int_t i=0;i<12;i++) fITSchi2MIP[i]=0;
fITSncls = 0;
- for (Int_t i=0;i<12;i++) fITSindex[i]=-1;
fITSsignal = 0;
for (Int_t i=0;i<AliPID::kSPECIES;i++) fITSr[i]=0;
fITSLabel = 0;
fITSFakeRatio = 0;
- fITStrack =0;
// Reset TPC related track information
fTPCchi2 = 0;
fTPCncls = 0;
fTPCnclsF = 0;
- for (Int_t i=0;i<180;i++) fTPCindex[i] = -2;
fTPCClusterMap = 0;
fTPCsignal= 0;
fTPCsignalS= 0;
fTRDchi2 = 0;
fTRDncls = 0;
fTRDncls0 = 0;
- for (Int_t i=0;i<180;i++) fTRDindex[i] = -2;
fTRDsignal = 0;
for (Int_t i=0;i<kNPlane;i++) {
fTRDsignals[i] = 0;
}
for (Int_t i=0;i<AliPID::kSPECIES;i++) fTRDr[i] = 0;
fTRDLabel = 0;
- fTRDtrack = 0;
fTRDQuality = 0;
fTRDBudget = 0;
for (Int_t i=0;i<3;i++) fTOFLabel[i] = 0;
for (Int_t i=0;i<10;i++) fTOFInfo[i] = 0;
- // Reset PHOS related track information
- //for (Int_t i=0;i<3;i++) fPHOSpos[i] = 0;
- //fPHOSsignal = 0;
- //for (Int_t i=0;i<AliPID::kSPECIESN;i++) fPHOSr[i] = 0;
-
// Reset RICH related track information
fRICHchi2 = 0;
fRICHncls = 0;
fRICHdx = 0;
fRICHdy = 0;
- fPoints = 0;
+ delete fFriendTrack; fFriendTrack = 0;
+ delete fPoints; fPoints = 0;
}
//_______________________________________________________________________
Double_t AliESDtrack::GetMass() const {
//
// This function updates track's running parameters
//
+ Int_t *index=0;
Bool_t rc=kTRUE;
SetStatus(flags);
switch (flags) {
case kITSin: case kITSout: case kITSrefit:
+ index=fFriendTrack->GetITSindices();
+ for (Int_t i=0;i<AliESDfriendTrack::kMaxITScluster;i++)
+ index[i]=t->GetClusterIndex(i);
fITSncls=t->GetNumberOfClusters();
fITSchi2=t->GetChi2();
- for (Int_t i=0;i<12;i++) fITSindex[i]=t->GetClusterIndex(i);
fITSsignal=t->GetPIDsignal();
fITSLabel = t->GetLabel();
fITSFakeRatio = t->GetFakeRatio();
if (!fIp) fIp=new AliExternalTrackParam(*t);
else fIp->Set(*t);
case kTPCout:
+ index=fFriendTrack->GetTPCindices();
if (flags & kTPCout){
if (!fOp) fOp=new AliExternalTrackParam(*t);
else fOp->Set(*t);
//"jump to case label crosses initialization of `Int_t prevrow'"
Int_t prevrow = -1;
// for (Int_t i=0;i<fTPCncls;i++)
- for (Int_t i=0;i<160;i++)
+ for (Int_t i=0;i<AliESDfriendTrack::kMaxTPCcluster;i++)
{
- fTPCindex[i]=t->GetClusterIndex(i);
+ index[i]=t->GetClusterIndex(i);
+ Int_t idx = index[i];
- if (fTPCindex[i]<0) continue;
+ if (idx<0) continue;
// Piotr's Cluster Map for HBT
// ### please change accordingly if cluster array is changing
// to "New TPC Tracking" style (with gaps in array)
- Int_t idx = fTPCindex[i];
Int_t sect = (idx&0xff000000)>>24;
Int_t row = (idx&0x00ff0000)>>16;
if (sect > 18) row +=63; //if it is outer sector, add number of inner sectors
break;
case kTRDout: case kTRDin: case kTRDrefit:
+ index=fFriendTrack->GetTRDindices();
fTRDLabel = t->GetLabel();
fTRDncls=t->GetNumberOfClusters();
fTRDchi2=t->GetChi2();
- for (Int_t i=0;i<fTRDncls;i++) fTRDindex[i]=t->GetClusterIndex(i);
+ for (Int_t i=0;i<fTRDncls;i++) index[i]=t->GetClusterIndex(i);
fTRDsignal=t->GetPIDsignal();
break;
case kTRDbackup:
SetStatus(AliESDtrack::kITSpid);
}
-void AliESDtrack::SetITSChi2MIP(const Float_t *chi2mip){
- for (Int_t i=0; i<12; i++) fITSchi2MIP[i]=chi2mip[i];
-}
//_______________________________________________________________________
void AliESDtrack::GetITSpid(Double_t *p) const {
// Gets the probability of each particle type (in ITS)
//---------------------------------------------------------------------
// This function returns indices of the assgined ITS clusters
//---------------------------------------------------------------------
- for (Int_t i=0; i<12; i++) idx[i]=fITSindex[i];
+ if (idx!=0) {
+ Int_t *index=fFriendTrack->GetITSindices();
+ for (Int_t i=0; i<AliESDfriendTrack::kMaxITScluster; i++) idx[i]=index[i];
+ }
return fITSncls;
}
//---------------------------------------------------------------------
// This function returns indices of the assgined ITS clusters
//---------------------------------------------------------------------
- if (idx!=0)
- for (Int_t i=0; i<180; i++) idx[i]=fTPCindex[i]; // MI I prefer some constant
+ if (idx!=0) {
+ Int_t *index=fFriendTrack->GetTPCindices();
+ for (Int_t i=0; i<AliESDfriendTrack::kMaxTPCcluster; i++) idx[i]=index[i];
+ }
return fTPCncls;
}
Int_t good = 0;
Int_t found = 0;
//
+ Int_t *index=fFriendTrack->GetTPCindices();
for (Int_t i=row0;i<=row1;i++){
- Int_t index = fTPCindex[i];
- if (index!=-1) good++; // track outside of dead zone
- if (index>0) found++;
+ Int_t idx = index[i];
+ if (idx!=-1) good++; // track outside of dead zone
+ if (idx>0) found++;
}
Float_t density=0.5;
if (good>(row1-row0)*0.5) density = Float_t(found)/Float_t(good);
//---------------------------------------------------------------------
// This function returns indices of the assgined TRD clusters
//---------------------------------------------------------------------
- if (idx!=0)
- for (Int_t i=0; i<180; i++) idx[i]=fTRDindex[i]; // MI I prefer some constant
+ if (idx!=0) {
+ Int_t *index=fFriendTrack->GetTRDindices();
+ for (Int_t i=0; i<AliESDfriendTrack::kMaxTRDcluster; i++) idx[i]=index[i];
+ }
return fTRDncls;
}
//Propagate to the DCA
Double_t crv=0.299792458e-3*b*GetParameter()[4];
Double_t tgfv=-(crv*x - snp)/(crv*y + TMath::Sqrt(1.-snp*snp));
- sn=tgfv/TMath::Sqrt(1.+ tgfv*tgfv); cs=TMath::Sqrt(1.- sn*sn);
+ sn=tgfv/TMath::Sqrt(1.+ tgfv*tgfv);
+ if (TMath::Abs(tgfv)>0.) cs = sn/tgfv;
+ else cs=1.;
x = xv*cs + yv*sn;
yv=-xv*sn + yv*cs; xv=x;
return kTRUE;
}
+void AliESDtrack::SetTrackPointArray(AliTrackPointArray *points) {
+ fPoints=points;
+ //fFriendTrack->SetTrackPointArray(points);
+}
+const AliTrackPointArray *AliESDtrack::GetTrackPointArray() const {
+ return fPoints;
+ //return fFriendTrack->GetTrackPointArray();
+}
+
//_______________________________________________________________________
void AliESDtrack::Print(Option_t *) const {
// Prints info on the track