//////////////////////////////////////////////////////////////////////// /// /// \class SNOSpreaderRope /// /// \brief G4VSolid class to describe the thinner, horizontal spreader sections of the ropenet. /// /// \author Aksel Hallin aksel.hallin@ualberta.ca /// /// REVISION HISTORY:\n /// Oct 17, 2014 : Aksel Hallin \n /// /// \detail //// //////////////////////////////////////////////////////////////////////// #ifndef SNOSPREADERROPE_HH_ #define SNOSPREADERROPE_HH_ #include #include namespace RAT { class SNOSpreaderRope: public SphericalSubregion { public: /// Constructor /// @param[in] phi Angle of the anchor of the first rope in a pair. The second rope is 18 degrees in positive phi /// away from the first. SNOSpreaderRope(DBLinkPtr geoDimensionsTable,G4double aPhi); /// DistanceToIn Sphericalsubregion implementation to provide G4VSolid routine. G4double DistanceToIn(const G4ThreeVector &p, const G4ThreeVector &n, const G4double dInner[2], const G4double dOuter[2])const; /// DistanceToIn A spherical subregion needs to implement this to provide G4VSolid routines. G4double DistanceToIn(const G4ThreeVector &p)const; /// DistanceToOut A spherical subregion needs to implement this to provide G4VSolid routines. G4double DistanceToOut(const G4ThreeVector &p)const; /// Returns normal to top and bottom planes of rope. G4ThreeVector &GetZAxis(){return fZAxis;} /// Inside A spherical subregion needs to implement this to provide G4VSolid routines. EInside Inside(const G4ThreeVector &p)const; /// SurfaceNormal A spherical subregion needs to implement this to provide G4VSolid routines. G4ThreeVector SurfaceNormal(const G4ThreeVector &p) { G4bool isValid; return SurfaceNormal(p, isValid); } /// SurfaceNormal A spherical subregion needs to implement this to provide G4VSolid routines. G4ThreeVector SurfaceNormal(const G4ThreeVector &p, G4bool &isValid)const; /// OverlapsRegion tests whether the spherical region bounded by the four corners overlaps with this specific /// spherical subregion. This returns true if any event within the sector bounded by those four corners and the /// inner and outer spherical shell radii can intersect with a straight line path. Intersections that require /// passing through a spherical surface first return false. /// @param[in] corners[4] defines the spherical section. G4bool OverlapsRegion(const G4ThreeVector [4])const; private: G4ThreeVector fVertical1; ///< Angle where spreader begins G4ThreeVector fVertical2; ///< Angle where spreader ends G4ThreeVector fZAxis; ///< Axis normal to plane containing the rope great circle. G4double fZ1; ///< Position of bottom of spreader rope G4double fZ; ///< Position of center of spreader rope G4double fRho; ///< Cylindrical radius of center of spreader rope G4double fZ2; ///< Position of top of spreader rope G4double fWidth; ///< Halfwidth of spreader rope (10 mm) G4double fMainWidth; ///< half width of main net ropes. G4double fRmin; ///< spherical radius of inner surface of rope G4double fRmax; ///