22       const double& sinalpha = trigCache.
fSinA;
 
   23       const double& cosalpha = trigCache.
fCosA;
 
   24       const double& sinbeta  = trigCache.
fSinB;
 
   25       const double& cosbeta  = trigCache.
fCosB;
 
   26       const double denom = (trackAlongPlaneDir ? par5d[4]*std::sqrt(1. + par5d[2]*par5d[2] + par5d[3]*par5d[3]) : -par5d[4]*std::sqrt(1. + par5d[2]*par5d[2] + par5d[3]*par5d[3]) );
 
   28       par6d[0] = planePos.X() + par5d[0]*cosalpha;
 
   29       par6d[1] = planePos.Y() + par5d[0]*sinalpha*sinbeta + par5d[1]*cosbeta;
 
   30       par6d[2] = planePos.Z() - par5d[0]*sinalpha*cosbeta + par5d[1]*sinbeta;
 
   31       par6d[3] = (par5d[2]*cosalpha + 1.*sinalpha)/denom;
 
   32       par6d[4] = (par5d[2]*sinalpha*sinbeta + par5d[3]*cosbeta - cosalpha*sinbeta)/denom;
 
   33       par6d[5] = (-par5d[2]*sinalpha*cosbeta + par5d[3]*sinbeta + cosalpha*cosbeta)/denom;
 
   38       const double& sinalpha = trigCache.
fSinA;
 
   39       const double& cosalpha = trigCache.
fCosA;
 
   40       const double& sinbeta  = trigCache.
fSinB;
 
   41       const double& cosbeta  = trigCache.
fCosB;
 
   42       const double pu = par6d[3]*cosalpha + par6d[4]*sinalpha*sinbeta - par6d[5]*sinalpha*cosbeta;
 
   43       const double pv = par6d[4]*cosbeta + par6d[5]*sinbeta;
 
   44       const double pw = par6d[3]*sinalpha - par6d[4]*cosalpha*sinbeta + par6d[5]*cosalpha*cosbeta;
 
   45       const double pval = sqrt(par6d[3]*par6d[3]+par6d[4]*par6d[4]+par6d[5]*par6d[5]);
 
   47       par5d[0] = (par6d[0]-planePos.X())*cosalpha + (par6d[1]-planePos.Y())*sinalpha*sinbeta - (par6d[2]-planePos.Z())*sinalpha*cosbeta;
 
   48       par5d[1] = (par6d[1]-planePos.Y())*cosbeta + (par6d[2]-planePos.Z())*sinbeta;
 
   51       par5d[4] = (pval>0 ? 1./pval : 1.);
 
   56       bool trackAlongPlaneDir = trackMomOrDir.Dot(planeDir)>0;
 
   57       const double& sinalpha = trigCache.
fSinA;
 
   58       const double& cosalpha = trigCache.
fCosA;
 
   59       const double& sinbeta  = trigCache.
fSinB;
 
   60       const double& cosbeta  = trigCache.
fCosB;
 
   61       const double pu = trackMomOrDir.X()*cosalpha + trackMomOrDir.Y()*sinalpha*sinbeta - trackMomOrDir.Z()*sinalpha*cosbeta;
 
   62       const double pv = trackMomOrDir.Y()*cosbeta + trackMomOrDir.Z()*sinbeta;
 
   63       const double pw = trackMomOrDir.X()*sinalpha - trackMomOrDir.Y()*cosalpha*sinbeta + trackMomOrDir.Z()*cosalpha*cosbeta;
 
   65       const double l2 = pu/
pw;
 
   66       const double l3 = pv/
pw;
 
   67       const double p2 = trackMomOrDir.X()*trackMomOrDir.X() + trackMomOrDir.Y()*trackMomOrDir.Y() + trackMomOrDir.Z()*trackMomOrDir.Z();
 
   68       const double l4 = (hasMomentum ? 1./sqrt(p2) : 1.);
 
   69       const double den23 = ( trackAlongPlaneDir ? l4*(l2*l2+l3*l3+1.)*sqrt(l2*l2+l3*l3+1.) : -l4*(l2*l2+l3*l3+1.)*sqrt(l2*l2+l3*l3+1.) );
 
   70       const double den4 = l4*l4*sqrt(l2*l2+l3*l3+1.);
 
   79       j(1,0) = sinalpha*sinbeta;
 
   85       j(2,0) = -sinalpha*cosbeta;
 
   93       j(3,2) = (cosalpha*(l3*l3+1.) - sinalpha*l2)/den23;
 
   94       j(3,3) = -l3*(l2*cosalpha + sinalpha)/den23;
 
   95       j(3,4) = (hasMomentum ? -(l2*cosalpha + sinalpha)/den4 : 0.);
 
   99       j(4,2) = (cosalpha*sinbeta*l2 - cosbeta*l2*l3 + sinalpha*sinbeta*(l3*l3+1.))/den23;
 
  100       j(4,3) = (sinbeta*l3*(cosalpha-sinalpha*l2) + cosbeta*(l2*l2+1.))/den23;
 
  101       j(4,4) = (hasMomentum ? (cosalpha*sinbeta - cosbeta*l3 - sinalpha*sinbeta*l2)/den4 : 0.);
 
  105       j(5,2) = -(cosalpha*cosbeta*l2 + cosbeta*sinalpha*l3*l3 + cosbeta*sinalpha + sinbeta*l2*l3)/den23;
 
  106       j(5,3) = (-cosalpha*cosbeta*l3 + cosbeta*sinalpha*l2*l3 + sinbeta*l2*l2 + sinbeta)/den23;
 
  107       j(5,4) = (hasMomentum ? (-cosalpha*cosbeta + cosbeta*sinalpha*l2 - sinbeta*l3)/den4 : 0.);
 
  113       const double& sinalpha = trigCache.
fSinA;
 
  114       const double& cosalpha = trigCache.
fCosA;
 
  115       const double& sinbeta  = trigCache.
fSinB;
 
  116       const double& cosbeta  = trigCache.
fCosB;
 
  117       const double den23 = (cosalpha*(cosbeta*trackMomOrDir.Z() - sinbeta*trackMomOrDir.Y()) + sinalpha*trackMomOrDir.X())*(cosalpha*(cosbeta*trackMomOrDir.Z() - sinbeta*trackMomOrDir.Y()) + sinalpha*trackMomOrDir.X());
 
  118       const double den4 = sqrt(trackMomOrDir.X()*trackMomOrDir.X()+trackMomOrDir.Y()*trackMomOrDir.Y()+trackMomOrDir.Z()*trackMomOrDir.Z())*(trackMomOrDir.X()*trackMomOrDir.X()+trackMomOrDir.Y()*trackMomOrDir.Y()+trackMomOrDir.Z()*trackMomOrDir.Z());
 
  122       j(0,1) = sinalpha*sinbeta ;
 
  123       j(0,2) = -sinalpha*cosbeta;
 
  138       j(2,3) = ((cosalpha*cosalpha + sinalpha*sinalpha)*(cosbeta*trackMomOrDir.Z() - sinbeta*trackMomOrDir.Y()))/den23;
 
  139       j(2,4) = (sinbeta*trackMomOrDir.X()*(cosalpha*cosalpha + sinalpha*sinalpha))/den23;
 
  140       j(2,5) = -(cosbeta*trackMomOrDir.X()*(cosalpha*cosalpha + sinalpha*sinalpha))/den23;
 
  145       j(3,3) = -(sinalpha*(cosbeta*trackMomOrDir.Y() + sinbeta*trackMomOrDir.Z()))/den23;
 
  146       j(3,4) = (cosalpha*trackMomOrDir.Z()*(cosbeta*cosbeta + sinbeta*sinbeta) + cosbeta*sinalpha*trackMomOrDir.X())/den23;
 
  147       j(3,5) = (-cosalpha*cosbeta*cosbeta*trackMomOrDir.Y() - cosalpha*sinbeta*sinbeta*trackMomOrDir.Y() + sinalpha*sinbeta*trackMomOrDir.X())/den23;
 
  152       j(4,3) = (hasMomentum ? -trackMomOrDir.X()/den4 : 0.);
 
  153       j(4,4) = (hasMomentum ? -trackMomOrDir.Y()/den4 : 0.);
 
  154       j(4,5) = (hasMomentum ? -trackMomOrDir.Z()/den4 : 0.);
 
  160       const double& sinalpha = trigCache.
fSinA;
 
  161       const double& cosalpha = trigCache.
fCosA;
 
  162       const double& sinbeta  = trigCache.
fSinB;
 
  163       const double& cosbeta  = trigCache.
fCosB;
 
  165         cosalpha ,  sinalpha * sinbeta , -sinalpha * cosbeta ,
 
  166         0.0      ,  cosbeta            ,  sinbeta            ,
 
  167         sinalpha , -cosalpha * sinbeta ,  cosalpha * cosbeta 
 
  172       const double& sinalpha = trigCache.
fSinA;
 
  173       const double& cosalpha = trigCache.
fCosA;
 
  174       const double& sinbeta  = trigCache.
fSinB;
 
  175       const double& cosbeta  = trigCache.
fCosB;
 
  177         cosalpha            , 0.      ,  sinalpha           ,
 
  178         sinalpha * sinbeta  , cosbeta , -cosalpha * sinbeta ,
 
  179         -sinalpha * cosbeta , sinbeta ,  cosalpha * cosbeta 
 
SMatrix65 Local5DToGlobal6DJacobian(bool hasMomentum, const Vector_t &trackMomOrDir) const 
Compute the jacobian to translate track covariance from local to global coordinates. The track momentum (or direction) is needed to compute the jacobian. Local coordinates are on the plane orthogonal to planeDir (it may be the same direction as the momentum, but the function is generic). 
Struct caching trigonometric function results. 
Rotation_t Global3DToLocal3DRotation() const 
Calculate rotation matrices from global (x,y,z) to local (u,v,w) coordinates. 
SVector5 Global6DToLocal5DParameters(const SVector6 &par6d) const 
Function to convert parameters from global to local coordinates. Local coordinates are on the plane w...
ROOT::Math::SMatrix< Double32_t, 5, 6 > SMatrix56
ROOT::Math::SVector< Double32_t, 5 > SVector5
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< Coord_t >, ROOT::Math::GlobalCoordinateSystemTag > Vector_t
Type for representation of momenta in 3D space. See recob::tracking::Coord_t for more details on the ...
SVector6 Local5DToGlobal6DParameters(const SVector5 &par5d, bool trackAlongPlaneDir=true) const 
Function to convert parameters from local to global coordinates. Local coordinates are on the plane w...
ROOT::Math::Rotation3D Rotation_t
Type for representation of space rotations. 
ROOT::Math::SVector< Double32_t, 6 > SVector6
ROOT::Math::PositionVector3D< ROOT::Math::Cartesian3D< Coord_t >, ROOT::Math::GlobalCoordinateSystemTag > Point_t
Type for representation of position in physical 3D space. See recob::tracking::Coord_t for more detai...
Rotation_t Local3DToGlobal3DRotation() const 
Calculate rotation matrices from local (u,v,w) to global (x,y,z) coordinates. 
SMatrix56 Global6DToLocal5DJacobian(bool hasMomentum, const Vector_t &trackMomOrDir) const 
Compute the jacobian to translate track covariance from global to local coordinates. The track momentum (or direction) is needed to compute the jacobian. Local coordinates are on the plane orthogonal to planeDir (it may be the same direction as the momentum, but the function is generic). Warning: some information may be lost in degenerate cases, e.g. the unceratinty along z position when converting to a x-y plane (fixed z) 
ROOT::Math::SMatrix< Double32_t, 6, 5 > SMatrix65