//////////////////////////////////////////////////////////////////////// /// \class RAT::RATConcentratorConstructor /// /// \brief Class that constructs the Concentrator Logical Volume using /// 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 SNO and RAT concentrator definitions \n /// /// \details Takes the concentrator parameters and constructs a /// concentrator solid and places it into a logical volume. /// This class build the RAT defined concentrator. /// /// //////////////////////////////////////////////////////////////////////// #ifndef __RAT_RATConcentratorConstructor__ #define __RAT_RATConcentratorConstructor__ #include namespace RAT { class RATConcentratorConstructor : public ConcentratorConstructor { public: /// Constructor for the class, needs parameters and a name RATConcentratorConstructor( const std::string& prefix,///< Prefix to name objects const ConcentratorConstructorParams& params ///< Parameters to build concentrator ); /// 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 ); }; } //::RAT #endif