OPAL (Object Oriented Parallel Accelerator Library)  2.2.0
OPAL
AlignWrapper.h
Go to the documentation of this file.
1 #ifndef CLASSIC_AlignWrapper_HH
2 #define CLASSIC_AlignWrapper_HH
3 
4 // ------------------------------------------------------------------------
5 // $RCSfile: AlignWrapper.h,v $
6 // ------------------------------------------------------------------------
7 // $Revision: 1.1.1.1 $
8 // ------------------------------------------------------------------------
9 // Copyright: see Copyright.readme
10 // ------------------------------------------------------------------------
11 //
12 // Class: AlignWrapper
13 //
14 // ------------------------------------------------------------------------
15 // Class category: AbsBeamline
16 // ------------------------------------------------------------------------
17 //
18 // $Date: 2000/03/27 09:32:31 $
19 // $Author: fci $
20 //
21 // ------------------------------------------------------------------------
22 
26 
27 class BeamlineVisitor;
28 
29 
30 // Class AlignWrapper
31 // ------------------------------------------------------------------------
33 // An AlignWrapper is used to store misalignment errors or deliberate
34 // misalignments. It acts as a wrapper around a component or a complete
35 // beam line. Rotations and translations are defined about the design
36 // local frame, which in turn is specified by the position of the element
37 // on the design geometry. An AlignWrapper is non-sharable by default.
38 
39 class AlignWrapper: public ElementBase {
40 
41  friend class ElementBase;
42 
43 public:
44 
46  virtual void accept(BeamlineVisitor &) const override;
47 
49  // Return an identical deep copy of the wrapper and its contents.
50  virtual AlignWrapper *clone() const override;
51 
53  virtual ElementBase *copyStructure() override;
54 
56  // The whole structure depending on [b]this[/b] is marked as sharable.
57  // After this call a [b]copyStructure()[/b] call reuses the element.
58  virtual void makeSharable() override;
59 
60 
62  // Returns the entrance patch (transformation) which is used to
63  // transform the global geometry to the local geometry at entrance
64  // of the misaligned element.
65  virtual Euclid3D getEntranceTransform() const;
66 
68  // Returns the exit patch (transformation) which is used to
69  // transform the local geometry to the global geometry at exit of
70  // the misaligned element.
71  virtual Euclid3D getExitTransform() const;
72 
73 
75  virtual ElementBase *getElement() const;
76 
78  void setElement(ElementBase *);
79 
81  // Return the element geometry.
82  // Version for non-constant object.
83  virtual BGeometryBase &getGeometry() override;
84 
86  // Return the element geometry.
87  // Version for constant object.
88  virtual const BGeometryBase &getGeometry() const override;
89 
91  // This method can be used to get or set the offset. The offset is
92  // declared as mutable, so as to allow changing it in a constant
93  // structure.
94  Euclid3D &offset() const;
95 
97  // Returns the type std::string for the enclosed item.
98  virtual ElementBase::ElementBase::ElementType getType() const override;
99 
101  // This method returns [b]this[/b], since "this" is already an
102  // AlignWrapper.
103  virtual ElementBase *makeAlignWrapper() override;
104 
106  // Wrap the contained element in a field wrapper, unless such a
107  // wrapper already exists.
108  virtual ElementBase *makeFieldWrapper() override;
109 
111  // Return the element or field wrapper contained in "this".
112  // Version for non-const object.
113  virtual ElementBase *removeAlignWrapper() override;
114 
116  // Return the element or field wrapper contained in "this".
117  // Version for const object.
118  virtual const ElementBase *removeAlignWrapper() const override;
119 
121  // Remove any field wrapper on the contained object.
122  virtual ElementBase *removeFieldWrapper() override;
123 
125  // Remove the field wrapper for constant object.
126  virtual const ElementBase *removeFieldWrapper() const override;
127 
129  // This method removes all wrappers on the contained object.
130  // Version for non-const object.
131  virtual ElementBase *removeWrappers() override;
132 
134  // Version for const object.
135  virtual const ElementBase *removeWrappers() const override;
136 
137 private:
138 
139  AlignWrapper(const AlignWrapper &);
140  virtual ~AlignWrapper();
141 
142  // Constructor.
143  // Constructs an AlignWrapper wrapping the given element.
145 
146  // Not implemented.
147  AlignWrapper();
148  void operator=(const AlignWrapper &);
149 
150  // The pointer to the wrapped element.
152 
153  // The offset of the contained element.
154  // The data member [b]offset[/b] is declared mutable, so as to allow
155  // setting of a misalignment by a Visitor (algorithm) in an otherwise
156  // constant line. This mechanism protects the beam line structure against
157  // accidental change by a Visitor.
159 };
160 
161 #endif // CLASSIC_AlignWrapper_HH
virtual ElementBase * makeFieldWrapper() override
Allow field errors.
virtual ElementBase * copyStructure() override
Make structural copy.
virtual ElementBase * getElement() const
Return the contained element.
virtual ElementBase * removeWrappers() override
Return the design element.
virtual ~AlignWrapper()
Euclid3D & offset() const
Return the offset.
Interface for basic beam line object.
Definition: ElementBase.h:128
Define the position of a misaligned element.
Definition: AlignWrapper.h:39
virtual BGeometryBase & getGeometry() override
Get geometry.
virtual Euclid3D getEntranceTransform() const
Get entrance patch.
virtual ElementBase::ElementBase::ElementType getType() const override
Get element type std::string.
void setElement(ElementBase *)
Replace the contained element.
Abstract base class for accelerator geometry classes.
Definition: Geometry.h:43
virtual Euclid3D getExitTransform() const
Get exit patch.
virtual void makeSharable() override
Set sharable flag.
void operator=(const AlignWrapper &)
virtual ElementBase * makeAlignWrapper() override
Disallow misalignment of an already misaligned object.
Displacement and rotation in space.
Definition: Euclid3D.h:68
Euclid3D itsOffset
Definition: AlignWrapper.h:158
Pointer< ElementBase > itsElement
Definition: AlignWrapper.h:151
virtual void accept(BeamlineVisitor &) const override
Apply BeamlineVisitor.
virtual ElementBase * removeFieldWrapper() override
Remove field wrapper.
Abstract algorithm.
virtual ElementBase * removeAlignWrapper() override
Remove AlignWrapper.
virtual AlignWrapper * clone() const override
Return clone.