5#ifndef GEO2G4_LARWHEELSOLID_H
6#define GEO2G4_LARWHEELSOLID_H
7#ifndef PORTABLE_LAR_SHAPE
23#define LARWHEELSOLID_USE_BS_DTO
26#define LARWHEELSOLID_ZSECT_MULT 1
34#ifdef DEBUG_LARWHEELSOLID
35#define LWSDBG(a, b) if(Verbose >= a) b
36#define MSG_VECTOR(v) "(" << v.x() << ", " << v.y() << ", " << v.z() << ")"
44class G4VGraphicsScene;
49class G4AffineTransform;
91#ifndef PORTABLE_LAR_SHAPE
105 EInside
Inside(
const G4ThreeVector&)
const;
107 const G4ThreeVector&)
const;
110 const G4ThreeVector&,
111 const G4bool calcNorm =
false,
112 G4bool* validNorm = 0,
113 G4ThreeVector* n = 0)
const;
117 const G4VoxelLimits&,
118 const G4AffineTransform&,
127 virtual std::ostream&
StreamInfo(std::ostream& os)
const {
return os; }
133#ifndef PORTABLE_LAR_SHAPE
134 G4ThreeVector GetPointOnSurface(
void)
const;
135 G4double GetCubicVolume(
void);
136 G4double GetSurfaceArea(
void);
155#ifdef LARWHEELSOLID_USE_FANBOUND
156 G4VSolid* m_FanBound;
178 const G4ThreeVector &,
int)
const;
180 G4double, G4ThreeVector &,
int)
const;
182 const G4ThreeVector &,
int)
const;
184 const G4ThreeVector &,
185 G4ThreeVector &,
const int)
const;
187 G4ThreeVector &,
const int)
const;
194 FanBoundExit_t find_exit_point(
const G4ThreeVector &p,
195 const G4ThreeVector &v,
196 G4ThreeVector &q)
const;
197 G4bool fs_cross_lower(
const G4ThreeVector &p,
const G4ThreeVector &v,
198 G4ThreeVector &q)
const;
199 G4bool fs_cross_upper(
const G4ThreeVector &p,
const G4ThreeVector &v,
200 G4ThreeVector &q)
const;
201 G4bool check_D(G4double &b,
202 G4double
A, G4double B, G4double
C, G4bool)
const;
204 G4int select_section(
const G4double &Z)
const;
206#ifndef PORTABLE_LAR_SHAPE
207 EInside Inside_accordion(
const G4ThreeVector&)
const;
208 void get_point_on_accordion_surface(G4ThreeVector &)
const;
209 void get_point_on_polycone_surface(G4ThreeVector &)
const;
210 void get_point_on_flat_surface(G4ThreeVector &)
const;
211 void set_failover_point(G4ThreeVector &p,
const char *m = 0)
const;
213 G4double get_area_on_polycone(
void)
const;
214 G4double get_area_on_face(
void)
const;
215 G4double get_area_on_side(
void)
const;
217 G4double get_area_at_r(G4double
r)
const;
218 G4double get_length_at_r(G4double
r)
const;
221 void clean_tests(
void);
222 void init_tests(
void);
236#ifdef DEBUG_LARWHEELSOLID
237 static const char* inside(EInside i)
240 case kInside:
return "inside";
break;
241 case kSurface:
return "surface";
break;
242 case kOutside:
return "outside";
break;
249 void SetVerbose(G4int v){
Verbose =
v; }
250#ifndef PORTABLE_LAR_SHAPE
251 G4bool test_dti(
const G4ThreeVector &p,
252 const G4ThreeVector &v,
const G4double distance)
const;
253 G4bool test_dto(
const G4ThreeVector &p,
254 const G4ThreeVector &v,
const G4double distance)
const;
double LArWheelSolid_get_dl(double *x, double *par, G4int side)
double LArWheelSolid_fcn_area(double *x, double *p)
double LArWheelSolid_fcn_vol(double *x, double *p)
double LArWheelSolid_fcn_side_area(double *x, double *p)
double LArWheelSolid_fcn_area_on_pc(double *x, double *p)
const char * LArWheelSolidTypeString(LArWheelSolid_t type)
Define macros for attributes used to control the static checker.
#define ATLAS_NOT_THREAD_SAFE
getNoisyStrip() Find noisy strips from hitmaps and write out into xml/db formats
AthMessaging(IMessageSvc *msgSvc, const std::string &name)
Constructor.
This class separates some of the geometry details of the LAr endcap.
LArWheelCalculator * m_Calculator
G4double out_iteration_process(const G4ThreeVector &, G4ThreeVector &, const int) const
void outer_solid_init(const G4String &)
static const G4double s_IterationPrecision2
const LArWheelSolid_t m_Type
static const G4double s_IterationPrecision
static const G4double s_Tolerance
LArWheelSolid_t GetType(void) const
LArWheelSolid(const G4String &name, LArWheelSolid_t type, G4int zside=1, LArWheelCalculator *calc=0, const EMECData *emecData=0)
G4double in_iteration_process(const G4ThreeVector &, G4double, G4ThreeVector &, int) const
std::vector< G4double > m_Zsect
G4bool CalculateExtent(const EAxis, const G4VoxelLimits &, const G4AffineTransform &, G4double &, G4double &) const
G4double DistanceToIn(const G4ThreeVector &, const G4ThreeVector &) const
const G4VSolid * GetBoundingShape(void) const
G4VSolid * m_BoundingShape
void DescribeYourselfTo(G4VGraphicsScene &) const
static const unsigned int s_IterationsLimit
G4int m_Zsect_start_search
static const G4double s_AngularTolerance
G4GeometryType GetEntityType() const
virtual G4double distance_to_in(G4ThreeVector &, const G4ThreeVector &, int) const
G4double DistanceToOut(const G4ThreeVector &, const G4ThreeVector &, const G4bool calcNorm=false, G4bool *validNorm=0, G4ThreeVector *n=0) const
G4ThreeVector SurfaceNormal(const G4ThreeVector &) const
G4double m_FanPhiAmplitude
virtual std::ostream & StreamInfo(std::ostream &os) const
EInside Inside(const G4ThreeVector &) const
G4VisExtent GetExtent() const
G4Polyhedron * CreatePolyhedron() const
const G4double m_PhiPosition
G4bool search_for_most_remoted_point(const G4ThreeVector &, const G4ThreeVector &, G4ThreeVector &, const int) const
void inner_solid_init(const G4String &)
G4double search_for_nearest_point(const G4ThreeVector &, const G4double, const G4ThreeVector &, int) const
G4double m_FanHalfThickness
const LArWheelCalculator * GetCalculator(void) const
hold the test vectors and ease the comparison