ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

//-------------------------------------------------------------------------
//                Implementation of the ITS track class
//
//          Origin: Marian Ivanov, CERN, Marian.Ivanov@cern.ch
//     dEdx analysis by: Boris Batyunya, JINR, Boris.Batiounia@cern.ch
//-------------------------------------------------------------------------

/* $Id$ */

#include <TMatrixD.h>

#include <TMath.h>

#include "AliITSRecoParam.h"
#include "AliCluster.h"
#include "AliESDtrack.h"
#include "AliITSgeomTGeo.h"
#include "AliITStrackMI.h"

ClassImp(AliITStrackMI)

const Int_t kWARN=5;

//____________________________________________________________________________
AliITStrackMI::AliITStrackMI():AliITStrackV2(),
fNUsed(0),
fNSkipped(0),
fNDeadZone(0),			       
fReconstructed(kFALSE),
fExpQ(40),
fChi22(0),
fdEdxMismatch(0),
fConstrain(kFALSE),
fWinner(0),
fGoldV0(kFALSE)

{
  //constructor
    for(Int_t i=0; i<AliITSgeomTGeo::GetNLayers(); i++) fClIndex[i]=-1;
    for(Int_t i=0; i<6; i++) { fNy[i]=0; fNz[i]=0; fNormQ[i]=0; fNormChi2[i]=1000; fDeadZoneProbability[i]=0;}
    for(Int_t i=0; i<12; i++) {fDy[i]=0; fDz[i]=0; fSigmaY[i]=0; fSigmaZ[i]=0; fSigmaYZ[i]=0; fChi2MIP[i]=0;}
    fD[0]=0; fD[1]=0;
    fDnorm[0]=0; fDnorm[1]=0;
}

//____________________________________________________________________________
AliITStrackMI::AliITStrackMI(AliESDtrack& t,Bool_t c):
AliITStrackV2(t,c),
fNUsed(0),
fNSkipped(0),
fNDeadZone(0),
fReconstructed(kFALSE),
fExpQ(40),
fChi22(0),
fdEdxMismatch(0),
fConstrain(kFALSE),
fWinner(0),
fGoldV0(kFALSE) {
  //------------------------------------------------------------------
  // Conversion ESD track -> ITS track.
  // If c==kTRUE, create the ITS track out of the constrained params.
  //------------------------------------------------------------------
  for(Int_t i=0; i<6; i++) {fClIndex[i]=-1; fNy[i]=0; fNz[i]=0; fNormQ[i]=0; fNormChi2[i]=1000; fDeadZoneProbability[i]=0;}
  for(Int_t i=0; i<12; i++) {fDy[i]=0; fDz[i]=0; fSigmaY[i]=0; fSigmaZ[i]=0; fSigmaYZ[i]=0; fChi2MIP[i]=0;}
  fD[0]=0; fD[1]=0;
  fDnorm[0]=0; fDnorm[1]=0;

}

//____________________________________________________________________________
AliITStrackMI::AliITStrackMI(const AliITStrackMI& t) : AliITStrackV2(t),
fNUsed(t.fNUsed),
fNSkipped(t.fNSkipped),
fNDeadZone(t.fNDeadZone),
fReconstructed(t.fReconstructed),
fExpQ(t.fExpQ),
fChi22(t.fChi22),
fdEdxMismatch(t.fdEdxMismatch),
fConstrain(t.fConstrain),
fWinner(0),
fGoldV0(t.fGoldV0) {
  //------------------------------------------------------------------
  //Copy constructor
  //------------------------------------------------------------------
  fLab = t.fLab;
  fFakeRatio = t.fFakeRatio;

  fD[0]=t.fD[0]; fD[1]=t.fD[1];
  fDnorm[0] = t.fDnorm[0]; fDnorm[1]=t.fDnorm[1];
  for(Int_t i=0; i<6; i++) {
    fClIndex[i]= t.fClIndex[i]; fNy[i]=t.fNy[i]; fNz[i]=t.fNz[i]; fNormQ[i]=t.fNormQ[i]; fNormChi2[i] = t.fNormChi2[i];  fDeadZoneProbability[i]=t.fDeadZoneProbability[i];
  }
  for(Int_t i=0; i<12; i++) {fDy[i]=t.fDy[i]; fDz[i]=t.fDz[i]; 
    fSigmaY[i]=t.fSigmaY[i]; fSigmaZ[i]=t.fSigmaZ[i]; fSigmaYZ[i]=t.fSigmaYZ[i]; fChi2MIP[i]=t.fChi2MIP[i];}
  //memcpy(fDy,t.fDy,6*sizeof(Float_t));
  //memcpy(fDz,t.fDz,6*sizeof(Float_t));
  //memcpy(fSigmaY,t.fSigmaY,6*sizeof(Float_t));
  //memcpy(fSigmaZ,t.fSigmaZ,6*sizeof(Float_t));
  //memcpy(fChi2MIP,t.fChi2MIP,12*sizeof(Float_t));  
}

//_____________________________________________________________________________
Int_t AliITStrackMI::Compare(const TObject *o) const {
  //-----------------------------------------------------------------
  // This function compares tracks according to the their curvature
  //-----------------------------------------------------------------
  AliITStrackMI *t=(AliITStrackMI*)o;
  //Double_t co=TMath::Abs(t->Get1Pt());
  //Double_t c =TMath::Abs(Get1Pt());
  Double_t co=t->GetSigmaY2()*t->GetSigmaZ2()*(0.5+TMath::Sqrt(0.5*t->fD[0]*t->fD[0]+t->fD[1]*t->fD[1]));
  Double_t c =GetSigmaY2()*GetSigmaZ2()*(0.5+TMath::Sqrt(0.5*fD[0]*fD[0]+fD[1]*fD[1]));
  if (c>co) return 1;
  else if (c<co) return -1;
  return 0;
}


Double_t AliITStrackMI::GetPredictedChi2MI(Double_t cy, Double_t cz, Double_t cerry, Double_t cerrz, Double_t covyz) const
{
  //-----------------------------------------------------------------
  // This function calculates a predicted chi2 increment.
  //-----------------------------------------------------------------
  Double_t p[2]={cy, cz};
  Double_t cov[3]={cerry*cerry, covyz, cerrz*cerrz};
  return AliExternalTrackParam::GetPredictedChi2(p,cov);
}

//____________________________________________________________________________
Bool_t AliITStrackMI::UpdateMI(const AliCluster *c, Double_t chi2, Int_t index) {
  //------------------------------------------------------------------
  //This function updates track parameters
  //------------------------------------------------------------------
  Double_t dy=c->GetY() - GetY(), dz=c->GetZ() - GetZ();
  Int_t layer = (index & 0xf0000000) >> 28;
  fDy[layer] = dy;
  fDz[layer] = dz;
  fSigmaY[layer] = TMath::Sqrt(c->GetSigmaY2()+GetSigmaY2());
  fSigmaZ[layer] = TMath::Sqrt(c->GetSigmaZ2()+GetSigmaZ2());
  fSigmaYZ[layer] = c->GetSigmaYZ()+GetSigmaZY();


  return Update(c,chi2,index);
}

Int_t AliITStrackMI::GetProlongationFast(Double_t alp, Double_t xk,Double_t &y, Double_t &z)
{
  //-----------------------------------------------------------------------------
  //get fast prolongation 
  //-----------------------------------------------------------------------------
  Double_t ca=TMath::Cos(alp-GetAlpha()), sa=TMath::Sin(alp-GetAlpha());
  Double_t cf=TMath::Sqrt((1.-GetSnp())*(1.+GetSnp()));  
  // **** rotation **********************  
  y= -GetX()*sa + GetY()*ca;
  // **** translation ******************  
  Double_t dx = xk- GetX()*ca - GetY()*sa;
  Double_t f1=GetSnp()*ca - cf*sa, f2=f1 + GetC()*dx;
  if (TMath::Abs(f2) >= 0.9999) {
    return 0;
  }
  Double_t r1=TMath::Sqrt((1.-f1)*(1.+f1)), r2=TMath::Sqrt((1.-f2)*(1.+f2));  
  y += dx*(f1+f2)/(r1+r2);
  z  = GetZ()+dx*(f1+f2)/(f1*r2 + f2*r1)*GetTgl();  
  return 1;
}


Bool_t AliITStrackMI::IsGoldPrimary()
{
  //
  // Indicates gold pimary track
  //
  Bool_t isGold=kTRUE;
  if (!fConstrain) return kFALSE;                // 
  if (fNDeadZone+fNDeadZone<5.5) isGold =  kFALSE; // short track
  //
  if (fChi2MIP[0]*fChi2MIP[3]>2) isGold = kFALSE; // RS: cut on chi2*interpolated_chi2
  if (fChi2/Float_t(fN)>2.){
    if (fChi2MIP[0]+fNUsed>3.5) isGold = kFALSE;    
  }
  if (fChi2MIP[2]>4.5) isGold = kFALSE;         //back propagation chi2
  //
  if (fDnorm[0]>0&&fDnorm[1]>0){
    const Float_t distcut2 =2.5*2.5;  //normalize distance  cut 
    Float_t dist2 = fD[0]*fD[0]/(fDnorm[0]*fDnorm[0])+fD[1]*fD[1]/(fDnorm[1]*fDnorm[1]);  //normalize distance to the vertex (pools)
    if (dist2>distcut2) isGold = kFALSE;
  }
  return isGold;
}
 AliITStrackMI.cxx:1
 AliITStrackMI.cxx:2
 AliITStrackMI.cxx:3
 AliITStrackMI.cxx:4
 AliITStrackMI.cxx:5
 AliITStrackMI.cxx:6
 AliITStrackMI.cxx:7
 AliITStrackMI.cxx:8
 AliITStrackMI.cxx:9
 AliITStrackMI.cxx:10
 AliITStrackMI.cxx:11
 AliITStrackMI.cxx:12
 AliITStrackMI.cxx:13
 AliITStrackMI.cxx:14
 AliITStrackMI.cxx:15
 AliITStrackMI.cxx:16
 AliITStrackMI.cxx:17
 AliITStrackMI.cxx:18
 AliITStrackMI.cxx:19
 AliITStrackMI.cxx:20
 AliITStrackMI.cxx:21
 AliITStrackMI.cxx:22
 AliITStrackMI.cxx:23
 AliITStrackMI.cxx:24
 AliITStrackMI.cxx:25
 AliITStrackMI.cxx:26
 AliITStrackMI.cxx:27
 AliITStrackMI.cxx:28
 AliITStrackMI.cxx:29
 AliITStrackMI.cxx:30
 AliITStrackMI.cxx:31
 AliITStrackMI.cxx:32
 AliITStrackMI.cxx:33
 AliITStrackMI.cxx:34
 AliITStrackMI.cxx:35
 AliITStrackMI.cxx:36
 AliITStrackMI.cxx:37
 AliITStrackMI.cxx:38
 AliITStrackMI.cxx:39
 AliITStrackMI.cxx:40
 AliITStrackMI.cxx:41
 AliITStrackMI.cxx:42
 AliITStrackMI.cxx:43
 AliITStrackMI.cxx:44
 AliITStrackMI.cxx:45
 AliITStrackMI.cxx:46
 AliITStrackMI.cxx:47
 AliITStrackMI.cxx:48
 AliITStrackMI.cxx:49
 AliITStrackMI.cxx:50
 AliITStrackMI.cxx:51
 AliITStrackMI.cxx:52
 AliITStrackMI.cxx:53
 AliITStrackMI.cxx:54
 AliITStrackMI.cxx:55
 AliITStrackMI.cxx:56
 AliITStrackMI.cxx:57
 AliITStrackMI.cxx:58
 AliITStrackMI.cxx:59
 AliITStrackMI.cxx:60
 AliITStrackMI.cxx:61
 AliITStrackMI.cxx:62
 AliITStrackMI.cxx:63
 AliITStrackMI.cxx:64
 AliITStrackMI.cxx:65
 AliITStrackMI.cxx:66
 AliITStrackMI.cxx:67
 AliITStrackMI.cxx:68
 AliITStrackMI.cxx:69
 AliITStrackMI.cxx:70
 AliITStrackMI.cxx:71
 AliITStrackMI.cxx:72
 AliITStrackMI.cxx:73
 AliITStrackMI.cxx:74
 AliITStrackMI.cxx:75
 AliITStrackMI.cxx:76
 AliITStrackMI.cxx:77
 AliITStrackMI.cxx:78
 AliITStrackMI.cxx:79
 AliITStrackMI.cxx:80
 AliITStrackMI.cxx:81
 AliITStrackMI.cxx:82
 AliITStrackMI.cxx:83
 AliITStrackMI.cxx:84
 AliITStrackMI.cxx:85
 AliITStrackMI.cxx:86
 AliITStrackMI.cxx:87
 AliITStrackMI.cxx:88
 AliITStrackMI.cxx:89
 AliITStrackMI.cxx:90
 AliITStrackMI.cxx:91
 AliITStrackMI.cxx:92
 AliITStrackMI.cxx:93
 AliITStrackMI.cxx:94
 AliITStrackMI.cxx:95
 AliITStrackMI.cxx:96
 AliITStrackMI.cxx:97
 AliITStrackMI.cxx:98
 AliITStrackMI.cxx:99
 AliITStrackMI.cxx:100
 AliITStrackMI.cxx:101
 AliITStrackMI.cxx:102
 AliITStrackMI.cxx:103
 AliITStrackMI.cxx:104
 AliITStrackMI.cxx:105
 AliITStrackMI.cxx:106
 AliITStrackMI.cxx:107
 AliITStrackMI.cxx:108
 AliITStrackMI.cxx:109
 AliITStrackMI.cxx:110
 AliITStrackMI.cxx:111
 AliITStrackMI.cxx:112
 AliITStrackMI.cxx:113
 AliITStrackMI.cxx:114
 AliITStrackMI.cxx:115
 AliITStrackMI.cxx:116
 AliITStrackMI.cxx:117
 AliITStrackMI.cxx:118
 AliITStrackMI.cxx:119
 AliITStrackMI.cxx:120
 AliITStrackMI.cxx:121
 AliITStrackMI.cxx:122
 AliITStrackMI.cxx:123
 AliITStrackMI.cxx:124
 AliITStrackMI.cxx:125
 AliITStrackMI.cxx:126
 AliITStrackMI.cxx:127
 AliITStrackMI.cxx:128
 AliITStrackMI.cxx:129
 AliITStrackMI.cxx:130
 AliITStrackMI.cxx:131
 AliITStrackMI.cxx:132
 AliITStrackMI.cxx:133
 AliITStrackMI.cxx:134
 AliITStrackMI.cxx:135
 AliITStrackMI.cxx:136
 AliITStrackMI.cxx:137
 AliITStrackMI.cxx:138
 AliITStrackMI.cxx:139
 AliITStrackMI.cxx:140
 AliITStrackMI.cxx:141
 AliITStrackMI.cxx:142
 AliITStrackMI.cxx:143
 AliITStrackMI.cxx:144
 AliITStrackMI.cxx:145
 AliITStrackMI.cxx:146
 AliITStrackMI.cxx:147
 AliITStrackMI.cxx:148
 AliITStrackMI.cxx:149
 AliITStrackMI.cxx:150
 AliITStrackMI.cxx:151
 AliITStrackMI.cxx:152
 AliITStrackMI.cxx:153
 AliITStrackMI.cxx:154
 AliITStrackMI.cxx:155
 AliITStrackMI.cxx:156
 AliITStrackMI.cxx:157
 AliITStrackMI.cxx:158
 AliITStrackMI.cxx:159
 AliITStrackMI.cxx:160
 AliITStrackMI.cxx:161
 AliITStrackMI.cxx:162
 AliITStrackMI.cxx:163
 AliITStrackMI.cxx:164
 AliITStrackMI.cxx:165
 AliITStrackMI.cxx:166
 AliITStrackMI.cxx:167
 AliITStrackMI.cxx:168
 AliITStrackMI.cxx:169
 AliITStrackMI.cxx:170
 AliITStrackMI.cxx:171
 AliITStrackMI.cxx:172
 AliITStrackMI.cxx:173
 AliITStrackMI.cxx:174
 AliITStrackMI.cxx:175
 AliITStrackMI.cxx:176
 AliITStrackMI.cxx:177
 AliITStrackMI.cxx:178
 AliITStrackMI.cxx:179
 AliITStrackMI.cxx:180
 AliITStrackMI.cxx:181
 AliITStrackMI.cxx:182
 AliITStrackMI.cxx:183
 AliITStrackMI.cxx:184
 AliITStrackMI.cxx:185
 AliITStrackMI.cxx:186
 AliITStrackMI.cxx:187
 AliITStrackMI.cxx:188
 AliITStrackMI.cxx:189
 AliITStrackMI.cxx:190
 AliITStrackMI.cxx:191
 AliITStrackMI.cxx:192
 AliITStrackMI.cxx:193
 AliITStrackMI.cxx:194
 AliITStrackMI.cxx:195
 AliITStrackMI.cxx:196
 AliITStrackMI.cxx:197
 AliITStrackMI.cxx:198
 AliITStrackMI.cxx:199
 AliITStrackMI.cxx:200
 AliITStrackMI.cxx:201
 AliITStrackMI.cxx:202
 AliITStrackMI.cxx:203