Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-10-04 09:08:08

0001 //
0002 // ********************************************************************
0003 // * License and Disclaimer                                           *
0004 // *                                                                  *
0005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
0006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
0007 // * conditions of the Geant4 Software License,  included in the file *
0008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
0009 // * include a list of copyright holders.                             *
0010 // *                                                                  *
0011 // * Neither the authors of this software system, nor their employing *
0012 // * institutes,nor the agencies providing financial support for this *
0013 // * work  make  any representation or  warranty, express or implied, *
0014 // * regarding  this  software system or assume any liability for its *
0015 // * use.  Please see the license in the file  LICENSE  and URL above *
0016 // * for the full disclaimer and the limitation of liability.         *
0017 // *                                                                  *
0018 // * This  code  implementation is the result of  the  scientific and *
0019 // * technical work of the GEANT4 collaboration.                      *
0020 // * By using,  copying,  modifying or  distributing the software (or *
0021 // * any work based  on the software)  you  agree  to acknowledge its *
0022 // * use  in  resulting  scientific  publications,  and indicate your *
0023 // * acceptance of all terms of the Geant4 Software license.          *
0024 // ********************************************************************
0025 //
0026 // G4UOrb
0027 //
0028 // Class description:
0029 //
0030 // Wrapper class for G4Orb to make use of VecGeom Orb.
0031 
0032 // Author: G.Cosmo (CERN), 30.10.2013
0033 // --------------------------------------------------------------------
0034 #ifndef G4UORB_HH
0035 #define G4UORB_HH
0036 
0037 #include "G4UAdapter.hh"
0038 
0039 #if ( defined(G4GEOM_USE_USOLIDS) || defined(G4GEOM_USE_PARTIAL_USOLIDS) )
0040 
0041 #include <VecGeom/volumes/UnplacedOrb.h>
0042 
0043 #include "G4Polyhedron.hh"
0044 
0045 /**
0046  * @brief G4UOrb is a wrapper class for G4Orb to make use of VecGeom Orb.
0047  */
0048 
0049 class G4UOrb : public G4UAdapter<vecgeom::UnplacedOrb>
0050 {
0051   using Shape_t = vecgeom::UnplacedOrb;
0052   using Base_t  = G4UAdapter<vecgeom::UnplacedOrb>;
0053 
0054   public:
0055 
0056     /**
0057      * Constructs a full sphere, given a name and its radius.
0058      *  @param[in] pName The name of the solid.
0059      *  @param[in] pRmax Outer radius.
0060      */
0061     G4UOrb(const G4String& pName, G4double pRmax);
0062        
0063     /**
0064      * Default destructor.
0065      */
0066     ~G4UOrb() override = default;
0067     
0068     /**
0069      * Dispatch method for parameterisation replication mechanism and
0070      * dimension computation.
0071      */
0072     void ComputeDimensions(G4VPVParameterisation* p,
0073                            const G4int n,
0074                            const G4VPhysicalVolume* pRep) override;
0075 
0076     /**
0077      * Makes a clone of the object for use in multi-treading.
0078      *  @returns A pointer to the new cloned allocated solid.
0079      */
0080     G4VSolid* Clone() const override;
0081 
0082     /**
0083      * Accessors and modifiers.
0084      */
0085     G4double GetRadius() const;
0086     void SetRadius(G4double newRmax);
0087     G4double GetRadialTolerance() const;
0088 
0089     /**
0090      * Returns the type ID, "G4Orb" of the solid.
0091      */
0092     inline G4GeometryType GetEntityType() const override;
0093 
0094     /**
0095      * Computes the bounding limits of the solid.
0096      *  @param[out] pMin The minimum bounding limit point.
0097      *  @param[out] pMax The maximum bounding limit point.
0098      */
0099     void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override;
0100 
0101     /**
0102      * Calculates the minimum and maximum extent of the solid, when under the
0103      * specified transform, and within the specified limits.
0104      *  @param[in] pAxis The axis along which compute the extent.
0105      *  @param[in] pVoxelLimit The limiting space dictated by voxels.
0106      *  @param[in] pTransform The internal transformation applied to the solid.
0107      *  @param[out] pMin The minimum extent value.
0108      *  @param[out] pMax The maximum extent value.
0109      *  @returns True if the solid is intersected by the extent region.
0110      */
0111     G4bool CalculateExtent(const EAxis pAxis,
0112                            const G4VoxelLimits& pVoxelLimit,
0113                            const G4AffineTransform& pTransform,
0114                                  G4double& pmin, G4double& pmax) const override;
0115 
0116     /**
0117      * Returns a generated polyhedron as graphical representations.
0118      */
0119     G4Polyhedron* CreatePolyhedron() const override;
0120 
0121     /**
0122      * Copy constructor and assignment operator.
0123      */
0124     G4UOrb(const G4UOrb& rhs);
0125     G4UOrb& operator=(const G4UOrb& rhs); 
0126 };
0127 
0128 // --------------------------------------------------------------------
0129 // Inline methods
0130 // --------------------------------------------------------------------
0131 
0132 inline G4GeometryType G4UOrb::GetEntityType() const
0133 {
0134   return "G4Orb";
0135 }
0136 
0137 #endif  // G4GEOM_USE_USOLIDS
0138 
0139 #endif