ROOT logo
// $Id: AGeoWinstonCone2D.cxx 3 2010-11-26 17:17:31Z oxon $
// Author: Akira Okumura 2007/9/25

/******************************************************************************
 * 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 throw(std::exception)
{
  if(TMath::Abs(z) > fDZ + 1e-10){
    throw std::exception();
  } // if

  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 throw(std::exception)
{
  if(TMath::Abs(z) > fDZ + 1e-10){
    throw std::exception();
  } // i

  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(Double_t* point, 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();
  } // try

  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);
    } // if
  } // if

  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];
  } // if
}

//_____________________________________________________________________________
Bool_t AGeoWinstonCone2D::Contains(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;
  } // if

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

  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(Double_t* point, 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();
  } // if
  
  // 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];
  } // if

  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];
  } // if

  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(Double_t* point, 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();
  } // if

  // calculate distance

  if(point[2] <= -fDZ) {
    if(dir[2] <= 0){
      return TGeoShape::Big();
    } // if
    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;
    } // if
  } else if(point[2] >= fDZ){
    if(dir[2] >= 0){
      return TGeoShape::Big();
    } // if
    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
  } // if

  if(point[1] <= -fDY) {
    if(dir[1] <= 0){
      return TGeoShape::Big();
    } // if
    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;
    } // if
  } else if(point[1] >= fDY){
    if(dir[1] >= 0){
      return TGeoShape::Big();
    } // if
    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;
    } // if
  } // if

  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();
  } // if

  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();
  } // if

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

//_____________________________________________________________________________
Double_t AGeoWinstonCone2D::DistToParabola(Double_t* point, 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();
  } // if

  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 = 2*fF*(tanA + TMath::Sqrt(tmp));
    Double_t 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 {
      y_cross_p = y + (px == 0 ? (z_cross_p - z)*py/pz : (x_cross_p - x)*py/px);
      y_cross_m = y + (px == 0 ? (z_cross_m - z)*py/pz : (x_cross_m - x)*py/px);
    } // if

    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();
      } // if
    } // if

    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();
      } // if
    } // if
  } // if

  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
  } // if

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

  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);
  } // if

  return buff;
}

//_____________________________________________________________________________
Double_t AGeoWinstonCone2D::Safety(Double_t* point, Bool_t in) 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);
  } // if

  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;
    } // i
  } // if
}

//_____________________________________________________________________________
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;
    } // i
  } // if
}

//_____________________________________________________________________________
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;
  } // i

  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;
  } // 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;
  } // i

  // 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
 AGeoWinstonCone2D.cxx:742
 AGeoWinstonCone2D.cxx:743
 AGeoWinstonCone2D.cxx:744
 AGeoWinstonCone2D.cxx:745
 AGeoWinstonCone2D.cxx:746
 AGeoWinstonCone2D.cxx:747