43#ifndef PORTABLE_LAR_SHAPE
53 pos_t pos, type_t
type,
size_t slice,
62 EInside Inside(
const G4ThreeVector&)
const;
63 G4double DistanceToIn(
const G4ThreeVector&,
64 const G4ThreeVector&)
const;
65 G4double DistanceToIn(
const G4ThreeVector&)
const;
66 G4double DistanceToOut(
const G4ThreeVector&,
68 const G4bool calcNorm =
false,
69 G4bool* validNorm = 0,
70 G4ThreeVector* n = 0)
const;
71 G4double DistanceToOut(
const G4ThreeVector&)
const;
72 G4ThreeVector SurfaceNormal (
const G4ThreeVector&)
const;
73 G4bool CalculateExtent(
const EAxis,
75 const G4AffineTransform&,
79 void DescribeYourselfTo(G4VGraphicsScene&)
const;
80 G4VisExtent GetExtent()
const;
81 G4Polyhedron* CreatePolyhedron()
const;
82 virtual std::ostream&
StreamInfo(std::ostream& os)
const {
return os; }
84#ifndef PORTABLE_LAR_SHAPE
85 G4ThreeVector GetPointOnSurface(
void)
const;
86 G4double GetCubicVolume(
void);
87 G4double GetSurfaceArea(
void);
115 G4double
m_Zmin{}, m_Zmax{}, m_Rmin{}, m_Rmax{};
117 void inner_solid_init(
const G4String &,
size_t slice);
118 void outer_solid_init(
const G4String &,
size_t slice);
119 void fill_zsect(std::vector<G4double> &, G4double zMid = 0.)
const;
121 virtual G4double distance_to_in(G4ThreeVector &,
const G4ThreeVector &,
int)
const;
122 G4double in_iteration_process(
const G4ThreeVector &,
123 G4double, G4ThreeVector &,
int)
const;
124 G4double search_for_nearest_point(
125 const G4ThreeVector &,
const G4double,
126 const G4ThreeVector &,
int
128 G4bool search_for_most_remoted_point(
129 const G4ThreeVector &,
const G4ThreeVector &,
130 G4ThreeVector &,
const int
132 G4double out_iteration_process(
133 const G4ThreeVector &, G4ThreeVector &,
const int
136#ifndef PORTABLE_LAR_SHAPE
137 EInside Inside_accordion(
const G4ThreeVector&)
const;
138 void get_point_on_accordion_surface(G4ThreeVector &)
const;
139 void get_point_on_polycone_surface(G4ThreeVector &)
const;
140 void get_point_on_flat_surface(G4ThreeVector &)
const;
141 void set_failover_point(G4ThreeVector &p,
const char *m = 0)
const;
143 G4double get_area_on_polycone(
void)
const;
144 G4double get_area_on_face(
void)
const;
145 G4double get_area_on_side(
void)
const;
147 G4double get_area_at_r(G4double
r)
const;
148 G4double get_length_at_r(G4double
r)
const;
151 void clean_tests(
void);
152 void init_tests(
void);
157#ifndef PORTABLE_LAR_SHAPE
168#ifdef DEBUG_LARWHEELSLICESOLID
169 static const char* inside(EInside i)
172 case kInside:
return "inside";
break;
173 case kSurface:
return "surface";
break;
174 case kOutside:
return "outside";
break;
181 void SetVerbose(G4int v){
Verbose =
v; }
182 G4bool test_dti(
const G4ThreeVector &p,
183 const G4ThreeVector &v,
const G4double distance)
const;
184 G4bool test_dto(
const G4ThreeVector &p,
185 const G4ThreeVector &v,
const G4double distance)
const;
188 G4String TypeStr(
void)
const;
190 void createSolid(
const G4String& name, G4int zside,
size_t slice,
const EMECData *emecData);
191 inline void check_slice(
size_t size,
size_t slice)
const;
LArWheelSliceSolid(const G4String &name, pos_t pos, type_t type, size_t slice, G4int zside=1, const LArWheelCalculator *calc=0, const EMECData *emecData=0)