57 if (
m_A1 == 0)
return false;
61 std::ostringstream ost; ost <<
m_label <<
" isOutOfAperture ";
63 ost <<
"radius: " << offCenter.
mag2() <<
" > A1*A1: " <<
m_A1*
m_A1;
64 particle.addMsg(ost.str());
73 double xx = (
m_A3) ? offCenter.
x()/
m_A3 :
throw std::runtime_error(
"ERROR: m_A3 == 0");
74 double yy = (
m_A4) ? offCenter.
y()/
m_A4 :
throw std::runtime_error(
"ERROR: m_A4 == 0");
75 double rr = xx*xx + yy*yy;
79 std::ostringstream ost; ost <<
m_label <<
" isOutOfAperture ";
81 ost <<
" x/A3: " << xx <<
" y/A4: " << yy <<
" (Squared sum: " <<
rr <<
" > 1)";
82 particle.addMsg(ost.str());
89 if (std::fabs(offCenter.
x()) >
m_A1) {
91 std::ostringstream ost; ost <<
m_label <<
" isOutOfAperture ";
93 ost <<
" |x|: " << std::fabs(offCenter.
x()) <<
" > A1: " <<
m_A1;
94 particle.addMsg(ost.str());
102 if (std::fabs(offCenter.
y()) >
m_A2) {
104 std::ostringstream ost; ost <<
m_label <<
" isOutOfAperture ";
106 ost <<
" |y|: " << std::fabs(offCenter.
y()) <<
" > A2: " <<
m_A2;
107 particle.addMsg(ost.str());
118 if( std::fabs(offCenter.
x())>
m_A1 ) {
120 std::ostringstream ost; ost <<
m_label <<
" isOutOfAperture ";
122 ost <<
" |x|: " << std::fabs(offCenter.
x()) <<
" > A1: " <<
m_A1;
123 particle.addMsg(ost.str());
128 if( std::fabs(offCenter.
y())>
m_A2) {
130 std::ostringstream ost; ost <<
m_label <<
" isOutOfAperture ";
132 ost <<
" |y|: " << std::fabs(offCenter.
y()) <<
" > A2: " <<
m_A2;
133 particle.addMsg(ost.str());
141 float d=(
m_A1-std::fabs(offCenter.
x()))/(
m_A1-B4)+(
m_A2-std::fabs(offCenter.
y()))/(
m_A2-B3);
144 std::ostringstream ost; ost <<
m_label <<
" isOutOfAperture ";
146 ost<<
" x: "<<offCenter.
x()<<
" y: "<<offCenter.
y()<<
" m_A1 "<<
m_A1<<
" m_A2 "<<
m_A2<<
" m_A3 "<<
m_A3<<
" m_A4 "<<
m_A4<<
" d: "<<d;
147 particle.addMsg( ost.str() );
156 std::stringstream sstr; sstr <<
" Unknown magnet aperture type " <<
m_aperType <<
"\n";
157 throw std::runtime_error(sstr.str().c_str());
Magnet(double x, double y, double z, double length, const std::string &aperType, double A1, double A2, double A3, double A4, Side side, IBender *bender, const std::string &label)