18#include "BDSArray3DCoordsTransformed.hh"
19#include "BDSArrayOperatorIndex.hh"
20#include "BDSArrayOperatorValue.hh"
21#include "BDSFieldValue.hh"
33 indexOperator(indexOperatorIn),
34 valueOperator(valueOperatorIn),
38BDSArray3DCoordsTransformed::~BDSArray3DCoordsTransformed()
50 G4double& zFrac)
const
52 G4double xArrayCoords, yArrayCoords, zArrayCoords;
54 auto x1 = (G4int)std::floor(xArrayCoords);
55 auto y1 = (G4int)std::floor(yArrayCoords);
56 auto z1 = (G4int)std::floor(zArrayCoords);
57 xFrac = xArrayCoords - x1;
58 yFrac = yArrayCoords - y1;
59 zFrac = zArrayCoords - z1;
61 std::array<G4int, 2> indexArrX = {x1, x1+1};
62 std::array<G4int, 2> indexArrY = {y1, y1+1};
63 std::array<G4int, 2> indexArrZ = {z1, z1+1};
64 G4int indexOriginalX, indexOriginalY, indexOriginalZ, indexTransformedX, indexTransformedY, indexTransformedZ;
65 for (G4int i = 0; i < 2; i++)
67 for (G4int j = 0; j < 2; j++)
69 for (G4int k = 0; k < 2; k++)
71 indexOriginalX = indexArrX[i];
72 indexTransformedX = indexOriginalX;
73 indexOriginalY = indexArrY[j];
74 indexTransformedY = indexOriginalY;
75 indexOriginalZ = indexArrZ[k];
76 indexTransformedZ = indexOriginalZ;
77 indexOperator->
Apply(indexTransformedX, indexTransformedY, indexTransformedZ);
79 localData[i][j][k] = valueOperator->
Apply(v, indexOriginalX, indexOriginalY, indexOriginalZ);
91 G4double& zFrac)
const
96 auto x1 = (G4int)std::floor(xArrayCoords);
97 auto y1 = (G4int)std::floor(yArrayCoords);
98 auto z1 = (G4int)std::floor(zArrayCoords);
99 xFrac = xArrayCoords - x1;
100 yFrac = yArrayCoords - y1;
101 zFrac = zArrayCoords - z1;
103 std::array<G4int, 4> indexArrX = {x1-1, x1, x1+1, x1+2};
104 std::array<G4int, 4> indexArrY = {y1-1, y1, y1+1, y1+2};
105 std::array<G4int, 4> indexArrZ = {z1-1, z1, z1+1, z1+2};
106 G4int indexOriginalX, indexOriginalY, indexOriginalZ, indexTransformedX, indexTransformedY, indexTransformedZ;
107 for (G4int i = 0; i < 4; i++)
109 for (G4int j = 0; j < 4; j++)
111 for (G4int k = 0; k < 4; k++)
113 indexOriginalX = indexArrX[i];
114 indexTransformedX = indexOriginalX;
115 indexOriginalY = indexArrY[j];
116 indexTransformedY = indexOriginalY;
117 indexOriginalZ = indexArrZ[k];
118 indexTransformedZ = indexOriginalZ;
119 indexOperator->
Apply(indexTransformedX, indexTransformedY, indexTransformedZ);
121 localData[i][j][k] = valueOperator->
Apply(v, indexOriginalX, indexOriginalY, indexOriginalZ);
135 G4int indexTransformedX = indexOriginalX;
136 G4int indexTransformedY = indexOriginalY;
137 G4int indexTransformedZ = indexOriginalZ;
138 indexOperator->
Apply(indexTransformedX, indexTransformedY, indexTransformedZ);
140 v = valueOperator->
Apply(v, indexOriginalX, indexOriginalY, indexOriginalZ);
146 out <<
"Spatial limits are the original ones" << G4endl;
147 out <<
"Array index operator: " << indexOperator->
Name() << G4endl;
148 out <<
"Array value operator: " << valueOperator->
Name() << G4endl;
3D array with spatial mapping derived from BDSArray4DCoords.
virtual G4double ArrayCoordsFromX(G4double x) const
Not much point in being both virtual and inline (in our use case) but has to be virtual.
virtual G4int NearestY(G4double y) const
Not much point in being both virtual and inline (in our use case) but has to be virtual.
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 G4int NearestX(G4double x) const
Not much point in being both virtual and inline (in our use case) but has to be virtual.
virtual G4double ArrayCoordsFromY(G4double y) const
Not much point in being both virtual and inline (in our use case) but has to be virtual.
virtual G4int NearestZ(G4double z) const
Not much point in being both virtual and inline (in our use case) but has to be virtual.
void ArrayCoordsFromXYZ(G4double &x, G4double &xArr, G4double &y, G4double &yArr, G4double &z, G4double &zArr) const
Utility version to forward to individual function.
virtual const BDSFieldValue & GetConst(G4int x, G4int y=0, G4int z=0, G4int t=0) const
virtual std::ostream & Print(std::ostream &out) const
Interface for modifying by reference array indices.
virtual G4String Name() const
Supply a name of this operator for feedback to the user in print out.
virtual void Apply(G4int &, G4int &, G4int &, G4int &) const
Interface for modifying field values.
virtual BDSFieldValue Apply(BDSFieldValue v, G4int, G4int=0, G4int=0, G4int=0) const
virtual G4String Name() const
Return a name of the operator for feedback to the user in print out.