12 #include "GaudiKernel/MsgStream.h" 
   59   , m_boundValues(disctrbo.m_boundValues)
 
   66   if (
this != &disctrbo)
 
   97   bool insideX = (std::abs(DeltaPos[
Trk::locX]) <
 
   99   bool insideY = (std::abs(DeltaPos[
Trk::locY]) <
 
  102   if (!insideX || !insideY)
 
  138   double dx = bchk.
nSigmas * sqrt(bchk.lCovariance(0, 0));
 
  140     bchk.
nSigmas * sqrt(scResult.
sinC * scResult.
sinC * bchk.lCovariance(0, 0) +
 
  141                         locpo(0, 0) * locpo(0, 0) * scResult.
cosC *
 
  142                           scResult.
cosC * bchk.lCovariance(1, 1) +
 
  143                         2 * scResult.
cosC * scResult.
sinC * locpo(0, 0) *
 
  144                           bchk.lCovariance(0, 1));
 
  174       std::vector<double> innerPolygonCoef(m_maxIterations + 1);
 
  175       std::vector<double> outerPolygonCoef(m_maxIterations + 1);
 
  188       for (
int t = 1; 
t <= m_maxIterations; 
t++) {
 
  189         int numNodes = 4 << 
t;
 
  190         innerPolygonCoef[
t] = 0.5 / 
cos(2.0
f*
M_PI / numNodes);
 
  191         double c1x = (c0x + c2x) * innerPolygonCoef[
t];
 
  192         double c1y = (c0y + c2y) * innerPolygonCoef[
t];
 
  195         if (
tx * 
tx + ty * ty <= 
rr) {
 
  198         double t2x = c2x - c1x;
 
  199         double t2y = c2y - c1y;
 
  200         if (
tx * t2x + ty * t2y >= 0 &&
 
  201             tx * t2x + ty * t2y <= t2x * t2x + t2y * t2y &&
 
  202             (ty * t2x - 
tx * t2y >= 0 ||
 
  203              rr * (t2x * t2x + t2y * t2y) >=
 
  204                (ty * t2x - 
tx * t2y) * (ty * t2x - 
tx * t2y))) {
 
  207         double t0x = c0x - c1x;
 
  208         double t0y = c0y - c1y;
 
  209         if (
tx * t0x + ty * t0y >= 0 &&
 
  210             tx * t0x + ty * t0y <= t0x * t0x + t0y * t0y &&
 
  211             (ty * t0x - 
tx * t0y <= 0 ||
 
  212              rr * (t0x * t0x + t0y * t0y) >=
 
  213                (ty * t0x - 
tx * t0y) * (ty * t0x - 
tx * t0y))) {
 
  216         outerPolygonCoef[
t] =
 
  218         double c3x = (c0x + c1x) * outerPolygonCoef[
t];
 
  219         double c3y = (c0y + c1y) * outerPolygonCoef[
t];
 
  220         if ((c3x - 
x) * (c3x - 
x) + (c3y - 
y) * (c3y - 
y) < 
rr) {
 
  225         double c4x = c1x - c3x + c1x;
 
  226         double c4y = c1y - c3y + c1y;
 
  227         if ((c4x - 
x) * (c4x - 
x) + (c4y - 
y) * (c4y - 
y) < 
rr) {
 
  232         double t3x = c3x - c1x;
 
  233         double t3y = c3y - c1y;
 
  234         if (ty * t3x - 
tx * t3y <= 0 ||
 
  235             rr * (t3x * t3x + t3y * t3y) >
 
  236               (ty * t3x - 
tx * t3y) * (ty * t3x - 
tx * t3y)) {
 
  237           if (
tx * t3x + ty * t3y > 0) {
 
  238             if (std::abs(
tx * t3x + ty * t3y) <= t3x * t3x + t3y * t3y ||
 
  239                 (
x - c3x) * (c0x - c3x) + (
y - c3y) * (c0y - c3y) >= 0) {
 
  244           } 
else if (-(
tx * t3x + ty * t3y) <= t3x * t3x + t3y * t3y ||
 
  245                      (
x - c4x) * (c2x - c4x) + (
y - c4y) * (c2y - c4y) >= 0) {
 
  260     bool collide(
double x0,
 
  268       double x = std::abs(
x1 - x0);
 
  269       double y = std::abs(
y1 - y0);
 
  270       if (
x * 
x + (
h - 
y) * (
h - 
y) <= 
r * 
r ||
 
  271           (
w - 
x) * (
w - 
x) + 
y * 
y <= 
r * 
r ||
 
  273           || ((
x * 
h + 
y * 
w - 
w * 
h) * (
x * 
h + 
y * 
w - 
w * 
h) <=
 
  274                 r * 
r * (
w * 
w + 
h * 
h) &&
 
  275               x * 
w - 
y * 
h >= -
h * 
h &&
 
  276               x * 
w - 
y * 
h <= 
w * 
w)) { 
 
  279         if ((
x - 
w) * (
x - 
w) + (
y - 
h) * (
y - 
h) <= 
r * 
r ||
 
  280             (
x <= 
w && 
y - 
r <= 
h) || (
y <= 
h && 
x - 
r <= 
w)) {
 
  298   covRotMatrix << scResult.
cosC, -locpo(0, 0) * scResult.
sinC, scResult.
sinC,
 
  299     locpo(0, 0) * scResult.
cosC;
 
  301     covRotMatrix * bchk.lCovariance * covRotMatrix.transpose();
 
  302   Amg::Vector2D locpoCar(covRotMatrix(1, 1), -covRotMatrix(0, 1));
 
  306   double w = bchk.
nSigmas * sqrt(lCovarianceCar(0, 0));
 
  307   double h = bchk.
nSigmas * sqrt(lCovarianceCar(1, 1));
 
  311     (lCovarianceCar(1, 0) != 0 &&
 
  312      (lCovarianceCar(1, 1) - lCovarianceCar(0, 0)) != 0)
 
  313       ? .5 * bchk.
FastArcTan(2 * lCovarianceCar(1, 0) /
 
  314                              (lCovarianceCar(1, 1) - lCovarianceCar(0, 0)))
 
  320   double x1 = 
tmp(0, 0);
 
  321   double y1 = 
tmp(1, 0);
 
  358   double dist[4] = { sr0,
 
  363   return *std::max_element(dist, dist + 4);
 
  371   sl << std::setiosflags(std::ios::fixed);
 
  372   sl << std::setprecision(7);
 
  373   sl << 
"Trk::DiscTrapezoidalBounds:  (innerRadius, outerRadius, hMinX, hMaxX, hlengthY, hPhiSector, averagePhi, " 
  374         "rCenter, stereo) = ";
 
  375   sl << 
"(" << this->rMin() << 
", " << this->rMax() << 
", " << this->minHalflengthX() << 
", " << this->maxHalflengthX()
 
  376      << 
", " << this->halflengthY() << 
", " << this->halfPhiSector() << 
", " << this->averagePhi() << 
", " 
  377      << this->rCenter() << 
", " << this->stereo() << 
")";
 
  378   sl << std::setprecision(-1);
 
  385   sl << std::setiosflags(std::ios::fixed);
 
  386   sl << std::setprecision(7);
 
  387   sl << 
"Trk::DiscTrapezoidalBounds:  (innerRadius, outerRadius, hMinX, hMaxX, hlengthY, hPhiSector, averagePhi, " 
  388         "rCenter, stereo) = ";
 
  389   sl << 
"(" << this->rMin() << 
", " << this->rMax() << 
", " << this->minHalflengthX() << 
", " << this->maxHalflengthX()
 
  390      << 
", " << this->halflengthY() << 
", " << this->halfPhiSector() << 
", " << this->averagePhi() << 
", " 
  391      << this->rCenter() << 
", " << this->stereo() << 
")";
 
  392   sl << std::setprecision(-1);