36 :feXoffset(exOffset),feYoffset(eyOffset),feZoffset(ezOffset),einvertX(false),einvertY(false),einvertZ(false)
42 G4cout <<
"\n-----------------------------------------------------------"
43 <<
"\n Electric field"
44 <<
"\n-----------------------------------------------------------";
46 G4cout <<
"\n ---> " "Reading the field grid from " << filename <<
" ... " << endl;
49 ifstream
file( filename );
53 file.getline(ebuffer,256);
58 G4cout <<
" [ Number of values x,y,z: "
59 <<
Enx <<
" " <<
Eny <<
" " << Enz <<
" ] "
67 for (ix=0; ix<
Enx; ix++) {
71 for (iy=0; iy<
Eny; iy++) {
85 for (iz=0; iz<
Enz; iz++) {
86 for (iy=0; iy<
Eny; iy++) {
87 for (ix=0; ix<
Enx; ix++) {
88 file >> Exval >> Eyval >> Ezval >> Ex >> Ey >> Ez;
90 if ( ix==0 && iy==0 && iz==0 ) {
91 Eminx = Exval * ElenUnit;
92 Eminy = Eyval * ElenUnit;
93 Eminz = Ezval * ElenUnit;
95 xEField[ix][iy][iz] = Ex * EfieldUnit;
96 yEField[ix][iy][iz] = Ey * EfieldUnit;
97 zEField[ix][iy][iz] = Ez * EfieldUnit;
104 Emaxx = Exval * ElenUnit;
105 Emaxy = Eyval * ElenUnit;
106 Emaxz = Ezval * ElenUnit;
108 G4cout <<
"\n ---> ... done reading " << endl;
111 G4cout <<
" ---> assumed the order: x, y, z, Ex, Ey, Ez "
112 <<
"\n ---> Min values x,y,z: "
114 <<
"\n ---> Max values x,y,z: "
116 <<
"\n ---> The field will be offset in x by " << exOffset/
cm <<
" cm "
117 <<
"\n ---> The field will be offset in y by " << eyOffset/
cm <<
" cm "
118 <<
"\n ---> The field will be offset in z by " << ezOffset/
cm <<
" cm " << endl;
124 G4cout <<
"\nAfter reordering if neccesary"
125 <<
"\n ---> Min values x,y,z: "
127 <<
" \n ---> Max values x,y,z: "
133 G4cout <<
"\n ---> Dif values x,y,z (range): "
135 <<
"\n-----------------------------------------------------------" << endl;
151 if (
einvertX) { Exfraction = 1 - Exfraction;}
152 if (
einvertY) { Eyfraction = 1 - Eyfraction;}
153 if (
einvertZ) { Ezfraction = 1 - Ezfraction;}
157 G4double exdindex, eydindex, ezdindex;
161 G4double exlocal = ( std::modf(Exfraction*(
Enx-1), &exdindex));
162 G4double eylocal = ( std::modf(Eyfraction*(
Eny-1), &eydindex));
163 G4double ezlocal = ( std::modf(Ezfraction*(
Enz-1), &ezdindex));
167 G4int exindex =
static_cast<G4int>(std::floor(exdindex));
168 G4int eyindex =
static_cast<G4int>(std::floor(eydindex));
169 G4int ezindex =
static_cast<G4int>(std::floor(ezdindex));
171 if ((exindex < 0) || (exindex >=
Enx - 1) ||
172 (eyindex < 0) || (eyindex >=
Eny - 1) ||
173 (ezindex < 0) || (ezindex >=
Enz - 1))
204 xEField[exindex ][eyindex ][ezindex ] * (1-exlocal) * (1-eylocal) * (1-ezlocal) +
205 xEField[exindex ][eyindex ][ezindex+1] * (1-exlocal) * (1-eylocal) * ezlocal +
206 xEField[exindex ][eyindex+1][ezindex ] * (1-exlocal) * eylocal * (1-ezlocal) +
207 xEField[exindex ][eyindex+1][ezindex+1] * (1-exlocal) * eylocal * ezlocal +
208 xEField[exindex+1][eyindex ][ezindex ] * exlocal * (1-eylocal) * (1-ezlocal) +
209 xEField[exindex+1][eyindex ][ezindex+1] * exlocal * (1-eylocal) * ezlocal +
210 xEField[exindex+1][eyindex+1][ezindex ] * exlocal * eylocal * (1-ezlocal) +
211 xEField[exindex+1][eyindex+1][ezindex+1] * exlocal * eylocal * ezlocal ;
213 yEField[exindex ][eyindex ][ezindex ] * (1-exlocal) * (1-eylocal) * (1-ezlocal) +
214 yEField[exindex ][eyindex ][ezindex+1] * (1-exlocal) * (1-eylocal) * ezlocal +
215 yEField[exindex ][eyindex+1][ezindex ] * (1-exlocal) * eylocal * (1-ezlocal) +
216 yEField[exindex ][eyindex+1][ezindex+1] * (1-exlocal) * eylocal * ezlocal +
217 yEField[exindex+1][eyindex ][ezindex ] * exlocal * (1-eylocal) * (1-ezlocal) +
218 yEField[exindex+1][eyindex ][ezindex+1] * exlocal * (1-eylocal) * ezlocal +
219 yEField[exindex+1][eyindex+1][ezindex ] * exlocal * eylocal * (1-ezlocal) +
220 yEField[exindex+1][eyindex+1][ezindex+1] * exlocal * eylocal * ezlocal ;
222 zEField[exindex ][eyindex ][ezindex ] * (1-exlocal) * (1-eylocal) * (1-ezlocal) +
223 zEField[exindex ][eyindex ][ezindex+1] * (1-exlocal) * (1-eylocal) * ezlocal +
224 zEField[exindex ][eyindex+1][ezindex ] * (1-exlocal) * eylocal * (1-ezlocal) +
225 zEField[exindex ][eyindex+1][ezindex+1] * (1-exlocal) * eylocal * ezlocal +
226 zEField[exindex+1][eyindex ][ezindex ] * exlocal * (1-eylocal) * (1-ezlocal) +
227 zEField[exindex+1][eyindex ][ezindex+1] * exlocal * (1-eylocal) * ezlocal +
228 zEField[exindex+1][eyindex+1][ezindex ] * exlocal * eylocal * (1-ezlocal) +
229 zEField[exindex+1][eyindex+1][ezindex+1] * exlocal * eylocal * ezlocal ;
HadrontherapyElectricTabulatedField3D(const char *filename, G4double exOffset, G4double eyOffset, G4double ezOffset)
Float_t y1[n_points_granero]
Float_t x1[n_points_granero]
vector< vector< vector< G4double > > > xEField
static constexpr double m
#define G4MUTEX_INITIALIZER
void GetFieldValue(const G4double Epoint[4], G4double *Efield) const
vector< vector< vector< G4double > > > yEField
G4GLOB_DLL std::ostream G4cout
static constexpr double cm
vector< vector< vector< G4double > > > zEField
static constexpr double volt