File indexing completed on 2025-10-31 09:03:43
0001 
0002 
0003 
0004 
0005 
0006 
0007 
0008 
0009 
0010 
0011 
0012 
0013 
0014 
0015 
0016 
0017 
0018 
0019 
0020 
0021 
0022 
0023 
0024 
0025 
0026 
0027 
0028 
0029 
0030 
0031 
0032 
0033 
0034 #ifndef G4UELLIPSOID_HH
0035 #define G4UELLIPSOID_HH
0036 
0037 #include "G4UAdapter.hh"
0038 
0039 #if ( defined(G4GEOM_USE_USOLIDS) || defined(G4GEOM_USE_PARTIAL_USOLIDS) )
0040 
0041 #include <VecGeom/volumes/UnplacedEllipsoid.h>
0042 
0043 #include "G4Polyhedron.hh"
0044 
0045 class G4UEllipsoid : public G4UAdapter<vecgeom::UnplacedEllipsoid>
0046 {
0047   using Shape_t = vecgeom::UnplacedEllipsoid;
0048   using Base_t  = G4UAdapter<vecgeom::UnplacedEllipsoid>;
0049 
0050   public:
0051 
0052     G4UEllipsoid(const G4String& name, G4double pxSemiAxis,
0053                                        G4double pySemiAxis,
0054                                        G4double pzSemiAxis,
0055                                        G4double pzBottomCut = 0.0,
0056                                        G4double pzTopCut = 0.0);
0057    ~G4UEllipsoid() override;
0058 
0059     G4VSolid* Clone() const override;
0060 
0061     G4double GetDx() const;
0062     G4double GetDy() const;
0063     G4double GetDz() const;
0064     G4double GetSemiAxisMax (G4int i) const;
0065     G4double GetZBottomCut() const;
0066     G4double GetZTopCut() const;
0067     void SetSemiAxis (G4double x, G4double y, G4double z);
0068     void SetZCuts (G4double newzBottomCut, G4double newzTopCut);
0069 
0070     inline G4GeometryType GetEntityType() const override;
0071 
0072     G4UEllipsoid( const G4UEllipsoid &source );
0073     G4UEllipsoid &operator=( const G4UEllipsoid &source );
0074       
0075 
0076     void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override;
0077     G4bool CalculateExtent(const EAxis pAxis,
0078                            const G4VoxelLimits& pVoxelLimit,
0079                            const G4AffineTransform& pTransform,
0080                            G4double& pmin, G4double& pmax) const override;
0081     G4Polyhedron* CreatePolyhedron() const override;
0082 };
0083 
0084 
0085 
0086 
0087 
0088 inline G4GeometryType G4UEllipsoid::GetEntityType() const
0089 {
0090   return "G4Ellipsoid";
0091 }
0092 
0093 #endif  
0094 
0095 #endif