BDSIM
BDSIM is a Geant4 extension toolkit for simulation of particle transport in accelerator beamlines.
|
A wrapper to achieve 2D reflection of a minimal dipole field solve. More...
#include <BDSArray2DCoordsRDipole.hh>
Public Member Functions | |
BDSArray2DCoordsRDipole (BDSArray2DCoords *arrayIn) | |
Wrap an existing BDSArray2DCoords instance. | |
virtual std::ostream & | Print (std::ostream &out) const |
virtual G4bool | OutsideCoords (G4double x, G4double y, G4double z, G4double t) const |
Overridden from BDSArray4DCoords. | |
virtual G4double | ArrayCoordsFromX (G4double x) const |
Overridden from BDSArray4DCoords. | |
virtual G4double | ArrayCoordsFromY (G4double y) const |
Overridden from BDSArray4DCoords. | |
virtual G4int | NearestX (G4double x) const |
Overridden from BDSArray4DCoords. | |
virtual G4int | NearestY (G4double y) const |
Overridden from BDSArray4DCoords. | |
virtual const BDSFieldValue & | GetConst (G4int x, G4int y, G4int z=0, G4int t=0) const |
Overridden from BDSArray4D. | |
virtual G4bool | Outside (G4int x, G4int y, G4int z, G4int t) const |
Overridden from BDSArray4D. | |
![]() | |
BDSArray2DCoords ()=delete | |
BDSArray2DCoords (G4int nX, G4int nY, G4double xMinIn, G4double xMaxIn, G4double yMinIn, G4double yMaxIn, BDSDimensionType xDimensionIn=BDSDimensionType::x, BDSDimensionType yDimensionIn=BDSDimensionType::y) | |
virtual void | ExtractSection2x2 (G4double x, G4double y, BDSFieldValue(&localData)[2][2], G4double &xFrac, G4double &yFrac) const |
Extract 2x2 points lying around coordinate x. | |
virtual void | ExtractSection4x4 (G4double x, G4double y, BDSFieldValue(&localData)[4][4], G4double &xFrac, G4double &yFrac) const |
Extract 4x4 points lying around coordinate x. | |
virtual BDSFieldValue | ExtractNearest (G4double x, G4double y=0, G4double z=0, G4double t=0) const |
Extract nearest field value from array. z,t ignored but required for overload. | |
virtual BDSExtent | Extent () const |
![]() | |
BDSArray3DCoords ()=delete | |
BDSArray3DCoords (G4int nX, G4int nY, G4int nZ, G4double xMinIn, G4double xMaxIn, G4double yMinIn, G4double yMaxIn, G4double zMinIn, G4double zMaxIn, BDSDimensionType xDimensionIn=BDSDimensionType::x, BDSDimensionType yDimensionIn=BDSDimensionType::y, BDSDimensionType zDimensionIn=BDSDimensionType::z) | |
virtual void | ExtractSection2x2x2 (G4double x, G4double y, G4double z, BDSFieldValue(&localData)[2][2][2], G4double &xFrac, G4double &yFrac, G4double &zFrac) const |
Extract 2x2x2 points lying around coordinate x. | |
virtual void | ExtractSection4x4x4 (G4double x, G4double y, G4double z, BDSFieldValue(&localData)[4][4][4], G4double &xFrac, G4double &yFrac, G4double &zFrac) const |
Extract 4x4x4 points lying around coordinate x. | |
virtual BDSFieldValue | ExtractNearest (G4double x, G4double y=0, G4double z=0, G4double t=0) const |
Extract nearest field value from array. t ignored but required for overload. | |
![]() | |
BDSArray4DCoords ()=delete | |
BDSArray4DCoords (G4int nXIn, G4int nYIn, G4int nZIn, G4int nTIn, G4double xMinIn, G4double xMaxIn, G4double yMinIn, G4double yMaxIn, G4double zMinIn, G4double zMaxIn, G4double tMinIn, G4double tMaxIn, BDSDimensionType xDimensionIn=BDSDimensionType::x, BDSDimensionType yDimensionIn=BDSDimensionType::y, BDSDimensionType zDimensionIn=BDSDimensionType::z, BDSDimensionType tDimensionIn=BDSDimensionType::t) | |
G4double | SmallestSpatialStep () const |
virtual G4bool | OutsideCoords (G4double x, G4double y, G4double z, G4double t) const |
Whether the spatial coordinates lie outside the range of the array or not. | |
virtual void | OutsideCoordsWarn (G4double x, G4double y, G4double z, G4double t) const |
BDSFourVector< G4double > | ArrayCoordsFromXYZT (G4double x, G4double y, G4double z, G4double t) const |
Convenience function to easily get array coords in all dimensions at once. | |
BDSFourVector< G4double > | XYZTFromArrayCoords (G4double x, G4double y, G4double z, G4double t) const |
BDSFourVector< G4int > | NearestXYZT (G4double x, G4double y, G4double z, G4double t) const |
Return the index of the nearest field value in space. | |
BDSFourVector< G4int > | NearestXYZT (const BDSFourVector< G4double > &pos) const |
Return the index of the nearest field value in space via four-vector. | |
virtual void | ExtractSection2x2x2x2 (G4double x, G4double y, G4double z, G4double t, BDSFieldValue(&localData)[2][2][2][2], G4double &xFrac, G4double &yFrac, G4double &zFrac, G4double &tFrac) const |
Extract 2x2x2x2 points lying around coordinate x. | |
virtual void | ExtractSection4x4x4x4 (G4double x, G4double y, G4double z, G4double t, BDSFieldValue(&localData)[4][4][4][4], G4double &xFrac, G4double &yFrac, G4double &zFrac, G4double &tFrac) const |
Extract 4x4x4x4 points lying around coordinate x. | |
virtual BDSFieldValue | ExtractNearest (G4double x, G4double y=0, G4double z=0, G4double t=0) const |
Extract nearest field value from array. | |
virtual std::ostream & | Print (std::ostream &out) const |
virtual BDSExtent | Extent () const |
Return the SPATIAL (only) extent of this field without any offset. Ignores time. | |
G4double | XMin () const |
G4double | YMin () const |
G4double | ZMin () const |
G4double | TMin () const |
G4double | XMax () const |
G4double | YMax () const |
G4double | ZMax () const |
G4double | TMax () const |
virtual G4bool | TimeVarying () const |
G4int | DimensionIndex (BDSDimensionType spatialDimension) const |
std::array< G4int, 4 > | ArrayToSpatialDimensionIndices () const |
Access all indices at once. | |
G4double | XStep () const |
The distance in spatial coordinates between any two points in the array. | |
G4double | YStep () const |
The distance in spatial coordinates between any two points in the array. | |
G4double | ZStep () const |
The distance in spatial coordinates between any two points in the array. | |
G4double | TStep () const |
The distance in spatial coordinates between any two points in the array. | |
virtual G4double | ArrayCoordsFromZ (G4double z) const |
Not much point in being both virtual and inline (in our use case) but has to be virtual. | |
virtual G4double | ArrayCoordsFromT (G4double t) const |
Not much point in being both virtual and inline (in our use case) but has to be virtual. | |
void | ArrayCoordsFromXY (G4double &x, G4double &xArr, G4double &y, G4double &yArr) const |
Utility version to forward to individual function. | |
void | ArrayCoordsFromXYZ (G4double &x, G4double &xArr, G4double &y, G4double &yArr, G4double &z, G4double &zArr) const |
Utility version to forward to individual function. | |
void | ArrayCoordsFromXYZT (G4double &x, G4double &xArr, G4double &y, G4double &yArr, G4double &z, G4double &zArr, G4double &t, G4double &tArr) const |
Utility version to forward to individual function. | |
G4double | XFromArrayCoords (G4double xCoord) const |
Return spatial value from a continuous array coordinate in one dimension. | |
G4double | YFromArrayCoords (G4double yCoord) const |
Return spatial value from a continuous array coordinate in one dimension. | |
G4double | ZFromArrayCoords (G4double zCoord) const |
Return spatial value from a continuous array coordinate in one dimension. | |
G4double | TFromArrayCoords (G4double tCoord) const |
Return spatial value from a continuous array coordinate in one dimension. | |
virtual G4int | NearestZ (G4double z) const |
Not much point in being both virtual and inline (in our use case) but has to be virtual. | |
virtual G4int | NearestT (G4double t) const |
Not much point in being both virtual and inline (in our use case) but has to be virtual. | |
BDSDimensionType | FirstDimension () const |
Accessor for each dimension label. e.g. array 'x' = spatial z. | |
BDSDimensionType | SecondDimension () const |
Accessor for each dimension label. e.g. array 'x' = spatial z. | |
BDSDimensionType | ThirdDimension () const |
Accessor for each dimension label. e.g. array 'x' = spatial z. | |
BDSDimensionType | FourthDimension () const |
Accessor for each dimension label. e.g. array 'x' = spatial z. | |
![]() | |
BDSArray4D ()=delete | |
BDSArray4D (G4int nXIn, G4int nYIn, G4int nZIn, G4int nTIn) | |
virtual BDSFieldValue & | operator() (G4int x, G4int y=0, G4int z=0, G4int t=0) |
Setter & (technically, a non-const) accessor. | |
const BDSFieldValue & | operator() (BDSFourVector< G4int > &pos) |
Convenience accessor to operator(). | |
virtual const BDSFieldValue & | GetConst (G4int x, G4int y=0, G4int z=0, G4int t=0) const |
virtual const BDSFieldValue & | operator() (G4int x, G4int y=0, G4int z=0, G4int t=0) const |
Convenience shortcut to GetConst(). | |
const BDSFieldValue & | operator() (const BDSFourVector< G4int > &pos) const |
Convenience accessor to operator(). | |
virtual G4bool | Outside (G4int x, G4int y, G4int z, G4int t) const |
Return whether the indices are valid and lie within the array boundaries or not. | |
virtual void | OutsideWarn (G4int x, G4int y, G4int z, G4int t) const |
Use Outside() but warn and exit if the coordinates requested are outside the array. | |
virtual std::ostream & | Print (std::ostream &out) const |
G4int | NX () const |
Access the number of elements in a given dimension. | |
G4int | NY () const |
Access the number of elements in a given dimension. | |
G4int | NZ () const |
Access the number of elements in a given dimension. | |
G4int | NT () const |
Access the number of elements in a given dimension. | |
BDSFourVector< G4int > | NXYZT () const |
Access the number of elements in a given dimension. | |
Private Attributes | |
BDSFieldValue | returnValue |
Friends | |
std::ostream & | operator<< (std::ostream &out, BDSArray2DCoordsRDipole const &a) |
Delegate function to call polymorphic Print(). | |
Additional Inherited Members | |
![]() | |
void | BuildDimensionIndex () |
Build up an array of ints based on the order of dimensions stored in the array. | |
![]() | |
G4double | smallestSpatialStep |
BDSDimensionType | xDimension |
BDSDimensionType | yDimension |
BDSDimensionType | zDimension |
BDSDimensionType | tDimension |
std::array< G4int, 4 > | dimensions |
G4bool | timeVarying |
G4double | xMin |
Dimension parameter - protected for derived class access. | |
G4double | xMax |
Dimension parameter - protected for derived class access. | |
G4double | yMin |
Dimension parameter - protected for derived class access. | |
G4double | yMax |
Dimension parameter - protected for derived class access. | |
G4double | zMin |
Dimension parameter - protected for derived class access. | |
G4double | zMax |
Dimension parameter - protected for derived class access. | |
G4double | tMin |
Dimension parameter - protected for derived class access. | |
G4double | tMax |
Dimension parameter - protected for derived class access. | |
G4double | xStep |
Dimension parameter - protected for derived class access. | |
G4double | yStep |
Dimension parameter - protected for derived class access. | |
G4double | zStep |
Dimension parameter - protected for derived class access. | |
G4double | tStep |
Dimension parameter - protected for derived class access. | |
![]() | |
BDSFieldValue | defaultValue |
Need to store a default value so it can be return by reference. | |
const G4int | nX |
Dimension. | |
const G4int | nY |
Dimension. | |
const G4int | nZ |
Dimension. | |
const G4int | nT |
Dimension. | |
A wrapper to achieve 2D reflection of a minimal dipole field solve.
This allows a smaller array representing the positive quadrant in x,y to be reflected to represent a quadrupole.
* y * ∧ * | * ∧ | ∧ * | | | original * <--- | ---> * | * -------------------> x * ∧ | ∧ * | | | * ---> | <--- * | * | *
This owns the array it wraps.
This makes an array look 4 times bigger than it is - ie 2x as big in x and y. The array coordinates are correspondingly shifted. What would've been (0,0) in a 100x100 array will now be at index (101,101).
This is reflected about 0,0 and can only be so given the implementation.
Some interfaces are overloaded and some aren't as are required to be (NX for example). The ostream << writes both the raw array and the reflected version too.
Note, by return a reference to a non-const member returnValue that may be updated by another query, thread safety could be an issue.
Definition at line 68 of file BDSArray2DCoordsRDipole.hh.
|
explicit |
Wrap an existing BDSArray2DCoords instance.
Definition at line 29 of file BDSArray2DCoordsRDipole.cc.
|
inlinevirtual |
Definition at line 74 of file BDSArray2DCoordsRDipole.hh.
|
virtual |
Overridden from BDSArray4DCoords.
Reimplemented from BDSArray4DCoords.
Definition at line 46 of file BDSArray2DCoordsRDipole.cc.
References BDSArray4DCoords::xMax, and BDSArray4DCoords::xStep.
|
virtual |
Overridden from BDSArray4DCoords.
Reimplemented from BDSArray4DCoords.
Definition at line 52 of file BDSArray2DCoordsRDipole.cc.
References BDSArray4DCoords::yMax, and BDSArray4DCoords::yStep.
|
virtual |
Overridden from BDSArray4D.
Reimplemented from BDSArray4D.
Definition at line 67 of file BDSArray2DCoordsRDipole.cc.
References BDSArray4D::defaultValue, BDSArray4D::GetConst(), BDSArray4D::nX, BDSArray4D::nY, Outside(), returnValue, BDSThreeVector< T >::x(), and BDSThreeVector< T >::y().
Referenced by Print().
|
virtual |
Overridden from BDSArray4DCoords.
Reimplemented from BDSArray4DCoords.
Definition at line 57 of file BDSArray2DCoordsRDipole.cc.
References BDSArray4DCoords::xMax, and BDSArray4DCoords::xStep.
|
virtual |
Overridden from BDSArray4DCoords.
Reimplemented from BDSArray4DCoords.
Definition at line 62 of file BDSArray2DCoordsRDipole.cc.
References BDSArray4DCoords::yMax, and BDSArray4DCoords::yStep.
|
virtual |
Overridden from BDSArray4D.
Reimplemented from BDSArray4D.
Definition at line 125 of file BDSArray2DCoordsRDipole.cc.
References BDSArray4D::nT, BDSArray4D::nX, BDSArray4D::nY, and BDSArray4D::nZ.
Referenced by GetConst().
|
virtual |
Overridden from BDSArray4DCoords.
Reimplemented from BDSArray4DCoords.
Definition at line 34 of file BDSArray2DCoordsRDipole.cc.
References BDSArray4DCoords::tMax, BDSArray4DCoords::xMax, BDSArray4DCoords::yMax, and BDSArray4DCoords::zMax.
|
virtual |
This prints out the raw underlying data, then the reflected version as would normally be queried.
Reimplemented from BDSArray4DCoords.
Definition at line 137 of file BDSArray2DCoordsRDipole.cc.
References GetConst(), BDSArray4D::nT, BDSArray4D::nX, BDSArray4D::nY, BDSArray4D::nZ, and BDSArray4D::Print().
|
friend |
Delegate function to call polymorphic Print().
Definition at line 157 of file BDSArray2DCoordsRDipole.cc.
|
mutableprivate |
Must return by reference and the true data value may have to be reflected in one or more dimensions. Copy to this and return reference to it.
Definition at line 111 of file BDSArray2DCoordsRDipole.hh.
Referenced by GetConst().