OPAL (Object Oriented Parallel Accelerator Library)
2024.1
OPAL
|
#include <Offset.h>
Public Member Functions | |
Offset (const std::string &name) | |
Offset () | |
Offset (const std::string &name, const Offset &) | |
Offset (const Offset &) | |
Offset & | operator= (const Offset &) |
~Offset () | |
void | accept (BeamlineVisitor &) const override |
ElementBase * | clone () const override |
bool | bends () const override |
void | initialise (PartBunchBase< double, 3 > *bunch, double &startField, double &endField) override |
void | finalise () override |
void | getDimensions (double &, double &) const override |
void | setEndPosition (Vector_t position) |
Vector_t | getEndPosition () const |
void | setEndDirection (Vector_t direction) |
Vector_t | getEndDirection () const |
void | setIsLocal (bool isLocal) |
bool | getIsLocal () const |
Euclid3DGeometry & | getGeometry () override |
Get geometry. More... | |
const Euclid3DGeometry & | getGeometry () const override |
Get geometry. More... | |
void | updateGeometry (Vector_t startPosition, Vector_t startDirection) |
void | updateGeometry () |
bool | isGeometryAllocated () const |
EMField & | getField () override |
Not implemented - throws GeneralClassicException. More... | |
const EMField & | getField () const override |
Not implemented - throws GeneralClassicException. More... | |
![]() | |
Component (const std::string &name) | |
Constructor with given name. More... | |
Component () | |
Component (const Component &right) | |
virtual | ~Component () |
EVector | Efield (const Point3D &P) const |
Return the field in a point. More... | |
BVector | Bfield (const Point3D &P) const |
Return the field in a point. More... | |
EVector | Efield (const Point3D &P, double t) const |
Return the field in a point. More... | |
BVector | Bfield (const Point3D &P, double t) const |
Return the field in a point. More... | |
EBVectors | EBfield (const Point3D &P) const |
Return the field in a point. More... | |
EBVectors | EBfield (const Point3D &P, double t) const |
Return the field in a point. More... | |
virtual bool | apply (const size_t &i, const double &t, Vector_t &E, Vector_t &B) |
virtual bool | apply (const Vector_t &R, const Vector_t &P, const double &t, Vector_t &E, Vector_t &B) |
virtual bool | applyToReferenceParticle (const Vector_t &R, const Vector_t &P, const double &t, Vector_t &E, Vector_t &B) |
virtual bool | getPotential (const Vector_t &, const double &, Vector_t &, double &) |
virtual double | getDesignEnergy () const |
virtual void | setDesignEnergy (const double &energy, bool changeable=true) |
virtual void | goOnline (const double &kineticEnergy) |
virtual void | goOffline () |
virtual bool | Online () |
virtual ElementType | getType () const override |
Get element type std::string. More... | |
virtual const ElementBase & | getDesign () const |
Return design element. More... | |
virtual void | trackBunch (PartBunchBase< double, 3 > *bunch, const PartData &, bool revBeam, bool revTrack) const |
Track particle bunch. More... | |
virtual void | trackMap (FVps< double, 6 > &map, const PartData &, bool revBeam, bool revTrack) const |
Track a map. More... | |
void | setExitFaceSlope (const double &) |
![]() | |
ElementBase (const std::string &name) | |
Constructor with given name. More... | |
ElementBase () | |
ElementBase (const ElementBase &) | |
virtual | ~ElementBase () |
virtual const std::string & | getName () const |
Get element name. More... | |
virtual void | setName (const std::string &name) |
Set element name. More... | |
std::string | getTypeString () const |
virtual double | getArcLength () const |
Get arc length. More... | |
virtual double | getElementLength () const |
Get design length. More... | |
virtual void | setElementLength (double length) |
Set design length. More... | |
virtual void | getElementDimensions (double &begin, double &end) const |
virtual double | getOrigin () const |
Get origin position. More... | |
virtual double | getEntrance () const |
Get entrance position. More... | |
virtual double | getExit () const |
Get exit position. More... | |
virtual Euclid3D | getTransform (double fromS, double toS) const |
Get transform. More... | |
virtual Euclid3D | getTransform (double s) const |
Get transform. More... | |
virtual Euclid3D | getTotalTransform () const |
Get transform. More... | |
virtual Euclid3D | getEntranceFrame () const |
Get transform. More... | |
virtual Euclid3D | getExitFrame () const |
Get transform. More... | |
virtual Euclid3D | getEntrancePatch () const |
Get patch. More... | |
virtual Euclid3D | getExitPatch () const |
Get patch. More... | |
virtual double | getAttribute (const std::string &aKey) const |
Get attribute value. More... | |
virtual bool | hasAttribute (const std::string &aKey) const |
Test for existence of an attribute. More... | |
virtual void | removeAttribute (const std::string &aKey) |
Remove an existing attribute. More... | |
virtual void | setAttribute (const std::string &aKey, double val) |
Set value of an attribute. More... | |
virtual Channel * | getChannel (const std::string &aKey, bool create=false) |
Construct a read/write channel. More... | |
virtual const ConstChannel * | getConstChannel (const std::string &aKey) const |
Construct a read-only channel. More... | |
virtual ElementBase * | copyStructure () |
Make a structural copy. More... | |
bool | isSharable () const |
Test if the element can be shared. More... | |
virtual void | makeSharable () |
Set sharable flag. More... | |
bool | update (const AttributeSet &) |
Update element. More... | |
virtual void | setBoundaryGeometry (BoundaryGeometry *geo) |
virtual BoundaryGeometry * | getBoundaryGeometry () const |
return the attached boundary geometrt object if there is any More... | |
virtual bool | hasBoundaryGeometry () const |
virtual void | setWake (WakeFunction *wf) |
attach a wake field to the element More... | |
virtual WakeFunction * | getWake () const |
return the attached wake object if there is any More... | |
virtual bool | hasWake () const |
virtual void | setParticleMatterInteraction (ParticleMatterInteractionHandler *spys) |
virtual ParticleMatterInteractionHandler * | getParticleMatterInteraction () const |
virtual bool | hasParticleMatterInteraction () const |
void | setCSTrafoGlobal2Local (const CoordinateSystemTrafo &ori) |
CoordinateSystemTrafo | getCSTrafoGlobal2Local () const |
void | releasePosition () |
void | fixPosition () |
bool | isPositioned () const |
virtual CoordinateSystemTrafo | getEdgeToBegin () const |
virtual CoordinateSystemTrafo | getEdgeToEnd () const |
void | setAperture (const ApertureType &type, const std::vector< double > &args) |
std::pair< ApertureType, std::vector< double > > | getAperture () const |
virtual bool | isInside (const Vector_t &r) const |
void | setMisalignment (const CoordinateSystemTrafo &cst) |
void | getMisalignment (double &x, double &y, double &s) const |
CoordinateSystemTrafo | getMisalignment () const |
void | setActionRange (const std::queue< std::pair< double, double > > &range) |
void | setCurrentSCoordinate (double s) |
void | setRotationAboutZ (double rotation) |
Set rotation about z axis in bend frame. More... | |
double | getRotationAboutZ () const |
virtual BoundingBox | getBoundingBoxInLabCoords () const |
virtual int | getRequiredNumberOfTimeSteps () const |
void | setOutputFN (std::string fn) |
Set output filename. More... | |
std::string | getOutputFN () const |
Get output filename. More... | |
void | setFlagDeleteOnTransverseExit (bool=true) |
bool | getFlagDeleteOnTransverseExit () const |
void | setElementPosition (double elemedge) |
Access to ELEMEDGE attribute. More... | |
double | getElementPosition () const |
bool | isElementPositionSet () const |
![]() | |
int | addReference () const |
Increment reference count. More... | |
int | removeReference () const |
Decrement the reference count. More... | |
bool | isShared () const |
Test for sharing. More... | |
Static Public Member Functions | |
static Offset | localCylindricalOffset (const std::string &name, double theta_in, double theta_out, double displacement) |
static Offset | globalCylindricalOffset (const std::string &name, double radius_out, double phi_out, double theta_out) |
static Offset | localCartesianOffset (const std::string &name, Vector_t end_position, Vector_t end_direction) |
static Offset | globalCartesianOffset (const std::string &name, Vector_t end_position, Vector_t end_direction) |
static double | getTheta (Vector_t vec1, Vector_t vec2) |
static Vector_t | rotate (Vector_t vec, double theta) |
![]() | |
static std::string | getTypeString (ElementType type) |
Static Public Attributes | |
static double | float_tolerance = 1e-12 |
Private Attributes | |
Vector_t | _end_position |
Vector_t | _end_direction |
bool | _is_local |
Euclid3DGeometry * | geometry_m = nullptr |
Additional Inherited Members | |
![]() | |
bool | isInsideTransverse (const Vector_t &r) const |
![]() | |
RCObject () | |
Default constructor. More... | |
RCObject (const RCObject &) | |
Copy constructor. More... | |
virtual | ~RCObject ()=0 |
RCObject & | operator= (const RCObject &right) |
![]() | |
double | exit_face_slope_m |
PartBunchBase< double, 3 > * | RefPartBunch_m |
bool | online_m |
![]() | |
bool | shareFlag |
CoordinateSystemTrafo | csTrafoGlobal2Local_m |
CoordinateSystemTrafo | misalignment_m |
std::pair< ApertureType, std::vector< double > > | aperture_m |
double | elementEdge_m |
double | rotationZAxis_m |
![]() | |
static const std::vector< double > | defaultAperture_m |
Enables user to define a placement, either in global coordinates or in the coordinate system of the previously placed object
_end_position | final position of the offset |
_end_direction | normal vector to entry face |
_is_local | parameter is True if everything is in the coordinate system of the last placed object. It is expected that everything will be in a local coordinate system before tracking begins (this is expected by, for example, Ring). |
geometry | the geometry that RingSection uses to do displacements This has to be a pointer because SRotatedGeometry does not have an defined assignment op. SRotatedGeometry does not have a assignment op because BGeometryBase does not have an assignment op... and there is no way (I think) to reassign a previously assigned variable in C++ without using = |
wrappedGeometry | Something to do with the reference handling in SRotatedGeometry - looks like it doesn't make a copy but holds a reference, so unless I keep that alive in Offset I get memory errors (seg fault) bends() and operator==(...) use float_tolerance when evaluating equality between doubles. |
WARNING: this object uses a default aperture that is large. It will screw up any calculation based on aperture (e.g. wakefields etc)
|
explicit |
Constructor sets everything to 0., makes a default geometry with everything set to 0.
Definition at line 28 of file Offset.cpp.
References geometry_m.
Offset::Offset | ( | ) |
Default constructor sets everything to 0., makes a default geometry with everything set to 0.
Definition at line 33 of file Offset.cpp.
Referenced by clone().
Offset::Offset | ( | const std::string & | name, |
const Offset & | rhs | ||
) |
Copy constructor; deep copies geometry_m; all other stuff is copied as well
Definition at line 37 of file Offset.cpp.
Offset::Offset | ( | const Offset & | rhs | ) |
Copy constructor; deep copies geometry_m; all other stuff is copied as well
Definition at line 42 of file Offset.cpp.
Offset::~Offset | ( | ) |
deletes geometry and wrappedGeometry
Definition at line 47 of file Offset.cpp.
References geometry_m.
|
overridevirtual |
Apply visitor to Offset.
Sets ring radius
Implements ElementBase.
Definition at line 71 of file Offset.cpp.
References BeamlineVisitor::visitOffset().
|
overridevirtual |
Returns true if either input angle or output angle are greater than float_tolerance
Implements Component.
Definition at line 238 of file Offset.cpp.
References abs(), float_tolerance, geometry_m, Rotation3D::getAxis(), Euclid3D::getRotation(), Euclid3DGeometry::getTotalTransform(), and Euclid3D::getVector().
|
overridevirtual |
Just calls the copy constructor on *this
Implements ElementBase.
Definition at line 93 of file Offset.cpp.
References Offset().
|
overridevirtual |
Implements Component.
Definition at line 89 of file Offset.cpp.
References Component::RefPartBunch_m.
|
inlineoverridevirtual |
Vector_t Offset::getEndDirection | ( | ) | const |
Definition at line 109 of file Offset.cpp.
References _end_direction.
Referenced by operator<<(), operator==(), and updateGeometry().
Vector_t Offset::getEndPosition | ( | ) | const |
Definition at line 101 of file Offset.cpp.
References _end_position.
Referenced by operator<<(), operator==(), and updateGeometry().
|
overridevirtual |
Not implemented - throws GeneralClassicException.
Implements Component.
Definition at line 75 of file Offset.cpp.
|
overridevirtual |
Not implemented - throws GeneralClassicException.
Implements Component.
Definition at line 80 of file Offset.cpp.
|
overridevirtual |
Get geometry.
Implements ElementBase.
Definition at line 121 of file Offset.cpp.
References geometry_m.
Referenced by operator==().
|
overridevirtual |
Get geometry.
Implements ElementBase.
Definition at line 125 of file Offset.cpp.
References geometry_m.
bool Offset::getIsLocal | ( | ) | const |
Returns true if stored coordinates are in the local coordinate system of the last placed object
Definition at line 117 of file Offset.cpp.
References _is_local.
Referenced by operator<<(), and operator==().
Calculate the angle between vectors on the midplane
Returns theta in domain -pi, pi. A positive angle means a rotation anticlockwise from vec1 to vec2.
Throws an GeneralClassicException if vec1, vec2 are not in the midplane i.e. non-zero z.
Definition at line 134 of file Offset.cpp.
References abs(), atan2(), Physics::e, Physics::pi, and Physics::two_pi.
Referenced by updateGeometry().
|
static |
Factory method to make an offset in global cartesian coordinates
Definition at line 296 of file Offset.cpp.
References setEndDirection(), setEndPosition(), and setIsLocal().
Referenced by OpalOffset::OpalGlobalCartesianOffset::update().
|
static |
Factory method to make an offset in global cylindrical polar coordinates
Definition at line 270 of file Offset.cpp.
References cos(), setEndDirection(), setEndPosition(), setIsLocal(), and sin().
Referenced by OpalOffset::OpalGlobalCylindricalOffset::update().
|
overridevirtual |
Implements Component.
Definition at line 85 of file Offset.cpp.
References Component::RefPartBunch_m.
bool Offset::isGeometryAllocated | ( | ) | const |
|
static |
Factory method to make an offset in cartesian coordinates local to the end of the previous element
Definition at line 285 of file Offset.cpp.
References setEndDirection(), setEndPosition(), setIsLocal(), and updateGeometry().
Referenced by OpalOffset::OpalLocalCartesianOffset::update().
|
static |
Factory method to make an offset in Cylindrical coordinates local to the end of the previous element
Definition at line 256 of file Offset.cpp.
References cos(), setEndDirection(), setEndPosition(), setIsLocal(), sin(), and updateGeometry().
Referenced by OpalOffset::OpalLocalCylindricalOffset::update().
Assignment operator deep copies geometry and wrappedGeometry; all other stuff is copied as well
Definition at line 51 of file Offset.cpp.
References _end_direction, _end_position, _is_local, geometry_m, ElementBase::getAperture(), ElementBase::getName(), Euclid3DGeometry::getTotalTransform(), ElementBase::setAperture(), and ElementBase::setName().
Rotate vec anticlockwise by angle theta about z axis; return the rotated vector
Definition at line 148 of file Offset.cpp.
References Physics::c, cos(), and sin().
Referenced by updateGeometry().
Definition at line 105 of file Offset.cpp.
References _end_direction.
Referenced by globalCartesianOffset(), globalCylindricalOffset(), localCartesianOffset(), and localCylindricalOffset().
Definition at line 97 of file Offset.cpp.
References _end_position.
Referenced by globalCartesianOffset(), globalCylindricalOffset(), localCartesianOffset(), and localCylindricalOffset().
void Offset::setIsLocal | ( | bool | isLocal | ) |
Set to true if stored coordinates are in the local coordinate system of the last placed object
Definition at line 113 of file Offset.cpp.
References _is_local.
Referenced by globalCartesianOffset(), globalCylindricalOffset(), localCartesianOffset(), and localCylindricalOffset().
Convert to a local coordinate system for global offsets
If _is_local is true, just calls updateGeometry(). If false, then this updates the geometry so that _endPosition and _endDirection are relative to startPosition and startDirection (rather than the global coordinate system)
Definition at line 178 of file Offset.cpp.
References _end_direction, _end_position, _is_local, atan2(), cos(), rotate(), sin(), and updateGeometry().
Referenced by RingSection::handleOffset(), localCartesianOffset(), and localCylindricalOffset().
void Offset::updateGeometry | ( | ) |
Definition at line 156 of file Offset.cpp.
References _is_local, cos(), geometry_m, getEndDirection(), getEndPosition(), getTheta(), sin(), and sqrt().
Referenced by updateGeometry().
|
private |
Definition at line 205 of file Offset.h.
Referenced by getEndDirection(), operator=(), setEndDirection(), and updateGeometry().
|
private |
Definition at line 204 of file Offset.h.
Referenced by getEndPosition(), operator=(), setEndPosition(), and updateGeometry().
|
private |
Definition at line 206 of file Offset.h.
Referenced by getIsLocal(), operator=(), setIsLocal(), and updateGeometry().
|
static |
Definition at line 201 of file Offset.h.
Referenced by bends(), and operator==().
|
private |
Definition at line 209 of file Offset.h.
Referenced by bends(), getGeometry(), isGeometryAllocated(), Offset(), operator=(), updateGeometry(), and ~Offset().