19 double scale,
double p,
double mass,
23 double scale,
double p,
double mass);
34 double beta,
double scale,
double p,
47 double hx = scale * field.
normal(1);
48 double ex = hx *
tan(angle);
49 double ey = hx *
tan(angle + map[
PX][0]);
50 map[
PX] += ex * map[
X];
51 map[
PY] -= ey * map[
Y];
59 double hx = scale * field.
normal(1);
60 double ex = hx *
tan(angle);
61 double ey = hx *
tan(angle - map[
PX][0]);
62 map[
PX] += ex * map[
X];
63 map[
PY] -= ey * map[
Y];
68 double scale,
double p,
double mass,
79 double kin = mass / p;
92 map =
ExpMap(- H * length).substitute(map);
97 double scale,
double p,
double mass) {
107 double kin = mass / p;
119 int order = field.
order();
131 kx = kxt + field.
normal(order) / double(order);
132 ky = kyt - field.
skew(order) / double(order);
135 return (x * kx - y * ky);
145 int order = field.
order();
157 kx = kxt + field.
normal(order) / double(order);
158 ky = kyt - field.
skew(order) / double(order);
168 double beta,
double scale,
double p,
171 double kin = mass / p;
172 double refTime = refLength / beta;
178 map[
PX] = euclid.
M(0, 0) * px + euclid.
M(1, 0) * py + euclid.
M(2, 0) * pz;
179 map[
PY] = euclid.
M(0, 1) * px + euclid.
M(1, 1) * py + euclid.
M(2, 1) * pz;
180 pz = euclid.
M(0, 2) * px + euclid.
M(1, 2) * py + euclid.
M(2, 2) * pz;
185 euclid.
M(0, 0) * x + euclid.
M(1, 0) * y - euclid.
M(2, 0) * euclid.
getZ();
187 euclid.
M(0, 1) * x + euclid.
M(1, 1) * y - euclid.
M(2, 1) * euclid.
getZ();
189 euclid.
M(0, 2) * x + euclid.
M(1, 2) * y - euclid.
M(2, 2) * euclid.
getZ();
193 map[
X] = x2 - sByPz * map[
PX];
194 map[
Y] = y2 - sByPz * map[
PY];
195 map[
T] += pt * (refTime / E + sByPz);
double getX() const
Get displacement.
double normal(int) const
Get component.
double getZ() const
Get displacement.
Tps< T > tan(const Tps< T > &x)
Tangent.
double M(int row, int col) const
Get component.
Series_t getHamiltonian(const BMultipoleField &field, double beta, double scale, double p, double mass)
FVps< double, 6 > getTransformMap(const Euclid3D &euclid, double refLength, double beta, double scale, double p, double mass, FVps< double, 6 > map)
double skew(int) const
Get component.
Series_t getMultipoleMap(const BMultipoleField &)
Construct the vector potential for a Rbend.
Displacement and rotation in space.
bool isIdentity() const
Test for identity.
FVps< T, N > ExpMap(const FTps< T, N > &H, int trunc=FTps< T, N >::EXACT)
Build the exponential series.
FVps< double, 6 > getBodyMap(const BMultipoleField &field, double length, double beta, double scale, double p, double mass, FVps< double, 6 > map)
FTps< double, 6 > Series_t
Tps< T > sqrt(const Tps< T > &x)
Square root.
The magnetic field of a multipole.
FVps< double, 6 > getThinMultipoleMap(const BMultipoleField &field, double scale, FVps< double, 6 > &m)
FVps< double, 6 > getExitFringeMap(double angle, double curve, const BMultipoleField &field, double scale, FVps< double, 6 > map)
double getY() const
Get displacement.
static FTps makeVariable(int var)
Make variable.
int order() const
Return order.
FVps< double, 6 > getEntranceFringeMap(double angle, double curve, const BMultipoleField &field, double scale, FVps< double, 6 > map)