OPAL (Object Oriented Parallel Accelerator Library) 2024.2
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
23#include "Fields/EMField.h"
24
25#include <string>
26
53class Offset: public Component {
54public:
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);
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
203private:
207
208 // The offset's geometry.
210};
211
214bool operator==(const Offset& off1, const Offset& off2);
215
217bool operator!=(const Offset& off1, const Offset& off2);
218
220std::ostream& operator<<(std::ostream& out, const Offset& off1);
221
222#endif // CLASSIC_ABSBEAMLINE_Offset_HH
bool operator!=(const Offset &off1, const Offset &off2)
Definition Offset.cpp:227
std::ostream & operator<<(std::ostream &out, const Offset &off1)
Definition Offset.cpp:231
bool operator==(const Offset &off1, const Offset &off2)
Definition Offset.cpp:202
const std::string name
Component(const std::string &name)
Constructor with given name.
Definition Component.cpp:53
ElementBase(const std::string &name)
Constructor with given name.
void updateGeometry()
Definition Offset.cpp:156
static Vector_t rotate(Vector_t vec, double theta)
Definition Offset.cpp:148
static Offset globalCylindricalOffset(const std::string &name, double radius_out, double phi_out, double theta_out)
Definition Offset.cpp:270
static double getTheta(Vector_t vec1, Vector_t vec2)
Definition Offset.cpp:134
Euclid3DGeometry & getGeometry() override
Get geometry.
Definition Offset.cpp:121
Offset & operator=(const Offset &)
Definition Offset.cpp:51
bool isGeometryAllocated() const
Definition Offset.cpp:198
void finalise() override
Definition Offset.cpp:89
bool _is_local
Definition Offset.h:206
Vector_t _end_position
Definition Offset.h:204
~Offset()
Definition Offset.cpp:47
void getDimensions(double &, double &) const override
Definition Offset.h:150
void setEndPosition(Vector_t position)
Definition Offset.cpp:97
Vector_t getEndPosition() const
Definition Offset.cpp:101
EMField & getField() override
Not implemented - throws GeneralClassicException.
Definition Offset.cpp:75
Offset()
Definition Offset.cpp:33
void setEndDirection(Vector_t direction)
Definition Offset.cpp:105
static double float_tolerance
Definition Offset.h:201
Offset(const std::string &name)
Definition Offset.cpp:28
Vector_t _end_direction
Definition Offset.h:205
ElementBase * clone() const override
Definition Offset.cpp:93
void accept(BeamlineVisitor &) const override
Definition Offset.cpp:71
Euclid3DGeometry * geometry_m
Definition Offset.h:209
static Offset localCartesianOffset(const std::string &name, Vector_t end_position, Vector_t end_direction)
Definition Offset.cpp:285
static Offset globalCartesianOffset(const std::string &name, Vector_t end_position, Vector_t end_direction)
Definition Offset.cpp:296
bool getIsLocal() const
Definition Offset.cpp:117
void setIsLocal(bool isLocal)
Definition Offset.cpp:113
bool bends() const override
Definition Offset.cpp:238
void initialise(PartBunchBase< double, 3 > *bunch, double &startField, double &endField) override
Definition Offset.cpp:85
Vector_t getEndDirection() const
Definition Offset.cpp:109
static Offset localCylindricalOffset(const std::string &name, double theta_in, double theta_out, double displacement)
Definition Offset.cpp:256
Abstract base class for electromagnetic fields.
Definition EMField.h:188
Definition Vec.h:22
Vektor< double, 3 > Vector_t