ROBAST logo
/******************************************************************************
 * Copyright (C) 2006-, Akira Okumura                                         *
 * All rights reserved.                                                       *
 *****************************************************************************/

///////////////////////////////////////////////////////////////////////////////
//
// AGeoWinstonCone2D
//
// Geometry class for tubes which have two aspheric surface
//
///////////////////////////////////////////////////////////////////////////////

#include "AGeoWinstonCone2D.h"

#include "Riostream.h"
#include "TBuffer3D.h"
#include "TBuffer3DTypes.h"
#include "TGeoCone.h"
#include "TGeoManager.h"
#include "TGeoTube.h"
#include "TGeoVolume.h"
#include "TMath.h"
#include "TVector3.h"
#include "TVirtualGeoPainter.h"
#include "TVirtualPad.h"

ClassImp(AGeoWinstonCone2D);

//_____________________________________________________________________________
AGeoWinstonCone2D::AGeoWinstonCone2D() : TGeoBBox(0, 0, 0) {
  // Default constructor
  SetShapeBit(TGeoShape::kGeoBox);
}

//_____________________________________________________________________________
AGeoWinstonCone2D::AGeoWinstonCone2D(Double_t r1, Double_t r2, Double_t y)
    : TGeoBBox(0, 0, 0) {
  SetShapeBit(TGeoShape::kGeoBox);
  SetWinstonDimensions(r1, r2, y);
  ComputeBBox();
}

//_____________________________________________________________________________
AGeoWinstonCone2D::AGeoWinstonCone2D(const char* name, Double_t r1, Double_t r2,
                                     Double_t y)
    : TGeoBBox(name, 0, 0, 0) {
  SetShapeBit(TGeoShape::kGeoBox);
  SetWinstonDimensions(r1, r2, y);
  ComputeBBox();
}

//_____________________________________________________________________________
AGeoWinstonCone2D::~AGeoWinstonCone2D() {
  // Destructor
}

//_____________________________________________________________________________
Double_t AGeoWinstonCone2D::CalcdRdZ(Double_t z) const noexcept(false) {
  if (TMath::Abs(z) > fDZ + 1e-10) {
    throw std::exception();
  }

  Double_t sint = TMath::Sin(fTheta);
  Double_t cost = TMath::Cos(fTheta);

  Double_t t = z + fDZ;
  Double_t a0 = t * t * sint * sint - 4. * fF * (t * cost + fF);
  Double_t a1 = 2. * t * sint * cost + 4. * fF * sint;
  Double_t a2 = cost * cost;
  Double_t da0dt = 2 * t * sint * sint - 4 * fF * cost;
  Double_t da1dt = 2 * sint * cost;

  Double_t drdz = (-da1dt + (a1 * da1dt - 2 * da0dt * a2) /
                                TMath::Sqrt(a1 * a1 - 4 * a0 * a2)) /
                  (2 * a2);

  return drdz;
}

//_____________________________________________________________________________
Double_t AGeoWinstonCone2D::CalcR(Double_t z) const noexcept(false) {
  if (TMath::Abs(z) > fDZ + 1e-10) {
    throw std::exception();
  }

  Double_t sint = TMath::Sin(fTheta);
  Double_t cost = TMath::Cos(fTheta);

  Double_t t = z + fDZ;
  Double_t a0 = t * t * sint * sint - 4. * fF * (t * cost + fF);
  Double_t a1 = 2. * t * sint * cost + 4. * fF * sint;
  Double_t a2 = cost * cost;

  Double_t r = (-a1 + TMath::Sqrt(a1 * a1 - 4. * a0 * a2)) / (2 * a2) - fR2;

  return r;
}

//_____________________________________________________________________________
Double_t AGeoWinstonCone2D::Capacity() const {
  // Compute capacity of the shape in [length^3]
  // Not implemeted yet

  return 0;
}

//_____________________________________________________________________________
void AGeoWinstonCone2D::ComputeBBox() {
  // Compute bounding box of the shape
  fDX = fR1;
  fDY = fDY;
  fDZ = fDZ;
  fOrigin[0] = 0;
  fOrigin[1] = 0;
  fOrigin[2] = 0;
}

//_____________________________________________________________________________
void AGeoWinstonCone2D::ComputeNormal(CONST53410 Double_t* point,
                                      CONST53410 Double_t* dir,
                                      Double_t* norm) {
  // Compute normal to closest surface from POINT.

  // Following calculation assumes that the point is very close to surfaces.
  Double_t x = point[0];
  Double_t y = point[1];
  Double_t z = point[2];

  Double_t saf[3];
  saf[0] = TMath::Abs(TMath::Abs(fDY) - TMath::Abs(y));
  saf[1] = TMath::Abs(TMath::Abs(fDZ) - TMath::Abs(z));
  try {
    saf[2] = TMath::Abs(CalcR(z) - TMath::Abs(x));
  } catch (...) {
    saf[2] = TGeoShape::Big();
  }

  Int_t i = TMath::LocMin(3, saf);  // find minimum

  if (i == 0) {  // on the XZ surface
    norm[0] = 0;
    norm[1] = 1;
    norm[2] = 0;
  } else if (i == 1) {  // on the XY surface
    norm[0] = 0;
    norm[1] = 0;
    norm[2] = 1;
  } else {
    if (point[0] > 0) {
      norm[0] = 1;
      norm[1] = 0;
      norm[2] = -CalcdRdZ(z);
    } else {
      norm[0] = 1;
      norm[1] = 0;
      norm[2] = CalcdRdZ(z);
    }
  }

  TVector3 vec(norm);
  vec.SetMag(1.);
  norm[0] = vec.X();
  norm[1] = vec.Y();
  norm[2] = vec.Z();

  if (norm[0] * dir[0] + norm[1] * dir[1] + norm[2] * dir[2] < 0) {
    norm[0] = -norm[0];
    norm[1] = -norm[1];
    norm[2] = -norm[2];
  }
}

//_____________________________________________________________________________
Bool_t AGeoWinstonCone2D::Contains(CONST53410 Double_t* point) const {
  // Test if point is in this shape
  Double_t x = point[0];
  Double_t y = point[1];
  Double_t z = point[2];
  if (TMath::Abs(y) > fDY or TMath::Abs(z) > fDZ) {
    return kFALSE;
  }

  Double_t r = CalcR(z);
  if (TMath::Abs(x) > r) {
    return kFALSE;
  }

  return kTRUE;
}

//_____________________________________________________________________________
Int_t AGeoWinstonCone2D::DistancetoPrimitive(Int_t px, Int_t py) {
  // compute closest distance from point px,py to each corner
  Int_t n = gGeoManager->GetNsegments();

  Int_t numPoints = 4 * (n + 1);

  return ShapeDistancetoPrimitive(numPoints, px, py);
}

//_____________________________________________________________________________
Double_t AGeoWinstonCone2D::DistFromInside(CONST53410 Double_t* point,
                                           CONST53410 Double_t* dir, Int_t iact,
                                           Double_t step,
                                           Double_t* safe) const {
  // compute distance from inside point to surface of the sphere

  // compute safe distance
  if (iact < 3 and safe) {
    *safe = Safety(point, kFALSE);
    if (iact == 0) return TGeoShape::Big();
    if (iact == 1 && step < *safe) return TGeoShape::Big();
  }

  // calculate distance
  Double_t dz = TGeoShape::Big();
  if (dir[2] < 0) {
    dz = -(point[2] + fDZ) / dir[2];
  } else if (dir[2] > 0) {
    dz = (fDZ - point[2]) / dir[2];
  }

  Double_t dy = TGeoShape::Big();
  if (dir[1] < 0) {
    dy = -(point[1] + fDY) / dir[1];
  } else if (dir[1] > 0) {
    dy = (fDY - point[1]) / dir[1];
  }

  Double_t d[4];
  d[0] = dz;
  d[1] = dy;
  d[2] = DistToParabola(point, dir, 0., TMath::Pi());
  d[3] = DistToParabola(point, dir, TMath::Pi(), TMath::Pi());

  return d[TMath::LocMin(4, d)];
}

//_____________________________________________________________________________
Double_t AGeoWinstonCone2D::DistFromOutside(CONST53410 Double_t* point,
                                            CONST53410 Double_t* dir,
                                            Int_t iact, Double_t step,
                                            Double_t* safe) const {
  // compute distance from outside point to surface of the sphere

  // compute safe distance
  if (iact < 3 and safe) {
    *safe = Safety(point, kFALSE);
    if (iact == 0) return TGeoShape::Big();
    if (iact == 1 && step < *safe) return TGeoShape::Big();
  }

  // calculate distance

  if (point[2] <= -fDZ) {
    if (dir[2] <= 0) {
      return TGeoShape::Big();
    }
    Double_t snxt = -(fDZ + point[2]) / dir[2];
    // find extrapolated X and Y
    Double_t xnew = point[0] + snxt * dir[0];
    Double_t ynew = point[1] + snxt * dir[1];
    if (TMath::Abs(xnew) <= fR2 and TMath::Abs(ynew) <= fDY) {
      return snxt;
    }
  } else if (point[2] >= fDZ) {
    if (dir[2] >= 0) {
      return TGeoShape::Big();
    }
    Double_t snxt = (fDZ - point[2]) / dir[2];
    // find extrapolated X and Y
    Double_t xnew = point[0] + snxt * dir[0];
    Double_t ynew = point[1] + snxt * dir[1];
    if (TMath::Abs(xnew) <= fR1 and TMath::Abs(ynew) <= fDY) {
      return snxt;
    }
  }

  if (point[1] <= -fDY) {
    if (dir[1] <= 0) {
      return TGeoShape::Big();
    }
    Double_t snxt = -(fDY + point[1]) / dir[1];
    // find extrapolated X and Y
    Double_t xnew = point[0] + snxt * dir[0];
    Double_t znew = point[2] + snxt * dir[2];
    if (TMath::Abs(znew) <= fDZ and TMath::Abs(xnew) <= CalcR(znew)) {
      return snxt;
    }
  } else if (point[1] >= fDY) {
    if (dir[1] >= 0) {
      return TGeoShape::Big();
    }
    Double_t snxt = (fDY - point[1]) / dir[1];
    // find extrapolated X and Y
    Double_t xnew = point[0] + snxt * dir[0];
    Double_t znew = point[2] + snxt * dir[2];
    if (TMath::Abs(znew) <= fDZ and TMath::Abs(xnew) <= CalcR(znew)) {
      return snxt;
    }
  }

  Double_t d[2];
  Double_t snxt = DistToParabola(point, dir, 0., TMath::Pi());
  Double_t ynew = point[1] + snxt * dir[1];
  if (TMath::Abs(ynew) <= fDY) {
    d[0] = snxt;
  } else {
    d[0] = TGeoShape::Big();
  }

  snxt = DistToParabola(point, dir, TMath::Pi(), TMath::Pi());
  ynew = point[1] + snxt * dir[1];
  if (TMath::Abs(ynew) <= fDY) {
    d[1] = snxt;
  } else {
    d[1] = TGeoShape::Big();
  }

  return TMath::Min(d[0], d[1]);
}

//_____________________________________________________________________________
Double_t AGeoWinstonCone2D::DistToParabola(CONST53410 Double_t* point,
                                           CONST53410 Double_t* dir,
                                           Double_t phi, Double_t open) const {
  Double_t x = TMath::Cos(phi) * point[0] + TMath::Sin(phi) * point[1];
  Double_t y = -TMath::Sin(phi) * point[0] + TMath::Cos(phi) * point[1];
  Double_t z = point[2];
  Double_t px = TMath::Cos(phi) * dir[0] + TMath::Sin(phi) * dir[1];
  Double_t py = -TMath::Sin(phi) * dir[0] + TMath::Cos(phi) * dir[1];
  Double_t pz = dir[2];

  if (px == 0 and pz == 0) {
    return TGeoShape::Big();
  }

  Double_t cost = TMath::Cos(fTheta);
  Double_t sint = TMath::Sin(fTheta);
  // coordinates in the parabola frame inside the 1st quadrant
  // The focal point is at (X, Z) = (0, f)
  Double_t X = cost * (x + fR2) + (z + fDZ) * sint;
  Double_t Z = -sint * (x + fR2) + (z + fDZ) * cost + fF;
  Double_t alpha = TMath::ATan2(pz, px);  // inclination in the x-z plane
  Double_t ALPHA = alpha - fTheta;        // inclination in the X-Z plane
  Double_t tanA = TMath::Tan(ALPHA);

  Double_t dist[2];

  Double_t tmp = tanA * tanA - (X * tanA - Z) / fF;
  if (tmp < 0) {
    dist[0] = TGeoShape::Big();
    dist[1] = TGeoShape::Big();
  } else {
    Double_t X_cross_p, X_cross_m;
    if (fDZ * 2 / TMath::Abs(tanA) <
        TGeoShape::Tolerance()) {  // direction is almost parallel to Z axis
      X_cross_p = X;
      X_cross_m = X;
    } else {
      X_cross_p = 2 * fF * (tanA + TMath::Sqrt(tmp));
      X_cross_m = 2 * fF * (tanA - TMath::Sqrt(tmp));
    }
    Double_t Z_cross_p = X_cross_p * X_cross_p / 4. / fF;
    Double_t Z_cross_m = X_cross_m * X_cross_m / 4. / fF;

    Double_t x_cross_p = cost * X_cross_p - sint * (Z_cross_p - fF) - fR2;
    Double_t x_cross_m = cost * X_cross_m - sint * (Z_cross_m - fF) - fR2;
    Double_t z_cross_p = sint * X_cross_p + cost * (Z_cross_p - fF) - fDZ;
    Double_t z_cross_m = sint * X_cross_m + cost * (Z_cross_m - fF) - fDZ;
    Double_t y_cross_p;
    Double_t y_cross_m;

    // Avoid using meaningless values
    // such as py/pz when |py| << 1 and |pz| << 1
    // and py/px when |py| << 1 and |px| << 1
    if (TMath::Abs(px) <= TMath::Abs(pz) and TMath::Abs(py) <= TMath::Abs(pz)) {
      y_cross_p = y + (z_cross_p - z) * py / pz;
      y_cross_m = y + (z_cross_m - z) * py / pz;
    } else if (TMath::Abs(py) <= TMath::Abs(px) and
               TMath::Abs(pz) <= TMath::Abs(px)) {
      y_cross_p = y + (x_cross_p - x) * py / px;
      y_cross_m = y + (x_cross_m - x) * py / px;
    } else {
      // Checking (px == 0) is not enough because x is sometime, e.g., 1e-17,
      // which makes the y_cross_p/m too big.
      // In the case of |px| << 1 and |pz| << 1, |py| is almost 1, and thus
      // the photon will not cross the parabolas
      y_cross_p = y + (TMath::Abs(px) < 1e-5 ? (z_cross_p - z) * py / pz
                                             : (x_cross_p - x) * py / px);
      y_cross_m = y + (TMath::Abs(px) < 1e-5 ? (z_cross_m - z) * py / pz
                                             : (x_cross_m - x) * py / px);
    }

    Double_t dx = x_cross_p - x;
    Double_t dy = y_cross_p - y;
    Double_t dz = z_cross_p - z;

    if (x_cross_p < fR2 or fR1 < x_cross_p or z_cross_p < -fDZ or
        fDZ < z_cross_p or dx * px + dz * pz < 0) {
      dist[0] = TGeoShape::Big();
    } else {
      if (TMath::Abs(TMath::ATan2(y_cross_p, x_cross_p)) <= open / 2.) {
        dist[0] = TMath::Sqrt(dx * dx + dy * dy + dz * dz);
      } else {
        dist[0] = TGeoShape::Big();
      }
    }

    dx = x_cross_m - x;
    dy = y_cross_m - y;
    dz = z_cross_m - z;

    if (x_cross_m < fR2 or fR1 < x_cross_m or z_cross_m < -fDZ or
        fDZ < z_cross_m or dx * px + dz * pz < 0) {
      dist[1] = TGeoShape::Big();
    } else {
      if (TMath::Abs(TMath::ATan2(y_cross_m, x_cross_m)) <= open / 2.) {
        dist[1] = TMath::Sqrt(dx * dx + dy * dy + dz * dz);
      } else {
        dist[1] = TGeoShape::Big();
      }
    }
  }

  return TMath::Min(dist[0], dist[1]);
}

//_____________________________________________________________________________
TGeoVolume* AGeoWinstonCone2D::Divide(TGeoVolume*, const char*, Int_t, Int_t,
                                      Double_t, Double_t) {
  Error("Divide", "Division of a 2D Winston cone is not implemented");
  return 0;
}

//_____________________________________________________________________________
void AGeoWinstonCone2D::GetBoundingCylinder(Double_t* param) const {
  //--- Fill vector param[4] with the bounding cylinder parameters. The order
  // is the following : Rmin, Rmax, Phi1, Phi2
  param[0] = 0;
  param[1] = fDX * fDX + fDY * fDY;
  param[2] = 0;
  param[3] = 360;
}

//_____________________________________________________________________________
const TBuffer3D& AGeoWinstonCone2D::GetBuffer3D(Int_t reqSections,
                                                Bool_t localFrame) const {
  // Fills a static 3D buffer and returns a reference
  static TBuffer3D buffer(TBuffer3DTypes::kGeneric);

  TGeoBBox::FillBuffer3D(buffer, reqSections, localFrame);

  if (reqSections & TBuffer3D::kRawSizes) {
    Int_t n = gGeoManager->GetNsegments();
    Int_t nbPnts = 4 * (n + 1);      // Number of points
    Int_t nbSegs = 4 * (2 * n + 1);  // Number of segments
    Int_t nbPols = 4 * n + 2;        // Number of polygons

    if (buffer.SetRawSizes(nbPnts, 3 * nbPnts, nbSegs, 3 * nbSegs, nbPols,
                           6 * nbPols)) {
      buffer.SetSectionsValid(TBuffer3D::kRawSizes);
    }
  }

  if ((reqSections & TBuffer3D::kRaw) &&
      buffer.SectionsValid(TBuffer3D::kRawSizes)) {
    SetPoints(buffer.fPnts);
    if (!buffer.fLocalFrame) {
      TransformPoints(buffer.fPnts, buffer.NbPnts());
    }
    SetSegsAndPols(buffer);
    buffer.SetSectionsValid(TBuffer3D::kRaw);
  }

  return buffer;
}

//_____________________________________________________________________________
void AGeoWinstonCone2D::GetMeshNumbers(Int_t& nvert, Int_t& nsegs,
                                       Int_t& npols) const {
  Int_t n = gGeoManager->GetNsegments();

  nvert = 4 * (n + 1);
  nsegs = 4 * (2 * n + 1);
  npols = 4 * n + 2;
}

//_____________________________________________________________________________
Int_t AGeoWinstonCone2D::GetNmeshVertices() const {
  // Return number of vertices of the mesh representation

  Int_t n = gGeoManager->GetNsegments();
  Int_t nbPnts = 4 * (n + 1);

  return nbPnts;
}

//_____________________________________________________________________________
void AGeoWinstonCone2D::InspectShape() const {
  // print shape parameters
  printf("*** Shape %s: AGeoWinstonCone2D ***\n", GetName());
  printf("    R1     = %11.5f\n", fR1);
  printf("    R2     = %11.5f\n", fR2);
  printf(" Bounding box:\n");
  TGeoBBox::InspectShape();
}

//_____________________________________________________________________________
TBuffer3D* AGeoWinstonCone2D::MakeBuffer3D() const {
  Int_t n = gGeoManager->GetNsegments();
  Int_t nbPnts = 4 * (n + 1);
  Int_t nbSegs = 4 * (2 * n + 1);
  Int_t nbPols = 4 * n + 2;

  TBuffer3D* buff = new TBuffer3D(TBuffer3DTypes::kGeneric, nbPnts, 3 * nbPnts,
                                  nbSegs, 3 * nbSegs, nbPols, 6 * nbPols);

  if (buff) {
    SetPoints(buff->fPnts);
    SetSegsAndPols(*buff);
  }

  return buff;
}

//_____________________________________________________________________________
Double_t AGeoWinstonCone2D::Safety(CONST53410 Double_t*, Bool_t) const {
  // Not implemented yet. But keep this as is.
  return TGeoShape::Big();
}

//_____________________________________________________________________________
void AGeoWinstonCone2D::SavePrimitive(std::ostream& out, Option_t*) {
  // Save a primitive as a C++ statement(s) on output stream "out".
  if (TObject::TestBit(kGeoSavePrimitive)) return;

  out << "   // Shape: " << GetName() << " type: " << ClassName() << std::endl;
  out << "   r1 = " << fR1 << ";" << std::endl;
  out << "   r2 = " << fR2 << ";" << std::endl;
  out << "   dy = " << fDY << ";" << std::endl;
  out << "   AGeoWinstonCone2D* cone = new AGeoWinstonCone2D(\"" << GetName()
      << "\", r1, r2, dy);" << std::endl;

  out << "   TGeoShape* " << GetPointerName() << " = cone;" << std::endl;
  TObject::SetBit(TGeoShape::kGeoSavePrimitive);
}

//_____________________________________________________________________________
void AGeoWinstonCone2D::SetWinstonDimensions(Double_t r1, Double_t r2,
                                             Double_t y) {
  if (TMath::Abs(r1) > TMath::Abs(r2)) {
    fR1 = TMath::Abs(r1);
    fR2 = TMath::Abs(r2);
  } else {
    fR1 = TMath::Abs(r2);
    fR2 = TMath::Abs(r1);
  }

  fDY = TMath::Abs(y);

  fTheta = TMath::ASin(fR2 / fR1);
  fDZ = (fR1 + fR2) / TMath::Tan(fTheta) / 2.;

  fF = fR2 * (1 + TMath::Sin(fTheta));
}

//_____________________________________________________________________________
void AGeoWinstonCone2D::SetDimensions(Double_t* param) {
  SetWinstonDimensions(param[0], param[1], param[2]);
}

//_____________________________________________________________________________
void AGeoWinstonCone2D::SetPoints(Double_t* points) const {
  // create mesh points
  Int_t n = gGeoManager->GetNsegments();

  if (points) {
    for (int i = 0; i <= n; i++) {
      // see
      // http://cherenkov.physics.iastate.edu/research/LightconeStudies-collector_optimization.pdf
      Double_t t = 2. * fDZ * i / n;
      Double_t z = -fDZ + t;
      Double_t r = CalcR(z);

      points[(i * 4 + 0) * 3 + 0] = r;
      points[(i * 4 + 0) * 3 + 1] = fDY;
      points[(i * 4 + 0) * 3 + 2] = z;

      points[(i * 4 + 1) * 3 + 0] = -r;
      points[(i * 4 + 1) * 3 + 1] = fDY;
      points[(i * 4 + 1) * 3 + 2] = z;

      points[(i * 4 + 2) * 3 + 0] = -r;
      points[(i * 4 + 2) * 3 + 1] = -fDY;
      points[(i * 4 + 2) * 3 + 2] = z;

      points[(i * 4 + 3) * 3 + 0] = r;
      points[(i * 4 + 3) * 3 + 1] = -fDY;
      points[(i * 4 + 3) * 3 + 2] = z;
    }
  }
}

//_____________________________________________________________________________
void AGeoWinstonCone2D::SetPoints(Float_t* points) const {
  // create mesh points
  Int_t n = gGeoManager->GetNsegments();

  if (points) {
    for (Int_t i = 0; i <= n; i++) {
      // see
      // http://cherenkov.physics.iastate.edu/research/LightconeStudies-collector_optimization.pdf
      Double_t t = 2 * fDZ * i / n;
      Double_t z = -fDZ + t;
      Double_t r = CalcR(z);

      points[(i * 4 + 0) * 3 + 0] = r;
      points[(i * 4 + 0) * 3 + 1] = fDY;
      points[(i * 4 + 0) * 3 + 2] = z;

      points[(i * 4 + 1) * 3 + 0] = -r;
      points[(i * 4 + 1) * 3 + 1] = fDY;
      points[(i * 4 + 1) * 3 + 2] = z;

      points[(i * 4 + 2) * 3 + 0] = -r;
      points[(i * 4 + 2) * 3 + 1] = -fDY;
      points[(i * 4 + 2) * 3 + 2] = z;

      points[(i * 4 + 3) * 3 + 0] = r;
      points[(i * 4 + 3) * 3 + 1] = -fDY;
      points[(i * 4 + 3) * 3 + 2] = z;
    }
  }
}

//_____________________________________________________________________________
void AGeoWinstonCone2D::SetSegsAndPols(TBuffer3D& buff) const {
  // Fill TBuffer3D structure for segments and polygons.

  Int_t n = gGeoManager->GetNsegments();
  Int_t c = GetBasicColor();

  // segments
  Int_t index = 0;
  for (Int_t i = 0; i < n; i++) {
    // segments on parabola
    buff.fSegs[index++] = c;
    buff.fSegs[index++] = 4 * i;
    buff.fSegs[index++] = 4 * i + 4;

    buff.fSegs[index++] = c;
    buff.fSegs[index++] = 4 * i + 1;
    buff.fSegs[index++] = 4 * i + 5;

    buff.fSegs[index++] = c;
    buff.fSegs[index++] = 4 * i + 2;
    buff.fSegs[index++] = 4 * i + 6;

    buff.fSegs[index++] = c;
    buff.fSegs[index++] = 4 * i + 3;
    buff.fSegs[index++] = 4 * i + 7;
  }

  for (Int_t i = 0; i <= n; i++) {
    // segments parallel to X or Y axis
    buff.fSegs[index++] = c;
    buff.fSegs[index++] = 4 * i;
    buff.fSegs[index++] = 4 * i + 1;

    buff.fSegs[index++] = c;
    buff.fSegs[index++] = 4 * i + 1;
    buff.fSegs[index++] = 4 * i + 2;

    buff.fSegs[index++] = c;
    buff.fSegs[index++] = 4 * i + 2;
    buff.fSegs[index++] = 4 * i + 3;

    buff.fSegs[index++] = c;
    buff.fSegs[index++] = 4 * i + 3;
    buff.fSegs[index++] = 4 * i;
  }

  // polygons
  index = 0;
  for (Int_t i = 0; i < n; i++) {
    // polygon parallel to XZ (+Y)
    buff.fPols[index++] = c;
    buff.fPols[index++] = 4;
    buff.fPols[index++] = 4 * i;
    buff.fPols[index++] = 4 * n + 4 * i + 4;
    buff.fPols[index++] = 4 * i + 1;
    buff.fPols[index++] = 4 * n + 4 * i;

    // polygon on parabola (-X)
    buff.fPols[index++] = c;
    buff.fPols[index++] = 4;
    buff.fPols[index++] = 4 * i + 1;
    buff.fPols[index++] = 4 * n + 4 * i + 5;
    buff.fPols[index++] = 4 * i + 2;
    buff.fPols[index++] = 4 * n + 4 * i + 1;

    // polygon parallel to XZ (-Y)
    buff.fPols[index++] = c;
    buff.fPols[index++] = 4;
    buff.fPols[index++] = 4 * i + 2;
    buff.fPols[index++] = 4 * n + 4 * i + 6;
    buff.fPols[index++] = 4 * i + 3;
    buff.fPols[index++] = 4 * n + 4 * i + 2;

    // polygon on parabola (+X)
    buff.fPols[index++] = c;
    buff.fPols[index++] = 4;
    buff.fPols[index++] = 4 * i + 3;
    buff.fPols[index++] = 4 * n + 4 * i + 7;
    buff.fPols[index++] = 4 * i;
    buff.fPols[index++] = 4 * n + 4 * i + 3;
  }

  // polygon parallel to XY (-Z)
  buff.fPols[index++] = c;
  buff.fPols[index++] = 4;
  buff.fPols[index++] = 4 * n;
  buff.fPols[index++] = 4 * n + 1;
  buff.fPols[index++] = 4 * n + 2;
  buff.fPols[index++] = 4 * n + 3;

  // polygon parallel to XY (+Z)
  buff.fPols[index++] = c;
  buff.fPols[index++] = 4;
  buff.fPols[index++] = 8 * n + 3;
  buff.fPols[index++] = 8 * n + 2;
  buff.fPols[index++] = 8 * n + 1;
  buff.fPols[index++] = 8 * n + 0;
}

//_____________________________________________________________________________
void AGeoWinstonCone2D::Sizeof3D() const {
  ///// obsolete - to be removed
}
 AGeoWinstonCone2D.cxx:1
 AGeoWinstonCone2D.cxx:2
 AGeoWinstonCone2D.cxx:3
 AGeoWinstonCone2D.cxx:4
 AGeoWinstonCone2D.cxx:5
 AGeoWinstonCone2D.cxx:6
 AGeoWinstonCone2D.cxx:7
 AGeoWinstonCone2D.cxx:8
 AGeoWinstonCone2D.cxx:9
 AGeoWinstonCone2D.cxx:10
 AGeoWinstonCone2D.cxx:11
 AGeoWinstonCone2D.cxx:12
 AGeoWinstonCone2D.cxx:13
 AGeoWinstonCone2D.cxx:14
 AGeoWinstonCone2D.cxx:15
 AGeoWinstonCone2D.cxx:16
 AGeoWinstonCone2D.cxx:17
 AGeoWinstonCone2D.cxx:18
 AGeoWinstonCone2D.cxx:19
 AGeoWinstonCone2D.cxx:20
 AGeoWinstonCone2D.cxx:21
 AGeoWinstonCone2D.cxx:22
 AGeoWinstonCone2D.cxx:23
 AGeoWinstonCone2D.cxx:24
 AGeoWinstonCone2D.cxx:25
 AGeoWinstonCone2D.cxx:26
 AGeoWinstonCone2D.cxx:27
 AGeoWinstonCone2D.cxx:28
 AGeoWinstonCone2D.cxx:29
 AGeoWinstonCone2D.cxx:30
 AGeoWinstonCone2D.cxx:31
 AGeoWinstonCone2D.cxx:32
 AGeoWinstonCone2D.cxx:33
 AGeoWinstonCone2D.cxx:34
 AGeoWinstonCone2D.cxx:35
 AGeoWinstonCone2D.cxx:36
 AGeoWinstonCone2D.cxx:37
 AGeoWinstonCone2D.cxx:38
 AGeoWinstonCone2D.cxx:39
 AGeoWinstonCone2D.cxx:40
 AGeoWinstonCone2D.cxx:41
 AGeoWinstonCone2D.cxx:42
 AGeoWinstonCone2D.cxx:43
 AGeoWinstonCone2D.cxx:44
 AGeoWinstonCone2D.cxx:45
 AGeoWinstonCone2D.cxx:46
 AGeoWinstonCone2D.cxx:47
 AGeoWinstonCone2D.cxx:48
 AGeoWinstonCone2D.cxx:49
 AGeoWinstonCone2D.cxx:50
 AGeoWinstonCone2D.cxx:51
 AGeoWinstonCone2D.cxx:52
 AGeoWinstonCone2D.cxx:53
 AGeoWinstonCone2D.cxx:54
 AGeoWinstonCone2D.cxx:55
 AGeoWinstonCone2D.cxx:56
 AGeoWinstonCone2D.cxx:57
 AGeoWinstonCone2D.cxx:58
 AGeoWinstonCone2D.cxx:59
 AGeoWinstonCone2D.cxx:60
 AGeoWinstonCone2D.cxx:61
 AGeoWinstonCone2D.cxx:62
 AGeoWinstonCone2D.cxx:63
 AGeoWinstonCone2D.cxx:64
 AGeoWinstonCone2D.cxx:65
 AGeoWinstonCone2D.cxx:66
 AGeoWinstonCone2D.cxx:67
 AGeoWinstonCone2D.cxx:68
 AGeoWinstonCone2D.cxx:69
 AGeoWinstonCone2D.cxx:70
 AGeoWinstonCone2D.cxx:71
 AGeoWinstonCone2D.cxx:72
 AGeoWinstonCone2D.cxx:73
 AGeoWinstonCone2D.cxx:74
 AGeoWinstonCone2D.cxx:75
 AGeoWinstonCone2D.cxx:76
 AGeoWinstonCone2D.cxx:77
 AGeoWinstonCone2D.cxx:78
 AGeoWinstonCone2D.cxx:79
 AGeoWinstonCone2D.cxx:80
 AGeoWinstonCone2D.cxx:81
 AGeoWinstonCone2D.cxx:82
 AGeoWinstonCone2D.cxx:83
 AGeoWinstonCone2D.cxx:84
 AGeoWinstonCone2D.cxx:85
 AGeoWinstonCone2D.cxx:86
 AGeoWinstonCone2D.cxx:87
 AGeoWinstonCone2D.cxx:88
 AGeoWinstonCone2D.cxx:89
 AGeoWinstonCone2D.cxx:90
 AGeoWinstonCone2D.cxx:91
 AGeoWinstonCone2D.cxx:92
 AGeoWinstonCone2D.cxx:93
 AGeoWinstonCone2D.cxx:94
 AGeoWinstonCone2D.cxx:95
 AGeoWinstonCone2D.cxx:96
 AGeoWinstonCone2D.cxx:97
 AGeoWinstonCone2D.cxx:98
 AGeoWinstonCone2D.cxx:99
 AGeoWinstonCone2D.cxx:100
 AGeoWinstonCone2D.cxx:101
 AGeoWinstonCone2D.cxx:102
 AGeoWinstonCone2D.cxx:103
 AGeoWinstonCone2D.cxx:104
 AGeoWinstonCone2D.cxx:105
 AGeoWinstonCone2D.cxx:106
 AGeoWinstonCone2D.cxx:107
 AGeoWinstonCone2D.cxx:108
 AGeoWinstonCone2D.cxx:109
 AGeoWinstonCone2D.cxx:110
 AGeoWinstonCone2D.cxx:111
 AGeoWinstonCone2D.cxx:112
 AGeoWinstonCone2D.cxx:113
 AGeoWinstonCone2D.cxx:114
 AGeoWinstonCone2D.cxx:115
 AGeoWinstonCone2D.cxx:116
 AGeoWinstonCone2D.cxx:117
 AGeoWinstonCone2D.cxx:118
 AGeoWinstonCone2D.cxx:119
 AGeoWinstonCone2D.cxx:120
 AGeoWinstonCone2D.cxx:121
 AGeoWinstonCone2D.cxx:122
 AGeoWinstonCone2D.cxx:123
 AGeoWinstonCone2D.cxx:124
 AGeoWinstonCone2D.cxx:125
 AGeoWinstonCone2D.cxx:126
 AGeoWinstonCone2D.cxx:127
 AGeoWinstonCone2D.cxx:128
 AGeoWinstonCone2D.cxx:129
 AGeoWinstonCone2D.cxx:130
 AGeoWinstonCone2D.cxx:131
 AGeoWinstonCone2D.cxx:132
 AGeoWinstonCone2D.cxx:133
 AGeoWinstonCone2D.cxx:134
 AGeoWinstonCone2D.cxx:135
 AGeoWinstonCone2D.cxx:136
 AGeoWinstonCone2D.cxx:137
 AGeoWinstonCone2D.cxx:138
 AGeoWinstonCone2D.cxx:139
 AGeoWinstonCone2D.cxx:140
 AGeoWinstonCone2D.cxx:141
 AGeoWinstonCone2D.cxx:142
 AGeoWinstonCone2D.cxx:143
 AGeoWinstonCone2D.cxx:144
 AGeoWinstonCone2D.cxx:145
 AGeoWinstonCone2D.cxx:146
 AGeoWinstonCone2D.cxx:147
 AGeoWinstonCone2D.cxx:148
 AGeoWinstonCone2D.cxx:149
 AGeoWinstonCone2D.cxx:150
 AGeoWinstonCone2D.cxx:151
 AGeoWinstonCone2D.cxx:152
 AGeoWinstonCone2D.cxx:153
 AGeoWinstonCone2D.cxx:154
 AGeoWinstonCone2D.cxx:155
 AGeoWinstonCone2D.cxx:156
 AGeoWinstonCone2D.cxx:157
 AGeoWinstonCone2D.cxx:158
 AGeoWinstonCone2D.cxx:159
 AGeoWinstonCone2D.cxx:160
 AGeoWinstonCone2D.cxx:161
 AGeoWinstonCone2D.cxx:162
 AGeoWinstonCone2D.cxx:163
 AGeoWinstonCone2D.cxx:164
 AGeoWinstonCone2D.cxx:165
 AGeoWinstonCone2D.cxx:166
 AGeoWinstonCone2D.cxx:167
 AGeoWinstonCone2D.cxx:168
 AGeoWinstonCone2D.cxx:169
 AGeoWinstonCone2D.cxx:170
 AGeoWinstonCone2D.cxx:171
 AGeoWinstonCone2D.cxx:172
 AGeoWinstonCone2D.cxx:173
 AGeoWinstonCone2D.cxx:174
 AGeoWinstonCone2D.cxx:175
 AGeoWinstonCone2D.cxx:176
 AGeoWinstonCone2D.cxx:177
 AGeoWinstonCone2D.cxx:178
 AGeoWinstonCone2D.cxx:179
 AGeoWinstonCone2D.cxx:180
 AGeoWinstonCone2D.cxx:181
 AGeoWinstonCone2D.cxx:182
 AGeoWinstonCone2D.cxx:183
 AGeoWinstonCone2D.cxx:184
 AGeoWinstonCone2D.cxx:185
 AGeoWinstonCone2D.cxx:186
 AGeoWinstonCone2D.cxx:187
 AGeoWinstonCone2D.cxx:188
 AGeoWinstonCone2D.cxx:189
 AGeoWinstonCone2D.cxx:190
 AGeoWinstonCone2D.cxx:191
 AGeoWinstonCone2D.cxx:192
 AGeoWinstonCone2D.cxx:193
 AGeoWinstonCone2D.cxx:194
 AGeoWinstonCone2D.cxx:195
 AGeoWinstonCone2D.cxx:196
 AGeoWinstonCone2D.cxx:197
 AGeoWinstonCone2D.cxx:198
 AGeoWinstonCone2D.cxx:199
 AGeoWinstonCone2D.cxx:200
 AGeoWinstonCone2D.cxx:201
 AGeoWinstonCone2D.cxx:202
 AGeoWinstonCone2D.cxx:203
 AGeoWinstonCone2D.cxx:204
 AGeoWinstonCone2D.cxx:205
 AGeoWinstonCone2D.cxx:206
 AGeoWinstonCone2D.cxx:207
 AGeoWinstonCone2D.cxx:208
 AGeoWinstonCone2D.cxx:209
 AGeoWinstonCone2D.cxx:210
 AGeoWinstonCone2D.cxx:211
 AGeoWinstonCone2D.cxx:212
 AGeoWinstonCone2D.cxx:213
 AGeoWinstonCone2D.cxx:214
 AGeoWinstonCone2D.cxx:215
 AGeoWinstonCone2D.cxx:216
 AGeoWinstonCone2D.cxx:217
 AGeoWinstonCone2D.cxx:218
 AGeoWinstonCone2D.cxx:219
 AGeoWinstonCone2D.cxx:220
 AGeoWinstonCone2D.cxx:221
 AGeoWinstonCone2D.cxx:222
 AGeoWinstonCone2D.cxx:223
 AGeoWinstonCone2D.cxx:224
 AGeoWinstonCone2D.cxx:225
 AGeoWinstonCone2D.cxx:226
 AGeoWinstonCone2D.cxx:227
 AGeoWinstonCone2D.cxx:228
 AGeoWinstonCone2D.cxx:229
 AGeoWinstonCone2D.cxx:230
 AGeoWinstonCone2D.cxx:231
 AGeoWinstonCone2D.cxx:232
 AGeoWinstonCone2D.cxx:233
 AGeoWinstonCone2D.cxx:234
 AGeoWinstonCone2D.cxx:235
 AGeoWinstonCone2D.cxx:236
 AGeoWinstonCone2D.cxx:237
 AGeoWinstonCone2D.cxx:238
 AGeoWinstonCone2D.cxx:239
 AGeoWinstonCone2D.cxx:240
 AGeoWinstonCone2D.cxx:241
 AGeoWinstonCone2D.cxx:242
 AGeoWinstonCone2D.cxx:243
 AGeoWinstonCone2D.cxx:244
 AGeoWinstonCone2D.cxx:245
 AGeoWinstonCone2D.cxx:246
 AGeoWinstonCone2D.cxx:247
 AGeoWinstonCone2D.cxx:248
 AGeoWinstonCone2D.cxx:249
 AGeoWinstonCone2D.cxx:250
 AGeoWinstonCone2D.cxx:251
 AGeoWinstonCone2D.cxx:252
 AGeoWinstonCone2D.cxx:253
 AGeoWinstonCone2D.cxx:254
 AGeoWinstonCone2D.cxx:255
 AGeoWinstonCone2D.cxx:256
 AGeoWinstonCone2D.cxx:257
 AGeoWinstonCone2D.cxx:258
 AGeoWinstonCone2D.cxx:259
 AGeoWinstonCone2D.cxx:260
 AGeoWinstonCone2D.cxx:261
 AGeoWinstonCone2D.cxx:262
 AGeoWinstonCone2D.cxx:263
 AGeoWinstonCone2D.cxx:264
 AGeoWinstonCone2D.cxx:265
 AGeoWinstonCone2D.cxx:266
 AGeoWinstonCone2D.cxx:267
 AGeoWinstonCone2D.cxx:268
 AGeoWinstonCone2D.cxx:269
 AGeoWinstonCone2D.cxx:270
 AGeoWinstonCone2D.cxx:271
 AGeoWinstonCone2D.cxx:272
 AGeoWinstonCone2D.cxx:273
 AGeoWinstonCone2D.cxx:274
 AGeoWinstonCone2D.cxx:275
 AGeoWinstonCone2D.cxx:276
 AGeoWinstonCone2D.cxx:277
 AGeoWinstonCone2D.cxx:278
 AGeoWinstonCone2D.cxx:279
 AGeoWinstonCone2D.cxx:280
 AGeoWinstonCone2D.cxx:281
 AGeoWinstonCone2D.cxx:282
 AGeoWinstonCone2D.cxx:283
 AGeoWinstonCone2D.cxx:284
 AGeoWinstonCone2D.cxx:285
 AGeoWinstonCone2D.cxx:286
 AGeoWinstonCone2D.cxx:287
 AGeoWinstonCone2D.cxx:288
 AGeoWinstonCone2D.cxx:289
 AGeoWinstonCone2D.cxx:290
 AGeoWinstonCone2D.cxx:291
 AGeoWinstonCone2D.cxx:292
 AGeoWinstonCone2D.cxx:293
 AGeoWinstonCone2D.cxx:294
 AGeoWinstonCone2D.cxx:295
 AGeoWinstonCone2D.cxx:296
 AGeoWinstonCone2D.cxx:297
 AGeoWinstonCone2D.cxx:298
 AGeoWinstonCone2D.cxx:299
 AGeoWinstonCone2D.cxx:300
 AGeoWinstonCone2D.cxx:301
 AGeoWinstonCone2D.cxx:302
 AGeoWinstonCone2D.cxx:303
 AGeoWinstonCone2D.cxx:304
 AGeoWinstonCone2D.cxx:305
 AGeoWinstonCone2D.cxx:306
 AGeoWinstonCone2D.cxx:307
 AGeoWinstonCone2D.cxx:308
 AGeoWinstonCone2D.cxx:309
 AGeoWinstonCone2D.cxx:310
 AGeoWinstonCone2D.cxx:311
 AGeoWinstonCone2D.cxx:312
 AGeoWinstonCone2D.cxx:313
 AGeoWinstonCone2D.cxx:314
 AGeoWinstonCone2D.cxx:315
 AGeoWinstonCone2D.cxx:316
 AGeoWinstonCone2D.cxx:317
 AGeoWinstonCone2D.cxx:318
 AGeoWinstonCone2D.cxx:319
 AGeoWinstonCone2D.cxx:320
 AGeoWinstonCone2D.cxx:321
 AGeoWinstonCone2D.cxx:322
 AGeoWinstonCone2D.cxx:323
 AGeoWinstonCone2D.cxx:324
 AGeoWinstonCone2D.cxx:325
 AGeoWinstonCone2D.cxx:326
 AGeoWinstonCone2D.cxx:327
 AGeoWinstonCone2D.cxx:328
 AGeoWinstonCone2D.cxx:329
 AGeoWinstonCone2D.cxx:330
 AGeoWinstonCone2D.cxx:331
 AGeoWinstonCone2D.cxx:332
 AGeoWinstonCone2D.cxx:333
 AGeoWinstonCone2D.cxx:334
 AGeoWinstonCone2D.cxx:335
 AGeoWinstonCone2D.cxx:336
 AGeoWinstonCone2D.cxx:337
 AGeoWinstonCone2D.cxx:338
 AGeoWinstonCone2D.cxx:339
 AGeoWinstonCone2D.cxx:340
 AGeoWinstonCone2D.cxx:341
 AGeoWinstonCone2D.cxx:342
 AGeoWinstonCone2D.cxx:343
 AGeoWinstonCone2D.cxx:344
 AGeoWinstonCone2D.cxx:345
 AGeoWinstonCone2D.cxx:346
 AGeoWinstonCone2D.cxx:347
 AGeoWinstonCone2D.cxx:348
 AGeoWinstonCone2D.cxx:349
 AGeoWinstonCone2D.cxx:350
 AGeoWinstonCone2D.cxx:351
 AGeoWinstonCone2D.cxx:352
 AGeoWinstonCone2D.cxx:353
 AGeoWinstonCone2D.cxx:354
 AGeoWinstonCone2D.cxx:355
 AGeoWinstonCone2D.cxx:356
 AGeoWinstonCone2D.cxx:357
 AGeoWinstonCone2D.cxx:358
 AGeoWinstonCone2D.cxx:359
 AGeoWinstonCone2D.cxx:360
 AGeoWinstonCone2D.cxx:361
 AGeoWinstonCone2D.cxx:362
 AGeoWinstonCone2D.cxx:363
 AGeoWinstonCone2D.cxx:364
 AGeoWinstonCone2D.cxx:365
 AGeoWinstonCone2D.cxx:366
 AGeoWinstonCone2D.cxx:367
 AGeoWinstonCone2D.cxx:368
 AGeoWinstonCone2D.cxx:369
 AGeoWinstonCone2D.cxx:370
 AGeoWinstonCone2D.cxx:371
 AGeoWinstonCone2D.cxx:372
 AGeoWinstonCone2D.cxx:373
 AGeoWinstonCone2D.cxx:374
 AGeoWinstonCone2D.cxx:375
 AGeoWinstonCone2D.cxx:376
 AGeoWinstonCone2D.cxx:377
 AGeoWinstonCone2D.cxx:378
 AGeoWinstonCone2D.cxx:379
 AGeoWinstonCone2D.cxx:380
 AGeoWinstonCone2D.cxx:381
 AGeoWinstonCone2D.cxx:382
 AGeoWinstonCone2D.cxx:383
 AGeoWinstonCone2D.cxx:384
 AGeoWinstonCone2D.cxx:385
 AGeoWinstonCone2D.cxx:386
 AGeoWinstonCone2D.cxx:387
 AGeoWinstonCone2D.cxx:388
 AGeoWinstonCone2D.cxx:389
 AGeoWinstonCone2D.cxx:390
 AGeoWinstonCone2D.cxx:391
 AGeoWinstonCone2D.cxx:392
 AGeoWinstonCone2D.cxx:393
 AGeoWinstonCone2D.cxx:394
 AGeoWinstonCone2D.cxx:395
 AGeoWinstonCone2D.cxx:396
 AGeoWinstonCone2D.cxx:397
 AGeoWinstonCone2D.cxx:398
 AGeoWinstonCone2D.cxx:399
 AGeoWinstonCone2D.cxx:400
 AGeoWinstonCone2D.cxx:401
 AGeoWinstonCone2D.cxx:402
 AGeoWinstonCone2D.cxx:403
 AGeoWinstonCone2D.cxx:404
 AGeoWinstonCone2D.cxx:405
 AGeoWinstonCone2D.cxx:406
 AGeoWinstonCone2D.cxx:407
 AGeoWinstonCone2D.cxx:408
 AGeoWinstonCone2D.cxx:409
 AGeoWinstonCone2D.cxx:410
 AGeoWinstonCone2D.cxx:411
 AGeoWinstonCone2D.cxx:412
 AGeoWinstonCone2D.cxx:413
 AGeoWinstonCone2D.cxx:414
 AGeoWinstonCone2D.cxx:415
 AGeoWinstonCone2D.cxx:416
 AGeoWinstonCone2D.cxx:417
 AGeoWinstonCone2D.cxx:418
 AGeoWinstonCone2D.cxx:419
 AGeoWinstonCone2D.cxx:420
 AGeoWinstonCone2D.cxx:421
 AGeoWinstonCone2D.cxx:422
 AGeoWinstonCone2D.cxx:423
 AGeoWinstonCone2D.cxx:424
 AGeoWinstonCone2D.cxx:425
 AGeoWinstonCone2D.cxx:426
 AGeoWinstonCone2D.cxx:427
 AGeoWinstonCone2D.cxx:428
 AGeoWinstonCone2D.cxx:429
 AGeoWinstonCone2D.cxx:430
 AGeoWinstonCone2D.cxx:431
 AGeoWinstonCone2D.cxx:432
 AGeoWinstonCone2D.cxx:433
 AGeoWinstonCone2D.cxx:434
 AGeoWinstonCone2D.cxx:435
 AGeoWinstonCone2D.cxx:436
 AGeoWinstonCone2D.cxx:437
 AGeoWinstonCone2D.cxx:438
 AGeoWinstonCone2D.cxx:439
 AGeoWinstonCone2D.cxx:440
 AGeoWinstonCone2D.cxx:441
 AGeoWinstonCone2D.cxx:442
 AGeoWinstonCone2D.cxx:443
 AGeoWinstonCone2D.cxx:444
 AGeoWinstonCone2D.cxx:445
 AGeoWinstonCone2D.cxx:446
 AGeoWinstonCone2D.cxx:447
 AGeoWinstonCone2D.cxx:448
 AGeoWinstonCone2D.cxx:449
 AGeoWinstonCone2D.cxx:450
 AGeoWinstonCone2D.cxx:451
 AGeoWinstonCone2D.cxx:452
 AGeoWinstonCone2D.cxx:453
 AGeoWinstonCone2D.cxx:454
 AGeoWinstonCone2D.cxx:455
 AGeoWinstonCone2D.cxx:456
 AGeoWinstonCone2D.cxx:457
 AGeoWinstonCone2D.cxx:458
 AGeoWinstonCone2D.cxx:459
 AGeoWinstonCone2D.cxx:460
 AGeoWinstonCone2D.cxx:461
 AGeoWinstonCone2D.cxx:462
 AGeoWinstonCone2D.cxx:463
 AGeoWinstonCone2D.cxx:464
 AGeoWinstonCone2D.cxx:465
 AGeoWinstonCone2D.cxx:466
 AGeoWinstonCone2D.cxx:467
 AGeoWinstonCone2D.cxx:468
 AGeoWinstonCone2D.cxx:469
 AGeoWinstonCone2D.cxx:470
 AGeoWinstonCone2D.cxx:471
 AGeoWinstonCone2D.cxx:472
 AGeoWinstonCone2D.cxx:473
 AGeoWinstonCone2D.cxx:474
 AGeoWinstonCone2D.cxx:475
 AGeoWinstonCone2D.cxx:476
 AGeoWinstonCone2D.cxx:477
 AGeoWinstonCone2D.cxx:478
 AGeoWinstonCone2D.cxx:479
 AGeoWinstonCone2D.cxx:480
 AGeoWinstonCone2D.cxx:481
 AGeoWinstonCone2D.cxx:482
 AGeoWinstonCone2D.cxx:483
 AGeoWinstonCone2D.cxx:484
 AGeoWinstonCone2D.cxx:485
 AGeoWinstonCone2D.cxx:486
 AGeoWinstonCone2D.cxx:487
 AGeoWinstonCone2D.cxx:488
 AGeoWinstonCone2D.cxx:489
 AGeoWinstonCone2D.cxx:490
 AGeoWinstonCone2D.cxx:491
 AGeoWinstonCone2D.cxx:492
 AGeoWinstonCone2D.cxx:493
 AGeoWinstonCone2D.cxx:494
 AGeoWinstonCone2D.cxx:495
 AGeoWinstonCone2D.cxx:496
 AGeoWinstonCone2D.cxx:497
 AGeoWinstonCone2D.cxx:498
 AGeoWinstonCone2D.cxx:499
 AGeoWinstonCone2D.cxx:500
 AGeoWinstonCone2D.cxx:501
 AGeoWinstonCone2D.cxx:502
 AGeoWinstonCone2D.cxx:503
 AGeoWinstonCone2D.cxx:504
 AGeoWinstonCone2D.cxx:505
 AGeoWinstonCone2D.cxx:506
 AGeoWinstonCone2D.cxx:507
 AGeoWinstonCone2D.cxx:508
 AGeoWinstonCone2D.cxx:509
 AGeoWinstonCone2D.cxx:510
 AGeoWinstonCone2D.cxx:511
 AGeoWinstonCone2D.cxx:512
 AGeoWinstonCone2D.cxx:513
 AGeoWinstonCone2D.cxx:514
 AGeoWinstonCone2D.cxx:515
 AGeoWinstonCone2D.cxx:516
 AGeoWinstonCone2D.cxx:517
 AGeoWinstonCone2D.cxx:518
 AGeoWinstonCone2D.cxx:519
 AGeoWinstonCone2D.cxx:520
 AGeoWinstonCone2D.cxx:521
 AGeoWinstonCone2D.cxx:522
 AGeoWinstonCone2D.cxx:523
 AGeoWinstonCone2D.cxx:524
 AGeoWinstonCone2D.cxx:525
 AGeoWinstonCone2D.cxx:526
 AGeoWinstonCone2D.cxx:527
 AGeoWinstonCone2D.cxx:528
 AGeoWinstonCone2D.cxx:529
 AGeoWinstonCone2D.cxx:530
 AGeoWinstonCone2D.cxx:531
 AGeoWinstonCone2D.cxx:532
 AGeoWinstonCone2D.cxx:533
 AGeoWinstonCone2D.cxx:534
 AGeoWinstonCone2D.cxx:535
 AGeoWinstonCone2D.cxx:536
 AGeoWinstonCone2D.cxx:537
 AGeoWinstonCone2D.cxx:538
 AGeoWinstonCone2D.cxx:539
 AGeoWinstonCone2D.cxx:540
 AGeoWinstonCone2D.cxx:541
 AGeoWinstonCone2D.cxx:542
 AGeoWinstonCone2D.cxx:543
 AGeoWinstonCone2D.cxx:544
 AGeoWinstonCone2D.cxx:545
 AGeoWinstonCone2D.cxx:546
 AGeoWinstonCone2D.cxx:547
 AGeoWinstonCone2D.cxx:548
 AGeoWinstonCone2D.cxx:549
 AGeoWinstonCone2D.cxx:550
 AGeoWinstonCone2D.cxx:551
 AGeoWinstonCone2D.cxx:552
 AGeoWinstonCone2D.cxx:553
 AGeoWinstonCone2D.cxx:554
 AGeoWinstonCone2D.cxx:555
 AGeoWinstonCone2D.cxx:556
 AGeoWinstonCone2D.cxx:557
 AGeoWinstonCone2D.cxx:558
 AGeoWinstonCone2D.cxx:559
 AGeoWinstonCone2D.cxx:560
 AGeoWinstonCone2D.cxx:561
 AGeoWinstonCone2D.cxx:562
 AGeoWinstonCone2D.cxx:563
 AGeoWinstonCone2D.cxx:564
 AGeoWinstonCone2D.cxx:565
 AGeoWinstonCone2D.cxx:566
 AGeoWinstonCone2D.cxx:567
 AGeoWinstonCone2D.cxx:568
 AGeoWinstonCone2D.cxx:569
 AGeoWinstonCone2D.cxx:570
 AGeoWinstonCone2D.cxx:571
 AGeoWinstonCone2D.cxx:572
 AGeoWinstonCone2D.cxx:573
 AGeoWinstonCone2D.cxx:574
 AGeoWinstonCone2D.cxx:575
 AGeoWinstonCone2D.cxx:576
 AGeoWinstonCone2D.cxx:577
 AGeoWinstonCone2D.cxx:578
 AGeoWinstonCone2D.cxx:579
 AGeoWinstonCone2D.cxx:580
 AGeoWinstonCone2D.cxx:581
 AGeoWinstonCone2D.cxx:582
 AGeoWinstonCone2D.cxx:583
 AGeoWinstonCone2D.cxx:584
 AGeoWinstonCone2D.cxx:585
 AGeoWinstonCone2D.cxx:586
 AGeoWinstonCone2D.cxx:587
 AGeoWinstonCone2D.cxx:588
 AGeoWinstonCone2D.cxx:589
 AGeoWinstonCone2D.cxx:590
 AGeoWinstonCone2D.cxx:591
 AGeoWinstonCone2D.cxx:592
 AGeoWinstonCone2D.cxx:593
 AGeoWinstonCone2D.cxx:594
 AGeoWinstonCone2D.cxx:595
 AGeoWinstonCone2D.cxx:596
 AGeoWinstonCone2D.cxx:597
 AGeoWinstonCone2D.cxx:598
 AGeoWinstonCone2D.cxx:599
 AGeoWinstonCone2D.cxx:600
 AGeoWinstonCone2D.cxx:601
 AGeoWinstonCone2D.cxx:602
 AGeoWinstonCone2D.cxx:603
 AGeoWinstonCone2D.cxx:604
 AGeoWinstonCone2D.cxx:605
 AGeoWinstonCone2D.cxx:606
 AGeoWinstonCone2D.cxx:607
 AGeoWinstonCone2D.cxx:608
 AGeoWinstonCone2D.cxx:609
 AGeoWinstonCone2D.cxx:610
 AGeoWinstonCone2D.cxx:611
 AGeoWinstonCone2D.cxx:612
 AGeoWinstonCone2D.cxx:613
 AGeoWinstonCone2D.cxx:614
 AGeoWinstonCone2D.cxx:615
 AGeoWinstonCone2D.cxx:616
 AGeoWinstonCone2D.cxx:617
 AGeoWinstonCone2D.cxx:618
 AGeoWinstonCone2D.cxx:619
 AGeoWinstonCone2D.cxx:620
 AGeoWinstonCone2D.cxx:621
 AGeoWinstonCone2D.cxx:622
 AGeoWinstonCone2D.cxx:623
 AGeoWinstonCone2D.cxx:624
 AGeoWinstonCone2D.cxx:625
 AGeoWinstonCone2D.cxx:626
 AGeoWinstonCone2D.cxx:627
 AGeoWinstonCone2D.cxx:628
 AGeoWinstonCone2D.cxx:629
 AGeoWinstonCone2D.cxx:630
 AGeoWinstonCone2D.cxx:631
 AGeoWinstonCone2D.cxx:632
 AGeoWinstonCone2D.cxx:633
 AGeoWinstonCone2D.cxx:634
 AGeoWinstonCone2D.cxx:635
 AGeoWinstonCone2D.cxx:636
 AGeoWinstonCone2D.cxx:637
 AGeoWinstonCone2D.cxx:638
 AGeoWinstonCone2D.cxx:639
 AGeoWinstonCone2D.cxx:640
 AGeoWinstonCone2D.cxx:641
 AGeoWinstonCone2D.cxx:642
 AGeoWinstonCone2D.cxx:643
 AGeoWinstonCone2D.cxx:644
 AGeoWinstonCone2D.cxx:645
 AGeoWinstonCone2D.cxx:646
 AGeoWinstonCone2D.cxx:647
 AGeoWinstonCone2D.cxx:648
 AGeoWinstonCone2D.cxx:649
 AGeoWinstonCone2D.cxx:650
 AGeoWinstonCone2D.cxx:651
 AGeoWinstonCone2D.cxx:652
 AGeoWinstonCone2D.cxx:653
 AGeoWinstonCone2D.cxx:654
 AGeoWinstonCone2D.cxx:655
 AGeoWinstonCone2D.cxx:656
 AGeoWinstonCone2D.cxx:657
 AGeoWinstonCone2D.cxx:658
 AGeoWinstonCone2D.cxx:659
 AGeoWinstonCone2D.cxx:660
 AGeoWinstonCone2D.cxx:661
 AGeoWinstonCone2D.cxx:662
 AGeoWinstonCone2D.cxx:663
 AGeoWinstonCone2D.cxx:664
 AGeoWinstonCone2D.cxx:665
 AGeoWinstonCone2D.cxx:666
 AGeoWinstonCone2D.cxx:667
 AGeoWinstonCone2D.cxx:668
 AGeoWinstonCone2D.cxx:669
 AGeoWinstonCone2D.cxx:670
 AGeoWinstonCone2D.cxx:671
 AGeoWinstonCone2D.cxx:672
 AGeoWinstonCone2D.cxx:673
 AGeoWinstonCone2D.cxx:674
 AGeoWinstonCone2D.cxx:675
 AGeoWinstonCone2D.cxx:676
 AGeoWinstonCone2D.cxx:677
 AGeoWinstonCone2D.cxx:678
 AGeoWinstonCone2D.cxx:679
 AGeoWinstonCone2D.cxx:680
 AGeoWinstonCone2D.cxx:681
 AGeoWinstonCone2D.cxx:682
 AGeoWinstonCone2D.cxx:683
 AGeoWinstonCone2D.cxx:684
 AGeoWinstonCone2D.cxx:685
 AGeoWinstonCone2D.cxx:686
 AGeoWinstonCone2D.cxx:687
 AGeoWinstonCone2D.cxx:688
 AGeoWinstonCone2D.cxx:689
 AGeoWinstonCone2D.cxx:690
 AGeoWinstonCone2D.cxx:691
 AGeoWinstonCone2D.cxx:692
 AGeoWinstonCone2D.cxx:693
 AGeoWinstonCone2D.cxx:694
 AGeoWinstonCone2D.cxx:695
 AGeoWinstonCone2D.cxx:696
 AGeoWinstonCone2D.cxx:697
 AGeoWinstonCone2D.cxx:698
 AGeoWinstonCone2D.cxx:699
 AGeoWinstonCone2D.cxx:700
 AGeoWinstonCone2D.cxx:701
 AGeoWinstonCone2D.cxx:702
 AGeoWinstonCone2D.cxx:703
 AGeoWinstonCone2D.cxx:704
 AGeoWinstonCone2D.cxx:705
 AGeoWinstonCone2D.cxx:706
 AGeoWinstonCone2D.cxx:707
 AGeoWinstonCone2D.cxx:708
 AGeoWinstonCone2D.cxx:709
 AGeoWinstonCone2D.cxx:710
 AGeoWinstonCone2D.cxx:711
 AGeoWinstonCone2D.cxx:712
 AGeoWinstonCone2D.cxx:713
 AGeoWinstonCone2D.cxx:714
 AGeoWinstonCone2D.cxx:715
 AGeoWinstonCone2D.cxx:716
 AGeoWinstonCone2D.cxx:717
 AGeoWinstonCone2D.cxx:718
 AGeoWinstonCone2D.cxx:719
 AGeoWinstonCone2D.cxx:720
 AGeoWinstonCone2D.cxx:721
 AGeoWinstonCone2D.cxx:722
 AGeoWinstonCone2D.cxx:723
 AGeoWinstonCone2D.cxx:724
 AGeoWinstonCone2D.cxx:725
 AGeoWinstonCone2D.cxx:726
 AGeoWinstonCone2D.cxx:727
 AGeoWinstonCone2D.cxx:728
 AGeoWinstonCone2D.cxx:729
 AGeoWinstonCone2D.cxx:730
 AGeoWinstonCone2D.cxx:731
 AGeoWinstonCone2D.cxx:732
 AGeoWinstonCone2D.cxx:733
 AGeoWinstonCone2D.cxx:734
 AGeoWinstonCone2D.cxx:735
 AGeoWinstonCone2D.cxx:736
 AGeoWinstonCone2D.cxx:737
 AGeoWinstonCone2D.cxx:738
 AGeoWinstonCone2D.cxx:739
 AGeoWinstonCone2D.cxx:740
 AGeoWinstonCone2D.cxx:741