OPAL (Object Oriented Parallel Accelerator Library)  2024.1
OPAL
Offset.h
Go to the documentation of this file.
1 //
2 // Class Offset
3 // Defines the abstract interface for offset of elements.
4 //
5 // Copyright (c) 2012 - 2023, Chris Rogers, STFC Rutherford Appleton Laboratory, Didcot, UK
6 // All rights reserved
7 //
8 // This file is part of OPAL.
9 //
10 // OPAL is free software: you can redistribute it and/or modify
11 // it under the terms of the GNU General Public License as published by
12 // the Free Software Foundation, either version 3 of the License, or
13 // (at your option) any later version.
14 //
15 // You should have received a copy of the GNU General Public License
16 // along with OPAL. If not, see <https://www.gnu.org/licenses/>.
17 //
18 #ifndef CLASSIC_ABSBEAMLINE_Offset_HH
19 #define CLASSIC_ABSBEAMLINE_Offset_HH
20 
21 #include "AbsBeamline/Component.h"
23 #include "Fields/EMField.h"
24 
25 #include <string>
26 
53 class Offset: public Component {
54 public:
58  explicit Offset(const std::string& name);
59 
63  Offset();
64 
68  Offset(const std::string& name, const Offset&);
69 
73  Offset(const Offset&);
74 
78  Offset& operator=(const Offset&);
79 
89  static Offset localCylindricalOffset(const std::string& name,
90  double theta_in,
91  double theta_out,
92  double displacement);
93 
103  static Offset globalCylindricalOffset(const std::string& name,
104  double radius_out,
105  double phi_out,
106  double theta_out);
107 
114  static Offset localCartesianOffset(const std::string& name,
115  Vector_t end_position,
116  Vector_t end_direction);
117 
126  static Offset globalCartesianOffset(const std::string& name,
127  Vector_t end_position,
128  Vector_t end_direction);
129 
131  ~Offset();
132 
137  void accept(BeamlineVisitor&) const override;
138 
140  ElementBase* clone() const override;
141 
145  bool bends() const override;
146 
148  double& startField, double& endField) override;
149  void finalise() override;
150  void getDimensions(double& /*zBegin*/, double& /*zEnd*/) const override {}
151 
152  void setEndPosition(Vector_t position);
153  Vector_t getEndPosition() const;
154 
155  void setEndDirection(Vector_t direction);
156  Vector_t getEndDirection() const;
157 
161  void setIsLocal(bool isLocal);
162 
166  bool getIsLocal() const;
167 
168  Euclid3DGeometry& getGeometry() override;
169  const Euclid3DGeometry& getGeometry() const override;
170 
178  void updateGeometry(Vector_t startPosition, Vector_t startDirection);
179  void updateGeometry();
180  bool isGeometryAllocated() const;
181 
183  EMField& getField() override;
185  const EMField& getField() const override;
194  static double getTheta(Vector_t vec1, Vector_t vec2);
195 
199  static Vector_t rotate(Vector_t vec, double theta);
200 
201  static double float_tolerance;
202 
203 private:
206  bool _is_local;
207 
208  // The offset's geometry.
210 };
211 
214 bool operator==(const Offset& off1, const Offset& off2);
215 
217 bool operator!=(const Offset& off1, const Offset& off2);
218 
220 std::ostream& operator<<(std::ostream& out, const Offset& off1);
221 
222 #endif // CLASSIC_ABSBEAMLINE_Offset_HH
Euclid3DGeometry * geometry_m
Definition: Offset.h:209
Vector_t getEndDirection() const
Definition: Offset.cpp:109
bool operator!=(const Offset &off1, const Offset &off2)
Definition: Offset.cpp:227
Offset()
Definition: Offset.cpp:33
Euclid3DGeometry & getGeometry() override
Get geometry.
Definition: Offset.cpp:121
Abstract base class for electromagnetic fields.
Definition: EMField.h:188
std::ostream & operator<<(std::ostream &os, const Attribute &attr)
Definition: Attribute.cpp:169
void finalise() override
Definition: Offset.cpp:89
Offset & operator=(const Offset &)
Definition: Offset.cpp:51
static double float_tolerance
Definition: Offset.h:201
EMField & getField() override
Not implemented - throws GeneralClassicException.
Definition: Offset.cpp:75
bool operator==(const TwoPolynomial &left, const TwoPolynomial &right)
static Offset localCartesianOffset(const std::string &name, Vector_t end_position, Vector_t end_direction)
Definition: Offset.cpp:285
Definition: Offset.h:53
void setIsLocal(bool isLocal)
Definition: Offset.cpp:113
~Offset()
Definition: Offset.cpp:47
void getDimensions(double &, double &) const override
Definition: Offset.h:150
bool _is_local
Definition: Offset.h:206
static Offset globalCylindricalOffset(const std::string &name, double radius_out, double phi_out, double theta_out)
Definition: Offset.cpp:270
bool isGeometryAllocated() const
Definition: Offset.cpp:198
static double getTheta(Vector_t vec1, Vector_t vec2)
Definition: Offset.cpp:134
void accept(BeamlineVisitor &) const override
Definition: Offset.cpp:71
Definition: Vec.h:21
Vector_t _end_position
Definition: Offset.h:204
static Vector_t rotate(Vector_t vec, double theta)
Definition: Offset.cpp:148
static Offset localCylindricalOffset(const std::string &name, double theta_in, double theta_out, double displacement)
Definition: Offset.cpp:256
bool bends() const override
Definition: Offset.cpp:238
ElementBase * clone() const override
Definition: Offset.cpp:93
bool getIsLocal() const
Definition: Offset.cpp:117
const std::string name
void setEndDirection(Vector_t direction)
Definition: Offset.cpp:105
void updateGeometry()
Definition: Offset.cpp:156
void setEndPosition(Vector_t position)
Definition: Offset.cpp:97
Interface for a single beam element.
Definition: Component.h:50
void initialise(PartBunchBase< double, 3 > *bunch, double &startField, double &endField) override
Definition: Offset.cpp:85
Vector_t getEndPosition() const
Definition: Offset.cpp:101
static Offset globalCartesianOffset(const std::string &name, Vector_t end_position, Vector_t end_direction)
Definition: Offset.cpp:296
Vector_t _end_direction
Definition: Offset.h:205