Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
/** \file KarimakiAlignmentDerivatives.cc
 *
 *  $Date: 2007/05/02 10:51:40 $
 *  $Revision: 1.5 $
 */

#include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h"

#include "Alignment/CommonAlignmentParametrization/interface/KarimakiAlignmentDerivatives.h"

AlgebraicMatrix KarimakiAlignmentDerivatives::operator()(const TrajectoryStateOnSurface &tsos) const {
  // Get track parameters on surface
  AlgebraicVector5 alivec = tsos.localParameters().mixedFormatVector();

  // [0] q/p  : charged: charge (+ or - one) divided by magnitude of momentum
  //            neutral : inverse magnitude of momentum
  // [1] dxdz : direction tangent in local xz-plane
  // [2] dydz : direction tangent in local yz-plane
  // [3] x    : local x-coordinate
  // [4] y    : local y-coordinate

  double tanpsi = alivec[1];
  double tantheta = alivec[2];
  double ux = alivec[3];
  double vx = alivec[4];

  AlgebraicMatrix aliderivs(6, 2);

  aliderivs[0][0] = -1.0;
  aliderivs[0][1] = 0.0;
  aliderivs[1][0] = 0.0;
  aliderivs[1][1] = -1.0;
  aliderivs[2][0] = tanpsi;
  aliderivs[2][1] = tantheta;
  aliderivs[3][0] = vx * tanpsi;
  aliderivs[3][1] = vx * tantheta;
  aliderivs[4][0] = -ux * tanpsi;    // New beta sign convention
  aliderivs[4][1] = -ux * tantheta;  // New beta sign convention
  aliderivs[5][0] = vx;
  aliderivs[5][1] = -ux;

  return (aliderivs);
}