#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()
{
SetShapeBit(TGeoShape::kGeoBox);
SetAsphDimensions(0, 0, 0, 0, 0, 0);
SetPolynomials(0, 0, 0, 0);
SetFineness(100, 4);
}
AGeoAsphericDisk::AGeoAsphericDisk(Double_t z1, Double_t curve1,
Double_t z2, Double_t curve2,
Double_t rmax, Double_t rmin)
: TGeoBBox(0, 0, 0)
{
SetShapeBit(TGeoShape::kGeoBox);
SetAsphDimensions(z1, curve1, z2, curve2, rmax, rmin);
SetPolynomials(0, 0, 0, 0);
SetFineness(100, 4);
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)
{
SetShapeBit(TGeoShape::kGeoBox);
SetAsphDimensions(z1, curve1, z2, curve2, rmax, rmin);
SetPolynomials(0, 0, 0, 0);
SetFineness(100, 4);
ComputeBBox();
}
AGeoAsphericDisk::~AGeoAsphericDisk()
{
DeleteArrays();
}
Double_t AGeoAsphericDisk::CalcdF1dr(Double_t r) const throw(std::exception)
{
Double_t p = r*r*fCurve1*fCurve1;
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 throw(std::exception)
{
Double_t p = r*r*fCurve2*fCurve2;
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 throw(std::exception)
{
Double_t p = r*r*fCurve1;
if(1 - p*fCurve1 < 0) throw std::exception();
Double_t ret = fZ1 + p/(1 + sqrt(1 - p*fCurve1));
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 throw(std::exception)
{
Double_t p = r*r*fCurve2;
if(1 - p*fCurve2 < 0) throw std::exception();
Double_t ret = fZ2 + p/(1 + sqrt(1 - p*fCurve2));
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(Double_t* point, 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, df1, df2;
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(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(Double_t* point, 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(Double_t* point, 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, Double_t* point, 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 - H2*fCurve1*fCurve1 : 1 - 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;
for(Int_t j = 0; j < fNPol1; j++){
x += fK1[j]*TMath::Power(H2, j + 1);
}
} else {
if(fCurve2 != 0) x += (1 - l)/fCurve2;
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 + l*v;
} else {
for(Int_t j = 0; j < fNPol2; j++){
v += 2*(j+1)*fK2[j]*TMath::Power(H2, j);
}
v = fCurve2 + l*v;
}
Double_t m = -npoint[0]*v;
Double_t n = -npoint[1]*v;
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(Double_t* point, 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();
}
if(t1 == 0 or t2 == 0){
return 0;
}
Double_t zmin = CalcF1(fRmin);
Double_t zmax = CalcF2(fRmin);
if(t1 < 0 and t2 > 0){
Double_t z = t2*dir[2] + point[2];
if(zmin <= z and z <= zmax){
return t2;
} else {
return TGeoShape::Big();
}
} else if(t1 > 0 and t2 < 0){
Double_t z = t1*dir[2] + point[2];
if(zmin <= z and z <= zmax){
return t1;
} else {
return TGeoShape::Big();
}
} else if(t1 > 0 and t2 > 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;
}
return TGeoShape::Big();
}
Double_t AGeoAsphericDisk::DistToOuter(Double_t* point, 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();
}
if(t1 == 0 or t2 == 0){
return 0;
}
Double_t zmin = CalcF1(fRmax);
Double_t zmax = CalcF2(fRmax);
if(t1 < 0 and t2 > 0){
Double_t z = t2*dir[2] + point[2];
if(zmin <= z and z <= zmax){
return t2;
} else {
return TGeoShape::Big();
}
} else if(t1 > 0 and t2 < 0){
Double_t z = t1*dir[2] + point[2];
if(zmin <= z and z <= zmax){
return t1;
} else {
return TGeoShape::Big();
}
} else if(t1 > 0 and t2 > 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;
}
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(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 << " 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 << " 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::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[n1];
for(Int_t i = 0; i < n1; i++) fK1[i] = k1[i];
}
if(fNPol2 > 0){
fK2 = new Double_t[n2];
for(Int_t i = 0; i < n2; 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