OPAL (Object Oriented Parallel Accelerator Library) 2024.2
OPAL
BendBase.h
Go to the documentation of this file.
1#ifndef CLASSIC_BENDBASE_H
2#define CLASSIC_BENDBASE_H
3
6#include "Physics/Units.h"
7
8#include <string>
9#include <vector>
10
11class BendBase: public Component {
12public:
13 BendBase();
14 BendBase(const BendBase&);
15 BendBase(const std::string&);
16
18 virtual bool bends() const;
19
20 double getChordLength() const;
21 virtual void setBendAngle(double angle);
22 double getBendAngle() const;
23 virtual void setEntranceAngle(double entranceAngle);
24 double getEntranceAngle() const;
25 virtual double getExitAngle() const = 0;
26 void setFullGap(double);
27 double getFullGap() const;
28
29 virtual void setDesignEnergy(const double& energy, bool changeable = true);
30 double getDesignEnergy() const;
31 std::vector<Vector_t> getDesignPath() const;
32
33 void setFieldAmplitude(double k0, double k0s);
34 double getFieldAmplitude() const;
35
36 void setFieldMapFN(std::string fileName);
37 std::string getFieldMapFN() const;
38
39protected:
41 double calcDesignRadius(double fieldAmplitude) const;
43 double calcFieldAmplitude(double radius) const;
45 double calcBendAngle(double chordLength, double radius) const;
47 double calcDesignRadius(double chordLength, double angle) const;
49 double calcGamma() const;
51 double calcBetaGamma() const;
52
54 double angle_m;
58 const bool fast_m = false;
59
60 double gap_m;
61
65 std::vector<Vector_t> refTrajMap_m;
66
71
73
74 std::string fileName_m;
75};
76
77inline
78bool BendBase::bends() const {
79 return true;
80}
81
82inline
84 return chordLength_m;
85}
86
87inline
88void BendBase::setBendAngle(double angle) {
89 angle_m = angle;
90}
91
92inline
93double BendBase::getBendAngle() const {
94 return angle_m;
95}
96
97inline
99{
100 entranceAngle_m = angle;
101}
102
103inline
105 return entranceAngle_m;
106}
107
108inline
109void BendBase::setFullGap(double gap) {
110 gap_m = std::abs(gap);
111}
112
113inline
114double BendBase::getFullGap() const {
115 return gap_m;
116}
117
118inline
119void BendBase::setDesignEnergy(const double& energy, bool changeable) {
121 designEnergy_m = std::abs(energy) * Units::MeV2eV;
122 designEnergyChangeable_m = changeable;
123 }
124}
125
126inline
128 return designEnergy_m;
129}
130
131inline
133{
134 return fieldAmplitude_m;
135}
136
137inline
138void BendBase::setFieldMapFN(std::string fileName) {
139 fileName_m = fileName;
140}
141
142inline
143std::string BendBase::getFieldMapFN() const {
144 return fileName_m;
145}
146
147#endif
std::shared_ptr< _Fieldmap > Fieldmap
Definition Definitions.h:24
constexpr double MeV2eV
Definition Units.h:74
double calcGamma() const
Calculate gamma from design energy.
Definition BendBase.cpp:89
std::vector< Vector_t > getDesignPath() const
Definition BendBase.cpp:43
std::vector< Vector_t > refTrajMap_m
Map of reference particle trajectory.
Definition BendBase.h:65
const bool fast_m
Flag to turn on fast field calculation.
Definition BendBase.h:58
void setFieldMapFN(std::string fileName)
Definition BendBase.h:138
double calcBendAngle(double chordLength, double radius) const
Calculate bend angle from chord length and design radius.
Definition BendBase.cpp:79
virtual void setDesignEnergy(const double &energy, bool changeable=true)
Definition BendBase.h:119
double fieldAmplitude_m
Field amplitude.
Definition BendBase.h:72
double calcBetaGamma() const
Calculate beta*gamma from design energy.
Definition BendBase.cpp:95
double getChordLength() const
Definition BendBase.h:83
double designEnergy_m
Bend design energy (eV).
Definition BendBase.h:62
virtual void setEntranceAngle(double entranceAngle)
Definition BendBase.h:98
double entranceAngle_m
Definition BendBase.h:55
void setFullGap(double)
Definition BendBase.h:109
double getBendAngle() const
Definition BendBase.h:93
double getFieldAmplitude() const
Definition BendBase.h:132
Fieldmap fieldmap_m
Magnet field map.
Definition BendBase.h:57
double getDesignEnergy() const
Definition BendBase.h:127
double gap_m
Full vertical gap of the magnets.
Definition BendBase.h:60
double fieldAmplitudeY_m
Definition BendBase.h:69
virtual double getExitAngle() const =0
virtual void setBendAngle(double angle)
Definition BendBase.h:88
std::string fileName_m
Definition BendBase.h:74
double chordLength_m
Definition BendBase.h:53
double getEntranceAngle() const
Definition BendBase.h:104
bool designEnergyChangeable_m
Definition BendBase.h:63
double calcFieldAmplitude(double radius) const
Calculate field amplitude from design energy and radius.
Definition BendBase.cpp:70
double calcDesignRadius(double fieldAmplitude) const
Calculate design radius from design energy and field amplitude.
Definition BendBase.cpp:61
void setFieldAmplitude(double k0, double k0s)
Definition BendBase.cpp:56
virtual bool bends() const
Indicates that element bends the beam.
Definition BendBase.h:78
std::string getFieldMapFN() const
Definition BendBase.h:143
double fieldAmplitudeX_m
Definition BendBase.h:67
double getFullGap() const
Definition BendBase.h:114
double angle_m
Bend angle.
Definition BendBase.h:54
Interface for a single beam element.
Definition Component.h:50