8#include "gsl/gsl_interp.h"
9#include "gsl/gsl_spline.h"
10#include "gsl/gsl_fft_real.h"
18 FourCoefs_m(nullptr) {
21 int skippedValues = 0;
22 std::string tmpString;
30 bool parsing_passed =
true;
32 parsing_passed = interpretLine<std::string, int>(file,
36 parsing_passed = interpretLine<std::string, int, std::string>(file,
42 if (tmpString !=
"TRUE" &&
45 "The third string on the first line of 1D field "
46 "maps has to be either TRUE or FALSE");
51 parsing_passed = parsing_passed &&
53 parsing_passed = parsing_passed &&
54 interpretLine<double, double>(file,
zbegin_m, tmpDouble);
57 while(!file.eof() && parsing_passed) {
58 parsing_passed = interpretLine<double, double>(file,
zend_m, tmpDouble,
false);
59 if (
zend_m - tmpDouble2 > 1
e-10) {
61 }
else if (parsing_passed) {
69 if (!parsing_passed && !file.eof()) {
73 "An error occured when reading the fieldmap '" +
Filename_m +
"'");
97 bool parsing_passed =
true;
99 std::string tmpString;
108 gsl_spline *Ez_interpolant = gsl_spline_alloc(gsl_interp_cspline,
num_gridpz_m);
109 gsl_interp_accel *Ez_accel = gsl_interp_accel_alloc();
111 gsl_fft_real_wavetable *
real = gsl_fft_real_wavetable_alloc(2 *
num_gridpz_m);
112 gsl_fft_real_workspace *work = gsl_fft_real_workspace_alloc(2 *
num_gridpz_m);
123 parsing_passed = interpretLine<double, double>(in, zvals[i], RealValues[i]);
126 if (zvals[i] - tmpDouble > 1
e-10) {
127 if (
std::abs(RealValues[i]) > Ez_max) {
130 tmpDouble = zvals[i];
136 gsl_spline_init(Ez_interpolant, zvals, RealValues,
num_gridpz_m);
143 RealValues[ii] = gsl_spline_eval(Ez_interpolant, z, Ez_accel);
149 RealValues[i] = RealValues[ii];
159 for (
int i = 1; i < 2 *
accuracy_m - 1; ++ i) {
163 gsl_spline_free(Ez_interpolant);
164 gsl_interp_accel_free(Ez_accel);
166 gsl_fft_real_workspace_free(work);
167 gsl_fft_real_wavetable_free(
real);
187 const double RR2 =
R(0) *
R(0) +
R(1) *
R(1);
199 double somefactor = 1.0;
200 double coskzl =
cos(kz * l);
201 double sinkzl =
sin(kz * l);
203 somefactor *= somefactor_base;
205 somefactor *= somefactor_base;
207 somefactor *= somefactor_base;
214 const double EfieldR = -(ezp / 2. + fp * RR2);
217 E(0) += EfieldR *
R(0);
218 E(1) += EfieldR *
R(1);
219 E(2) += ez + 4. * f * RR2;
220 B(0) += -BfieldT *
R(1);
221 B(1) += BfieldT *
R(0);
265 std::string tmpString;
269 interpretLine<std::string, int>(in, tmpString, tmpInt);
270 interpretLine<double>(in, tmpDouble);
273 interpretLine<double, double>(in, F[i].first, F[i].second);
274 if (
std::abs(F[i].second) > Ez_max) {
281 F[i].second /= Ez_max;
FLieGenerator< T, N > real(const FLieGenerator< std::complex< T >, N > &)
Take real part of a complex generator.
Tps< T > cos(const Tps< T > &x)
Cosine.
Tps< T > sin(const Tps< T > &x)
Sine.
PETE_TUTree< FnAbs, typename T::PETE_Expr_t > abs(const PETE_Expr< T > &l)
Inform & endl(Inform &inf)
Inform & level3(Inform &inf)
constexpr double two_pi
The value of.
constexpr double e
The value of.
constexpr double c
The velocity of light in m/s.
constexpr double pi
The value of.
constexpr double Vpm2MVpm
std::string toUpper(const std::string &str)
virtual bool getFieldstrength(const Vector_t &R, Vector_t &E, Vector_t &B) const
virtual bool getFieldDerivative(const Vector_t &R, Vector_t &E, Vector_t &B, const DiffDirection &dir) const
virtual void setFrequency(double freq)
virtual double getFrequency() const
virtual void getFieldDimensions(double &zBegin, double &zEnd) const
virtual void getOnaxisEz(std::vector< std::pair< double, double > > &F)
double *__restrict__ FourCoefs_m
virtual void getInfo(Inform *)
Astra1DDynamic(std::string aFilename)
void disableFieldmapWarning()
static std::string typeset_msg(const std::string &msg, const std::string &title)
void getLine(std::ifstream &in, std::string &buffer)