OPAL (Object Oriented Parallel Accelerator Library)  2.2.0
OPAL
BeamlineVisitor.h
Go to the documentation of this file.
1 #ifndef CLASSIC_BeamlineVisitor_HH
2 #define CLASSIC_BeamlineVisitor_HH
3 
4 // ------------------------------------------------------------------------
5 // $RCSfile: BeamlineVisitor.h,v $
6 // ------------------------------------------------------------------------
7 // $Revision: 1.1.1.1 $
8 // ------------------------------------------------------------------------
9 // Copyright: see Copyright.readme
10 // ------------------------------------------------------------------------
11 //
12 // Class: BeamlineVisitor
13 // Defines the abstract interface for a BeamlineVisitor.
14 //
15 // ------------------------------------------------------------------------
16 // Class category: AbsBeamline
17 // ------------------------------------------------------------------------
18 //
19 // $Date: 2000/03/27 09:32:31 $
20 // $Author: fci $
21 //
22 // ------------------------------------------------------------------------
23 
24 // Generic element classes interacting with a BeamlineVisitor.
25 class Component;
26 
27 // Beam line structure classes.
28 class Beamline;
29 class AlignWrapper;
30 class CorrectorWrapper;
31 class FlaggedElmPtr;
32 class MultipoleWrapper;
33 class RBendWrapper;
34 class SBendWrapper;
35 class CyclotronWrapper;
36 
37 // Specific element classes interacting with a BeamlineVisitor
38 class BeamBeam;
39 class BeamStripping;
40 class CCollimator;
41 class Corrector;
42 class Cyclotron;
43 class CyclotronValley;
44 class Degrader;
45 class Diagnostic;
46 class Drift;
47 class FlexibleCollimator;
48 class Lambertson;
49 class Marker;
50 class Monitor;
51 class Multipole;
52 class MultipoleT;
53 class MultipoleTStraight;
56 class Offset;
57 class ParallelPlate;
58 class Patch;
59 class Probe;
60 class RBend;
61 class RBend3D;
62 class RFCavity;
63 class RFQuadrupole;
64 class Ring;
65 class SBend;
66 class SBend3D;
67 class ScalingFFAMagnet;
68 class Separator;
69 class Septum;
70 class Solenoid;
71 class Source;
72 class Stripper;
73 class TravelingWave;
74 class VariableRFCavity;
76 class VerticalFFAMagnet;
77 
78 // Integrators.
79 class Integrator;
80 class MapIntegrator;
81 class TrackIntegrator;
82 
83 
84 // Class BeamlineVisitor
85 // ------------------------------------------------------------------------
87 // The abstract class BeamlineVisitor is the base class for all visitors
88 // (algorithms) that can iterator over a beam line representation.
89 // A BeamlineVisitor applies itself to the representation via the
90 // ``Visitor'' pattern, see
91 // [p]
92 // E. Gamma, R. Helm, R. Johnson, and J. Vlissides,
93 // [BR]
94 // Design Patterns, Elements of Reusable Object-Oriented Software.
95 // [p]
96 // By using only pure abstract classes as an interface between the
97 // BeamlineVisitor and the beam line representation,
98 // we decouple the former from the implementation details of the latter.
99 // [p]
100 // The interface is defined in such a way that a visitor cannot modify the
101 // structure of a beam line, but it can assign special data like misalignments
102 // or integrators without problems.
103 
105 
106 public:
107 
108  BeamlineVisitor();
109  virtual ~BeamlineVisitor();
110 
112  virtual void execute() = 0;
113 
115  virtual void visitBeamBeam(const BeamBeam &) = 0;
116 
118  virtual void visitBeamStripping(const BeamStripping &) = 0;
119 
121  virtual void visitCCollimator(const CCollimator &) = 0;
122 
124  virtual void visitComponent(const Component &) = 0;
125 
127  virtual void visitCorrector(const Corrector &) = 0;
128 
130  virtual void visitDegrader(const Degrader &) = 0;
131 
133  virtual void visitDiagnostic(const Diagnostic &) = 0;
134 
136  virtual void visitDrift(const Drift &) = 0;
137 
139  virtual void visitFlexibleCollimator(const FlexibleCollimator &) = 0;
140 
142  virtual void visitRing(const Ring &) = 0;
143 
145  virtual void visitCyclotron(const Cyclotron &) = 0;
146 
148  virtual void visitLambertson(const Lambertson &) = 0;
149 
151  virtual void visitOffset(const Offset &) = 0;
152 
154  virtual void visitMarker(const Marker &) = 0;
155 
157  virtual void visitMonitor(const Monitor &) = 0;
158 
160  virtual void visitMultipole(const Multipole &) = 0;
161 
163  virtual void visitMultipoleT(const MultipoleT &) = 0;
164 
166  virtual void visitMultipoleTStraight(const MultipoleTStraight &) = 0;
167 
170 
173 
175  virtual void visitPatch(const Patch &) = 0;
176 
178  virtual void visitProbe(const Probe &) = 0;
179 
181  virtual void visitRBend(const RBend &) = 0;
182 
184  virtual void visitRBend3D(const RBend3D &);
185 
187  virtual void visitRFCavity(const RFCavity &) = 0;
188 
190  virtual void visitVariableRFCavity(const VariableRFCavity &) = 0;
191 
194  (const VariableRFCavityFringeField &) = 0;
195 
197  virtual void visitTravelingWave(const TravelingWave &) = 0;
198 
200  virtual void visitRFQuadrupole(const RFQuadrupole &) = 0;
201 
203  virtual void visitSBend(const SBend &) = 0;
204 
206  virtual void visitSBend3D(const SBend3D &) = 0;
207 
209  virtual void visitSeparator(const Separator &) = 0;
210 
212  virtual void visitSeptum(const Septum &) = 0;
213 
215  virtual void visitSolenoid(const Solenoid &) = 0;
216 
218  virtual void visitScalingFFAMagnet(const ScalingFFAMagnet &) = 0;
219 
221  virtual void visitSource(const Source &) = 0;
222 
224  virtual void visitBeamline(const Beamline &) = 0;
225 
227  virtual void visitFlaggedElmPtr(const FlaggedElmPtr &) = 0;
228 
230  virtual void visitAlignWrapper(const AlignWrapper &) = 0;
231 
233  virtual void visitCorrectorWrapper(const CorrectorWrapper &) = 0;
234 
236  virtual void visitCyclotronWrapper(const CyclotronWrapper &) = 0;
237 
239  virtual void visitMultipoleWrapper(const MultipoleWrapper &) = 0;
240 
242  virtual void visitRBendWrapper(const RBendWrapper &) = 0;
243 
245  virtual void visitSBendWrapper(const SBendWrapper &) = 0;
246 
248  virtual void visitParallelPlate(const ParallelPlate &) = 0;
249 
251  virtual void visitCyclotronValley(const CyclotronValley &) = 0;
252 
254  virtual void visitStripper(const Stripper &) = 0;
255 
257  virtual void visitIntegrator(const Integrator &) = 0;
258 
260  virtual void visitTrackIntegrator(const TrackIntegrator &) = 0;
261 
263  virtual void visitMapIntegrator(const MapIntegrator &) = 0;
264 
266  virtual void visitVerticalFFAMagnet(const VerticalFFAMagnet &) = 0;
267 
268 private:
269 
270  // Not implemented.
272  void operator=(const BeamlineVisitor &);
273 };
274 
275 inline
277 
278 }
279 
280 #endif // CLASSIC_BeamlineVisitor_HH
Definition: Source.h:12
Interface for solenoids.
Definition: RBend3D.h:39
virtual void visitSource(const Source &)=0
Apply the algorithm to a source.
virtual void visitVariableRFCavityFringeField(const VariableRFCavityFringeField &)=0
Apply the algorithm to a variable RF cavity with Fringe Field.
Definition: Offset.h:66
virtual void visitDegrader(const Degrader &)=0
Apply the algorithm to a diagnostic.
Interface for septum magnet.
Definition: Septum.h:11
virtual void visitBeamStripping(const BeamStripping &)=0
Apply the algorithm to a beam stripping interaction.
Interface for electrostatic separator.
Definition: Separator.h:33
Interface for a Cyclotron.
Definition: Cyclotron.h:91
virtual void visitPatch(const Patch &)=0
Apply the algorithm to a patch.
Interface for beam position monitors.
Definition: Monitor.h:41
virtual void visitMarker(const Marker &)=0
Apply the algorithm to a marker.
Interface for RF Quadrupole.
Definition: RFQuadrupole.h:30
virtual void visitMultipoleTCurvedConstRadius(const MultipoleTCurvedConstRadius &)=0
Apply the algorithm to an arbitrary curved Multipole of constant radius.
Define the position of a misaligned element.
Definition: AlignWrapper.h:39
Interface for RF cavity.
Definition: ParallelPlate.h:36
virtual void visitMapIntegrator(const MapIntegrator &)=0
Apply the algorithm to an integrator capable of mapping.
virtual void visitSeptum(const Septum &)=0
Apply the algorithm to a septum magnet.
Interface for general corrector.
Definition: Corrector.h:35
Abstract collimator.
virtual void visitRFCavity(const RFCavity &)=0
Apply the algorithm to a RF cavity.
virtual void visitIntegrator(const Integrator &)=0
Apply the algorithm to a generic integrator.
Definition: RBend.h:73
Interface for beam diagnostics.
Definition: Diagnostic.h:32
Interface for a marker.
Definition: Marker.h:32
Representation of a perturbed multipole.
virtual void visitOffset(const Offset &)=0
Apply the algorithm to an Offset (placement).
virtual void visitSolenoid(const Solenoid &)=0
Apply the algorithm to a solenoid.
Interface for drift space.
Definition: Drift.h:33
virtual void visitLambertson(const Lambertson &)=0
Apply the algorithm to a Lambertson septum magnet.
virtual void visitMultipoleTCurvedVarRadius(const MultipoleTCurvedVarRadius &)=0
Apply the algorithm to an arbitrary curved Multipole of variable radius.
virtual void visitComponent(const Component &)=0
Apply the algorithm to an arbitrary component (catch all).
Interface for general multipole.
Definition: Multipole.h:46
virtual void visitRing(const Ring &)=0
Apply the algorithm to an Ring.
virtual void visitAlignWrapper(const AlignWrapper &)=0
Apply the algorithm to an align wrapper.
virtual void visitProbe(const Probe &)=0
Apply the algorithm to a probe.
Interface for probe.
Definition: Probe.h:16
virtual void visitSBendWrapper(const SBendWrapper &)=0
Apply the algorithm to an SBend wrapper.
virtual void visitCyclotronValley(const CyclotronValley &)=0
Apply the algorithm to a CyclotronValley.
virtual void visitStripper(const Stripper &)=0
Apply the algorithm to a particle stripper.
virtual void visitScalingFFAMagnet(const ScalingFFAMagnet &)=0
Apply the algorithm to a solenoid.
virtual void visitTrackIntegrator(const TrackIntegrator &)=0
Apply the algorithm to an integrator capable of tracking.
Interface for cyclotron collimator.
Definition: CCollimator.h:13
Abstract beam-beam interaction.
Definition: BeamBeam.h:37
Interface for RF cavity.
Definition: TravelingWave.h:37
Definition: SBend.h:68
Representation of a perturbed cyclotron.
virtual void visitRBend(const RBend &)=0
Apply the algorithm to a rectangular bend.
Interface for cyclotron valley.
virtual void visitMultipoleTStraight(const MultipoleTStraight &)=0
Apply the algorithm to an arbitrary straight Multipole.
Representation of a perturbed sector bend.
Definition: SBendWrapper.h:37
Interface for solenoids.
Definition: Solenoid.h:36
An abstract sequence of beam line components.
Definition: Beamline.h:37
Integrate particle.
virtual void visitDrift(const Drift &)=0
Apply the algorithm to a drift space.
virtual ~BeamlineVisitor()
virtual void visitCCollimator(const CCollimator &)=0
Apply the algorithm to a collimator.
Representation for a perturbed closed orbit corrector.
virtual void execute()=0
Execute the algorithm on the attached beam line.
virtual void visitVariableRFCavity(const VariableRFCavity &)=0
Apply the algorithm to a variable RF cavity.
virtual void visitCorrector(const Corrector &)=0
Apply the algorithm to a closed orbit corrector.
virtual void visitCyclotronWrapper(const CyclotronWrapper &)=0
Apply the algorithm to an corrector wrapper.
virtual void visitMultipoleWrapper(const MultipoleWrapper &)=0
Apply the algorithm to an multipole wrapper.
virtual void visitMultipoleT(const MultipoleT &)=0
Apply the algorithm to an arbitrary Multipole.
Interface for RF cavity.
Definition: RFCavity.h:37
virtual void visitBeamline(const Beamline &)=0
Apply the algorithm to a Beamline.
Abstract collimator.
Definition: Degrader.h:37
virtual void visitRFQuadrupole(const RFQuadrupole &)=0
Apply the algorithm to a RF quadrupole.
virtual void visitSeparator(const Separator &)=0
Apply the algorithm to an electrostatic separator.
void operator=(const BeamlineVisitor &)
virtual void visitFlexibleCollimator(const FlexibleCollimator &)=0
Apply the algorithm to a flexible collimator.
Base class for special integrators.
Definition: Integrator.h:41
virtual void visitSBend(const SBend &)=0
Apply the algorithm to a sector bend.
Ring describes a ring type geometry for tracking.
Definition: Ring.h:64
virtual void visitDiagnostic(const Diagnostic &)=0
Apply the algorithm to a diagnostic.
virtual void visitVerticalFFAMagnet(const VerticalFFAMagnet &)=0
Apply the algorithm to a vertical FFA magnet.
virtual void visitParallelPlate(const ParallelPlate &)=0
Apply the algorithm to an ParallelPlate.
virtual void visitBeamBeam(const BeamBeam &)=0
Apply the algorithm to a beam-beam interaction.
Interface for a geometric patch.
Definition: Patch.h:34
virtual void visitMonitor(const Monitor &)=0
Apply the algorithm to a beam position monitor.
virtual void visitFlaggedElmPtr(const FlaggedElmPtr &)=0
Apply the algorithm to a FlaggedElmPtr.
Interface for a single beam element.
Definition: Component.h:51
virtual void visitTravelingWave(const TravelingWave &)=0
Apply the algorithm to a RF cavity.
Representation of a perturbed rectangular bend.
Definition: RBendWrapper.h:37
virtual void visitCorrectorWrapper(const CorrectorWrapper &)=0
Apply the algorithm to an corrector wrapper.
virtual void visitMultipole(const Multipole &)=0
Apply the algorithm to a multipole.
Abstract algorithm.
virtual void visitCyclotron(const Cyclotron &)=0
Apply the algorithm to a cyclotron.
virtual void visitRBendWrapper(const RBendWrapper &)=0
Apply the algorithm to an RBend wrapper.
virtual void visitSBend3D(const SBend3D &)=0
Apply the algorithm to a Sector Bend with 3D field map.
virtual void visitRBend3D(const RBend3D &)
Apply the algorithm to a rectangular bend.
Interface for a Lambertson septum.
Definition: Lambertson.h:33
Integrate a map.
Definition: MapIntegrator.h:41
A section of a beam line.
Definition: FlaggedElmPtr.h:36