////////////////////////////////////////////////////////////////////////////////////////// /// \class RAT::SNOSV /// /// \brief Geometry Class for the SNO scintillator volume, bounded by inner acrylic layer, the neck and neckboss. /// /// \author Aksel Hallin aksel.hallin@ualberta.ca /// /// Revision History: \n /// 2014-06-30 Aksel Hallin /// ///\detail This class describes the inner surface of the acrylic vessel, including the belly plates,neck, neck boss and ncd anchors /// ///////////////////////////////////////////////////////////////////////////////////////// #ifndef __RAT_SNOSV__ #define __RAT_SNOSV__ #include #include #include namespace RAT{ class SNOSV:public SphericalSubregionList{ public: /// Constructor /// @param[in] aTitle Name of this solid. This is the name in the geometry definition file (eg. snoplusalh2.geo) SNOSV(const G4String &aTitle); /// Implementation of the G4VSolid method. /// @param[in] EAxis The axis G4bool CalculateExtent(const EAxis, const G4VoxelLimits &, const G4AffineTransform &, G4double &, G4double &) const; /// Implements the G4VSolid method G4Polyhedron* CreatePolyhedron() const; /// Implements the G4VSolid method void DescribeYourselfTo(G4VGraphicsScene &)const; /// Implements the SphericalSubregion method G4double DistanceToNext(const G4ThreeVector& p, const G4ThreeVector& v, NextMode aNextMode)const; /// Implements the G4VSolid method /// Implements the G4VSolid method G4GeometryType GetEntityType(void)const; /// Implements the G4VSolid method G4VisExtent GetExtent() const; /// Implements the G4VSolid method G4ThreeVector GetPointOnSurface() const; /// Implements the G4VSolid method EInside Inside(const G4ThreeVector &p)const; /// Implements the G4VSolid method std::ostream& StreamInfo(std::ostream &)const; /// Implements SphericalSubregionList method G4ThreeVector SurfaceNormal(const G4ThreeVector& p, G4bool &isValid) const; G4ThreeVector SurfaceNormal(const G4ThreeVector& p) const{ G4bool isValid=false; return SurfaceNormal(p,isValid);} private: class SNOSVBellyPlate *fBellyPlates[10]; ///< array of bellyplate objects class SNONCDAnchor *fNCDAnchors[100]; ///< array of ncd anchor objects G4double fRadii[4]; ///< Radii to check for spherical intersections. G4double fNeckZ1, fNeckZ2, fNeckZ3; ///< location of bottom of NeckBoss, top of neck boss and top of neck; G4double fNeckInnerRadius; ///< (cylindrical) radius of neck G4double fNeckBossInnerRadius; ///< cylindrical radius G4double fNeckBossOuterRadius; ///< cylindrical radius G4int iAddBellyPlates; G4int iAddNCDanchors; }; } //::RAT #endif