#include <RMGVertexConfinement.hh>

Public Member Functions | |
| SampleableObject (const SampleableObject &)=default | |
| SampleableObject (G4VPhysicalVolume *physvol, G4RotationMatrix rot, G4ThreeVector trans, G4VSolid *solid, bool is_native_sampleable=false, bool on_surface=false) | |
| SampleableObject constructor. | |
| bool | IsInside (const G4ThreeVector &vertex) const |
| Check if the vertex is inside the solid. | |
| bool | Sample (G4ThreeVector &vertex, size_t max_attempts, bool force_containment_check, size_t &n_trials) const |
| Generate a sample from the solid. | |
| bool | GenerateSurfacePoint (G4ThreeVector &vertex, size_t max_attempts, size_t max_intersections) const |
| Generate a point on the surface of the solid. | |
| std::vector< G4ThreeVector > | GetIntersections (G4ThreeVector start, G4ThreeVector dir) const |
Get the number of intersections between the solid and the line starting at start with direction dir. | |
| void | GetDirection (G4ThreeVector &dir, G4ThreeVector &pos) const |
| Get a position and direction for the generic surface sampling algorithm. | |
| void | RecalcMass (int z, int n) |
Public Attributes | |
| G4VPhysicalVolume * | physical_volume = nullptr |
| G4VSolid * | sampling_solid = nullptr |
| G4RotationMatrix | rotation |
| G4ThreeVector | translation |
| double | volume = -1 |
| double | mass = -1 |
| double | surface = -1 |
| bool | surface_sample = false |
| bool | native_sample = false |
| size_t | max_num_intersections = 0 |
An object which we can generate position samples in. Based on either a G4VPhysicalVolume or geometrical volume defined by a G4VSolid . The sampling can be performed either on the surface or in the volume of the solid.
This structure must contain at least a non-null pointer, between the physical_volume and sampling_solid arguments. The idea is that:
| RMGVertexConfinement::SampleableObject::SampleableObject | ( | G4VPhysicalVolume * | physvol, |
| G4RotationMatrix | rot, | ||
| G4ThreeVector | trans, | ||
| G4VSolid * | solid, | ||
| bool | is_native_sampleable = false, | ||
| bool | on_surface = false ) |
SampleableObject constructor.
| physvol | The physical volume. |
| rot | A rotation matrix for the sampling solid. |
| trans | A translation vector for the sampling solid. |
| solid | A solid for geometrical volume sampling or for generating candidate points or rejection sampling. |
| is_native_sampleable | A flag of whether the solid is natively sampeable. |
| on_surface | A flag of whether the solid should be sampled on the surface. |
|
nodiscard |
Generate a point on the surface of the solid.
This follows the algorithm from https://arxiv.org/abs/0802.2960.
| vertex | The sampled vertex, |
| max_attempts | The maximum number of attempts to find a valid vertex. |
| max_intersections | The maximum number of intersections possible for the solid, can be an overestimate. |
| void RMGVertexConfinement::SampleableObject::GetDirection | ( | G4ThreeVector & | dir, |
| G4ThreeVector & | pos ) const |
Get a position and direction for the generic surface sampling algorithm.
This generates a point on a bounding sphere, then shifts by some impact parameter, following the algorithm from https://arxiv.org/abs/0802.2960. This produces a uniform and isotropic flux inside the bounding sphere.
| dir | The direction vector for the point. |
| pos | The initial position for the point. |
|
nodiscard |
Get the number of intersections between the solid and the line starting at start with direction dir.
This is used in the generic surface sampling algorithm. This function makes use of the methods GetDistanceToIn(p,v) and GetDistanceToOut(p,v) of G4VSolid . It continually looks for the distance to the next boundary (along the line) until this becomes zero indicating there are no more intersections.
| start | The starting vector of the line, note this should be outside the solid. |
| dir | The direction vector. |
|
nodiscard |
Check if the vertex is inside the solid.
| vertex | The sampled vertex. |
|
nodiscard |
Generate a sample from the solid.
Depending on if the solid is a basic one either sample natively, or using rejection sampling. Either samples the volume or the surface depending on the surface_sample member.
| vertex | The sampled vertex. |
| max_attempts | The maximum number of candidate vertices for rejection sampling. |
| force_containment_check | Whether to force a check on where the point is inside the solid. |
| n_trials | The total number of trials performed. |