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.                  *
 **************************************************************************/

/* $Id$ */

//-------------------------------------------------------------------------
//                Implementation of the AliKalmanTrack class
//   that is the base for AliTPCtrack, AliITStrackV2 and AliTRDtrack
//        Origin: Iouri Belikov, CERN, Jouri.Belikov@cern.ch
//-------------------------------------------------------------------------
#include <TGeoManager.h>

#include "AliKalmanTrack.h"

ClassImp(AliKalmanTrack)

//_______________________________________________________________________
  AliKalmanTrack::AliKalmanTrack():AliExternalTrackParam(),
  fFakeRatio(0),
  fChi2(0),
  fMass(AliPID::ParticleMass(AliPID::kPion)),
  fLab(-3141593),
  fN(0),
  fStartTimeIntegral(kFALSE),
  fIntegratedLength(0)
{
  //
  // Default constructor
  //

  for(Int_t i=0; i<AliPID::kSPECIESC; i++) fIntegratedTime[i] = 0;
}

AliKalmanTrack::AliKalmanTrack(const AliKalmanTrack &t):
  AliExternalTrackParam(t),
  fFakeRatio(t.fFakeRatio),
  fChi2(t.fChi2),
  fMass(t.fMass),
  fLab(t.fLab),
  fN(t.fN),
  fStartTimeIntegral(t.fStartTimeIntegral),
  fIntegratedLength(t.fIntegratedLength)
{
  //
  // Copy constructor
  //
  
  for (Int_t i=0; i<AliPID::kSPECIESC; i++)
      fIntegratedTime[i] = t.fIntegratedTime[i];
}

AliKalmanTrack& AliKalmanTrack::operator=(const AliKalmanTrack&o){
  if(this!=&o){
    AliExternalTrackParam::operator=(o);
    fLab = o.fLab;
    fFakeRatio = o.fFakeRatio;
    fChi2 = o.fChi2;
    fMass = o.fMass;
    fN = o.fN;
    fStartTimeIntegral = o.fStartTimeIntegral;
    for(Int_t i = 0;i<AliPID::kSPECIESC;++i)fIntegratedTime[i] = o.fIntegratedTime[i];
    fIntegratedLength = o.fIntegratedLength;
  }
  return *this;
}

//_______________________________________________________________________
void AliKalmanTrack::StartTimeIntegral() 
{
  // Sylwester Radomski, GSI
  // S.Radomski@gsi.de
  //
  // Start time integration
  // To be called at Vertex by ITS tracker
  //
  
  //if (fStartTimeIntegral) 
  //  AliWarning("Reseting Recorded Time.");

  fStartTimeIntegral = kTRUE;
  for(Int_t i=0; i<AliPID::kSPECIESC; i++) fIntegratedTime[i] = 0;  
  fIntegratedLength = 0;
}

//_______________________________________________________________________
void AliKalmanTrack:: AddTimeStep(Double_t length) 
{
  // 
  // Add step to integrated time
  // this method should be called by a sublasses at the end
  // of the PropagateTo function or by a tracker
  // each time step is made.
  //
  // If integration not started function does nothing
  //
  // Formula
  // dt = dl * sqrt(p^2 + m^2) / p
  // p = pT * (1 + tg^2 (lambda) )
  //
  // pt = 1/external parameter [4]
  // tg lambda = external parameter [3]
  //
  //
  // Sylwester Radomski, GSI
  // S.Radomski@gsi.de
  // 
  
  static const Double_t kcc = 2.99792458e-2;

  if (!fStartTimeIntegral) return;
  
  fIntegratedLength += length;

  Double_t xr, param[5];
  
  GetExternalParameters(xr, param);
  double tgl = param[3];

  Double_t p2inv = param[4]*param[4]/(1+tgl*tgl);

  //  if (length > 100) return;

  for (Int_t i=0; i<AliPID::kSPECIESC; i++) {
    
    Double_t massz = AliPID::ParticleMassZ(i);
    Double_t correction = TMath::Sqrt( 1. + massz*massz*p2inv ); // 1/beta
    Double_t time = length * correction / kcc;

    fIntegratedTime[i] += time;
  }
}

//_______________________________________________________________________
Double_t AliKalmanTrack::GetIntegratedTime(Int_t pdg) const 
{
  // Sylwester Radomski, GSI
  // S.Radomski@gsi.de
  //
  // Return integrated time hypothesis for a given particle
  // type assumption.
  //
  // Input parameter:
  // pdg - Pdg code of a particle type
  //


  if (!fStartTimeIntegral) {
    AliWarning("Time integration not started");
    return 0.;
  }

  for (Int_t i=0; i<AliPID::kSPECIESC; i++)
    if (AliPID::ParticleCode(i) == TMath::Abs(pdg)) return fIntegratedTime[i];

  AliWarning(Form("Particle type [%d] not found", pdg));
  return 0;
}

void AliKalmanTrack::GetIntegratedTimes(Double_t *times, Int_t nspec) const {
  for (Int_t i=nspec; i--;) times[i]=fIntegratedTime[i];
}

void AliKalmanTrack::SetIntegratedTimes(const Double_t *times) {
  for (Int_t i=AliPID::kSPECIESC; i--;) fIntegratedTime[i]=times[i];
}

 AliKalmanTrack.cxx:1
 AliKalmanTrack.cxx:2
 AliKalmanTrack.cxx:3
 AliKalmanTrack.cxx:4
 AliKalmanTrack.cxx:5
 AliKalmanTrack.cxx:6
 AliKalmanTrack.cxx:7
 AliKalmanTrack.cxx:8
 AliKalmanTrack.cxx:9
 AliKalmanTrack.cxx:10
 AliKalmanTrack.cxx:11
 AliKalmanTrack.cxx:12
 AliKalmanTrack.cxx:13
 AliKalmanTrack.cxx:14
 AliKalmanTrack.cxx:15
 AliKalmanTrack.cxx:16
 AliKalmanTrack.cxx:17
 AliKalmanTrack.cxx:18
 AliKalmanTrack.cxx:19
 AliKalmanTrack.cxx:20
 AliKalmanTrack.cxx:21
 AliKalmanTrack.cxx:22
 AliKalmanTrack.cxx:23
 AliKalmanTrack.cxx:24
 AliKalmanTrack.cxx:25
 AliKalmanTrack.cxx:26
 AliKalmanTrack.cxx:27
 AliKalmanTrack.cxx:28
 AliKalmanTrack.cxx:29
 AliKalmanTrack.cxx:30
 AliKalmanTrack.cxx:31
 AliKalmanTrack.cxx:32
 AliKalmanTrack.cxx:33
 AliKalmanTrack.cxx:34
 AliKalmanTrack.cxx:35
 AliKalmanTrack.cxx:36
 AliKalmanTrack.cxx:37
 AliKalmanTrack.cxx:38
 AliKalmanTrack.cxx:39
 AliKalmanTrack.cxx:40
 AliKalmanTrack.cxx:41
 AliKalmanTrack.cxx:42
 AliKalmanTrack.cxx:43
 AliKalmanTrack.cxx:44
 AliKalmanTrack.cxx:45
 AliKalmanTrack.cxx:46
 AliKalmanTrack.cxx:47
 AliKalmanTrack.cxx:48
 AliKalmanTrack.cxx:49
 AliKalmanTrack.cxx:50
 AliKalmanTrack.cxx:51
 AliKalmanTrack.cxx:52
 AliKalmanTrack.cxx:53
 AliKalmanTrack.cxx:54
 AliKalmanTrack.cxx:55
 AliKalmanTrack.cxx:56
 AliKalmanTrack.cxx:57
 AliKalmanTrack.cxx:58
 AliKalmanTrack.cxx:59
 AliKalmanTrack.cxx:60
 AliKalmanTrack.cxx:61
 AliKalmanTrack.cxx:62
 AliKalmanTrack.cxx:63
 AliKalmanTrack.cxx:64
 AliKalmanTrack.cxx:65
 AliKalmanTrack.cxx:66
 AliKalmanTrack.cxx:67
 AliKalmanTrack.cxx:68
 AliKalmanTrack.cxx:69
 AliKalmanTrack.cxx:70
 AliKalmanTrack.cxx:71
 AliKalmanTrack.cxx:72
 AliKalmanTrack.cxx:73
 AliKalmanTrack.cxx:74
 AliKalmanTrack.cxx:75
 AliKalmanTrack.cxx:76
 AliKalmanTrack.cxx:77
 AliKalmanTrack.cxx:78
 AliKalmanTrack.cxx:79
 AliKalmanTrack.cxx:80
 AliKalmanTrack.cxx:81
 AliKalmanTrack.cxx:82
 AliKalmanTrack.cxx:83
 AliKalmanTrack.cxx:84
 AliKalmanTrack.cxx:85
 AliKalmanTrack.cxx:86
 AliKalmanTrack.cxx:87
 AliKalmanTrack.cxx:88
 AliKalmanTrack.cxx:89
 AliKalmanTrack.cxx:90
 AliKalmanTrack.cxx:91
 AliKalmanTrack.cxx:92
 AliKalmanTrack.cxx:93
 AliKalmanTrack.cxx:94
 AliKalmanTrack.cxx:95
 AliKalmanTrack.cxx:96
 AliKalmanTrack.cxx:97
 AliKalmanTrack.cxx:98
 AliKalmanTrack.cxx:99
 AliKalmanTrack.cxx:100
 AliKalmanTrack.cxx:101
 AliKalmanTrack.cxx:102
 AliKalmanTrack.cxx:103
 AliKalmanTrack.cxx:104
 AliKalmanTrack.cxx:105
 AliKalmanTrack.cxx:106
 AliKalmanTrack.cxx:107
 AliKalmanTrack.cxx:108
 AliKalmanTrack.cxx:109
 AliKalmanTrack.cxx:110
 AliKalmanTrack.cxx:111
 AliKalmanTrack.cxx:112
 AliKalmanTrack.cxx:113
 AliKalmanTrack.cxx:114
 AliKalmanTrack.cxx:115
 AliKalmanTrack.cxx:116
 AliKalmanTrack.cxx:117
 AliKalmanTrack.cxx:118
 AliKalmanTrack.cxx:119
 AliKalmanTrack.cxx:120
 AliKalmanTrack.cxx:121
 AliKalmanTrack.cxx:122
 AliKalmanTrack.cxx:123
 AliKalmanTrack.cxx:124
 AliKalmanTrack.cxx:125
 AliKalmanTrack.cxx:126
 AliKalmanTrack.cxx:127
 AliKalmanTrack.cxx:128
 AliKalmanTrack.cxx:129
 AliKalmanTrack.cxx:130
 AliKalmanTrack.cxx:131
 AliKalmanTrack.cxx:132
 AliKalmanTrack.cxx:133
 AliKalmanTrack.cxx:134
 AliKalmanTrack.cxx:135
 AliKalmanTrack.cxx:136
 AliKalmanTrack.cxx:137
 AliKalmanTrack.cxx:138
 AliKalmanTrack.cxx:139
 AliKalmanTrack.cxx:140
 AliKalmanTrack.cxx:141
 AliKalmanTrack.cxx:142
 AliKalmanTrack.cxx:143
 AliKalmanTrack.cxx:144
 AliKalmanTrack.cxx:145
 AliKalmanTrack.cxx:146
 AliKalmanTrack.cxx:147
 AliKalmanTrack.cxx:148
 AliKalmanTrack.cxx:149
 AliKalmanTrack.cxx:150
 AliKalmanTrack.cxx:151
 AliKalmanTrack.cxx:152
 AliKalmanTrack.cxx:153
 AliKalmanTrack.cxx:154
 AliKalmanTrack.cxx:155
 AliKalmanTrack.cxx:156
 AliKalmanTrack.cxx:157
 AliKalmanTrack.cxx:158
 AliKalmanTrack.cxx:159
 AliKalmanTrack.cxx:160
 AliKalmanTrack.cxx:161
 AliKalmanTrack.cxx:162
 AliKalmanTrack.cxx:163
 AliKalmanTrack.cxx:164
 AliKalmanTrack.cxx:165
 AliKalmanTrack.cxx:166
 AliKalmanTrack.cxx:167
 AliKalmanTrack.cxx:168
 AliKalmanTrack.cxx:169
 AliKalmanTrack.cxx:170
 AliKalmanTrack.cxx:171
 AliKalmanTrack.cxx:172
 AliKalmanTrack.cxx:173
 AliKalmanTrack.cxx:174
 AliKalmanTrack.cxx:175
 AliKalmanTrack.cxx:176
 AliKalmanTrack.cxx:177
 AliKalmanTrack.cxx:178