]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AliESDtrack.cxx
Initialization of fAmpThreshold is added to ctors.
[u/mrichter/AliRoot.git] / STEER / AliESDtrack.cxx
index dcdab3248e0bbafc8713ec428d858d4a8ab67d8a..44669f7b2c291cb0548965c035f244f5ac39db64 100644 (file)
 #include "AliESDVertex.h"
 #include "AliESDtrack.h"
 #include "AliKalmanTrack.h"
+#include "AliVTrack.h"
 #include "AliLog.h"
 #include "AliTrackPointArray.h"
 #include "TPolyMarker3D.h"
@@ -171,7 +172,7 @@ AliESDtrack::AliESDtrack() :
   fTOFCalChannel(0),
   fTOFindex(-1),
   fHMPIDqn(0),
-  fHMPIDcluIdx(0),
+  fHMPIDcluIdx(-1),
   fEMCALindex(kEMCALNoMatch),
   fHMPIDtrkTheta(0),
   fHMPIDtrkPhi(0),
@@ -179,6 +180,7 @@ AliESDtrack::AliESDtrack() :
   fTrackLength(0),
   fdTPC(0),fzTPC(0),
   fCddTPC(0),fCdzTPC(0),fCzzTPC(0),
+  fCchi2TPC(0),
   fD(0),fZ(0),
   fCdd(0),fCdz(0),fCzz(0),
   fCchi2(0),
@@ -187,6 +189,7 @@ AliESDtrack::AliESDtrack() :
   fTRDchi2(0),
   fTOFchi2(0),
   fHMPIDchi2(0),
+  fGlobalChi2(0),
   fITSsignal(0),
   fTPCsignal(0),
   fTPCsignalS(0),
@@ -265,6 +268,7 @@ AliESDtrack::AliESDtrack(const AliESDtrack& track):
   fTrackLength(track.fTrackLength),
   fdTPC(track.fdTPC),fzTPC(track.fzTPC),
   fCddTPC(track.fCddTPC),fCdzTPC(track.fCdzTPC),fCzzTPC(track.fCzzTPC),
+  fCchi2TPC(track.fCchi2TPC),
   fD(track.fD),fZ(track.fZ),
   fCdd(track.fCdd),fCdz(track.fCdz),fCzz(track.fCzz),
   fCchi2(track.fCchi2),
@@ -273,6 +277,7 @@ AliESDtrack::AliESDtrack(const AliESDtrack& track):
   fTRDchi2(track.fTRDchi2),
   fTOFchi2(track.fTOFchi2),
   fHMPIDchi2(track.fHMPIDchi2),
+  fGlobalChi2(track.fGlobalChi2),
   fITSsignal(track.fITSsignal),
   fTPCsignal(track.fTPCsignal),
   fTPCsignalS(track.fTPCsignalS),
@@ -335,6 +340,124 @@ AliESDtrack::AliESDtrack(const AliESDtrack& track):
   if (track.fFriendTrack) fFriendTrack=new AliESDfriendTrack(*(track.fFriendTrack));
 }
 
+//_______________________________________________________________________
+AliESDtrack::AliESDtrack(const AliVTrack *track) : 
+  AliExternalTrackParam(track),
+  fCp(0),
+  fIp(0),
+  fTPCInner(0),
+  fOp(0),
+  fFriendTrack(0),
+  fTPCClusterMap(159),//number of padrows
+  fTPCSharedMap(159),//number of padrows
+  fFlags(0),
+  fID(),
+  fLabel(0),
+  fITSLabel(0),
+  fTPCLabel(0),
+  fTRDLabel(0),
+  fTOFCalChannel(0),
+  fTOFindex(-1),
+  fHMPIDqn(0),
+  fHMPIDcluIdx(-1),
+  fEMCALindex(kEMCALNoMatch),
+  fHMPIDtrkTheta(0),
+  fHMPIDtrkPhi(0),
+  fHMPIDsignal(0),
+  fTrackLength(0),
+  fdTPC(0),fzTPC(0),
+  fCddTPC(0),fCdzTPC(0),fCzzTPC(0),
+  fCchi2TPC(0),
+  fD(0),fZ(0),
+  fCdd(0),fCdz(0),fCzz(0),
+  fCchi2(0),
+  fITSchi2(0),
+  fTPCchi2(0),
+  fTRDchi2(0),
+  fTOFchi2(0),
+  fHMPIDchi2(0),
+  fGlobalChi2(0),
+  fITSsignal(0),
+  fTPCsignal(0),
+  fTPCsignalS(0),
+  fTRDsignal(0),
+  fTRDQuality(0),
+  fTRDBudget(0),
+  fTOFsignal(0),
+  fTOFsignalToT(0),
+  fTOFsignalRaw(0),
+  fTOFsignalDz(0),
+  fHMPIDtrkX(0),
+  fHMPIDtrkY(0),
+  fHMPIDmipX(0),
+  fHMPIDmipY(0),
+  fTPCncls(0),
+  fTPCnclsF(0),
+  fTPCsignalN(0),
+  fITSncls(0),
+  fITSClusterMap(0),
+  fTRDncls(0),
+  fTRDncls0(0),
+  fTRDpidQuality(0),
+  fTRDnSlices(0),
+  fTRDslices(0x0)
+{
+  //
+  // ESD track from AliVTrack.
+  // This is not a copy constructor !
+  //
+
+  if (track->InheritsFrom("AliExternalTrackParam")) {
+     AliError("This is not a copy constructor. Use AliESDtrack(const AliESDtrack &) !");
+     AliWarning("Calling the default constructor...");
+     AliESDtrack();
+     return;
+  }
+
+  // Reset all the arrays
+  Int_t i;
+  for (i=0; i<AliPID::kSPECIES; i++) {
+    fTrackTime[i]=0.;
+    fR[i]=0.;
+    fITSr[i]=0.;
+    fTPCr[i]=0.;
+    fTRDr[i]=0.;
+    fTOFr[i]=0.;
+    fHMPIDr[i]=0.;
+  }
+  
+  for (i=0; i<3; i++)   { fKinkIndexes[i]=0;}
+  for (i=0; i<3; i++)   { fV0Indexes[i]=-1;}
+  for (i=0;i<kTRDnPlanes;i++) {
+    fTRDTimBin[i]=0;
+  }
+  for (i=0;i<4;i++) {fTPCPoints[i]=0;}
+  for (i=0;i<3;i++) {fTOFLabel[i]=0;}
+  for (i=0;i<10;i++) {fTOFInfo[i]=0;}
+  for (i=0;i<12;i++) {fITSModule[i]=-1;}
+
+  // Set the ID
+  SetID(track->GetID());
+
+  // Set ITS cluster map
+  fITSClusterMap=track->GetITSClusterMap();
+
+  fITSncls=0;
+  for(i=0; i<6; i++) {
+    if(HasPointOnITSLayer(i)) fITSncls++;
+  }
+
+  // Set the combined PID
+  const Double_t *pid = track->PID();
+  if(pid){
+    for (i=0; i<AliPID::kSPECIES; i++) fR[i]=pid[i];
+  }
+  // AliESD track label
+  SetLabel(track->GetLabel());
+  // Set the status
+  SetStatus(track->GetStatus());
+}
+
 //_______________________________________________________________________
 AliESDtrack::AliESDtrack(TParticle * part) : 
   AliExternalTrackParam(),
@@ -354,7 +477,7 @@ AliESDtrack::AliESDtrack(TParticle * part) :
   fTOFCalChannel(0),
   fTOFindex(-1),
   fHMPIDqn(0),
-  fHMPIDcluIdx(0),
+  fHMPIDcluIdx(-1),
   fEMCALindex(kEMCALNoMatch),
   fHMPIDtrkTheta(0),
   fHMPIDtrkPhi(0),
@@ -362,6 +485,7 @@ AliESDtrack::AliESDtrack(TParticle * part) :
   fTrackLength(0),
   fdTPC(0),fzTPC(0),
   fCddTPC(0),fCdzTPC(0),fCzzTPC(0),
+  fCchi2TPC(0),
   fD(0),fZ(0),
   fCdd(0),fCdz(0),fCzz(0),
   fCchi2(0),
@@ -370,6 +494,7 @@ AliESDtrack::AliESDtrack(TParticle * part) :
   fTRDchi2(0),
   fTOFchi2(0),
   fHMPIDchi2(0),
+  fGlobalChi2(0),
   fITSsignal(0),
   fTPCsignal(0),
   fTPCsignalS(0),
@@ -636,19 +761,22 @@ AliESDtrack &AliESDtrack::operator=(const AliESDtrack &source){
   fCddTPC = source.fCddTPC;
   fCdzTPC = source.fCdzTPC;
   fCzzTPC = source.fCzzTPC;
+  fCchi2TPC = source.fCchi2TPC;
+
   fD  = source.fD; 
   fZ  = source.fZ; 
   fCdd = source.fCdd;
   fCdz = source.fCdz;
   fCzz = source.fCzz;
-
   fCchi2     = source.fCchi2;
+
   fITSchi2   = source.fITSchi2;             
   fTPCchi2   = source.fTPCchi2;            
   fTRDchi2   = source.fTRDchi2;      
   fTOFchi2   = source.fTOFchi2;      
   fHMPIDchi2 = source.fHMPIDchi2;      
 
+  fGlobalChi2 = source.fGlobalChi2;      
 
   fITSsignal  = source.fITSsignal;     
   fTPCsignal  = source.fTPCsignal;     
@@ -733,7 +861,7 @@ TObject *  AliESDtrack::GetCalibObject(Int_t index){
 }
 
 
-const Bool_t AliESDtrack::FillTPCOnlyTrack(AliESDtrack &track){
+Bool_t AliESDtrack::FillTPCOnlyTrack(AliESDtrack &track){
   
   // Fills the information of the TPC-only first reconstruction pass
   // into the passed ESDtrack object. For consistency fTPCInner is also filled
@@ -768,6 +896,7 @@ const Bool_t AliESDtrack::FillTPCOnlyTrack(AliESDtrack &track){
   track.fCddTPC = fCddTPC;
   track.fCdzTPC = fCdzTPC;
   track.fCzzTPC = fCzzTPC;
+  track.fCchi2TPC = fCchi2TPC;
 
 
   // copy all other TPC specific parameters
@@ -799,6 +928,7 @@ const Bool_t AliESDtrack::FillTPCOnlyTrack(AliESDtrack &track){
   track.fFlags = kTPCin;
   track.fID    = fID;
 
+  track.fFlags |= fFlags & kTPCpid; //copy the TPCpid status flag
  
   for (Int_t i=0;i<3;i++) track.fKinkIndexes[i] = fKinkIndexes[i];
   
@@ -822,7 +952,6 @@ void AliESDtrack::MakeMiniESDtrack(){
 
   // Reset track parameters constrained to the primary vertex
   delete fCp;fCp = 0;
-  fCchi2 = 0;
 
   // Reset track parameters at the inner wall of TPC
   delete fIp;fIp = 0;
@@ -887,7 +1016,7 @@ void AliESDtrack::MakeMiniESDtrack(){
   // Reset HMPID related track information
   fHMPIDchi2 = 0;     
   fHMPIDqn = 0;     
-  fHMPIDcluIdx = 0;     
+  fHMPIDcluIdx = -1;     
   fHMPIDsignal = 0;     
   for (Int_t i=0;i<AliPID::kSPECIES;i++) fHMPIDr[i] = 0;
   fHMPIDtrkTheta = 0;     
@@ -898,6 +1027,9 @@ void AliESDtrack::MakeMiniESDtrack(){
   fHMPIDmipY = 0;
   fEMCALindex = kEMCALNoMatch;
 
+  // reset global track chi2
+  fGlobalChi2 = 0;
+
   delete fFriendTrack; fFriendTrack = 0;
 } 
 //_______________________________________________________________________
@@ -1063,7 +1195,9 @@ Bool_t AliESDtrack::UpdateTrackParams(const AliKalmanTrack *t, ULong_t flags){
     fTPCsignal=t->GetPIDsignal();
     break;
 
-  case kTRDout: case kTRDin: case kTRDrefit:
+  case kTRDin: case kTRDrefit:
+    break;
+  case kTRDout:
     index     = fFriendTrack->GetTRDindices();
     fTRDLabel = t->GetLabel(); 
     fTRDchi2  = t->GetChi2();
@@ -1212,6 +1346,15 @@ Int_t AliESDtrack::GetNcls(Int_t idet) const
     if (fTOFindex != -1)
       ncls = 1;
     break;
+  case 4: //PHOS
+    break;
+  case 5: //HMPID
+    if ((fHMPIDcluIdx >= 0) && (fHMPIDcluIdx < 7000000)) {
+      if ((fHMPIDcluIdx%1000000 != 9999) && (fHMPIDcluIdx%1000000 != 99999)) {
+       ncls = 1;
+      }
+    }    
+    break;
   default:
     break;
   }
@@ -1242,9 +1385,11 @@ Int_t AliESDtrack::GetClusters(Int_t idet, Int_t *idx) const
   case 4: //PHOS
     break;
   case 5:
-    if (fHMPIDcluIdx != 0) {
-      idx[0] = GetHMPIDcluIdx();
-      ncls = 1;
+    if ((fHMPIDcluIdx >= 0) && (fHMPIDcluIdx < 7000000)) {
+      if ((fHMPIDcluIdx%1000000 != 9999) && (fHMPIDcluIdx%1000000 != 99999)) {
+       idx[0] = GetHMPIDcluIdx();
+       ncls = 1;
+      }
     }    
     break;
   case 6: //EMCAL
@@ -1314,7 +1459,6 @@ Bool_t AliESDtrack::GetITSModuleIndexInfo(Int_t ilayer,Int_t &idet,Int_t &status
   //----------------------------------------------------------------------
 
   if(fITSModule[ilayer]==-1) {
-    AliError("fModule was not set !");
     idet = -1;
     status=0;
     xloc=-99.; zloc=-99.;
@@ -1570,16 +1714,21 @@ void AliESDtrack::GetESDpid(Double_t *p) const {
 }
 
 //_______________________________________________________________________
-Bool_t AliESDtrack::RelateToVertexTPC
-(const AliESDVertex *vtx, Double_t b, Double_t maxd) {
+Bool_t AliESDtrack::RelateToVertexTPC(const AliESDVertex *vtx, 
+Double_t b, Double_t maxd, AliExternalTrackParam *cParam) {
   //
-  // Try to relate the TPC-only track paramters to the vertex "vtx", 
+  // Try to relate the TPC-only track parameters to the vertex "vtx", 
   // if the (rough) transverse impact parameter is not bigger then "maxd". 
   //            Magnetic field is "b" (kG).
   //
   // a) The TPC-only paramters are extapolated to the DCA to the vertex.
   // b) The impact parameters and their covariance matrix are calculated.
+  // c) An attempt to constrain the TPC-only params to the vertex is done.
+  //    The constrained params are returned via "cParam".
   //
+  // In the case of success, the returned value is kTRUE
+  // otherwise, it's kFALSE)
+  // 
 
   if (!fTPCInner) return kFALSE;
   if (!vtx) return kFALSE;
@@ -1593,12 +1742,26 @@ Bool_t AliESDtrack::RelateToVertexTPC
   fCdzTPC = cov[1];
   fCzzTPC = cov[2];
   
+  Double_t covar[6]; vtx->GetCovMatrix(covar);
+  Double_t p[2]={GetParameter()[0]-dz[0],GetParameter()[1]-dz[1]};
+  Double_t c[3]={covar[2],0.,covar[5]};
+
+  Double_t chi2=GetPredictedChi2(p,c);
+  if (chi2>kVeryBig) return kFALSE;
+
+  fCchi2TPC=chi2;
+
+  if (!cParam) return kTRUE;
+
+  *cParam = *fTPCInner;
+  if (!cParam->Update(p,c)) return kFALSE;
+
   return kTRUE;
 }
 
 //_______________________________________________________________________
-Bool_t AliESDtrack::RelateToVertex
-(const AliESDVertex *vtx, Double_t b, Double_t maxd) {
+Bool_t AliESDtrack::RelateToVertex(const AliESDVertex *vtx, 
+Double_t b, Double_t maxd, AliExternalTrackParam *cParam) {
   //
   // Try to relate this track to the vertex "vtx", 
   // if the (rough) transverse impact parameter is not bigger then "maxd". 
@@ -1607,9 +1770,10 @@ Bool_t AliESDtrack::RelateToVertex
   // a) The track gets extapolated to the DCA to the vertex.
   // b) The impact parameters and their covariance matrix are calculated.
   // c) An attempt to constrain this track to the vertex is done.
+  //    The constrained params are returned via "cParam".
   //
-  //    In the case of success, the returned value is kTRUE
-  //    (otherwise, it's kFALSE)
+  // In the case of success, the returned value is kTRUE
+  // (otherwise, it's kFALSE)
   //  
 
   if (!vtx) return kFALSE;
@@ -1628,14 +1792,24 @@ Bool_t AliESDtrack::RelateToVertex
   Double_t c[3]={covar[2],0.,covar[5]};
 
   Double_t chi2=GetPredictedChi2(p,c);
-  if (chi2>77.) return kFALSE;
+  if (chi2>kVeryBig) return kFALSE;
+
+  fCchi2=chi2;
 
+
+  //--- Could now these lines be removed ? ---
   delete fCp;
   fCp=new AliExternalTrackParam(*this);  
 
   if (!fCp->Update(p,c)) {delete fCp; fCp=0; return kFALSE;}
-  
-  fCchi2=chi2;
+  //----------------------------------------
+
+
+  if (!cParam) return kTRUE;
+
+  *cParam = *this;
+  if (!cParam->Update(p,c)) return kFALSE; 
+
   return kTRUE;
 }