//////////////////////////////////////////////////////////////////////// /// \class RAT::SNOMANConcentratorConstructor /// /// \brief Class that constructs the Concentrator Logical Volume using \n /// the concentrator parameters /// /// \author Phil Jones /// \author Aksel Hallin -- contact person /// /// REVISION HISTORY:\n /// 07/09 : P.Jones - First Revision, new file. \n /// 05/10 : P.Jones - Added plastic back surface, and logical envelope \n /// 08/10 : P.Jones - Added model parameterization \n /// 01/11 : P.Jones - Added data input option \n /// 04/11 : P.Jones - Split into SNOMAN and RAT concentrator definitions \n /// /// \details Takes the concentrator parameters and constructs a \n /// concentrator solid and places it into a logical volume. \n /// This class build the SNOMAN defined concentrator /// /// //////////////////////////////////////////////////////////////////////// #ifndef __RAT_SNOMANConcentratorConstructor__ #define __RAT_SNOMANConcentratorConstructor__ #include class G4VSolid; namespace RAT { class SNOMANConcentratorConstructor : public ConcentratorConstructor { public: /// Constructor for the class, needs parameters and a name SNOMANConcentratorConstructor( const std::string& prefix,///< Prefix to name objects const ConcentratorConstructorParams& params ); ///< Parameters to build concentrator /// Produces a concentrator shaped solid volume virtual G4VSolid* ProduceSolid( const std::string& name, int numPoints, double* z, double* rInner, double* rOuter ); /// Returns the Max height above the pmt equator of the concentrator virtual double GetMaxHeight(); /// Returns the Max depth below the pmt equator of the concentrator (note returns a -ive number) virtual double GetMaxDepth(); /// Returns the radius of the concentrator, for a hex shape this is the distance of the plane that has \n /// a normal that passes through the origin (See G4Polyhedra definition). virtual double GetHexRadius(); /// Returns the maximum radius from the origin in xy plane. virtual double GetMaxRadius(); protected: /// Converts the ellipse fit into z, rho coords in conc params virtual double ProduceZRhoCoordsPetal( int& numPoints, double** z, double** petalInner, double** petalOuter, double** plasticInner, double** plasticOuter, double** zEnvelope, double** envelopeInner, double** envelopeOuter ); /// Returns the Z co-ord given the radial value, note -ve z values only double ZFromR( double r ); ///< The radial co-ord /// Returns the radial co-ord given the z value double RFromZ( double z ); ///< The Z co-ord }; } //::RAT #endif