50 return Pair(B + rhs.
B, A + rhs.
A);
54 return Pair(B - rhs.
B, A - rhs.
A);
84 : pairs(nullptr), itsOrder(rhs.itsOrder) {
101 for (
int i = 0; i <
itsOrder; i++) {
110 std::complex<double> X(point.
getX(), point.
getY());
112 std::complex<double> B(
pairs[i].B,
pairs[i].A);
115 B = X * B / double(i + 1) + std::complex<double>(
pairs[i].B,
pairs[i].A);
118 return BVector(std::imag(B), std::real(B), 0.0);
129 throw LogicalError(
"BMultipoleField::setNormalComponent()",
"Field order should be > 0.");
140 throw LogicalError(
"BMultipoleField::setSkewComponent()",
"Field order should be > 0.");
151 for (
int i = 0; i < field.
itsOrder; ++i)
158 for (
int i = 0; i < field.
itsOrder; ++i)
164 for (
int i = 0; i <
itsOrder; ++i) {
The magnetic field of a multipole.
BMultipoleField & addField(const BMultipoleField &field)
Add to field.
virtual BVector Bfield(const Point3D &P) const
Get field.
BMultipoleField & operator=(const BMultipoleField &)
BMultipoleField & subtractField(const BMultipoleField &field)
Subtract from field.
BMultipoleField()
Default constructor.
void scale(double scalar)
Scale the field.
virtual ~BMultipoleField()
void setNormalComponent(int n, double Bn)
Set component.
void setSkewComponent(int n, double Bn)
Set component.
double normal(int) const
Get component.
double getX() const
Return coordinate.
double getY() const
Return coordinate.
Pair operator+(const Pair &) const
void operator*=(double scale)
void operator-=(const Pair &)
void operator=(const Pair &)
void operator+=(const Pair &)
Pair operator*(double scale) const