ROOT logo

#include "TMatrixD.h"
#include "TMath.h"
#include "TVector3.h"

#include "hkalplane.h"
#include "hkaltrackstate.h"

#include <iostream>
using namespace std;

ClassImp(HKalTrackState)

//_HADES_CLASS_DESCRIPTION
///////////////////////////////////////////////////////////////////////////////
//
// The state of the particle track at a given site k can be described by a vector
// a_k containing a set of track parameters:
// 1. x0: x position
// 2. y0: y position
// 3. tx: p_x / p_z
// 4. ty: p_y / p_z
// 5. qp: particle charage in elementary charges divided by
//        magnitude of momentum in MeV/c
//
// The class also stores the matrices needed for the Kalman filter:
// 1. propagator: F_k = @f_k(a_k) / @a_k
// 2. projector : H_k = @h_k(a_k) / @a^(k-1)_k
// 3. covariance
// 4. process noise
// where f_k(a_k) is the propagator function that propagates the track to
// the next site and h_k(a_k) projects the track state onto a measurement vector.
//
//-----------------------------------------------------------------------
///////////////////////////////////////////////////////////////////////////////


//  -----------------------------------
//  Ctors and Dtor
//  -----------------------------------

HKalTrackState::HKalTrackState(Kalman::kalFilterTypes stateType, Int_t measDim, Int_t stateDim)
: TObject(),
  fPropagator(stateDim, stateDim),
  fProjector(measDim, stateDim),
  fCovariance(stateDim, stateDim),
  fProcessNoise(stateDim, stateDim),
  stateVec(stateDim) {
    // Create state with dummy state vector and matrices.
    // stateType: state is either for the prediction, filtering, smoothing or inverse filtering step in the Kalman filter
    // measDim:  dimension of measurement vector
    // stateDim: dimension of state vector.

    type = stateType;
    fPropagator.UnitMatrix();
    fProjector.UnitMatrix();
    fCovariance.UnitMatrix();
}

HKalTrackState::HKalTrackState(Kalman::kalFilterTypes stateType, const TVectorD &sv, Int_t measDim)
: TObject(),
  fPropagator(sv.GetNrows(), sv.GetNrows()),
  fProjector(measDim, sv.GetNrows()),
  fCovariance(sv.GetNrows(), sv.GetNrows()),
  fProcessNoise(sv.GetNrows(), sv.GetNrows()),
  stateVec(sv) {
    // Create a state with dummy matrices and sets the state vector equal to function
    // parameter sv.
    // stateType: state is either for the prediction, filtering, smoothing or inverse filtering step in the Kalman filter
    // sv:        state vector.
    // measDim:   dimension of measurement vector.

    type = stateType;
    fPropagator.UnitMatrix();
    fProjector.UnitMatrix();
    fCovariance.UnitMatrix();
}

HKalTrackState::~HKalTrackState() {
}

//  -----------------------------------
//  Implementation of public methods
//  -----------------------------------

void HKalTrackState::calcDir(TVector3 &dir) const {
    // Calculates a direction unit vector from this state.
    // dir: track direction (return value).

    calcDir(dir, stateVec);
}

void HKalTrackState::calcDir(TVector3 &dir, const TVectorD &sv) {
    // Calculates a direction unit vector from a state vector given by function
    // parameter sv.
    // dir: track direction (return value)
    // sv:  state vector to calculate direction from.

    Double_t tanx = sv(kIdxTanPhi);
    Double_t tany = sv(kIdxTanTheta);
    Double_t qp   = sv(kIdxQP);

    dir.SetZ( 1./(TMath::Abs(qp) * TMath::Sqrt(tanx*tanx + tany*tany + 1)) );
    dir.SetX(tanx * dir.Z());
    dir.SetY(tany * dir.Z());
    dir = dir.Unit();
}


void HKalTrackState::calcMomVec(TVector3 &dir) const {
    // Calculates the momentum vector from this state.
    // dir: track momentum (return value).

    calcMomVec(dir, stateVec);
}

void HKalTrackState::calcMomVec(TVector3 &dir, const TVectorD &sv) {
    // Calculates momentum vector from a state vector given by function
    // parameter sv.
    // dir: track momentum (return value)
    // sv:  state vector to calculate direction from.

    Double_t tanx = sv(kIdxTanPhi);
    Double_t tany = sv(kIdxTanTheta);
    Double_t qp   = sv(kIdxQP);

    dir.SetZ( 1./(TMath::Abs(qp) * TMath::Sqrt(tanx*tanx + tany*tany + 1)) );
    dir.SetX(tanx * dir.Z());
    dir.SetY(tany * dir.Z());
}

Bool_t HKalTrackState::calcPosAtPlane(TVector3 &pos, const HKalPlane &plane) const {
    // Calculate the track position as a three dimensional vector from this state.
    // Only two coordinates are stored in the state vector. The z-coordinate is
    // calculated by going in z-direction and find the intersection with a plane.
    // pos:   track position (return value).
    // plane: the plane the track is on.

    return calcPosAtPlane(pos, plane, stateVec);
}

Bool_t HKalTrackState::calcPosAtPlane(TVector3 &pos, const HKalPlane &plane, const TVectorD &sv) {
    // Calculate the track position as a three dimensional vector from the state
    // given by function parameter sv.
    // Only two coordinates are stored in the state vector. The z-coordinate is
    // calculated by going in z-direction and find the intersection with a plane.
    // pos:   track position (return value).
    // plane: the plane the track is on.

    TVector3 posFrom;
    posFrom.SetX(sv(kIdxX0));
    posFrom.SetY(sv(kIdxY0));
    posFrom.SetZ(0.);
    TVector3 dir(0., 0., 1.);
    return plane.findIntersection(pos, posFrom, dir);
}

Bool_t HKalTrackState::calcPosAndDirAtPlane(TVector3 &pos, TVector3 &dir, const HKalPlane &plane) const {
    // Calculate the track position and direction as three dimensional vectors
    // from this state.
    // pos:   track position (return value)
    // dir:   track direction (return value)
    // plane: the plane the track is on

    calcDir(dir);
    return calcPosAtPlane(pos, plane);
}

void HKalTrackState::calcStateVec(TVectorD &sv, Double_t qp, const TVector3 &pos, const TVector3 &dir) {
    // Return the state vector from a position, direction and momentum.
    // sv:  the state vector (return value)
    // qp:  particle charage in elementary charges divided by magnitude of momentum in MeV/c
    // pos: track position
    // dir: track direction.

#if kalDebug > 0
    Int_t dim = sv.GetNrows();
    Int_t minDim = 5;
    if(dim < minDim) {
        sv.ResizeTo(minDim);
        ::Warning("calcStateVec", Form("Dimension of output function parameter is %i, but must be at least %i.", dim, minDim));
    }
#endif

    sv(kIdxX0)       = pos.x();
    sv(kIdxY0)       = pos.y();
    sv(kIdxTanPhi)   = dir.x() / dir.z();
    sv(kIdxTanTheta) = dir.y() / dir.z();
    sv(kIdxQP)       = qp;
    if(sv.GetNrows() > 5) {
        sv(kIdxZ0) = pos.z();
    }
}

void HKalTrackState::clear() {
    // Resets state vector to zeroes, matrices to unit matrix.

    stateVec.Zero();
    fPropagator.UnitMatrix();
    fProjector.UnitMatrix();
    fCovariance.UnitMatrix();
    fProcessNoise.Zero();
}

void HKalTrackState::print(const Option_t *opt) const {
    // Prints information about the state.
    // opt: Determines what information about the object will be printed.
    // Capitalization does not matter.
    // If opt contains:
    // "S": print state vector
    // "F": print propagator matrix
    // "C": print covariance matrix
    // "H": print projector matrix
    // "Q": print process noise matrix
    // If opt is empty all of the above will be printed.

    TString stropt(opt);

    switch (type) {
    case kPredicted:
        cout<<"**** Predicted state: ****"<<endl;
        break;
    case kFiltered:
        cout<<"**** Filtered state: ****"<<endl;
        break;
    case kSmoothed:
        cout<<"**** Smoothed state: ****"<<endl;
        break;
    case kInvFiltered:
        cout<<"**** Inverse filtered vector: ****"<<endl;
        break;
    }
    if(stropt.Contains("S", TString::kIgnoreCase) || stropt.IsNull()) {
        cout<<"State vector:"<<endl;
        stateVec.Print();
    }
    if(stropt.Contains("F", TString::kIgnoreCase) || stropt.IsNull()) {
        cout<<"Propagator matrix:"<<endl;
        fPropagator.Print();
    }
    if(stropt.Contains("C", TString::kIgnoreCase) || stropt.IsNull()) {
        cout<<"Covariance matrix:"<<endl;
        fCovariance.Print();
    }
    if(stropt.Contains("H", TString::kIgnoreCase) || stropt.IsNull()) {
        cout<<"Projector matrix:"<<endl;
        fProjector.Print();
    }
    if(stropt.Contains("Q", TString::kIgnoreCase) || stropt.IsNull()) {
        cout<<"Process noise matrix:"<<endl;
        fProcessNoise.Print();
    }
    cout<<"**** End of track state print. ****"<<endl;
}

void HKalTrackState::transform(const TRotation &transMat, const HKalPlane &plane) {
    // Transform the state vector of this object using a rotation matrix.
    // transMat: the rotation matrix
    // plane:    the plane the track is on. Needed to calculate the z-coordinate of the
    //           track position.

    TVector3 pos; // track position
    TVector3 dir; // track direction
    calcPosAndDirAtPlane(pos, dir, plane);
    pos.Transform(transMat);
    dir.Transform(transMat);
    Double_t qp = getStateParam(kIdxQP);
    setStateVec(qp, pos, dir);
}

void HKalTrackState::transformFromLayerToSector(TVectorD &svSec, const TVectorD &svLay, const HKalPlane &plane) {
    // Transform a state vector given in virtual layer coordinates to sector coordinates.
    //
    // Output:
    // svSec: Track state vector in sector coordinates.
    //
    // Input:
    // svLay: Track state vector in virtual layer coordinates.
    // plane: The plane defining the virtual layer system.
    //
    // State vector in sector coordinate system: (x,y,tx,ty,qp).
    // State vector in layer  coordinate system: (u,v,tu,tv,qp).
    // Layer coordinate system is defined by an origin vector O,
    // two orthogonal Axis U and V on the layer and a normal vector W.
    // All axis are given in sector coordinate system.
    //
    // Transformation from layer to sector:
    // position in sector coordinates:
    // P = O + u*U + v*V
    // direction in sector coordinates:
    // A = 1/sqrt(1 + tu^2 + tv^2) * (w + tu*U + tv*V)
    // tx = A.x() / A.z()
    // ty = A.y() / A.z()

#if kalDebug > 0
    if(svLay.GetNrows() != 5) {
        ::Error("transformFromSectorToLayer()", "Wrong dimension in input state vector svLay. No coordinate transformation done.");
        return;
    }
    if(svSec.GetNrows() != 5 && svSec.GetNrows() != 6) {
        ::Error("transformFromSectorToLayer()", Form("Wrong dimension in output state vector svSec."));
        return;
    }
#endif

    const TVector3 &origin = plane.getCenter();
    const TVector3 &u      = plane.getAxisU();
    const TVector3 &v      = plane.getAxisV();
    const TVector3 &w      = plane.getNormal();

    TVector3 pos = origin + svLay(kIdxX0) * u + svLay(kIdxY0) * v;

    svSec(kIdxX0) = pos.X();
    svSec(kIdxY0) = pos.Y();
    if(svSec.GetNrows() > 5) {
        svSec(kIdxZ0) = pos.Z();
    }

    Double_t tu  = svLay(kIdxTanPhi);
    Double_t tv  = svLay(kIdxTanTheta);
    TVector3 dir = w + tu*u + tv*v;

    svSec(kIdxTanPhi)   = dir.X() / dir.Z();
    svSec(kIdxTanTheta) = dir.Y() / dir.Z();

    svSec(kIdxQP)       = svLay(kIdxQP);
}

void HKalTrackState::transformFromSectorToLayer(TVectorD &svLay, const TVectorD &svSec, const HKalPlane &plane) {
    // Transform a state vector given in virtual layer coordinates to sector coordinates.
    //
    // Output:
    // svLay: Track state vector in virtual layer coordinates.
    //
    // Input:
    // svSec: Track state vector in sector coordinates.
    // plane: The plane defining the virtual layer system.
    //
    // State vector in sector coordinate system: (x,y,tx,ty,qp).
    // State vector in layer  coordinate system: (u,v,tu,tv,qp).
    // Layer coordinate system is defined by an origin vector O,
    // two orthogonal Axis U and V on the layer and a normal vector W.
    // All axis are given in sector coordinate system.
    //
    // Transformation from sector to layer:
    // position on layer:
    // u = (pos_sector - O) * U
    // v = (pos_sector - O) * V
    // direction on layer:
    // tu = (A * U) / (A * W)
    // tv = (A * V) / (A * W)
    // with A = 1/sqrt(1 + tx^2 + ty^2) * (tx, ty, 1)^T the normalized direction vector in the sector coordinate system

#if kalDebug > 0
    if(svSec.GetNrows() != 5 && svSec.GetNrows() != 6) {
        ::Error("transformFromSectorToLayer()", "Wrong dimension in input state vector svSec. No coordinate transformation done.");
        return;
    }
#endif

    Int_t sdim = 5;
    if(svLay.GetNrows() != sdim) {
        svLay.ResizeTo(sdim);
        ::Warning("transformFromSectorToLayer()", Form("Wrong dimension in input state vector svLay. Resized to %ix1", sdim));
    }


    const TVector3 &origin = plane.getCenter();
    const TVector3 &u      = plane.getAxisU();
    const TVector3 &v      = plane.getAxisV();
    const TVector3 &w      = plane.getNormal();

    TVector3 pos;
    TVector3 dir;
    calcPosAtPlane(pos, plane, svSec);
    calcDir(dir, svSec);

    TVector3 diffSecOrg = pos - origin;
    Double_t aw         = dir * w;

    svLay(kIdxX0)       = diffSecOrg * u;
    svLay(kIdxY0)       = diffSecOrg * v;
    svLay(kIdxTanPhi)   = dir * u / aw;
    svLay(kIdxTanTheta) = dir * v / aw;
    svLay(kIdxQP)       = svSec(kIdxQP);
}


void HKalTrackState::setCovMat(const TMatrixD &fCov) {
    // Replace the state's covariance matrix.

#if kalDebug > 0
    Int_t nRowsOld = getCovMat().GetNrows();
    Int_t nColsOld = getCovMat().GetNcols();
    Int_t nRowsNew = fCov.GetNrows();
    Int_t nColsNew = fCov.GetNcols();
    if(nRowsOld != nRowsNew || nColsOld != nColsNew) {
        Error("setCovMat()", Form("Matrices not compatible. Cannot replace %ix%i matrix with %ix%i matrix.", nRowsOld, nColsOld, nRowsNew, nColsNew));
        exit(1);
    }
#endif

    fCovariance = fCov;
}

void HKalTrackState::setPropMat(const TMatrixD &fProp) {
    // Replace the state's propagator matrix.

#if kalDebug > 0
    Int_t nRowsOld = getPropMat().GetNrows();
    Int_t nColsOld = getPropMat().GetNcols();
    Int_t nRowsNew = fProp.GetNrows();
    Int_t nColsNew = fProp.GetNcols();
    if(nRowsOld != nRowsNew || nColsOld != nColsNew) {
        Error("setPropMat()", Form("Matrices not compatible. Cannot replace %ix%i matrix with %ix%i matrix.", nRowsOld, nColsOld, nRowsNew, nColsNew));
        exit(1);
    }
#endif

    fPropagator = fProp;
}

void HKalTrackState::setProjMat(const TMatrixD &fProj) {
    // Replace the state's projector matrix.

#if kalDebug > 0
    Int_t nRowsOld = getProjMat().GetNrows();
    Int_t nColsOld = getProjMat().GetNcols();
    Int_t nRowsNew = fProj.GetNrows();
    Int_t nColsNew = fProj.GetNcols();
    if(nRowsOld != nRowsNew || nColsOld != nColsNew) {
        Error("setProjMat()", Form("Matrices not compatible. Cannot replace %ix%i matrix with %ix%i matrix.", nRowsOld, nColsOld, nRowsNew, nColsNew));
        exit(1);
    }
#endif
    fProjector = fProj;
}

void HKalTrackState::setProcNoiseMat(const TMatrixD &fProc) {
    // Replace the state's process noise matrix.

    fProcessNoise.ResizeTo(fProc.GetNrows(), fProc.GetNcols());
    fProcessNoise = fProc;
}

void HKalTrackState::setStateVec(const TVectorD &sv) {
    // Replace the state's track parameter vector.

#if kalDebug > 0
    Int_t oldStateDim = getStateVec().GetNrows();
    Int_t newStateDim = sv.GetNrows();
    if(oldStateDim != newStateDim) {
        Error("setStateVec()", Form("Dimension of new state vector (%i) not the same as dimension of current state vector (%i).", newStateDim, oldStateDim));
        exit(1);
    }
#endif
    stateVec = sv;
}
 hkaltrackstate.cc:1
 hkaltrackstate.cc:2
 hkaltrackstate.cc:3
 hkaltrackstate.cc:4
 hkaltrackstate.cc:5
 hkaltrackstate.cc:6
 hkaltrackstate.cc:7
 hkaltrackstate.cc:8
 hkaltrackstate.cc:9
 hkaltrackstate.cc:10
 hkaltrackstate.cc:11
 hkaltrackstate.cc:12
 hkaltrackstate.cc:13
 hkaltrackstate.cc:14
 hkaltrackstate.cc:15
 hkaltrackstate.cc:16
 hkaltrackstate.cc:17
 hkaltrackstate.cc:18
 hkaltrackstate.cc:19
 hkaltrackstate.cc:20
 hkaltrackstate.cc:21
 hkaltrackstate.cc:22
 hkaltrackstate.cc:23
 hkaltrackstate.cc:24
 hkaltrackstate.cc:25
 hkaltrackstate.cc:26
 hkaltrackstate.cc:27
 hkaltrackstate.cc:28
 hkaltrackstate.cc:29
 hkaltrackstate.cc:30
 hkaltrackstate.cc:31
 hkaltrackstate.cc:32
 hkaltrackstate.cc:33
 hkaltrackstate.cc:34
 hkaltrackstate.cc:35
 hkaltrackstate.cc:36
 hkaltrackstate.cc:37
 hkaltrackstate.cc:38
 hkaltrackstate.cc:39
 hkaltrackstate.cc:40
 hkaltrackstate.cc:41
 hkaltrackstate.cc:42
 hkaltrackstate.cc:43
 hkaltrackstate.cc:44
 hkaltrackstate.cc:45
 hkaltrackstate.cc:46
 hkaltrackstate.cc:47
 hkaltrackstate.cc:48
 hkaltrackstate.cc:49
 hkaltrackstate.cc:50
 hkaltrackstate.cc:51
 hkaltrackstate.cc:52
 hkaltrackstate.cc:53
 hkaltrackstate.cc:54
 hkaltrackstate.cc:55
 hkaltrackstate.cc:56
 hkaltrackstate.cc:57
 hkaltrackstate.cc:58
 hkaltrackstate.cc:59
 hkaltrackstate.cc:60
 hkaltrackstate.cc:61
 hkaltrackstate.cc:62
 hkaltrackstate.cc:63
 hkaltrackstate.cc:64
 hkaltrackstate.cc:65
 hkaltrackstate.cc:66
 hkaltrackstate.cc:67
 hkaltrackstate.cc:68
 hkaltrackstate.cc:69
 hkaltrackstate.cc:70
 hkaltrackstate.cc:71
 hkaltrackstate.cc:72
 hkaltrackstate.cc:73
 hkaltrackstate.cc:74
 hkaltrackstate.cc:75
 hkaltrackstate.cc:76
 hkaltrackstate.cc:77
 hkaltrackstate.cc:78
 hkaltrackstate.cc:79
 hkaltrackstate.cc:80
 hkaltrackstate.cc:81
 hkaltrackstate.cc:82
 hkaltrackstate.cc:83
 hkaltrackstate.cc:84
 hkaltrackstate.cc:85
 hkaltrackstate.cc:86
 hkaltrackstate.cc:87
 hkaltrackstate.cc:88
 hkaltrackstate.cc:89
 hkaltrackstate.cc:90
 hkaltrackstate.cc:91
 hkaltrackstate.cc:92
 hkaltrackstate.cc:93
 hkaltrackstate.cc:94
 hkaltrackstate.cc:95
 hkaltrackstate.cc:96
 hkaltrackstate.cc:97
 hkaltrackstate.cc:98
 hkaltrackstate.cc:99
 hkaltrackstate.cc:100
 hkaltrackstate.cc:101
 hkaltrackstate.cc:102
 hkaltrackstate.cc:103
 hkaltrackstate.cc:104
 hkaltrackstate.cc:105
 hkaltrackstate.cc:106
 hkaltrackstate.cc:107
 hkaltrackstate.cc:108
 hkaltrackstate.cc:109
 hkaltrackstate.cc:110
 hkaltrackstate.cc:111
 hkaltrackstate.cc:112
 hkaltrackstate.cc:113
 hkaltrackstate.cc:114
 hkaltrackstate.cc:115
 hkaltrackstate.cc:116
 hkaltrackstate.cc:117
 hkaltrackstate.cc:118
 hkaltrackstate.cc:119
 hkaltrackstate.cc:120
 hkaltrackstate.cc:121
 hkaltrackstate.cc:122
 hkaltrackstate.cc:123
 hkaltrackstate.cc:124
 hkaltrackstate.cc:125
 hkaltrackstate.cc:126
 hkaltrackstate.cc:127
 hkaltrackstate.cc:128
 hkaltrackstate.cc:129
 hkaltrackstate.cc:130
 hkaltrackstate.cc:131
 hkaltrackstate.cc:132
 hkaltrackstate.cc:133
 hkaltrackstate.cc:134
 hkaltrackstate.cc:135
 hkaltrackstate.cc:136
 hkaltrackstate.cc:137
 hkaltrackstate.cc:138
 hkaltrackstate.cc:139
 hkaltrackstate.cc:140
 hkaltrackstate.cc:141
 hkaltrackstate.cc:142
 hkaltrackstate.cc:143
 hkaltrackstate.cc:144
 hkaltrackstate.cc:145
 hkaltrackstate.cc:146
 hkaltrackstate.cc:147
 hkaltrackstate.cc:148
 hkaltrackstate.cc:149
 hkaltrackstate.cc:150
 hkaltrackstate.cc:151
 hkaltrackstate.cc:152
 hkaltrackstate.cc:153
 hkaltrackstate.cc:154
 hkaltrackstate.cc:155
 hkaltrackstate.cc:156
 hkaltrackstate.cc:157
 hkaltrackstate.cc:158
 hkaltrackstate.cc:159
 hkaltrackstate.cc:160
 hkaltrackstate.cc:161
 hkaltrackstate.cc:162
 hkaltrackstate.cc:163
 hkaltrackstate.cc:164
 hkaltrackstate.cc:165
 hkaltrackstate.cc:166
 hkaltrackstate.cc:167
 hkaltrackstate.cc:168
 hkaltrackstate.cc:169
 hkaltrackstate.cc:170
 hkaltrackstate.cc:171
 hkaltrackstate.cc:172
 hkaltrackstate.cc:173
 hkaltrackstate.cc:174
 hkaltrackstate.cc:175
 hkaltrackstate.cc:176
 hkaltrackstate.cc:177
 hkaltrackstate.cc:178
 hkaltrackstate.cc:179
 hkaltrackstate.cc:180
 hkaltrackstate.cc:181
 hkaltrackstate.cc:182
 hkaltrackstate.cc:183
 hkaltrackstate.cc:184
 hkaltrackstate.cc:185
 hkaltrackstate.cc:186
 hkaltrackstate.cc:187
 hkaltrackstate.cc:188
 hkaltrackstate.cc:189
 hkaltrackstate.cc:190
 hkaltrackstate.cc:191
 hkaltrackstate.cc:192
 hkaltrackstate.cc:193
 hkaltrackstate.cc:194
 hkaltrackstate.cc:195
 hkaltrackstate.cc:196
 hkaltrackstate.cc:197
 hkaltrackstate.cc:198
 hkaltrackstate.cc:199
 hkaltrackstate.cc:200
 hkaltrackstate.cc:201
 hkaltrackstate.cc:202
 hkaltrackstate.cc:203
 hkaltrackstate.cc:204
 hkaltrackstate.cc:205
 hkaltrackstate.cc:206
 hkaltrackstate.cc:207
 hkaltrackstate.cc:208
 hkaltrackstate.cc:209
 hkaltrackstate.cc:210
 hkaltrackstate.cc:211
 hkaltrackstate.cc:212
 hkaltrackstate.cc:213
 hkaltrackstate.cc:214
 hkaltrackstate.cc:215
 hkaltrackstate.cc:216
 hkaltrackstate.cc:217
 hkaltrackstate.cc:218
 hkaltrackstate.cc:219
 hkaltrackstate.cc:220
 hkaltrackstate.cc:221
 hkaltrackstate.cc:222
 hkaltrackstate.cc:223
 hkaltrackstate.cc:224
 hkaltrackstate.cc:225
 hkaltrackstate.cc:226
 hkaltrackstate.cc:227
 hkaltrackstate.cc:228
 hkaltrackstate.cc:229
 hkaltrackstate.cc:230
 hkaltrackstate.cc:231
 hkaltrackstate.cc:232
 hkaltrackstate.cc:233
 hkaltrackstate.cc:234
 hkaltrackstate.cc:235
 hkaltrackstate.cc:236
 hkaltrackstate.cc:237
 hkaltrackstate.cc:238
 hkaltrackstate.cc:239
 hkaltrackstate.cc:240
 hkaltrackstate.cc:241
 hkaltrackstate.cc:242
 hkaltrackstate.cc:243
 hkaltrackstate.cc:244
 hkaltrackstate.cc:245
 hkaltrackstate.cc:246
 hkaltrackstate.cc:247
 hkaltrackstate.cc:248
 hkaltrackstate.cc:249
 hkaltrackstate.cc:250
 hkaltrackstate.cc:251
 hkaltrackstate.cc:252
 hkaltrackstate.cc:253
 hkaltrackstate.cc:254
 hkaltrackstate.cc:255
 hkaltrackstate.cc:256
 hkaltrackstate.cc:257
 hkaltrackstate.cc:258
 hkaltrackstate.cc:259
 hkaltrackstate.cc:260
 hkaltrackstate.cc:261
 hkaltrackstate.cc:262
 hkaltrackstate.cc:263
 hkaltrackstate.cc:264
 hkaltrackstate.cc:265
 hkaltrackstate.cc:266
 hkaltrackstate.cc:267
 hkaltrackstate.cc:268
 hkaltrackstate.cc:269
 hkaltrackstate.cc:270
 hkaltrackstate.cc:271
 hkaltrackstate.cc:272
 hkaltrackstate.cc:273
 hkaltrackstate.cc:274
 hkaltrackstate.cc:275
 hkaltrackstate.cc:276
 hkaltrackstate.cc:277
 hkaltrackstate.cc:278
 hkaltrackstate.cc:279
 hkaltrackstate.cc:280
 hkaltrackstate.cc:281
 hkaltrackstate.cc:282
 hkaltrackstate.cc:283
 hkaltrackstate.cc:284
 hkaltrackstate.cc:285
 hkaltrackstate.cc:286
 hkaltrackstate.cc:287
 hkaltrackstate.cc:288
 hkaltrackstate.cc:289
 hkaltrackstate.cc:290
 hkaltrackstate.cc:291
 hkaltrackstate.cc:292
 hkaltrackstate.cc:293
 hkaltrackstate.cc:294
 hkaltrackstate.cc:295
 hkaltrackstate.cc:296
 hkaltrackstate.cc:297
 hkaltrackstate.cc:298
 hkaltrackstate.cc:299
 hkaltrackstate.cc:300
 hkaltrackstate.cc:301
 hkaltrackstate.cc:302
 hkaltrackstate.cc:303
 hkaltrackstate.cc:304
 hkaltrackstate.cc:305
 hkaltrackstate.cc:306
 hkaltrackstate.cc:307
 hkaltrackstate.cc:308
 hkaltrackstate.cc:309
 hkaltrackstate.cc:310
 hkaltrackstate.cc:311
 hkaltrackstate.cc:312
 hkaltrackstate.cc:313
 hkaltrackstate.cc:314
 hkaltrackstate.cc:315
 hkaltrackstate.cc:316
 hkaltrackstate.cc:317
 hkaltrackstate.cc:318
 hkaltrackstate.cc:319
 hkaltrackstate.cc:320
 hkaltrackstate.cc:321
 hkaltrackstate.cc:322
 hkaltrackstate.cc:323
 hkaltrackstate.cc:324
 hkaltrackstate.cc:325
 hkaltrackstate.cc:326
 hkaltrackstate.cc:327
 hkaltrackstate.cc:328
 hkaltrackstate.cc:329
 hkaltrackstate.cc:330
 hkaltrackstate.cc:331
 hkaltrackstate.cc:332
 hkaltrackstate.cc:333
 hkaltrackstate.cc:334
 hkaltrackstate.cc:335
 hkaltrackstate.cc:336
 hkaltrackstate.cc:337
 hkaltrackstate.cc:338
 hkaltrackstate.cc:339
 hkaltrackstate.cc:340
 hkaltrackstate.cc:341
 hkaltrackstate.cc:342
 hkaltrackstate.cc:343
 hkaltrackstate.cc:344
 hkaltrackstate.cc:345
 hkaltrackstate.cc:346
 hkaltrackstate.cc:347
 hkaltrackstate.cc:348
 hkaltrackstate.cc:349
 hkaltrackstate.cc:350
 hkaltrackstate.cc:351
 hkaltrackstate.cc:352
 hkaltrackstate.cc:353
 hkaltrackstate.cc:354
 hkaltrackstate.cc:355
 hkaltrackstate.cc:356
 hkaltrackstate.cc:357
 hkaltrackstate.cc:358
 hkaltrackstate.cc:359
 hkaltrackstate.cc:360
 hkaltrackstate.cc:361
 hkaltrackstate.cc:362
 hkaltrackstate.cc:363
 hkaltrackstate.cc:364
 hkaltrackstate.cc:365
 hkaltrackstate.cc:366
 hkaltrackstate.cc:367
 hkaltrackstate.cc:368
 hkaltrackstate.cc:369
 hkaltrackstate.cc:370
 hkaltrackstate.cc:371
 hkaltrackstate.cc:372
 hkaltrackstate.cc:373
 hkaltrackstate.cc:374
 hkaltrackstate.cc:375
 hkaltrackstate.cc:376
 hkaltrackstate.cc:377
 hkaltrackstate.cc:378
 hkaltrackstate.cc:379
 hkaltrackstate.cc:380
 hkaltrackstate.cc:381
 hkaltrackstate.cc:382
 hkaltrackstate.cc:383
 hkaltrackstate.cc:384
 hkaltrackstate.cc:385
 hkaltrackstate.cc:386
 hkaltrackstate.cc:387
 hkaltrackstate.cc:388
 hkaltrackstate.cc:389
 hkaltrackstate.cc:390
 hkaltrackstate.cc:391
 hkaltrackstate.cc:392
 hkaltrackstate.cc:393
 hkaltrackstate.cc:394
 hkaltrackstate.cc:395
 hkaltrackstate.cc:396
 hkaltrackstate.cc:397
 hkaltrackstate.cc:398
 hkaltrackstate.cc:399
 hkaltrackstate.cc:400
 hkaltrackstate.cc:401
 hkaltrackstate.cc:402
 hkaltrackstate.cc:403
 hkaltrackstate.cc:404
 hkaltrackstate.cc:405
 hkaltrackstate.cc:406
 hkaltrackstate.cc:407
 hkaltrackstate.cc:408
 hkaltrackstate.cc:409
 hkaltrackstate.cc:410
 hkaltrackstate.cc:411
 hkaltrackstate.cc:412
 hkaltrackstate.cc:413
 hkaltrackstate.cc:414
 hkaltrackstate.cc:415
 hkaltrackstate.cc:416
 hkaltrackstate.cc:417
 hkaltrackstate.cc:418
 hkaltrackstate.cc:419
 hkaltrackstate.cc:420
 hkaltrackstate.cc:421
 hkaltrackstate.cc:422
 hkaltrackstate.cc:423
 hkaltrackstate.cc:424
 hkaltrackstate.cc:425
 hkaltrackstate.cc:426
 hkaltrackstate.cc:427
 hkaltrackstate.cc:428
 hkaltrackstate.cc:429
 hkaltrackstate.cc:430
 hkaltrackstate.cc:431
 hkaltrackstate.cc:432
 hkaltrackstate.cc:433
 hkaltrackstate.cc:434
 hkaltrackstate.cc:435
 hkaltrackstate.cc:436
 hkaltrackstate.cc:437
 hkaltrackstate.cc:438
 hkaltrackstate.cc:439
 hkaltrackstate.cc:440
 hkaltrackstate.cc:441
 hkaltrackstate.cc:442
 hkaltrackstate.cc:443
 hkaltrackstate.cc:444
 hkaltrackstate.cc:445
 hkaltrackstate.cc:446
 hkaltrackstate.cc:447
 hkaltrackstate.cc:448
 hkaltrackstate.cc:449
 hkaltrackstate.cc:450
 hkaltrackstate.cc:451
 hkaltrackstate.cc:452
 hkaltrackstate.cc:453
 hkaltrackstate.cc:454
 hkaltrackstate.cc:455
 hkaltrackstate.cc:456
 hkaltrackstate.cc:457
 hkaltrackstate.cc:458