Program Listing for File UF23Field.h
↰ Return to documentation for file (include/crpropa/magneticField/UF23Field.h)
#ifndef _UF23Field_h_
#define _UF23Field_h_
#include <vector>
#include "crpropa/magneticField/MagneticField.h"
namespace crpropa {
class UF23Field : public MagneticField {
public:
enum ModelType {
base,
neCL,
expX,
spur,
cre10,
synCG,
twistX,
nebCor
};
public:
UF23Field(const ModelType mt);
UF23Field() = delete;
Vector3d getField(const Vector3d& pos) const;
private:
Vector3d operator()(const Vector3d& posInKpc) const;
enum EPar {
eDiskB1 = 0,
eDiskB2,
eDiskB3,
eDiskH,
eDiskPhase1,
eDiskPhase2,
eDiskPhase3,
eDiskPitch,
eDiskW,
ePoloidalA,
ePoloidalB,
ePoloidalP,
ePoloidalR,
ePoloidalW,
ePoloidalZ,
ePoloidalXi,
eSpurCenter,
eSpurLength,
eSpurWidth,
eStriation,
eToroidalBN,
eToroidalBS,
eToroidalR,
eToroidalW,
eToroidalZ,
eTwistingTime,
eNpar
};
const ModelType fModelType;
const double fMaxRadiusSquared;
// parameters are stored in array
double fParameters[eNpar] = { 0 };
// references to parameters for convience
double& fDiskB1 = fParameters[eDiskB1];
double& fDiskB2 = fParameters[eDiskB2];
double& fDiskB3 = fParameters[eDiskB3];
double& fDiskH = fParameters[eDiskH];
double& fDiskPhase1 = fParameters[eDiskPhase1];
double& fDiskPhase2 = fParameters[eDiskPhase2];
double& fDiskPhase3 = fParameters[eDiskPhase3];
double& fDiskPitch = fParameters[eDiskPitch];
double& fDiskW = fParameters[eDiskW];
double& fPoloidalA = fParameters[ePoloidalA];
double& fPoloidalB = fParameters[ePoloidalB];
double& fPoloidalP = fParameters[ePoloidalP];
double& fPoloidalR = fParameters[ePoloidalR];
double& fPoloidalW = fParameters[ePoloidalW];
double& fPoloidalZ = fParameters[ePoloidalZ];
double& fPoloidalXi = fParameters[ePoloidalXi];
double& fSpurCenter = fParameters[eSpurCenter];
double& fSpurLength = fParameters[eSpurLength];
double& fSpurWidth = fParameters[eSpurWidth];
double& fStriation = fParameters[eStriation];
double& fToroidalBN = fParameters[eToroidalBN];
double& fToroidalBS = fParameters[eToroidalBS];
double& fToroidalR = fParameters[eToroidalR];
double& fToroidalW = fParameters[eToroidalW];
double& fToroidalZ = fParameters[eToroidalZ];
double& fTwistingTime = fParameters[eTwistingTime];
// some pre-calculated derived parameter values
double fSinPitch = 0;
double fCosPitch = 0;
double fTanPitch = 0;
Vector3d getDiskField(const Vector3d& pos) const;
Vector3d getHaloField(const Vector3d& pos) const;
Vector3d getSpiralField(const double x, const double y, const double z) const;
Vector3d getSpurField(const double x, const double y, const double z) const;
Vector3d getToroidalHaloField(const double x, const double y, const double z) const;
Vector3d getPoloidalHaloField(const double x, const double y, const double z) const;
Vector3d getTwistedHaloField(const double x, const double y, const double z) const;
};
} // namespace crpropa
#endif