#include "AGeoAsphericDisk.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(AGeoAsphericDisk);
AGeoAsphericDisk::AGeoAsphericDisk()
: fConic1(0),
fConic2(0),
fKappa1(1),
fKappa2(1),
fNPol1(0),
fNPol2(0),
fK1(0),
fK2(0),
fSteps(100),
fRepeat(4) {
SetShapeBit(TGeoShape::kGeoBox);
SetAsphDimensions(0, 0, 0, 0, 0, 0);
ComputeBBox();
}
AGeoAsphericDisk::AGeoAsphericDisk(Double_t z1, Double_t curve1, Double_t z2,
Double_t curve2, Double_t rmax,
Double_t rmin)
: TGeoBBox(0, 0, 0),
fConic1(0),
fConic2(0),
fKappa1(1),
fKappa2(1),
fNPol1(0),
fNPol2(0),
fK1(0),
fK2(0),
fSteps(100),
fRepeat(4) {
SetShapeBit(TGeoShape::kGeoBox);
SetAsphDimensions(z1, curve1, z2, curve2, rmax, rmin);
ComputeBBox();
}
AGeoAsphericDisk::AGeoAsphericDisk(const char* name, Double_t z1,
Double_t curve1, Double_t z2,
Double_t curve2, Double_t rmax,
Double_t rmin)
: TGeoBBox(name, 0, 0, 0),
fConic1(0),
fConic2(0),
fKappa1(1),
fKappa2(1),
fNPol1(0),
fNPol2(0),
fK1(0),
fK2(0),
fSteps(100),
fRepeat(4) {
SetShapeBit(TGeoShape::kGeoBox);
SetAsphDimensions(z1, curve1, z2, curve2, rmax, rmin);
ComputeBBox();
}
AGeoAsphericDisk::~AGeoAsphericDisk() {
DeleteArrays();
}
Double_t AGeoAsphericDisk::CalcdF1dr(Double_t r) const noexcept(false) {
Double_t p = r * r * fCurve1 * fCurve1 * fKappa1;
if (1 - p <= 0) throw std::exception();
Double_t ret = r * fCurve1 / sqrt(1 - p);
for (Int_t i = 0; i < fNPol1; i++) {
ret += 2 * (i + 1) * fK1[i] * TMath::Power(r, 2 * (i + 1) - 1);
}
return ret;
}
Double_t AGeoAsphericDisk::CalcdF2dr(Double_t r) const noexcept(false) {
Double_t p = r * r * fCurve2 * fCurve2 * fKappa2;
if (1 - p <= 0) throw std::exception();
Double_t ret = r * fCurve2 / sqrt(1 - p);
for (Int_t i = 0; i < fNPol2; i++) {
ret += 2 * (i + 1) * fK2[i] * pow(r, 2 * (i + 1) - 1);
}
return ret;
}
Double_t AGeoAsphericDisk::CalcF1(Double_t r) const noexcept(false) {
Double_t p = r * r * fCurve1 * fCurve1 * fKappa1;
if (1 - p < 0) throw std::exception();
Double_t ret = fZ1 + r * r * fCurve1 / (1 + sqrt(1 - p));
for (Int_t i = 0; i < fNPol1; i++) {
ret += fK1[i] * pow(r, 2 * (i + 1));
}
return ret;
}
Double_t AGeoAsphericDisk::CalcF2(Double_t r) const noexcept(false) {
Double_t p = r * r * fCurve2 * fCurve2 * fKappa2;
if (1 - p < 0) throw std::exception();
Double_t ret = fZ2 + r * r * fCurve2 / (1 + sqrt(1 - p));
for (Int_t i = 0; i < fNPol2; i++) {
ret += fK2[i] * pow(r, 2 * (i + 1));
}
return ret;
}
Double_t AGeoAsphericDisk::Capacity() const {
return 0;
}
void AGeoAsphericDisk::ComputeBBox() {
Double_t zmax = -TGeoShape::Big();
if (fNPol2 == 0) {
Double_t f1, f2;
try {
f1 = CalcF2(fRmin);
f2 = CalcF2(fRmax);
} catch (...) {
f1 = TGeoShape::Big();
f2 = TGeoShape::Big();
}
zmax = f1 > f2 ? f1 : f2;
} else {
Double_t r1 = fRmin;
Double_t r2 = fRmax;
for (Int_t i = 0; i < fRepeat; i++) {
Double_t step = (r2 - r1) / fSteps;
Double_t r_ = r1;
for (Int_t j = 0; j <= fSteps + 1; j++) {
Double_t r = r1 + j * step;
Double_t f;
try {
f = CalcF2(r);
} catch (...) {
f = -TGeoShape::Big();
}
if (f > zmax) {
zmax = f;
r_ = r;
}
}
r1 = r_ == fRmin ? fRmin : r_ - step;
r2 = r_ == fRmax ? fRmax : r_ + step;
}
}
Double_t zmin = TGeoShape::Big();
if (fNPol1 == 0) {
Double_t f1, f2;
try {
f1 = CalcF1(fRmin);
f2 = CalcF1(fRmax);
} catch (...) {
f1 = -TGeoShape::Big();
f2 = -TGeoShape::Big();
}
zmin = f1 < f2 ? f1 : f2;
} else {
Double_t r1 = fRmin;
Double_t r2 = fRmax;
for (Int_t i = 0; i < fRepeat; i++) {
Double_t step = (r2 - r1) / fSteps;
Double_t r_ = r1;
for (Int_t j = 0; j <= fSteps + 1; j++) {
Double_t r = r1 + j * step;
Double_t f;
try {
f = CalcF1(r);
} catch (...) {
f = TGeoShape::Big();
}
if (f < zmin) {
zmin = f;
r_ = r;
}
}
r1 = r_ == fRmin ? fRmin : r_ - step;
r2 = r_ == fRmax ? fRmax : r_ + step;
}
}
fOrigin[0] = 0;
fOrigin[1] = 0;
fOrigin[2] = (zmax + zmin) / 2;
fDX = fRmax;
fDY = fRmax;
fDZ = (zmax - zmin) / 2;
}
void AGeoAsphericDisk::ComputeNormal(CONST53410 Double_t* point,
CONST53410 Double_t* dir, Double_t* norm) {
Double_t r = sqrt(point[0] * point[0] + point[1] * point[1]);
Double_t phi = atan2(point[1], point[0]);
Double_t saf[4];
saf[0] = TestShapeBit(kGeoRSeg) ? TMath::Abs(r - fRmin) : TGeoShape::Big();
saf[1] = TMath::Abs(r - fRmax);
Double_t f1, f2;
Double_t df1(TGeoShape::Big()), df2(TGeoShape::Big());
try {
f1 = CalcF1(r);
} catch (...) {
f1 = -TGeoShape::Big();
}
if (f1 == -TGeoShape::Big()) {
saf[2] = TGeoShape::Big();
} else {
try {
df1 = CalcdF1dr(r);
saf[2] = TMath::Abs(f1 - point[2]) / sqrt(1 + df1 * df1);
} catch (...) {
saf[2] = TGeoShape::Big();
}
}
try {
f2 = CalcF2(r);
} catch (...) {
f2 = TGeoShape::Big();
}
if (f2 == TGeoShape::Big()) {
saf[3] = TGeoShape::Big();
} else {
try {
df2 = CalcdF2dr(r);
saf[3] = TMath::Abs(f2 - point[2]) / sqrt(1 + df2 * df2);
} catch (...) {
saf[3] = TGeoShape::Big();
}
}
Int_t i = TMath::LocMin(4, saf);
memset(norm, 0, 3 * sizeof(Double_t));
if (i == 0 or i == 1) {
norm[0] = 1;
} else if (i == 2) {
if (df1 == 0) {
norm[2] = 1;
} else {
norm[0] = df1 / sqrt(1 + df1 * df1);
norm[2] = -1 / sqrt(1 + df1 * df1);
}
} else {
if (df2 == 0) {
norm[2] = 1;
} else {
norm[0] = df2 / sqrt(1 + df2 * df2);
norm[2] = -1 / sqrt(1 + df2 * df2);
}
}
TVector3 vec(norm);
vec.RotateZ(phi);
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 AGeoAsphericDisk::Contains(CONST53410 Double_t* point) const {
Double_t r = sqrt(point[0] * point[0] + point[1] * point[1]);
if (r > fRmax or r < fRmin) return kFALSE;
Double_t f1, f2;
try {
f1 = CalcF1(r);
f2 = CalcF2(r);
} catch (...) {
return kFALSE;
}
if (point[2] < f1 or f2 < point[2]) return kFALSE;
return kTRUE;
}
Int_t AGeoAsphericDisk::DistancetoPrimitive(Int_t px, Int_t py) {
Int_t n = gGeoManager->GetNsegments();
Int_t numPoints = 2 * n * (n + 1);
if (!TestShapeBit(kGeoRSeg)) {
numPoints = 2 * (n * n + 1);
}
return ShapeDistancetoPrimitive(numPoints, px, py);
}
Double_t AGeoAsphericDisk::DistFromInside(CONST53410 Double_t* point,
CONST53410 Double_t* dir, Int_t iact,
Double_t step, Double_t* safe) const {
if (iact < 3 and safe) {
*safe = Safety(point, kFALSE);
if (iact == 0) return TGeoShape::Big();
if (iact == 1 && step < *safe) return TGeoShape::Big();
}
Double_t d[4];
d[0] = DistToAsphere(1, point, dir);
d[1] = DistToAsphere(2, point, dir);
d[2] = DistToInner(point, dir);
d[3] = DistToOuter(point, dir);
return d[TMath::LocMin(4, d)];
}
Double_t AGeoAsphericDisk::DistFromOutside(CONST53410 Double_t* point,
CONST53410 Double_t* dir, Int_t iact,
Double_t step,
Double_t* safe) const {
Double_t point_[3] = {point[0], point[1], point[2] - fOrigin[2]};
Double_t sdist = TGeoTube::DistFromOutsideS(point_, dir, fRmin, fRmax, fDZ);
if (sdist >= step) return TGeoShape::Big();
if (iact < 3 and safe) {
*safe = Safety(point, kFALSE);
if (iact == 0) return TGeoShape::Big();
if (iact == 1 && step < *safe) return TGeoShape::Big();
}
Double_t d[4];
d[0] = DistToAsphere(1, point, dir);
d[1] = DistToAsphere(2, point, dir);
d[2] = DistToInner(point, dir);
d[3] = DistToOuter(point, dir);
return d[TMath::LocMin(4, d)];
}
Double_t AGeoAsphericDisk::DistToAsphere(Int_t n, CONST53410 Double_t* point,
CONST53410 Double_t* dir) const {
if (n != 1 and n != 2) return TGeoShape::Big();
Double_t H2 = point[0] * point[0] + point[1] * point[1];
Double_t d = n == 1 ? fZ1 : fZ2;
Double_t p =
-((point[2] - d) * dir[2] + point[0] * dir[0] + point[1] * dir[1]);
Double_t M = p * dir[2] + point[2] - d;
Double_t M2 = (point[2] - d) * (point[2] - d) + H2 - p * p;
Double_t check = n == 1
? 1 - (M2 * fCurve1 - 2 * M) * fCurve1 / dir[2] / dir[2]
: 1 - (M2 * fCurve2 - 2 * M) * fCurve2 / dir[2] / dir[2];
if (check < 0) {
return TGeoShape::Big();
}
Double_t q =
n == 1 ? p + (M2 * fCurve1 - 2 * M) / (dir[2] * (1 + TMath::Sqrt(check)))
: p + (M2 * fCurve2 - 2 * M) / (dir[2] * (1 + TMath::Sqrt(check)));
Double_t npoint[3] = {point[0] + q * dir[0], point[1] + q * dir[1],
point[2] + q * dir[2] - d};
for (Int_t i = 0;; i++) {
if (i > 100) {
return TGeoShape::Big();
}
H2 = npoint[0] * npoint[0] + npoint[1] * npoint[1];
check = n == 1 ? (1 - fKappa1 * H2 * fCurve1 * fCurve1)
: (1 - fKappa2 * H2 * fCurve2 * fCurve2);
if (check < 0) {
return TGeoShape::Big();
}
Double_t l = sqrt(check);
Double_t x = 0;
if (n == 1) {
if (fCurve1 != 0) x += (1 - l) / fCurve1 / fKappa1;
for (Int_t j = 0; j < fNPol1; j++) {
x += fK1[j] * TMath::Power(H2, j + 1);
}
} else {
if (fCurve2 != 0) x += (1 - l) / fCurve2 / fKappa2;
for (int j = 0; j < fNPol2; j++) {
x += fK2[j] * TMath::Power(H2, j + 1);
}
}
Double_t v = 0;
if (n == 1) {
for (int j = 0; j < fNPol1; j++) {
v += 2 * (j + 1) * fK1[j] * TMath::Power(H2, j);
}
v = fCurve1 * fKappa1 + l * v;
} else {
for (Int_t j = 0; j < fNPol2; j++) {
v += 2 * (j + 1) * fK2[j] * TMath::Power(H2, j);
}
v = fCurve2 * fKappa2 + l * v;
}
Double_t m = -npoint[0] * v;
Double_t n = -npoint[1] * v;
Double_t norm = TMath::Sqrt(l * l + m * m + n * n);
l /= norm;
m /= norm;
n /= norm;
check = dir[2] * l + dir[0] * m + dir[1] * n;
if (check == 0) {
return TGeoShape::Big();
}
Double_t e = l * (x - npoint[2]) / check;
for (Int_t j = 0; j < 3; j++) {
npoint[j] += e * dir[j];
}
if (TMath::Abs(e) < 1e-10) break;
}
npoint[2] += d;
check = dir[0] * (npoint[0] - point[0]) + dir[1] * (npoint[1] - point[1]) +
dir[2] * (npoint[2] - point[2]);
if (check < 0) {
return TGeoShape::Big();
}
Double_t dist_to_zaxis =
TMath::Power(npoint[0] * npoint[0] + npoint[1] * npoint[1], 0.5);
if (dist_to_zaxis < fRmin or dist_to_zaxis > fRmax) {
return TGeoShape::Big();
}
return TMath::Sqrt(TMath::Power(npoint[0] - point[0], 2) +
TMath::Power(npoint[1] - point[1], 2) +
TMath::Power(npoint[2] - point[2], 2));
}
Double_t AGeoAsphericDisk::DistToInner(CONST53410 Double_t* point,
CONST53410 Double_t* dir) const {
if (!TestShapeBit(kGeoRSeg)) {
return TGeoShape::Big();
}
Double_t rsq = point[0] * point[0] + point[1] * point[1];
Double_t nsq = dir[0] * dir[0] + dir[1] * dir[1];
if (TMath::Sqrt(nsq) < TGeoShape::Tolerance()) {
return TGeoShape::Big();
}
Double_t rdotn = point[0] * dir[0] + point[1] * dir[1];
Double_t b, delta;
TGeoTube::DistToTube(rsq, nsq, rdotn, fRmin, b, delta);
if (delta < 0) {
return TGeoShape::Big();
}
Double_t t1 = -b + delta;
Double_t t2 = -b - delta;
if (t1 < 0 and t2 < 0) {
return TGeoShape::Big();
}
Double_t zmin = CalcF1(fRmin);
Double_t zmax = CalcF2(fRmin);
if (t2 > 0) {
if (t1 > 0) {
Double_t z1 = t1 * dir[2] + point[2];
Double_t z2 = t2 * dir[2] + point[2];
if (z1 < zmin or zmax < z1) {
t1 = TGeoShape::Big();
}
if (z2 < zmin or zmax < z2) {
t2 = TGeoShape::Big();
}
return t1 < t2 ? t1 : t2;
} else {
}
} else if (t2 == 0) {
if (t1 > 0) {
if (zmin <= point[2] and point[2] <= zmax) {
return 0;
} else {
Double_t z1 = t1 * dir[2] + point[2];
if (zmin <= z1 and z1 <= zmax) {
return t1;
}
}
} else if (t1 == 0) {
if (zmin <= point[2] and point[2] <= zmax) {
return 0;
}
} else {
}
} else {
if (t1 > 0) {
Double_t z1 = t1 * dir[2] + point[2];
if (zmin <= z1 and z1 <= zmax) {
return t1;
}
} else if (t1 == 0) {
if (zmin <= point[2] and point[2] <= zmax) {
return 0;
}
} else {
}
}
return TGeoShape::Big();
}
Double_t AGeoAsphericDisk::DistToOuter(CONST53410 Double_t* point,
CONST53410 Double_t* dir) const {
Double_t rsq = point[0] * point[0] + point[1] * point[1];
Double_t nsq = dir[0] * dir[0] + dir[1] * dir[1];
if (TMath::Sqrt(nsq) < TGeoShape::Tolerance()) {
return TGeoShape::Big();
}
Double_t rdotn = point[0] * dir[0] + point[1] * dir[1];
Double_t b, delta;
TGeoTube::DistToTube(rsq, nsq, rdotn, fRmax, b, delta);
if (delta < 0) {
return TGeoShape::Big();
}
Double_t t1 = -b + delta;
Double_t t2 = -b - delta;
if (t1 < 0 and t2 < 0) {
return TGeoShape::Big();
}
Double_t zmin = CalcF1(fRmax);
Double_t zmax = CalcF2(fRmax);
if (t2 > 0) {
if (t1 > 0) {
Double_t z1 = t1 * dir[2] + point[2];
Double_t z2 = t2 * dir[2] + point[2];
if (z1 < zmin or zmax < z1) {
t1 = TGeoShape::Big();
}
if (z2 < zmin or zmax < z2) {
t2 = TGeoShape::Big();
}
return t1 < t2 ? t1 : t2;
} else {
}
} else if (t2 == 0) {
if (t1 > 0) {
if (zmin <= point[2] and point[2] <= zmax) {
return 0;
} else {
Double_t z1 = t1 * dir[2] + point[2];
if (zmin <= z1 and z1 <= zmax) {
return t1;
}
}
} else if (t1 == 0) {
if (zmin <= point[2] and point[2] <= zmax) {
return 0;
}
} else {
}
} else {
if (t1 > 0) {
Double_t z1 = t1 * dir[2] + point[2];
if (zmin <= z1 and z1 <= zmax) {
return t1;
}
} else if (t1 == 0) {
if (zmin <= point[2] and point[2] <= zmax) {
return 0;
}
} else {
}
}
return TGeoShape::Big();
}
TGeoVolume* AGeoAsphericDisk::Divide(TGeoVolume*, const char*, Int_t, Int_t,
Double_t, Double_t) {
Error("Divide", "Division of a aspheric disk not implemented");
return 0;
}
void AGeoAsphericDisk::GetBoundingCylinder(Double_t* param) const {
param[0] = fRmin;
param[1] = fRmax;
param[2] = 0;
param[3] = 360;
}
const TBuffer3D& AGeoAsphericDisk::GetBuffer3D(Int_t reqSections,
Bool_t localFrame) const {
static TBuffer3D buffer(TBuffer3DTypes::kGeneric);
TGeoBBox::FillBuffer3D(buffer, reqSections, localFrame);
if (reqSections & TBuffer3D::kRawSizes) {
Int_t n = gGeoManager->GetNsegments();
Int_t nbPnts = 2 * n * (n + 1);
Int_t nbSegs = 4 * n * (n + 1);
Int_t nbPols = 2 * n * (n + 1);
if (!TestShapeBit(kGeoRSeg)) {
nbPnts = 2 * (n * n + 1);
nbSegs = n * (4 * n + 1);
nbPols = n * (2 * n + 1);
}
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 AGeoAsphericDisk::GetMeshNumbers(Int_t& nvert, Int_t& nsegs,
Int_t& npols) const {
Int_t n = gGeoManager->GetNsegments();
if (TestShapeBit(kGeoRSeg)) {
nvert = 2 * n * (n + 1);
nsegs = 4 * n * (n + 1);
npols = 2 * n * (n + 1);
} else {
nvert = 2 * (n * n + 1);
nsegs = n * (4 * n + 1);
npols = n * (2 * n + 1);
}
}
Int_t AGeoAsphericDisk::GetNmeshVertices() const {
Int_t n = gGeoManager->GetNsegments();
Int_t nbPnts = 2 * n * (n + 1);
if (!TestShapeBit(kGeoRSeg)) {
nbPnts = 2 * (n * n + 1);
}
return nbPnts;
}
void AGeoAsphericDisk::InspectShape() const {
printf("*** Shape %s: AGeoAsphericDisk ***\n", GetName());
printf(" Z1 = %11.5f\n", fZ1);
printf(" Z2 = %11.5f\n", fZ2);
printf(" Curve1 = %11.5f\n", fCurve1);
printf(" Curve2 = %11.5f\n", fCurve2);
printf(" Rmin = %11.5f\n", fRmin);
printf(" Rmax = %11.5f\n", fRmax);
printf(" NPol1 = %d\n", fNPol1);
printf(" NPol2 = %d\n", fNPol2);
printf(" K1:");
for (Int_t i = 0; i < fNPol1; i++) {
printf(" %d: %11.5f\n", (i + 1) * 2, fK1[i]);
}
printf(" K2:");
for (Int_t i = 0; i < fNPol2; i++) {
printf(" %d: %11.5f\n", (i + 1) * 2, fK2[i]);
}
printf(" Bounding box:\n");
TGeoBBox::InspectShape();
}
TBuffer3D* AGeoAsphericDisk::MakeBuffer3D() const {
Int_t n = gGeoManager->GetNsegments();
Int_t nbPnts = 2 * n * (n + 1);
Int_t nbSegs = 4 * n * (n + 1);
Int_t nbPols = 2 * n * (n + 1);
if (!TestShapeBit(kGeoRSeg)) {
nbPnts = 2 * (n * n + 1);
nbSegs = n * (4 * n + 1);
nbPols = n * (2 * n + 1);
}
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 AGeoAsphericDisk::Safety(CONST53410 Double_t* point, Bool_t in) const {
Double_t safe;
Double_t rad2 = point[0] * point[0] + point[1] * point[1];
Double_t rad = sqrt(rad2);
Double_t dist[4];
if (!in) {
Double_t f1rmax, f1rmin, f2rmax, f2rmin;
try {
f1rmax = CalcF1(fRmax);
} catch (...) {
f1rmax = -TGeoShape::Big();
}
try {
f1rmin = CalcF1(fRmin);
} catch (...) {
f1rmin = -TGeoShape::Big();
}
try {
f2rmax = CalcF2(fRmax);
} catch (...) {
f2rmax = TGeoShape::Big();
}
try {
f2rmin = CalcF2(fRmin);
} catch (...) {
f2rmin = TGeoShape::Big();
}
if (rad < fRmin and (f1rmin < point[2] or point[2] < f2rmin)) {
return fRmin - rad;
} else if (rad > fRmax and (f1rmax < point[2] or point[2] < f2rmax)) {
return rad - fRmax;
}
}
Double_t r1 = fRmin;
Double_t r2 = fRmax;
dist[0] = TGeoShape::Big();
for (Int_t i = 0; i < fRepeat; i++) {
Double_t step = (r2 - r1) / fSteps;
Double_t r_ = r1;
for (Int_t j = 0; j <= fSteps + 1; j++) {
Double_t r = r1 + j * step;
Double_t f;
try {
f = CalcF1(r);
} catch (...) {
f = -TGeoShape::Big();
}
Double_t d2 = (f - point[2]) * (f - point[2]) + (r - rad) * (r - rad);
if (d2 < dist[0]) {
dist[0] = d2;
r_ = r;
}
}
r1 = r_ == fRmin ? fRmin : r_ - step;
r2 = r_ == fRmax ? fRmax : r_ + step;
}
dist[0] = TMath::Sqrt(dist[0]);
r1 = fRmin;
r2 = fRmax;
dist[1] = TGeoShape::Big();
for (Int_t i = 0; i < fRepeat; i++) {
Double_t step = (r2 - r1) / fSteps;
Double_t r_ = r1;
for (Int_t j = 0; j <= fSteps + 1; j++) {
Double_t r = r1 + j * step;
Double_t f;
try {
f = CalcF2(r);
} catch (...) {
f = TGeoShape::Big();
}
Double_t d2 = (f - point[2]) * (f - point[2]) + (r - rad) * (r - rad);
if (d2 < dist[1]) {
dist[1] = d2;
r_ = r;
}
}
r1 = r_ == fRmin ? fRmin : r_ - step;
r2 = r_ == fRmax ? fRmax : r_ + step;
}
dist[1] = sqrt(dist[1]);
if (in) {
dist[2] = rad - fRmin;
dist[3] = fRmax - rad;
safe = dist[0];
for (Int_t i = 1; i < 4; i++) {
safe = dist[i] < safe ? dist[i] : safe;
}
} else {
safe = dist[0] < dist[1] ? dist[0] : dist[1];
}
return safe;
}
void AGeoAsphericDisk::SavePrimitive(std::ostream& out, Option_t*) {
if (TObject::TestBit(kGeoSavePrimitive)) return;
out << " // Shape: " << GetName() << " type: " << ClassName() << std::endl;
out << " rmin = " << fRmin << ";" << std::endl;
out << " rmax = " << fRmax << ";" << std::endl;
out << " curve1 = " << fCurve1 << ";" << std::endl;
out << " curve2 = " << fCurve2 << ";" << std::endl;
out << " conic1 = " << fConic1 << ";" << std::endl;
out << " conic2 = " << fConic2 << ";" << std::endl;
out << " z1 = " << fZ1 << ";" << std::endl;
out << " z2 = " << fZ2 << ";" << std::endl;
out << " AGeoAsphericDisk* asph = new AGeoAsphericDisk(\"" << GetName()
<< "\",z1, curve1, z2, curve2, rmax, rmin);" << std::endl;
if (fNPol1 > 0) {
out << "double k1[" << fNPol1 << "] = {";
for (Int_t i = 0; i < fNPol1; i++) {
out << fK1[i];
out << (i != fNPol1 - 1 ? "," : "};") << std::endl;
}
}
if (fNPol2 > 0) {
out << "double k2[" << fNPol2 << "] = {";
for (Int_t i = 0; i < fNPol2; i++) {
out << fK2[i];
out << (i != fNPol2 - 1 ? "," : "};") << std::endl;
}
}
if (fNPol1 > 0 and fNPol2 > 0) {
out << "asph->SetPolynomials(" << fNPol1 << ", k1, " << fNPol2 << ", k2);"
<< std::endl;
} else if (fNPol1 == 0 and fNPol2 > 0) {
out << "asph->SetPolynomials(" << fNPol1 << ", 0, " << fNPol2 << ", k2);"
<< std::endl;
} else if (fNPol1 > 0 and fNPol2 == 0) {
out << "asph->SetPolynomials(" << fNPol1 << ", k1, " << fNPol2 << ", 0);"
<< std::endl;
}
out << "asph->SetConicConstants(conic1, conic2);" << std::endl;
out << " TGeoShape* " << GetPointerName() << " = asph;" << std::endl;
TObject::SetBit(TGeoShape::kGeoSavePrimitive);
}
void AGeoAsphericDisk::SetAsphDimensions(Double_t z1, Double_t curve1,
Double_t z2, Double_t curve2,
Double_t rmax, Double_t rmin) {
if (z1 < z2) {
fZ1 = z1;
fZ2 = z2;
fCurve1 = curve1;
fCurve2 = curve2;
} else {
fZ1 = z2;
fZ2 = z1;
fCurve1 = curve2;
fCurve2 = curve1;
}
if (rmax < 0) rmax *= -1;
if (rmin < 0) rmin *= -1;
if (rmax > rmin) {
fRmax = rmax;
fRmin = rmin;
} else {
fRmax = rmin;
fRmin = rmax;
}
if (fRmin > 0) {
SetShapeBit(kGeoRSeg);
}
fNPol1 = 0;
fNPol2 = 0;
fK1 = 0;
fK2 = 0;
}
void AGeoAsphericDisk::SetConicConstants(Double_t conic1, Double_t conic2) {
fConic1 = conic1;
fConic2 = conic2;
fKappa1 = fConic1 + 1;
fKappa2 = fConic2 + 1;
ComputeBBox();
}
void AGeoAsphericDisk::SetDimensions(Double_t* param) {
SetAsphDimensions(param[0], param[1], param[2], param[3], param[4], param[5]);
}
void AGeoAsphericDisk::SetFineness(Int_t steps, Int_t repeat) {
if (steps > 0) fSteps = steps;
if (repeat > 0) fRepeat = repeat;
}
void AGeoAsphericDisk::SetPoints(Double_t* points) const {
Int_t n = gGeoManager->GetNsegments();
if (points) {
if (TestShapeBit(kGeoRSeg)) {
for (int i = 0; i < n + 1; i++) {
Double_t r = fRmin + i * (fRmax - fRmin) / n;
for (int j = 0; j < n; j++) {
Double_t phi = j * TMath::Pi() * 2 / n;
Int_t index = 3 * (i * n + j);
points[index] = r * cos(phi);
points[index + 1] = r * sin(phi);
try {
points[index + 2] = CalcF1(r);
} catch (...) {
points[index + 2] = -TGeoShape::Big();
}
Int_t index2 = index + 3 * n * (n + 1);
points[index2] = points[index];
points[index2 + 1] = points[index + 1];
try {
points[index2 + 2] = CalcF2(r);
} catch (...) {
points[index2 + 2] = TGeoShape::Big();
}
}
}
} else {
for (int i = 0; i < n; i++) {
Double_t r = (i + 1) * fRmax / n;
for (int j = 0; j < n; j++) {
Double_t phi = j * TMath::Pi() * 2 / n;
Int_t index = 3 * (i * n + j);
points[index] = r * cos(phi);
points[index + 1] = r * sin(phi);
try {
points[index + 2] = CalcF1(r);
} catch (...) {
points[index + 2] = -TGeoShape::Big();
}
Int_t index2 = index + 3 * n * n;
points[index2] = points[index];
points[index2 + 1] = points[index + 1];
try {
points[index2 + 2] = CalcF2(r);
} catch (...) {
points[index2 + 2] = TGeoShape::Big();
}
}
}
Int_t index = 3 * 2 * n * n;
points[index] = 0;
points[index + 1] = 0;
try {
points[index + 2] = CalcF1(0);
} catch (...) {
points[index + 2] = -TGeoShape::Big();
}
points[index + 3] = 0;
points[index + 4] = 0;
try {
points[index + 5] = CalcF2(0);
} catch (...) {
points[index + 5] = -TGeoShape::Big();
}
}
}
}
void AGeoAsphericDisk::SetPoints(Float_t* points) const {
Int_t n = gGeoManager->GetNsegments();
if (points) {
if (TestShapeBit(kGeoRSeg)) {
for (int i = 0; i < n + 1; i++) {
Double_t r = fRmin + i * (fRmax - fRmin) / n;
for (int j = 0; j < n; j++) {
Double_t phi = j * TMath::Pi() * 2 / n;
Int_t index = 3 * (i * n + j);
points[index] = r * cos(phi);
points[index + 1] = r * sin(phi);
try {
points[index + 2] = CalcF1(r);
} catch (...) {
points[index + 2] = -TGeoShape::Big();
}
Int_t index2 = index + 3 * n * (n + 1);
points[index2] = points[index];
points[index2 + 1] = points[index + 1];
try {
points[index2 + 2] = CalcF2(r);
} catch (...) {
points[index2 + 2] = TGeoShape::Big();
}
}
}
} else {
for (int i = 0; i < n; i++) {
Double_t r = (i + 1) * fRmax / n;
for (int j = 0; j < n; j++) {
Double_t phi = j * TMath::Pi() * 2 / n;
Int_t index = 3 * (i * n + j);
points[index] = r * cos(phi);
points[index + 1] = r * sin(phi);
try {
points[index + 2] = CalcF1(r);
} catch (...) {
points[index + 2] = -TGeoShape::Big();
}
Int_t index2 = index + 3 * n * n;
points[index2] = points[index];
points[index2 + 1] = points[index + 1];
try {
points[index2 + 2] = CalcF2(r);
} catch (...) {
points[index2 + 2] = TGeoShape::Big();
}
}
}
Int_t index = 3 * 2 * n * n;
points[index] = 0;
points[index + 1] = 0;
try {
points[index + 2] = CalcF1(0);
} catch (...) {
points[index + 2] = -TGeoShape::Big();
}
points[index + 3] = 0;
points[index + 4] = 0;
try {
points[index + 5] = CalcF2(0);
} catch (...) {
points[index + 5] = -TGeoShape::Big();
}
}
}
}
void AGeoAsphericDisk::SetPolynomials(Int_t n1, const Double_t* k1, Int_t n2,
const Double_t* k2) {
DeleteArrays();
fNPol1 = n1;
fNPol2 = n2;
if (fNPol1 > 0) {
fK1 = new Double_t[fNPol1];
for (Int_t i = 0; i < fNPol1; i++) fK1[i] = k1[i];
}
if (fNPol2 > 0) {
fK2 = new Double_t[fNPol2];
for (Int_t i = 0; i < fNPol2; i++) fK2[i] = k2[i];
}
ComputeBBox();
}
void AGeoAsphericDisk::SetSegsAndPols(TBuffer3D& buff) const {
Int_t n = gGeoManager->GetNsegments();
Int_t c = GetBasicColor();
if (TestShapeBit(kGeoRSeg)) {
for (Int_t i = 0; i < n; i++) {
for (Int_t j = 0; j < n; j++) {
Int_t index = 3 * (i * n + j);
buff.fSegs[index] = c;
buff.fSegs[index + 1] = i * n + j;
buff.fSegs[index + 2] = (i + 1) * n + j;
index += 3 * (n * n);
buff.fSegs[index] = c;
buff.fSegs[index + 1] = n * (n + 1) + i * n + j;
buff.fSegs[index + 2] = n * (n + 1) + (i + 1) * n + j;
}
}
for (Int_t i = 0; i < n + 1; i++) {
for (Int_t j = 0; j < n; j++) {
Int_t index = 3 * 2 * n * n + 3 * (i * n + j);
buff.fSegs[index] = c;
buff.fSegs[index + 1] = i * n + j;
buff.fSegs[index + 2] = j == n - 1 ? i * n : i * n + j + 1;
index += 3 * (n * n + n);
buff.fSegs[index] = c;
buff.fSegs[index + 1] = n * (n + 1) + i * n + j;
buff.fSegs[index + 2] =
n * (n + 1) + (j == n - 1 ? i * n : i * n + j + 1);
}
}
for (Int_t j = 0; j < n; j++) {
Int_t index = 3 * (4 * n * n + 2 * n + j);
buff.fSegs[index] = c + 1;
buff.fSegs[index + 1] = j;
buff.fSegs[index + 2] = j + n * (n + 1);
index += 3 * n;
buff.fSegs[index] = c + 1;
buff.fSegs[index + 1] = n * n + j;
buff.fSegs[index + 2] = n * n + j + n * (n + 1);
}
for (Int_t i = 0; i < n; i++) {
for (Int_t j = 0; j < n; j++) {
Int_t index = 6 * (i * n + j);
buff.fPols[index] = c;
buff.fPols[index + 1] = 4;
buff.fPols[index + 2] = i * n + j;
buff.fPols[index + 3] = 2 * n * n + (i + 1) * n + j;
buff.fPols[index + 4] = j != n - 1 ? i * n + (j + 1) : i * n;
buff.fPols[index + 5] = 2 * n * n + i * n + j;
index += 6 * n * n;
buff.fPols[index] = c;
buff.fPols[index + 1] = 4;
buff.fPols[index + 2] = n * n + i * n + j;
buff.fPols[index + 3] = 3 * n * n + (i + 1) * n + j;
buff.fPols[index + 4] =
j != n - 1 ? n * n + i * n + (j + 1) : n * n + i * n;
buff.fPols[index + 5] = 3 * n * n + (i + 2) * n + j;
}
}
for (Int_t j = 0; j < n; j++) {
Int_t index = 6 * (2 * n * n + j);
buff.fPols[index] = c;
buff.fPols[index + 1] = 4;
buff.fPols[index + 2] = 2 * n * n + j;
buff.fPols[index + 3] =
j != n - 1 ? 4 * n * n + 2 * n + j + 1 : 4 * n * n + 2 * n;
buff.fPols[index + 4] = 3 * n * n + n + j;
buff.fPols[index + 5] = 4 * n * n + 2 * n + j;
index += 6 * n;
buff.fPols[index] = c + 1;
buff.fPols[index + 1] = 4;
buff.fPols[index + 2] = 3 * n * n + j;
buff.fPols[index + 3] = 4 * n * n + 3 * n + j;
buff.fPols[index + 4] = 4 * n * n + n + j;
buff.fPols[index + 5] =
j != n - 1 ? 4 * n * n + 3 * n + j + 1 : 4 * n * n + 3 * n;
}
} else {
for (Int_t i = 0; i < n; i++) {
for (Int_t j = 0; j < n; j++) {
Int_t index = 3 * (i * n + j);
buff.fSegs[index] = c;
buff.fSegs[index + 1] = i == 0 ? 2 * n * n : (i - 1) * n + j;
buff.fSegs[index + 2] = i * n + j;
index += 3 * (n * n);
buff.fSegs[index] = c;
buff.fSegs[index + 1] =
i == 0 ? 2 * n * n + 1 : n * n + (i - 1) * n + j;
buff.fSegs[index + 2] = n * n + i * n + j;
}
}
for (Int_t i = 0; i < n; i++) {
for (Int_t j = 0; j < n; j++) {
Int_t index = 3 * (2 * n * n + i * n + j);
buff.fSegs[index] = c;
buff.fSegs[index + 1] = i * n + j;
buff.fSegs[index + 2] = j != n - 1 ? i * n + (j + 1) : i * n;
index += 3 * (n * n);
buff.fSegs[index] = c;
buff.fSegs[index + 1] = n * n + i * n + j;
buff.fSegs[index + 2] =
j != n - 1 ? n * n + i * n + (j + 1) : n * n + i * n;
}
}
for (Int_t j = 0; j < n; j++) {
Int_t index = 3 * (4 * n * n + j);
buff.fSegs[index] = c + 1;
buff.fSegs[index + 1] = n * (n - 1) + j;
buff.fSegs[index + 2] = n * (n - 1) + n * n + j;
}
for (Int_t j = 0; j < n; j++) {
Int_t index = 5 * j;
buff.fPols[index] = c;
buff.fPols[index + 1] = 3;
buff.fPols[index + 2] = j;
buff.fPols[index + 3] = 2 * n * n + j;
buff.fPols[index + 4] = j != n - 1 ? j + 1 : 0;
index += 6 * n * n - n;
buff.fPols[index] = c;
buff.fPols[index + 1] = 3;
buff.fPols[index + 2] = n * n + j;
buff.fPols[index + 3] = j != n - 1 ? n * n + j + 1 : n * n;
buff.fPols[index + 4] = 3 * n * n + j;
}
for (Int_t i = 1; i < n; i++) {
for (Int_t j = 0; j < n; j++) {
Int_t index = 6 * (i * n + j) - n;
buff.fPols[index] = c;
buff.fPols[index + 1] = 4;
buff.fPols[index + 2] = i * n + j;
buff.fPols[index + 3] = 2 * n * n + i * n + j;
buff.fPols[index + 4] = j != n - 1 ? i * n + (j + 1) : i * n;
buff.fPols[index + 5] = 2 * n * n + (i - 1) * n + j;
index += 6 * n * n - n;
buff.fPols[index] = c;
buff.fPols[index + 1] = 4;
buff.fPols[index + 2] = n * n + i * n + j;
buff.fPols[index + 3] = 3 * n * n + (i - 1) * n + j;
buff.fPols[index + 4] =
j != n - 1 ? n * n + i * n + (j + 1) : n * n + i * n;
buff.fPols[index + 5] = 3 * n * n + i * n + j;
}
}
for (Int_t j = 0; j < n; j++) {
Int_t index = 6 * (2 * n * (n - 1) + j) + 5 * 2 * n;
buff.fPols[index] = c + 1;
buff.fPols[index + 1] = 4;
buff.fPols[index + 2] = 2 * n * n + n * (n - 1) + j;
buff.fPols[index + 3] = 4 * n * n + j;
buff.fPols[index + 4] = 3 * n * n + n * (n - 1) + j;
buff.fPols[index + 5] = j != n - 1 ? 4 * n * n + j + 1 : 4 * n * n;
}
}
}
void AGeoAsphericDisk::Sizeof3D() const {
}
AGeoAsphericDisk.cxx:1000 AGeoAsphericDisk.cxx:1001 AGeoAsphericDisk.cxx:1002 AGeoAsphericDisk.cxx:1003 AGeoAsphericDisk.cxx:1004 AGeoAsphericDisk.cxx:1005 AGeoAsphericDisk.cxx:1006 AGeoAsphericDisk.cxx:1007 AGeoAsphericDisk.cxx:1008 AGeoAsphericDisk.cxx:1009 AGeoAsphericDisk.cxx:1010 AGeoAsphericDisk.cxx:1011 AGeoAsphericDisk.cxx:1012 AGeoAsphericDisk.cxx:1013 AGeoAsphericDisk.cxx:1014 AGeoAsphericDisk.cxx:1015 AGeoAsphericDisk.cxx:1016 AGeoAsphericDisk.cxx:1017 AGeoAsphericDisk.cxx:1018 AGeoAsphericDisk.cxx:1019 AGeoAsphericDisk.cxx:1020 AGeoAsphericDisk.cxx:1021 AGeoAsphericDisk.cxx:1022 AGeoAsphericDisk.cxx:1023 AGeoAsphericDisk.cxx:1024 AGeoAsphericDisk.cxx:1025 AGeoAsphericDisk.cxx:1026 AGeoAsphericDisk.cxx:1027 AGeoAsphericDisk.cxx:1028 AGeoAsphericDisk.cxx:1029 AGeoAsphericDisk.cxx:1030 AGeoAsphericDisk.cxx:1031 AGeoAsphericDisk.cxx:1032 AGeoAsphericDisk.cxx:1033 AGeoAsphericDisk.cxx:1034 AGeoAsphericDisk.cxx:1035 AGeoAsphericDisk.cxx:1036 AGeoAsphericDisk.cxx:1037 AGeoAsphericDisk.cxx:1038 AGeoAsphericDisk.cxx:1039 AGeoAsphericDisk.cxx:1040 AGeoAsphericDisk.cxx:1041 AGeoAsphericDisk.cxx:1042 AGeoAsphericDisk.cxx:1043 AGeoAsphericDisk.cxx:1044 AGeoAsphericDisk.cxx:1045 AGeoAsphericDisk.cxx:1046 AGeoAsphericDisk.cxx:1047 AGeoAsphericDisk.cxx:1048 AGeoAsphericDisk.cxx:1049 AGeoAsphericDisk.cxx:1050 AGeoAsphericDisk.cxx:1051 AGeoAsphericDisk.cxx:1052 AGeoAsphericDisk.cxx:1053 AGeoAsphericDisk.cxx:1054 AGeoAsphericDisk.cxx:1055 AGeoAsphericDisk.cxx:1056 AGeoAsphericDisk.cxx:1057 AGeoAsphericDisk.cxx:1058 AGeoAsphericDisk.cxx:1059 AGeoAsphericDisk.cxx:1060 AGeoAsphericDisk.cxx:1061 AGeoAsphericDisk.cxx:1062 AGeoAsphericDisk.cxx:1063 AGeoAsphericDisk.cxx:1064 AGeoAsphericDisk.cxx:1065 AGeoAsphericDisk.cxx:1066 AGeoAsphericDisk.cxx:1067 AGeoAsphericDisk.cxx:1068 AGeoAsphericDisk.cxx:1069 AGeoAsphericDisk.cxx:1070 AGeoAsphericDisk.cxx:1071 AGeoAsphericDisk.cxx:1072 AGeoAsphericDisk.cxx:1073 AGeoAsphericDisk.cxx:1074 AGeoAsphericDisk.cxx:1075 AGeoAsphericDisk.cxx:1076 AGeoAsphericDisk.cxx:1077 AGeoAsphericDisk.cxx:1078 AGeoAsphericDisk.cxx:1079 AGeoAsphericDisk.cxx:1080 AGeoAsphericDisk.cxx:1081 AGeoAsphericDisk.cxx:1082 AGeoAsphericDisk.cxx:1083 AGeoAsphericDisk.cxx:1084 AGeoAsphericDisk.cxx:1085 AGeoAsphericDisk.cxx:1086 AGeoAsphericDisk.cxx:1087 AGeoAsphericDisk.cxx:1088 AGeoAsphericDisk.cxx:1089 AGeoAsphericDisk.cxx:1090 AGeoAsphericDisk.cxx:1091 AGeoAsphericDisk.cxx:1092 AGeoAsphericDisk.cxx:1093 AGeoAsphericDisk.cxx:1094 AGeoAsphericDisk.cxx:1095 AGeoAsphericDisk.cxx:1096 AGeoAsphericDisk.cxx:1097 AGeoAsphericDisk.cxx:1098 AGeoAsphericDisk.cxx:1099 AGeoAsphericDisk.cxx:1100 AGeoAsphericDisk.cxx:1101 AGeoAsphericDisk.cxx:1102 AGeoAsphericDisk.cxx:1103 AGeoAsphericDisk.cxx:1104 AGeoAsphericDisk.cxx:1105 AGeoAsphericDisk.cxx:1106 AGeoAsphericDisk.cxx:1107 AGeoAsphericDisk.cxx:1108 AGeoAsphericDisk.cxx:1109 AGeoAsphericDisk.cxx:1110 AGeoAsphericDisk.cxx:1111 AGeoAsphericDisk.cxx:1112 AGeoAsphericDisk.cxx:1113 AGeoAsphericDisk.cxx:1114 AGeoAsphericDisk.cxx:1115 AGeoAsphericDisk.cxx:1116 AGeoAsphericDisk.cxx:1117 AGeoAsphericDisk.cxx:1118 AGeoAsphericDisk.cxx:1119 AGeoAsphericDisk.cxx:1120 AGeoAsphericDisk.cxx:1121 AGeoAsphericDisk.cxx:1122 AGeoAsphericDisk.cxx:1123 AGeoAsphericDisk.cxx:1124 AGeoAsphericDisk.cxx:1125 AGeoAsphericDisk.cxx:1126 AGeoAsphericDisk.cxx:1127 AGeoAsphericDisk.cxx:1128 AGeoAsphericDisk.cxx:1129 AGeoAsphericDisk.cxx:1130 AGeoAsphericDisk.cxx:1131 AGeoAsphericDisk.cxx:1132 AGeoAsphericDisk.cxx:1133 AGeoAsphericDisk.cxx:1134 AGeoAsphericDisk.cxx:1135 AGeoAsphericDisk.cxx:1136 AGeoAsphericDisk.cxx:1137 AGeoAsphericDisk.cxx:1138 AGeoAsphericDisk.cxx:1139 AGeoAsphericDisk.cxx:1140 AGeoAsphericDisk.cxx:1141 AGeoAsphericDisk.cxx:1142 AGeoAsphericDisk.cxx:1143 AGeoAsphericDisk.cxx:1144 AGeoAsphericDisk.cxx:1145 AGeoAsphericDisk.cxx:1146 AGeoAsphericDisk.cxx:1147 AGeoAsphericDisk.cxx:1148 AGeoAsphericDisk.cxx:1149 AGeoAsphericDisk.cxx:1150 AGeoAsphericDisk.cxx:1151 AGeoAsphericDisk.cxx:1152 AGeoAsphericDisk.cxx:1153 AGeoAsphericDisk.cxx:1154 AGeoAsphericDisk.cxx:1155 AGeoAsphericDisk.cxx:1156 AGeoAsphericDisk.cxx:1157 AGeoAsphericDisk.cxx:1158 AGeoAsphericDisk.cxx:1159 AGeoAsphericDisk.cxx:1160 AGeoAsphericDisk.cxx:1161 AGeoAsphericDisk.cxx:1162 AGeoAsphericDisk.cxx:1163 AGeoAsphericDisk.cxx:1164 AGeoAsphericDisk.cxx:1165 AGeoAsphericDisk.cxx:1166 AGeoAsphericDisk.cxx:1167 AGeoAsphericDisk.cxx:1168 AGeoAsphericDisk.cxx:1169 AGeoAsphericDisk.cxx:1170 AGeoAsphericDisk.cxx:1171 AGeoAsphericDisk.cxx:1172 AGeoAsphericDisk.cxx:1173 AGeoAsphericDisk.cxx:1174 AGeoAsphericDisk.cxx:1175 AGeoAsphericDisk.cxx:1176 AGeoAsphericDisk.cxx:1177 AGeoAsphericDisk.cxx:1178 AGeoAsphericDisk.cxx:1179 AGeoAsphericDisk.cxx:1180 AGeoAsphericDisk.cxx:1181 AGeoAsphericDisk.cxx:1182 AGeoAsphericDisk.cxx:1183 AGeoAsphericDisk.cxx:1184 AGeoAsphericDisk.cxx:1185 AGeoAsphericDisk.cxx:1186 AGeoAsphericDisk.cxx:1187 AGeoAsphericDisk.cxx:1188 AGeoAsphericDisk.cxx:1189 AGeoAsphericDisk.cxx:1190 AGeoAsphericDisk.cxx:1191 AGeoAsphericDisk.cxx:1192 AGeoAsphericDisk.cxx:1193 AGeoAsphericDisk.cxx:1194 AGeoAsphericDisk.cxx:1195 AGeoAsphericDisk.cxx:1196 AGeoAsphericDisk.cxx:1197 AGeoAsphericDisk.cxx:1198 AGeoAsphericDisk.cxx:1199 AGeoAsphericDisk.cxx:1200 AGeoAsphericDisk.cxx:1201 AGeoAsphericDisk.cxx:1202 AGeoAsphericDisk.cxx:1203 AGeoAsphericDisk.cxx:1204 AGeoAsphericDisk.cxx:1205 AGeoAsphericDisk.cxx:1206 AGeoAsphericDisk.cxx:1207 AGeoAsphericDisk.cxx:1208 AGeoAsphericDisk.cxx:1209 AGeoAsphericDisk.cxx:1210 AGeoAsphericDisk.cxx:1211 AGeoAsphericDisk.cxx:1212 AGeoAsphericDisk.cxx:1213 AGeoAsphericDisk.cxx:1214 AGeoAsphericDisk.cxx:1215 AGeoAsphericDisk.cxx:1216 AGeoAsphericDisk.cxx:1217 AGeoAsphericDisk.cxx:1218 AGeoAsphericDisk.cxx:1219 AGeoAsphericDisk.cxx:1220 AGeoAsphericDisk.cxx:1221 AGeoAsphericDisk.cxx:1222 AGeoAsphericDisk.cxx:1223 AGeoAsphericDisk.cxx:1224 AGeoAsphericDisk.cxx:1225 AGeoAsphericDisk.cxx:1226 AGeoAsphericDisk.cxx:1227 AGeoAsphericDisk.cxx:1228 AGeoAsphericDisk.cxx:1229 AGeoAsphericDisk.cxx:1230 AGeoAsphericDisk.cxx:1231 AGeoAsphericDisk.cxx:1232 AGeoAsphericDisk.cxx:1233 AGeoAsphericDisk.cxx:1234 AGeoAsphericDisk.cxx:1235 AGeoAsphericDisk.cxx:1236 AGeoAsphericDisk.cxx:1237 AGeoAsphericDisk.cxx:1238 AGeoAsphericDisk.cxx:1239 AGeoAsphericDisk.cxx:1240 AGeoAsphericDisk.cxx:1241 AGeoAsphericDisk.cxx:1242 AGeoAsphericDisk.cxx:1243 AGeoAsphericDisk.cxx:1244 AGeoAsphericDisk.cxx:1245 AGeoAsphericDisk.cxx:1246 AGeoAsphericDisk.cxx:1247 AGeoAsphericDisk.cxx:1248 AGeoAsphericDisk.cxx:1249 AGeoAsphericDisk.cxx:1250 AGeoAsphericDisk.cxx:1251 AGeoAsphericDisk.cxx:1252 AGeoAsphericDisk.cxx:1253 AGeoAsphericDisk.cxx:1254 AGeoAsphericDisk.cxx:1255 AGeoAsphericDisk.cxx:1256 AGeoAsphericDisk.cxx:1257 AGeoAsphericDisk.cxx:1258 AGeoAsphericDisk.cxx:1259 AGeoAsphericDisk.cxx:1260 AGeoAsphericDisk.cxx:1261 AGeoAsphericDisk.cxx:1262 AGeoAsphericDisk.cxx:1263 AGeoAsphericDisk.cxx:1264 AGeoAsphericDisk.cxx:1265 AGeoAsphericDisk.cxx:1266 AGeoAsphericDisk.cxx:1267 AGeoAsphericDisk.cxx:1268 AGeoAsphericDisk.cxx:1269 AGeoAsphericDisk.cxx:1270 AGeoAsphericDisk.cxx:1271 AGeoAsphericDisk.cxx:1272 AGeoAsphericDisk.cxx:1273 AGeoAsphericDisk.cxx:1274 AGeoAsphericDisk.cxx:1275 AGeoAsphericDisk.cxx:1276 AGeoAsphericDisk.cxx:1277 AGeoAsphericDisk.cxx:1278 AGeoAsphericDisk.cxx:1279 AGeoAsphericDisk.cxx:1280 AGeoAsphericDisk.cxx:1281 AGeoAsphericDisk.cxx:1282 AGeoAsphericDisk.cxx:1283 AGeoAsphericDisk.cxx:1284 AGeoAsphericDisk.cxx:1285 AGeoAsphericDisk.cxx:1286 AGeoAsphericDisk.cxx:1287 AGeoAsphericDisk.cxx:1288 AGeoAsphericDisk.cxx:1289 AGeoAsphericDisk.cxx:1290 AGeoAsphericDisk.cxx:1291 AGeoAsphericDisk.cxx:1292 AGeoAsphericDisk.cxx:1293 AGeoAsphericDisk.cxx:1294 AGeoAsphericDisk.cxx:1295 AGeoAsphericDisk.cxx:1296 AGeoAsphericDisk.cxx:1297 AGeoAsphericDisk.cxx:1298 AGeoAsphericDisk.cxx:1299 AGeoAsphericDisk.cxx:1300 AGeoAsphericDisk.cxx:1301 AGeoAsphericDisk.cxx:1302 AGeoAsphericDisk.cxx:1303 AGeoAsphericDisk.cxx:1304 AGeoAsphericDisk.cxx:1305 AGeoAsphericDisk.cxx:1306 AGeoAsphericDisk.cxx:1307 AGeoAsphericDisk.cxx:1308 AGeoAsphericDisk.cxx:1309 AGeoAsphericDisk.cxx:1310 AGeoAsphericDisk.cxx:1311 AGeoAsphericDisk.cxx:1312 AGeoAsphericDisk.cxx:1313 AGeoAsphericDisk.cxx:1314 AGeoAsphericDisk.cxx:1315 AGeoAsphericDisk.cxx:1316 AGeoAsphericDisk.cxx:1317 AGeoAsphericDisk.cxx:1318 AGeoAsphericDisk.cxx:1319 AGeoAsphericDisk.cxx:1320 AGeoAsphericDisk.cxx:1321 AGeoAsphericDisk.cxx:1322 AGeoAsphericDisk.cxx:1323 AGeoAsphericDisk.cxx:1324 AGeoAsphericDisk.cxx:1325 AGeoAsphericDisk.cxx:1326 AGeoAsphericDisk.cxx:1327 AGeoAsphericDisk.cxx:1328 AGeoAsphericDisk.cxx:1329 AGeoAsphericDisk.cxx:1330 AGeoAsphericDisk.cxx:1331 AGeoAsphericDisk.cxx:1332 AGeoAsphericDisk.cxx:1333 AGeoAsphericDisk.cxx:1334 AGeoAsphericDisk.cxx:1335 AGeoAsphericDisk.cxx:1336 AGeoAsphericDisk.cxx:1337 AGeoAsphericDisk.cxx:1338 AGeoAsphericDisk.cxx:1339 AGeoAsphericDisk.cxx:1340 AGeoAsphericDisk.cxx:1341 AGeoAsphericDisk.cxx:1342 AGeoAsphericDisk.cxx:1343 AGeoAsphericDisk.cxx:1344 AGeoAsphericDisk.cxx:1345 AGeoAsphericDisk.cxx:1346 AGeoAsphericDisk.cxx:1347 AGeoAsphericDisk.cxx:1348 AGeoAsphericDisk.cxx:1349 AGeoAsphericDisk.cxx:1350 AGeoAsphericDisk.cxx:1351 AGeoAsphericDisk.cxx:1352 AGeoAsphericDisk.cxx:1353 AGeoAsphericDisk.cxx:1354 AGeoAsphericDisk.cxx:1355 AGeoAsphericDisk.cxx:1356 AGeoAsphericDisk.cxx:1357 AGeoAsphericDisk.cxx:1358 AGeoAsphericDisk.cxx:1359 AGeoAsphericDisk.cxx:1360 AGeoAsphericDisk.cxx:1361 AGeoAsphericDisk.cxx:1362 AGeoAsphericDisk.cxx:1363 AGeoAsphericDisk.cxx:1364 AGeoAsphericDisk.cxx:1365 AGeoAsphericDisk.cxx:1366 AGeoAsphericDisk.cxx:1367 AGeoAsphericDisk.cxx:1368 AGeoAsphericDisk.cxx:1369 AGeoAsphericDisk.cxx:1370 AGeoAsphericDisk.cxx:1371 AGeoAsphericDisk.cxx:1372 AGeoAsphericDisk.cxx:1373 AGeoAsphericDisk.cxx:1374 AGeoAsphericDisk.cxx:1375 AGeoAsphericDisk.cxx:1376 AGeoAsphericDisk.cxx:1377 AGeoAsphericDisk.cxx:1378 AGeoAsphericDisk.cxx:1379 AGeoAsphericDisk.cxx:1380 AGeoAsphericDisk.cxx:1381 AGeoAsphericDisk.cxx:1382 AGeoAsphericDisk.cxx:1383 AGeoAsphericDisk.cxx:1384 AGeoAsphericDisk.cxx:1385 AGeoAsphericDisk.cxx:1386 AGeoAsphericDisk.cxx:1387 AGeoAsphericDisk.cxx:1388 AGeoAsphericDisk.cxx:1389 AGeoAsphericDisk.cxx:1390 AGeoAsphericDisk.cxx:1391 AGeoAsphericDisk.cxx:1392 AGeoAsphericDisk.cxx:1393 AGeoAsphericDisk.cxx:1394 AGeoAsphericDisk.cxx:1395 AGeoAsphericDisk.cxx:1396 AGeoAsphericDisk.cxx:1397