ROOT logo
//*-- Author : V.Pechenov (18/04/2010)

//_HADES_CLASS_DESCRIPTION
////////////////////////////////////////////////////////////////////////////
//  HMdcKickPlane
//
//  Descriptor of the magnetic kick plane of HADES.
//  Contains a parametrization of the kick plane.
//  Parametrization and parameters of the kick plane is the copy 
//  of HSurfPlaneTriV parameters from HKickPlane2 (detPartName: MDC3)
////////////////////////////////////////////////////////////////////////////

#include "hmdckickplane.h"
#include "hmdcseg.h"

ClassImp(HMdcKickPlane)

void HMdcKickPlane::setDefaultParam(void) {
  // Plane equation: y=fDx*x + fDz[i]*z + fC[i]
  // This parameters is the copy of HSurfPlaneTriV parameters
  // from HKickPlane2 (detPartName: MDC3)
  fDzLimit[1] =  400.;        // =fDzLimit[1] in HSurfPlaneTriV 
  fDzLimit[0] =  1100.;       // =fDzLimit[1] in HSurfPlaneTriV 
  fDx         =  0.124811;  
  fDz[2]      = -0.6546;      // =fDz[0] in HSurfPlaneTriV 
  fDz[1]      = -0.82008;     // =fDz[1] in HSurfPlaneTriV 
  fDz[0]      = -1.1989;      // =fDz[2] in HSurfPlaneTriV 
  fC[2]       =  1295.53;     // =fDc[0] in HSurfPlaneTriV 
  
  fC[1]  = fC[2] + (fDz[2]-fDz[1])*fDzLimit[1]; // =fDc[1] in HSurfPlaneTriV
  fC[0]  = fC[1] + (fDz[1]-fDz[0])*fDzLimit[0]; // =fDc[2] in HSurfPlaneTriV
  
  //Plane equation: parA[i]*x + parB[i]*y + z = padD[i]
  for(Int_t i=0;i<3;i++) {
    parA[i] = fDx/fDz[i];
    parB[i] = -1./fDz[i];
    parD[i] = -fC[i]/fDz[i];
  }
}

void HMdcKickPlane::calcIntersection(Double_t x1,Double_t y1,Double_t z1,
                                     Double_t x2, Double_t y2, Double_t z2,
                                     Double_t& x, Double_t& y, Double_t& z) const { 
  // Calcul. a cross of the line with plane       y=fDx*x+fDz*z+fC
  Double_t dX = x2-x1;
  Double_t dY = y2-y1;
  Double_t dZ = z2-z1;
  
  for(Int_t i=0;i<3;i++) {
    Double_t c2  = fDz[i]*dZ;
    Double_t c3  = y1-fC[i];
    
    Double_t cDx = fDx;
    Double_t c1  = cDx*dX-dY;
    Double_t div = 1/(c1+c2);
    Double_t cx  = dX*(c3-fDz[i]*z1)+ x1*(c2-dY);
    x = cx*div;
    if(x<0) {
      cDx = -fDx;
      c1  = cDx*dX-dY;
      div = 1/(c1+c2);
      x   = cx*div;
    }   
    z = (dZ*(c3-cDx*x1) + z1*c1)*div;
    if(i<2 && z<fDzLimit[i]) continue;
    y = cDx*x+fDz[i]*z+fC[i];
    break;
  }
}

void HMdcKickPlane::calcIntersection(Double_t x1,Double_t y1,Double_t z1,
                                     Double_t x2,Double_t y2,Double_t z2, HGeomVector &out) const { 
  // Calcul. a cross of the line with plane       y=fDx*x+fDz*z+fC
  Double_t dX = x2-x1;
  Double_t dY = y2-y1;
  Double_t dZ = z2-z1;
  
  for(Int_t i=0;i<3;i++) {
    Double_t c2  = fDz[i]*dZ;
    Double_t c3  = y1-fC[i];
    
    Double_t cDx = fDx;
    Double_t c1  = cDx*dX-dY;
    Double_t div = 1/(c1+c2);
    Double_t cx  = dX*(c3-fDz[i]*z1)+ x1*(c2-dY);
    Double_t x   = cx*div;
    if(x<0) {
      cDx = -fDx;
      c1  = cDx*dX-dY;
      div = 1/(c1+c2);
      x   = cx*div;
    }   
    Double_t z = (dZ*(c3-cDx*x1) + z1*c1)*div;
    if(i<2 && z<fDzLimit[i]) continue;
    Double_t y = cDx*x+fDz[i]*z+fC[i];
    out.setXYZ(x,y,z);
    break;
  }
}

void HMdcKickPlane::calcSegIntersec(Float_t z0,Float_t r0,Float_t theta,Float_t phi,
				    HGeomVector &p, HGeomVector &dir, HGeomVector &out) const {
  // Calcul. line param. a cross of this line with plane       y=fDx*x+fDz*z+fC
  Double_t cosPhi = TMath::Cos((Double_t)phi);
  Double_t sinPhi = TMath::Sin((Double_t)phi);
  Double_t x0     = -r0*sinPhi;   
  Double_t y0     =  r0*cosPhi; 
  Double_t dZ     = TMath::Cos((Double_t)theta);
  Double_t dxy    = TMath::Sqrt(1.-dZ*dZ);
  Double_t dX     = dxy*cosPhi;
  Double_t dY     = dxy*sinPhi;
  p.setXYZ(x0,y0,z0);
  dir.setXYZ(dX,dY,dZ);

  for(Int_t i=0;i<3;i++) {
    Double_t c2  = fDz[i]*dZ;
    Double_t c3  = y0-fC[i];
    
    Double_t cDx = fDx;
    Double_t c1  = cDx*dX-dY;
    Double_t div = 1./(c1+c2);
    Double_t cx  = dX*(c3-fDz[i]*z0)+ x0*(c2-dY);
    Double_t x   = cx*div;
    if(x<0) {
      cDx = -fDx;
      c1  = cDx*dX-dY;
      div = 1./(c1+c2);
      x   = cx*div;
    }   
    Double_t z = (dZ*(c3-cDx*x0) + z0*c1)*div;
    if(i<2 && z<fDzLimit[i]) continue;
    out.setXYZ(x,cDx*x+fDz[i]*z+fC[i],z);
    break;
  }
}

void HMdcKickPlane::calcSegIntersec(Float_t z0,Float_t r0,Float_t theta,Float_t phi,HSymMat &m, 
                         HGeomVector &p, HGeomVector &dir, HGeomVector &out,Double_t &errX,Double_t &errY) const {
  // Calcul. a cross of the line with plane       y=fDx*x+fDz*z+fC
  // and errors dx,dy on the kick plane
  Double_t cosPhi = TMath::Cos(phi);
  Double_t sinPhi = TMath::Sin(phi);
  Double_t x0     = -r0*sinPhi;
  Double_t y0     =  r0*cosPhi;
  Double_t dZ     = TMath::Cos(theta);
  Double_t dxy    = TMath::Sqrt(1.-dZ*dZ);  // == sin(theta)
  Double_t dX     = dxy*cosPhi;             // == sin(theta) * cos(phi)
  Double_t dY     = dxy*sinPhi;             // == sin(theta) * sin(phi)
  p.setXYZ(x0,y0,z0);
  dir.setXYZ(dX,dY,dZ);

  for(Int_t i = 0;i<3;i++) {
    Double_t c2  = fDz[i]*dZ;
    Double_t c3  = y0-fC[i];
    
    Double_t cDx = fDx;
    Double_t c1  = cDx*dX-dY;
    Double_t div = 1./(c1+c2);
    Double_t cx  = dX*(c3-fDz[i]*z0)+ x0*(c2-dY);
    Double_t x   = cx*div;
    Double_t pA  = parA[i];
    if(x<0) {
      cDx = -fDx;
      c1  = cDx*dX-dY;
      div = 1./(c1+c2);
      x   = cx*div;
      pA = -pA;
    }   
    Double_t z = (dZ*(c3-cDx*x0) + z0*c1)*div;
    if(i<2 && z<fDzLimit[i]) continue;
    out.setXYZ(x,cDx*x+fDz[i]*z+fC[i],z);
    
    // Error propogation:
    Double_t pB = parB[i];
    Double_t EN = 1./(pA*dX+pB*dY+dZ);     // dZ==cos(theta)
    Double_t FN = parD[i]-pA*x0-pB*y0-z;
    Double_t k0 = FN*EN*EN;
    Double_t k1 = pA*sinPhi - pB*cosPhi;
    Double_t k2 = pA*y0 - pB*x0 + FN*EN*(pA*dY-pB*dX);
    Double_t k3 = dX*EN;
    Double_t k4 = dY*EN;
    Double_t XdP1dP2[4];
    XdP1dP2[0] = -k3;
    XdP1dP2[1] = -sinPhi + k1*k3;  
    XdP1dP2[2] =  k0*cosPhi;
    XdP1dP2[3] = -y0 - k4*FN + k3*k2;
    Double_t YdP1dP2[4];
    YdP1dP2[0] = -k4;
    YdP1dP2[1] =  cosPhi + k1*k4;
    YdP1dP2[2] =  k0*sinPhi;
    YdP1dP2[3] =  x0 + k3*FN + k4*k2;
    
    errX = 0.;
    errY = 0.;
    for (Int_t k=0;k<4;k++) for (Int_t l=0;l<4;l++) {
      errX += m.getElement(k,l)*XdP1dP2[k]*XdP1dP2[l];
      errY += m.getElement(k,l)*YdP1dP2[k]*YdP1dP2[l];
    }
    errX = TMath::Sqrt(errX);
    errY = TMath::Sqrt(errY);
    break;
  }
}

void HMdcKickPlane::calcSegIntersec(HMdcSeg *seg1,HGeomVector &p, HGeomVector &dir, HGeomVector &out,
                                    HGeomVector *sOnKick) const {
  // Calcul. a cross of the line with plane       y=fDx*x+fDz*z+fC
  // and errors dx,dy on the kick plane
  Double_t z0     = seg1->getZ();  
  Double_t r0     = seg1->getR();   
  Double_t theta  = seg1->getTheta();
  Double_t phi    = seg1->getPhi();  
  HSymMat &m      = seg1->getCovariance();
  
  Double_t cosPhi = TMath::Cos(phi);
  Double_t sinPhi = TMath::Sin(phi);
  Double_t x0     = -r0*sinPhi;   
  Double_t y0     =  r0*cosPhi; 
  Double_t dZ     = TMath::Cos(theta);
  Double_t dxy    = TMath::Sqrt(1.-dZ*dZ);  // == sin(theta)
  Double_t dX     = dxy*cosPhi;             // == sin(theta) * cos(phi)
  Double_t dY     = dxy*sinPhi;             // == sin(theta) * sin(phi)
  p.setXYZ(x0,y0,z0);
  dir.setXYZ(dX,dY,dZ);

  Int_t i = 0;
  for(;i<3;i++) {
    Double_t c2  = fDz[i]*dZ;
    Double_t c3  = y0-fC[i];
    
    Double_t cDx = fDx;
    Double_t c1  = cDx*dX-dY;
    Double_t div = 1./(c1+c2);
    Double_t cx  = dX*(c3-fDz[i]*z0)+ x0*(c2-dY);
    Double_t x   = cx*div;
    Double_t pA  = parA[i];
    if(x<0) {
      cDx = -fDx;
      c1  = cDx*dX-dY;
      div = 1./(c1+c2);
      x   = cx*div;
      pA = -pA;
    }   
    Double_t z = (dZ*(c3-cDx*x0) + z0*c1)*div;
    if(i<2 && z<fDzLimit[i]) continue;
    Double_t y =cDx*x+fDz[i]*z+fC[i];
    out.setXYZ(x,y,z);
    
    // Error propogation:
    Double_t pB = parB[i];
    Double_t EN = 1./(pA*dX+pB*dY+dZ);     // dZ==cos(theta)
    Double_t FN = parD[i]-pA*x0-pB*y0-z;
    Double_t k0 = FN*EN*EN;
    Double_t k1 = pA*sinPhi - pB*cosPhi;
    Double_t k2 = pA*y0 - pB*x0 + FN*EN*(pA*dY-pB*dX);
    Double_t k3 = dX*EN;
    Double_t k4 = dY*EN;
    Double_t XdP1dP2[4];
    XdP1dP2[0] = -k3;
    XdP1dP2[1] = -sinPhi + k1*k3;  
    XdP1dP2[2] =  k0*cosPhi;
    XdP1dP2[3] = -y0 - k4*FN + k3*k2;
    Double_t YdP1dP2[4];
    YdP1dP2[0] = -k4;
    YdP1dP2[1] =  cosPhi + k1*k4;
    YdP1dP2[2] =  k0*sinPhi;
    YdP1dP2[3] =  x0 + k3*FN + k4*k2;
    
    Double_t errX = 0.;
    Double_t errY = 0.;
    for (Int_t k=0;k<4;k++) for (Int_t l=0;l<4;l++) {
      errX += m.getElement(k,l)*XdP1dP2[k]*XdP1dP2[l];
      errY += m.getElement(k,l)*YdP1dP2[k]*YdP1dP2[l];
    }
    errX = TMath::Sqrt(errX);
    errY = TMath::Sqrt(errY); 
    sOnKick[0].setXYZ(x+errX,y+errY,z-pA*errX-pB*errY);
    sOnKick[1].setXYZ(x-errX,y+errY,z+pA*errX-pB*errY);
    sOnKick[2].setXYZ(x+errX,y-errY,z-pA*errX+pB*errY);
    sOnKick[3].setXYZ(x-errX,y-errY,z+pA*errX+pB*errY);
    break;
  }
}

void HMdcKickPlane::calcSegIntersec(HMdcSeg *seg, HGeomVector &out) const {
  // Calcul. a cross of the segment with plane       y=fDx*x+fDz*z+fC
  Double_t z0     = seg->getZ();
  Double_t r0     = seg->getR();
  Double_t theta  = seg->getTheta();
  Double_t phi    = seg->getPhi();
  
  Double_t cosPhi = TMath::Cos(phi);
  Double_t sinPhi = TMath::Sin(phi);
  Double_t x0     = -r0*sinPhi;   
  Double_t y0     =  r0*cosPhi; 
  Double_t dZ     = TMath::Cos(theta);
  Double_t dxy    = TMath::Sqrt(1.-dZ*dZ);  // == sin(theta)
  Double_t dX     = dxy*cosPhi;             // == sin(theta) * cos(phi)
  Double_t dY     = dxy*sinPhi;             // == sin(theta) * sin(phi)

  for(Int_t i=0;i<3;i++) {
    Double_t c2  = fDz[i]*dZ;
    Double_t c3  = y0-fC[i];
    
    Double_t cDx = fDx;
    Double_t c1  = cDx*dX-dY;
    Double_t div = 1./(c1+c2);
    Double_t cx  = dX*(c3-fDz[i]*z0)+ x0*(c2-dY);
    Double_t x   = cx*div;
    if(x<0) {
      cDx = -fDx;
      c1  = cDx*dX-dY;
      div = 1./(c1+c2);
      x   = cx*div;
    }   
    Double_t z = (dZ*(c3-cDx*x0) + z0*c1)*div;
    if(i<2 && z<fDzLimit[i]) continue;
    out.setXYZ(x,cDx*x+fDz[i]*z+fC[i],z);
    break;
  }
}
 hmdckickplane.cc:1
 hmdckickplane.cc:2
 hmdckickplane.cc:3
 hmdckickplane.cc:4
 hmdckickplane.cc:5
 hmdckickplane.cc:6
 hmdckickplane.cc:7
 hmdckickplane.cc:8
 hmdckickplane.cc:9
 hmdckickplane.cc:10
 hmdckickplane.cc:11
 hmdckickplane.cc:12
 hmdckickplane.cc:13
 hmdckickplane.cc:14
 hmdckickplane.cc:15
 hmdckickplane.cc:16
 hmdckickplane.cc:17
 hmdckickplane.cc:18
 hmdckickplane.cc:19
 hmdckickplane.cc:20
 hmdckickplane.cc:21
 hmdckickplane.cc:22
 hmdckickplane.cc:23
 hmdckickplane.cc:24
 hmdckickplane.cc:25
 hmdckickplane.cc:26
 hmdckickplane.cc:27
 hmdckickplane.cc:28
 hmdckickplane.cc:29
 hmdckickplane.cc:30
 hmdckickplane.cc:31
 hmdckickplane.cc:32
 hmdckickplane.cc:33
 hmdckickplane.cc:34
 hmdckickplane.cc:35
 hmdckickplane.cc:36
 hmdckickplane.cc:37
 hmdckickplane.cc:38
 hmdckickplane.cc:39
 hmdckickplane.cc:40
 hmdckickplane.cc:41
 hmdckickplane.cc:42
 hmdckickplane.cc:43
 hmdckickplane.cc:44
 hmdckickplane.cc:45
 hmdckickplane.cc:46
 hmdckickplane.cc:47
 hmdckickplane.cc:48
 hmdckickplane.cc:49
 hmdckickplane.cc:50
 hmdckickplane.cc:51
 hmdckickplane.cc:52
 hmdckickplane.cc:53
 hmdckickplane.cc:54
 hmdckickplane.cc:55
 hmdckickplane.cc:56
 hmdckickplane.cc:57
 hmdckickplane.cc:58
 hmdckickplane.cc:59
 hmdckickplane.cc:60
 hmdckickplane.cc:61
 hmdckickplane.cc:62
 hmdckickplane.cc:63
 hmdckickplane.cc:64
 hmdckickplane.cc:65
 hmdckickplane.cc:66
 hmdckickplane.cc:67
 hmdckickplane.cc:68
 hmdckickplane.cc:69
 hmdckickplane.cc:70
 hmdckickplane.cc:71
 hmdckickplane.cc:72
 hmdckickplane.cc:73
 hmdckickplane.cc:74
 hmdckickplane.cc:75
 hmdckickplane.cc:76
 hmdckickplane.cc:77
 hmdckickplane.cc:78
 hmdckickplane.cc:79
 hmdckickplane.cc:80
 hmdckickplane.cc:81
 hmdckickplane.cc:82
 hmdckickplane.cc:83
 hmdckickplane.cc:84
 hmdckickplane.cc:85
 hmdckickplane.cc:86
 hmdckickplane.cc:87
 hmdckickplane.cc:88
 hmdckickplane.cc:89
 hmdckickplane.cc:90
 hmdckickplane.cc:91
 hmdckickplane.cc:92
 hmdckickplane.cc:93
 hmdckickplane.cc:94
 hmdckickplane.cc:95
 hmdckickplane.cc:96
 hmdckickplane.cc:97
 hmdckickplane.cc:98
 hmdckickplane.cc:99
 hmdckickplane.cc:100
 hmdckickplane.cc:101
 hmdckickplane.cc:102
 hmdckickplane.cc:103
 hmdckickplane.cc:104
 hmdckickplane.cc:105
 hmdckickplane.cc:106
 hmdckickplane.cc:107
 hmdckickplane.cc:108
 hmdckickplane.cc:109
 hmdckickplane.cc:110
 hmdckickplane.cc:111
 hmdckickplane.cc:112
 hmdckickplane.cc:113
 hmdckickplane.cc:114
 hmdckickplane.cc:115
 hmdckickplane.cc:116
 hmdckickplane.cc:117
 hmdckickplane.cc:118
 hmdckickplane.cc:119
 hmdckickplane.cc:120
 hmdckickplane.cc:121
 hmdckickplane.cc:122
 hmdckickplane.cc:123
 hmdckickplane.cc:124
 hmdckickplane.cc:125
 hmdckickplane.cc:126
 hmdckickplane.cc:127
 hmdckickplane.cc:128
 hmdckickplane.cc:129
 hmdckickplane.cc:130
 hmdckickplane.cc:131
 hmdckickplane.cc:132
 hmdckickplane.cc:133
 hmdckickplane.cc:134
 hmdckickplane.cc:135
 hmdckickplane.cc:136
 hmdckickplane.cc:137
 hmdckickplane.cc:138
 hmdckickplane.cc:139
 hmdckickplane.cc:140
 hmdckickplane.cc:141
 hmdckickplane.cc:142
 hmdckickplane.cc:143
 hmdckickplane.cc:144
 hmdckickplane.cc:145
 hmdckickplane.cc:146
 hmdckickplane.cc:147
 hmdckickplane.cc:148
 hmdckickplane.cc:149
 hmdckickplane.cc:150
 hmdckickplane.cc:151
 hmdckickplane.cc:152
 hmdckickplane.cc:153
 hmdckickplane.cc:154
 hmdckickplane.cc:155
 hmdckickplane.cc:156
 hmdckickplane.cc:157
 hmdckickplane.cc:158
 hmdckickplane.cc:159
 hmdckickplane.cc:160
 hmdckickplane.cc:161
 hmdckickplane.cc:162
 hmdckickplane.cc:163
 hmdckickplane.cc:164
 hmdckickplane.cc:165
 hmdckickplane.cc:166
 hmdckickplane.cc:167
 hmdckickplane.cc:168
 hmdckickplane.cc:169
 hmdckickplane.cc:170
 hmdckickplane.cc:171
 hmdckickplane.cc:172
 hmdckickplane.cc:173
 hmdckickplane.cc:174
 hmdckickplane.cc:175
 hmdckickplane.cc:176
 hmdckickplane.cc:177
 hmdckickplane.cc:178
 hmdckickplane.cc:179
 hmdckickplane.cc:180
 hmdckickplane.cc:181
 hmdckickplane.cc:182
 hmdckickplane.cc:183
 hmdckickplane.cc:184
 hmdckickplane.cc:185
 hmdckickplane.cc:186
 hmdckickplane.cc:187
 hmdckickplane.cc:188
 hmdckickplane.cc:189
 hmdckickplane.cc:190
 hmdckickplane.cc:191
 hmdckickplane.cc:192
 hmdckickplane.cc:193
 hmdckickplane.cc:194
 hmdckickplane.cc:195
 hmdckickplane.cc:196
 hmdckickplane.cc:197
 hmdckickplane.cc:198
 hmdckickplane.cc:199
 hmdckickplane.cc:200
 hmdckickplane.cc:201
 hmdckickplane.cc:202
 hmdckickplane.cc:203
 hmdckickplane.cc:204
 hmdckickplane.cc:205
 hmdckickplane.cc:206
 hmdckickplane.cc:207
 hmdckickplane.cc:208
 hmdckickplane.cc:209
 hmdckickplane.cc:210
 hmdckickplane.cc:211
 hmdckickplane.cc:212
 hmdckickplane.cc:213
 hmdckickplane.cc:214
 hmdckickplane.cc:215
 hmdckickplane.cc:216
 hmdckickplane.cc:217
 hmdckickplane.cc:218
 hmdckickplane.cc:219
 hmdckickplane.cc:220
 hmdckickplane.cc:221
 hmdckickplane.cc:222
 hmdckickplane.cc:223
 hmdckickplane.cc:224
 hmdckickplane.cc:225
 hmdckickplane.cc:226
 hmdckickplane.cc:227
 hmdckickplane.cc:228
 hmdckickplane.cc:229
 hmdckickplane.cc:230
 hmdckickplane.cc:231
 hmdckickplane.cc:232
 hmdckickplane.cc:233
 hmdckickplane.cc:234
 hmdckickplane.cc:235
 hmdckickplane.cc:236
 hmdckickplane.cc:237
 hmdckickplane.cc:238
 hmdckickplane.cc:239
 hmdckickplane.cc:240
 hmdckickplane.cc:241
 hmdckickplane.cc:242
 hmdckickplane.cc:243
 hmdckickplane.cc:244
 hmdckickplane.cc:245
 hmdckickplane.cc:246
 hmdckickplane.cc:247
 hmdckickplane.cc:248
 hmdckickplane.cc:249
 hmdckickplane.cc:250
 hmdckickplane.cc:251
 hmdckickplane.cc:252
 hmdckickplane.cc:253
 hmdckickplane.cc:254
 hmdckickplane.cc:255
 hmdckickplane.cc:256
 hmdckickplane.cc:257
 hmdckickplane.cc:258
 hmdckickplane.cc:259
 hmdckickplane.cc:260
 hmdckickplane.cc:261
 hmdckickplane.cc:262
 hmdckickplane.cc:263
 hmdckickplane.cc:264
 hmdckickplane.cc:265
 hmdckickplane.cc:266
 hmdckickplane.cc:267
 hmdckickplane.cc:268
 hmdckickplane.cc:269
 hmdckickplane.cc:270
 hmdckickplane.cc:271
 hmdckickplane.cc:272
 hmdckickplane.cc:273
 hmdckickplane.cc:274
 hmdckickplane.cc:275
 hmdckickplane.cc:276
 hmdckickplane.cc:277
 hmdckickplane.cc:278
 hmdckickplane.cc:279
 hmdckickplane.cc:280
 hmdckickplane.cc:281
 hmdckickplane.cc:282
 hmdckickplane.cc:283
 hmdckickplane.cc:284
 hmdckickplane.cc:285
 hmdckickplane.cc:286
 hmdckickplane.cc:287
 hmdckickplane.cc:288
 hmdckickplane.cc:289
 hmdckickplane.cc:290
 hmdckickplane.cc:291
 hmdckickplane.cc:292
 hmdckickplane.cc:293
 hmdckickplane.cc:294
 hmdckickplane.cc:295
 hmdckickplane.cc:296
 hmdckickplane.cc:297
 hmdckickplane.cc:298
 hmdckickplane.cc:299
 hmdckickplane.cc:300
 hmdckickplane.cc:301
 hmdckickplane.cc:302
 hmdckickplane.cc:303
 hmdckickplane.cc:304
 hmdckickplane.cc:305
 hmdckickplane.cc:306
 hmdckickplane.cc:307
 hmdckickplane.cc:308
 hmdckickplane.cc:309
 hmdckickplane.cc:310
 hmdckickplane.cc:311
 hmdckickplane.cc:312
 hmdckickplane.cc:313
 hmdckickplane.cc:314
 hmdckickplane.cc:315
 hmdckickplane.cc:316
 hmdckickplane.cc:317
 hmdckickplane.cc:318
 hmdckickplane.cc:319
 hmdckickplane.cc:320
 hmdckickplane.cc:321