OPAL (Object Oriented Parallel Accelerator Library)  2.2.0
OPAL
ThinTracker.h
Go to the documentation of this file.
1 #ifndef CLASSIC_ThinTracker_HH
2 #define CLASSIC_ThinTracker_HH
3 
4 // ------------------------------------------------------------------------
5 // $RCSfile: ThinTracker.h,v $
6 // ------------------------------------------------------------------------
7 // $Revision: 1.1.1.1 $
8 // ------------------------------------------------------------------------
9 // Copyright: see Copyright.readme
10 // ------------------------------------------------------------------------
11 //
12 // Class: ThinTracker
13 //
14 // ------------------------------------------------------------------------
15 // Class category: Algorithms
16 // ------------------------------------------------------------------------
17 //
18 // $Date: 2000/03/27 09:32:33 $
19 // $Author: fci $
20 //
21 // ------------------------------------------------------------------------
22 
23 #include "Algorithms/Tracker.h"
24 
25 class BMultipoleField;
26 
27 template <class T, unsigned Dim>
28 class PartBunchBase;
29 class PlanarArcGeometry;
30 
31 
32 // Class ThinTracker
33 // ------------------------------------------------------------------------
35 // The visitor class for tracking a bunch of particles through a beamline
36 // using a thin-lens approximation for all elements.
37 // [P]
38 // Approximations used:
39 // [UL]
40 // [LI]All active elements are represented as thin lenses, sandwiched
41 // between two drifts, each half of the element length.
42 // [LI]Drifts are handled with a second-order approximation.
43 // [LI]Geometric transformations ignore rotations about transverse axes
44 // and translations along the design orbit and truncate after second order.
45 // [/UL]
46 
47 class ThinTracker: public Tracker {
48 
49 public:
50 
52  // The beam line to be tracked is [b]bl[/b].
53  // The particle reference data are taken from [b]data[/b].
54  // The particle bunch tracked is initially empty.
55  // If [b]revBeam[/b] is true, the beam runs from s = C to s = 0.
56  // If [b]revTrack[/b] is true, we track against the beam.
57  ThinTracker(const Beamline &bl, const PartData &data,
58  bool revBeam, bool revTrack);
59 
61  // The beam line to be tracked is [b]bl[/b].
62  // The particle reference data are taken from [b]data[/b].
63  // The particle bunch tracked is taken from [b]bunch[/b].
64  // If [b]revBeam[/b] is true, the beam runs from s = C to s = 0.
65  // If [b]revTrack[/b] is true, we track against the beam.
67  const PartData &data, bool revBeam, bool revTrack);
68 
69  virtual ~ThinTracker();
70 
72  virtual void visitBeamBeam(const BeamBeam &);
73 
75  virtual void visitBeamStripping(const BeamStripping &);
76 
78  virtual void visitCCollimator(const CCollimator &);
79 
81  virtual void visitCorrector(const Corrector &);
82 
84  virtual void visitDegrader(const Degrader &);
85 
87  virtual void visitDiagnostic(const Diagnostic &);
88 
90  virtual void visitDrift(const Drift &);
91 
93  virtual void visitFlexibleCollimator(const FlexibleCollimator &);
94 
96  virtual void visitLambertson(const Lambertson &);
97 
99  virtual void visitMarker(const Marker &);
100 
102  virtual void visitMonitor(const Monitor &);
103 
105  virtual void visitMultipole(const Multipole &);
106 
108  virtual void visitProbe(const Probe &);
109 
111  virtual void visitRBend(const RBend &);
112 
114  virtual void visitRFCavity(const RFCavity &);
115 
117  virtual void visitRFQuadrupole(const RFQuadrupole &);
118 
120  virtual void visitSBend(const SBend &);
121 
123  virtual void visitSeparator(const Separator &);
124 
126  virtual void visitSeptum(const Septum &);
127 
129  virtual void visitSolenoid(const Solenoid &);
130 
132  virtual void visitParallelPlate(const ParallelPlate &);
133 
135  virtual void visitCyclotronValley(const CyclotronValley &);
136 
137 private:
138 
139  // Not implemented.
140  ThinTracker();
141  ThinTracker(const ThinTracker &);
142  void operator=(const ThinTracker &);
143 
144  // Apply a drift length.
145  // Approximate method to gain speed.
146  void applyDrift(double length);
147 };
148 
149 #endif // CLASSIC_ThinTracker_HH
virtual void visitBeamStripping(const BeamStripping &)
Apply the algorithm to a beam stripping.
Interface for septum magnet.
Definition: Septum.h:11
Interface for electrostatic separator.
Definition: Separator.h:33
Interface for beam position monitors.
Definition: Monitor.h:41
Interface for RF Quadrupole.
Definition: RFQuadrupole.h:30
A simple arc in the XZ plane.
void operator=(const ThinTracker &)
Interface for RF cavity.
Definition: ParallelPlate.h:36
Particle reference data.
Definition: PartData.h:38
Interface for general corrector.
Definition: Corrector.h:35
Abstract collimator.
Definition: RBend.h:73
Interface for beam diagnostics.
Definition: Diagnostic.h:32
virtual void visitBeamBeam(const BeamBeam &)
Apply algorithm to BeamBeam.
Definition: ThinTracker.cpp:84
Interface for a marker.
Definition: Marker.h:32
Interface for drift space.
Definition: Drift.h:33
Interface for general multipole.
Definition: Multipole.h:46
virtual ~ThinTracker()
Definition: ThinTracker.cpp:80
virtual void visitSeptum(const Septum &)
Apply algorithm to Septum.
Interface for probe.
Definition: Probe.h:16
virtual void visitParallelPlate(const ParallelPlate &)
Apply algorithm to Solenoid.
Class: DataSink.
Definition: OpalData.h:29
virtual void visitSeparator(const Separator &)
Apply algorithm to Separator.
virtual void visitCorrector(const Corrector &)
Apply algorithm to Corrector.
Interface for cyclotron collimator.
Definition: CCollimator.h:13
virtual void visitDrift(const Drift &)
Apply algorithm to Drift.
virtual void visitSBend(const SBend &)
Apply algorithm to SBend.
Abstract beam-beam interaction.
Definition: BeamBeam.h:37
virtual void visitFlexibleCollimator(const FlexibleCollimator &)
Apply the algorithm to a flexible collimator.
Definition: SBend.h:68
Interface for cyclotron valley.
void applyDrift(double length)
Interface for solenoids.
Definition: Solenoid.h:36
An abstract sequence of beam line components.
Definition: Beamline.h:37
virtual void visitMarker(const Marker &)
Apply algorithm to Marker.
virtual void visitDegrader(const Degrader &)
Apply the algorithm to a drift.
virtual void visitMonitor(const Monitor &)
Apply algorithm to Monitor.
virtual void visitProbe(const Probe &)
Apply algorithm to Probe.
The magnetic field of a multipole.
Interface for RF cavity.
Definition: RFCavity.h:37
virtual void visitSolenoid(const Solenoid &)
Apply algorithm to Solenoid.
Abstract collimator.
Definition: Degrader.h:37
virtual void visitRFCavity(const RFCavity &)
Apply algorithm to RFCavity.
virtual void visitLambertson(const Lambertson &)
Apply algorithm to Lambertson.
virtual void visitDiagnostic(const Diagnostic &)
Apply algorithm to Diagnostic.
virtual void visitRBend(const RBend &)
Apply algorithm to RBend.
virtual void visitCCollimator(const CCollimator &)
Apply algorithm to Collimator.
virtual void visitRFQuadrupole(const RFQuadrupole &)
Apply algorithm to RFQuadrupole.
virtual void visitCyclotronValley(const CyclotronValley &)
Apply the algorithm to a CyclotronValley.
virtual void visitMultipole(const Multipole &)
Apply algorithm to Multipole.
Interface for a Lambertson septum.
Definition: Lambertson.h:33
Track with thin lens algorithm.
Definition: ThinTracker.h:47
Track particles or bunches.
Definition: Tracker.h:84