OPAL (Object Oriented Parallel Accelerator Library)  2.2.0
OPAL
ThickTracker.h
Go to the documentation of this file.
1 #ifndef OPAL_ThickTracker_HH
2 #define OPAL_ThickTracker_HH
3 
4 // ------------------------------------------------------------------------
5 // Copyright: see Copyright.readme
6 // ------------------------------------------------------------------------
7 //
8 // Class: ThickTracker
9 //
10 // ------------------------------------------------------------------------
11 //
12 // $Author: ganz_p $
13 //
14 // ------------------------------------------------------------------------
15 
16 #include "Algorithms/Tracker.h"
17 #include "Structure/DataSink.h"
18 
19 #include "Hamiltonian.h"
20 
21 #include "MapAnalyser.h"
22 
23 #include "Algorithms/IndexMap.h"
24 #include "AbsBeamline/BeamBeam.h"
27 #include "AbsBeamline/Corrector.h"
29 #include "AbsBeamline/Diagnostic.h"
30 #include "AbsBeamline/Degrader.h"
31 #include "AbsBeamline/Drift.h"
34 #include "AbsBeamline/Lambertson.h"
35 #include "AbsBeamline/Marker.h"
36 #include "AbsBeamline/Monitor.h"
37 #include "AbsBeamline/Multipole.h"
39 #include "AbsBeamline/Probe.h"
40 #include "AbsBeamline/RFCavity.h"
42 #include "AbsBeamline/RBend.h"
43 #include "AbsBeamline/RBend3D.h"
44 #include "AbsBeamline/SBend.h"
45 #include "AbsBeamline/Separator.h"
46 #include "AbsBeamline/Septum.h"
47 #include "AbsBeamline/Solenoid.h"
49 
50 #include "Elements/OpalBeamline.h"
51 
52 #include "Structure/Beam.h"
53 
54 //#include <array>
55 #include <cmath>
56 
57 #include <tuple>
58 
59 class BMultipoleField;
60 
61 template <class T, unsigned Dim>
62 class PartBunchBase;
63 
64 
65 
66 // Class ThickTracker
67 // ------------------------------------------------------------------------
69 // [p]
70 // Phase space coordinates numbering:
71 // [tab 3 b]
72 // [row]number [&]name [&]unit [/row]
73 // [row]0 [&]$x$ [&]metres [/row]
74 // [row]1 [&]$p_x/p_r$ [&]1 [/row]
75 // [row]2 [&]$y$ [&]metres [/row]
76 // [row]3 [&]$p_y/p_r$ [&]1 [/row]
77 // [row]4 [&]$v*delta_t$ [&]metres [/row]
78 // [row]5 [&]$delta_p/p_r$ [&]1 [/row]
79 // [/tab][p]
80 // Where $p_r$ is the constant reference momentum defining the reference
81 // frame velocity, $m$ is the rest mass of the particles, and $v$ is the
82 // instantaneous velocity of the particle.
83 // [p]
84 // Other units used:
85 // [tab 2 b]
86 // [row]quantity [&]unit [/row]
87 // [row]reference momentum [&]electron-volts [/row]
88 // [row]velocity [&]metres/second [/row]
89 // [row]accelerating voltage [&]volts [/row]
90 // [row]separator voltage [&]volts [/row]
91 // [row]frequencies [&]hertz [/row]
92 // [row]phase lags [&]$2*pi$ [/row]
93 // [/tab][p]
94 // Approximations used:
95 // [ul]
96 // [li]
97 // [li]
98 // [li]
99 // [/ul]
100 //
101 // On going through an element, we use the following steps:
102 // To complete the map, we propagate the closed orbit and add that to the map.
103 
104 class ThickTracker: public Tracker {
105 
106 public:
112  typedef std::tuple<series_t, std::size_t, double> tuple_t;
113  typedef std::list<tuple_t> beamline_t;
114 
115 public:
116 
118  // The beam line to be tracked is "bl".
119  // The particle reference data are taken from "data".
120  // The particle bunch tracked is initially empty.
121  // If [b]revBeam[/b] is true, the beam runs from s = C to s = 0.
122  // If [b]revTrack[/b] is true, we track against the beam.
123  explicit ThickTracker(const Beamline &bl, const PartData &data,
124  bool revBeam, bool revTrack);
125 
127  // The beam line to be tracked is "bl".
128  // The particle reference data are taken from "data".
129  // The particle bunch tracked is taken from [b]bunch[/b].
130  // If [b]revBeam[/b] is true, the beam runs from s = C to s = 0.
131  // If [b]revTrack[/b] is true, we track against the beam.
132  explicit ThickTracker(const Beamline &bl,
134  Beam &beam,
135  DataSink &ds,
136  const PartData &data,
137  bool revBeam, bool revTrack,
138  const std::vector<unsigned long long> &maxSTEPS,
139  double zstart,
140  const std::vector<double> &zstop,
141  const std::vector<double> &dt,
142  const int& truncOrder);
143 
144  virtual ~ThickTracker();
145 
146 
147  virtual void visitAlignWrapper(const AlignWrapper &);
148 
150  virtual void visitBeamBeam(const BeamBeam &);
151 
153  virtual void visitBeamStripping(const BeamStripping &);
154 
156  virtual void visitCCollimator(const CCollimator &);
157 
159  virtual void visitCorrector(const Corrector &);
160 
162  virtual void visitDegrader(const Degrader &);
163 
165  virtual void visitDiagnostic(const Diagnostic &);
166 
168  virtual void visitDrift(const Drift &);
169 
171  virtual void visitFlexibleCollimator(const FlexibleCollimator &);
172 
174  virtual void visitLambertson(const Lambertson &);
175 
177  virtual void visitMarker(const Marker &);
178 
180  virtual void visitMonitor(const Monitor &);
181 
183  virtual void visitMultipole(const Multipole &);
185  virtual void visitProbe(const Probe &);
186 
188  virtual void visitRBend(const RBend &);
189 
191  virtual void visitRFCavity(const RFCavity &);
192 
194  virtual void visitTravelingWave(const TravelingWave &);
195 
197  virtual void visitRFQuadrupole(const RFQuadrupole &);
198 
200  virtual void visitSBend(const SBend &);
201 
203  virtual void visitSeparator(const Separator &);
204 
206  virtual void visitSeptum(const Septum &);
207 
209  virtual void visitSolenoid(const Solenoid &);
210 
212  virtual void visitParallelPlate(const ParallelPlate &);
213 
215  virtual void visitCyclotronValley(const CyclotronValley &);
216 
217 
218 
220  // overwrite the execute-methode from DefaultVisitor
221  virtual void visitBeamline(const Beamline &);
222 
224  // overwrite the execute-methode from DefaultVisitor
225  virtual void execute();
226 
227  void prepareSections();
228 
229  /*
230  void insertFringeField(SBend* pSBend, std::list<structMapTracking>& mBL, double& beta0,
231  double& gamma0, double& P0, double& q, std::array<double,2>& entrFringe, std::string e);
232  */
233 private:
234 
235 
236  // Not implemented.
237  ThickTracker() = delete;
238  ThickTracker(const ThickTracker &) = delete;
239  void operator=(const ThickTracker &) = delete;
240 
241  void throwElementError_m(std::string element) {
242  throw LogicalError("ThickTracker::execute()",
243  "Element '" + element + "' not supported.");
244  }
245 
246 
247 
251  void checkElementOrder_m();
252 
256  void fillGaps_m();
257 
261  void track_m();
262 
264  const Vector_t& P) const;
265 
266  void vectorToParticle_m(const particle_t& particle,
267  Vector_t& R,
268  Vector_t& P) const;
269 
274  void advanceParticles_m(const map_t& map);
275 
281  void updateParticle_m(particle_t& particle,
282  const map_t& map);
283 
287  void dump_m();
288 
289 
295  void update_m(const double& spos,
296  const std::size_t& step);
297 
298 
303  void write_m(const map_t& map);
304 
313  void concatenateMaps_m(const map_t& x, map_t& y);
314 
315 
334  void advanceDispersion_m(fMatrix_t tempMatrix,
335  FMatrix<double, 1, 4> initialVal,
336  double pos);
337 
346  void applyEntranceFringe(double edge, double curve,
347  const BMultipoleField &field, double scale);
348 
357  void applyExitFringe(double edge, double curve,
358  const BMultipoleField &field, double scale);
359 
360 
363 
364 
367 
369 
371 
372  double zstart_m;
373  double zstop_m;
374  double threshold_m;
376 
378 
379 
381 
385 };
386 
388 // itsOpalBeamline_m.visit(wrap, *this, itsBunch_m);
389  this->throwElementError_m("AlignWrapper");
390 }
391 
392 inline void ThickTracker::visitBeamBeam(const BeamBeam &bb) {
393 // itsOpalBeamline_m.visit(bb, *this, itsBunch_m);
394  this->throwElementError_m("BeamBeam");
395 }
396 
398  itsOpalBeamline_m.visit(bstp, *this, itsBunch_m);
399 }
400 
401 inline void ThickTracker::visitCCollimator(const CCollimator &coll) {
402 // itsOpalBeamline_m.visit(coll, *this, itsBunch_m);
403  this->throwElementError_m("CCollimator");
404 }
405 
406 
407 inline void ThickTracker::visitCorrector(const Corrector &corr) {
408 // itsOpalBeamline_m.visit(corr, *this, itsBunch_m);
409  this->throwElementError_m("Corrector");
410 }
411 
412 
414 // itsOpalBeamline_m.visit(deg, *this, itsBunch_m);
415  this->throwElementError_m("Degrader");
416 }
417 
418 
419 inline void ThickTracker::visitDiagnostic(const Diagnostic &diag) {
420 // itsOpalBeamline_m.visit(diag, *this, itsBunch_m);
421  this->throwElementError_m("Diagnostic");
422 }
423 
424 
425 inline void ThickTracker::visitDrift(const Drift &drift) {
426  itsOpalBeamline_m.visit(drift, *this, itsBunch_m);
427 
428 
429  double gamma = itsReference.getGamma();
430  std::size_t nSlices = drift.getNSlices();
431  double length = drift.getElementLength();
432 
433  elements_m.push_back(std::make_tuple(hamiltonian_m.drift(gamma),
434  nSlices,
435  length));
436 }
437 
438 
440 // itsOpalBeamline_m.visit(coll, *this, itsBunch_m);
441  this->throwElementError_m("FlexibleCollimator");
442 }
443 
444 
445 inline void ThickTracker::visitLambertson(const Lambertson &lamb) {
446 // itsOpalBeamline_m.visit(lamb, *this, itsBunch_m);
447  this->throwElementError_m("Lambertson");
448 }
449 
450 
451 inline void ThickTracker::visitMarker(const Marker &marker) {
452 // itsOpalBeamline_m.visit(marker, *this, itsBunch_m);
453 // this->throwElementError_m("Marker");
454 }
455 
456 
457 inline void ThickTracker::visitMonitor(const Monitor &mon) {
458 // itsOpalBeamline_m.visit(mon, *this, itsBunch_m);
459  this->throwElementError_m("Monitor");
460 }
461 
462 
463 inline void ThickTracker::visitMultipole(const Multipole &mult) {
464  itsOpalBeamline_m.visit(mult, *this, itsBunch_m);
465 
466  std::size_t nSlices = mult.getNSlices();
467  double length = mult.getElementLength();
468  double gamma = itsReference.getGamma();
469  double p0 = itsReference.getP();
470  double q = itsReference.getQ(); // particle change [e]
471  double gradB = mult.getField().getNormalComponent(2) * ( Physics::c/ p0 ); // [T / m]
472  //FIXME remove the next line
473  gradB = std::round(gradB*1e6)*1e-6;
474 
475  double k1 = gradB * q *Physics::c / p0; // [1 / m^2]
476 
477  elements_m.push_back(std::make_tuple(hamiltonian_m.quadrupole(gamma, q, k1),
478  nSlices,
479  length));
480 }
481 
482 inline void ThickTracker::visitProbe(const Probe &prob) {
483 // itsOpalBeamline_m.visit(prob, *this, itsBunch_m);
484  this->throwElementError_m("Probe");
485 }
486 
487 
488 inline void ThickTracker::visitRBend(const RBend &bend) {
489 // itsOpalBeamline_m.visit(bend, *this, itsBunch_m);
490  this->throwElementError_m("RBend");
491 }
492 
493 
494 inline void ThickTracker::visitRFCavity(const RFCavity &as) {
495 // itsOpalBeamline_m.visit(as, *this, itsBunch_m);
496  this->throwElementError_m("RFCavity");
497 }
498 
500 // itsOpalBeamline_m.visit(as, *this, itsBunch_m);
501  this->throwElementError_m("TravelingWave");
502 }
503 
504 
506 // itsOpalBeamline_m.visit(rfq, *this, itsBunch_m);
507  this->throwElementError_m("RFQuadrupole");
508 }
509 
510 inline void ThickTracker::visitSBend(const SBend &bend) {
511  itsOpalBeamline_m.visit(bend, *this, itsBunch_m);
512 
513  double q = itsReference.getQ(); // particle change [e]
514  double ekin = bend.getDesignEnergy();
515 
516  double m = itsReference.getM(); // eV / c^2
517  double gamma = ekin / m + 1.0;
518  double beta = std::sqrt(1.0 - 1.0 / ( gamma * gamma ) );
519  double p0 = gamma * beta * m; // eV / c
520 
521  double B = bend.getB() * Physics::c / p0; // T = V * s / m^2
522  double r = std::abs(p0 / ( q * B * Physics::c )); // m
523 
524  double k0 = B * q * Physics::c / p0; // V * s * e * m / (m^2 * s * c )
525 
526  // [1/m]
527  double h = 1.0 / r;
528 
529  double L = bend.getElementLength();
530 
531  if ( k0 < 0.0 )
532  h *= -1.0;
533 
534  std::size_t nSlices = bend.getNSlices();
535 
536  double arclength = 2.0 * r * std::asin( L / ( 2.0 * r ) ); //bend.getEffectiveLength();
537 
538  // Fringe fields currently not working
539  //FIXME e1 not initialised
540  //insert Entrance Fringefield
541  double e1 = bend.getEntranceAngle();
542  if (std::abs(e1) > 1e-6){
543  elements_m.push_back(std::make_tuple(hamiltonian_m.fringeField(e1, h),
544  1, 0.0));
545  }
546 
547  //insert Dipole "body"
548  elements_m.push_back(std::make_tuple(hamiltonian_m.sbend(gamma, h, k0),
549  nSlices,
550  arclength));
551 
552  //FIXME e2 not initialised
553  //insert Exit Fringe field
554  double e2 = bend.getExitAngle();
555  if (std::abs(e2) > 1e-6){
556  elements_m.push_back(std::make_tuple(hamiltonian_m.fringeField(e2, h),
557  1, 0.0));
558  }
559 
560 }
561 
562 
563 inline void ThickTracker::visitSeparator(const Separator &sep) {
564 // itsOpalBeamline_m.visit(sep, *this, itsBunch_m);
565  this->throwElementError_m("Separator");
566 }
567 
568 
569 inline void ThickTracker::visitSeptum(const Septum &sept) {
570 // itsOpalBeamline_m.visit(sept, *this, itsBunch_m);
571  this->throwElementError_m("Septum");
572 }
573 
574 
575 inline void ThickTracker::visitSolenoid(const Solenoid &solenoid) {
576 // itsOpalBeamline_m.visit(solenoid, *this, itsBunch_m);
577  this->throwElementError_m("Solenoid");
578 }
579 
580 
582 // itsOpalBeamline_m.visit(pplate, *this, itsBunch_m);
583  this->throwElementError_m("ParallelPlate");
584 }
585 
587 // itsOpalBeamline_m.visit(cv, *this, itsBunch_m);
588  this->throwElementError_m("CyclotronValley");
589 }
590 
591 #endif // OPAL_ThickTracker_HH
void checkElementOrder_m()
virtual void visitSeparator(const Separator &)
Apply the algorithm to a Separator.
Definition: ThickTracker.h:563
virtual double getB() const =0
Get dipole field of SBend.
virtual void visitDegrader(const Degrader &)
Apply the algorithm to a Degrader.
Definition: ThickTracker.h:413
void write_m(const map_t &map)
CoordinateSystemTrafo referenceToLabCSTrafo_m
Definition: ThickTracker.h:377
void advanceParticles_m(const map_t &map)
PETE_TUTree< FnAbs, typename T::PETE_Expr_t > abs(const PETE_Expr< T > &l)
constexpr double e
The value of .
Definition: Physics.h:40
Definition: TSVMeta.h:24
IpplTimings::TimerRef mapCreation_m
creation of elements_m
Definition: ThickTracker.h:382
Interface for septum magnet.
Definition: Septum.h:11
std::tuple< series_t, std::size_t, double > tuple_t
Definition: ThickTracker.h:112
OpalBeamline itsOpalBeamline_m
Definition: ThickTracker.h:370
virtual BMultipoleField & getField() override=0
Get multipole field.
virtual void visitRBend(const RBend &)
Apply the algorithm to a RBend.
Definition: ThickTracker.h:488
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
IpplTimings::TimerRef mapTracking_m
track particles trough maps of elements_m
Definition: ThickTracker.h:384
Define the position of a misaligned element.
Definition: AlignWrapper.h:39
Interface for RF cavity.
Definition: ParallelPlate.h:36
Particle reference data.
Definition: PartData.h:38
void advanceDispersion_m(fMatrix_t tempMatrix, FMatrix< double, 1, 4 > initialVal, double pos)
Writes Dispersion in X and Y plane.
virtual void visitProbe(const Probe &)
Apply the algorithm to a Probe.
Definition: ThickTracker.h:482
Interface for general corrector.
Definition: Corrector.h:35
Abstract collimator.
Definition: RBend.h:73
Interface for beam diagnostics.
Definition: Diagnostic.h:32
Hamiltonian::series_t fringeField(const double &phi, const double &k0)
Interface for a marker.
Definition: Marker.h:32
void updateParticle_m(particle_t &particle, const map_t &map)
virtual void visitMonitor(const Monitor &)
Apply the algorithm to a Monitor.
Definition: ThickTracker.h:457
Interface for drift space.
Definition: Drift.h:33
MapAnalyser::fMatrix_t fMatrix_t
Definition: ThickTracker.h:108
ThickTracker()=delete
virtual void visitParallelPlate(const ParallelPlate &)
Apply the algorithm to a ParallelPlate.
Definition: ThickTracker.h:581
double getDesignEnergy() const
Definition: BendBase.h:120
virtual void visitTravelingWave(const TravelingWave &)
Apply the algorithm to a RFCavity.
Definition: ThickTracker.h:499
Interface for general multipole.
Definition: Multipole.h:46
Hamiltonian::series_t drift(const double &gamma0)
Definition: Hamiltonian.cpp:16
virtual void visitBeamStripping(const BeamStripping &)
Apply the algorithm to a BeamStripping.
Definition: ThickTracker.h:397
virtual void visitRFQuadrupole(const RFQuadrupole &)
Apply the algorithm to a RFQuadrupole.
Definition: ThickTracker.h:505
T deg(T x)
Convert radians to degrees.
Definition: matheval.hpp:82
virtual void visitCorrector(const Corrector &)
Apply the algorithm to a Corrector.
Definition: ThickTracker.h:407
std::size_t getNSlices() const
Definition: Drift.cpp:68
Interface for probe.
Definition: Probe.h:16
double zstart_m
Start of beam line.
Definition: ThickTracker.h:372
virtual void visitSBend(const SBend &)
Apply the algorithm to a SBend.
Definition: ThickTracker.h:510
FVector< double, 6 > particle_t
Definition: ThickTracker.h:111
beamline_t elements_m
elements in beam line
Definition: ThickTracker.h:375
virtual void visitSeptum(const Septum &)
Apply the algorithm to a Septum.
Definition: ThickTracker.h:569
Class: DataSink.
Definition: OpalData.h:29
IpplTimings::TimerRef mapCombination_m
map accumulation along elements_m -&gt; Transfermap
Definition: ThickTracker.h:383
void fillGaps_m()
Fills undefined beam path with a Drift Space.
double getQ() const
The constant charge per particle.
Definition: PartData.h:107
virtual void visitRFCavity(const RFCavity &)
Apply the algorithm to a RFCavity.
Definition: ThickTracker.h:494
virtual double getElementLength() const
Get design length.
Definition: ElementBase.h:511
virtual void visitMarker(const Marker &)
Apply the algorithm to a Marker.
Definition: ThickTracker.h:451
virtual ~ThickTracker()
double getNormalComponent(int n) const
Get component.
constexpr double c
The velocity of light in m/s.
Definition: Physics.h:52
void applyExitFringe(double edge, double curve, const BMultipoleField &field, double scale)
Interface for cyclotron collimator.
Definition: CCollimator.h:13
Hamiltonian hamiltonian_m
Definition: ThickTracker.h:361
particle_t particleToVector_m(const Vector_t &R, const Vector_t &P) const
virtual void visitBeamline(const Beamline &)
Apply the algorithm to a beam line.
void vectorToParticle_m(const particle_t &particle, Vector_t &R, Vector_t &P) const
Abstract beam-beam interaction.
Definition: BeamBeam.h:37
void visit(const T &, BeamlineVisitor &, PartBunchBase< double, 3 > *)
Definition: OpalBeamline.h:98
Interface for RF cavity.
Definition: TravelingWave.h:37
void prepareSections()
std::size_t getNSlices() const
Definition: Multipole.cpp:165
Definition: SBend.h:68
void applyEntranceFringe(double edge, double curve, const BMultipoleField &field, double scale)
Interface for cyclotron valley.
virtual void visitCyclotronValley(const CyclotronValley &)
Apply the algorithm to a CyclotronValley.
Definition: ThickTracker.h:586
std::size_t getNSlices() const
Definition: Bend2D.cpp:1689
FVps< double, 6 > map_t
Definition: ThickTracker.h:110
Interface for solenoids.
Definition: Solenoid.h:36
double zstop_m
End of beam line.
Definition: ThickTracker.h:373
An abstract sequence of beam line components.
Definition: Beamline.h:37
const PartData itsReference
The reference information.
virtual double getExitAngle() const
Definition: Bend2D.h:357
virtual void visitLambertson(const Lambertson &)
Apply the algorithm to a Lambertson.
Definition: ThickTracker.h:445
virtual void visitBeamBeam(const BeamBeam &)
Apply the algorithm to a BeamBeam.
Definition: ThickTracker.h:392
Tps< T > sqrt(const Tps< T > &x)
Square root.
Definition: TpsMath.h:91
Hamiltonian::series_t sbend(const double &gamma0, const double &h, const double &k0)
Definition: Hamiltonian.cpp:55
double getP() const
The constant reference momentum per particle.
Definition: PartData.h:117
double getGamma() const
The relativistic gamma per particle.
Definition: PartData.h:132
void throwElementError_m(std::string element)
Definition: ThickTracker.h:241
Track using thick-lens algorithm.
Definition: ThickTracker.h:104
The magnetic field of a multipole.
virtual void visitDiagnostic(const Diagnostic &)
Apply the algorithm to a Diagnostic.
Definition: ThickTracker.h:419
MapAnalyser mapAnalyser_m
Definition: ThickTracker.h:362
Vector_t RefPartR_m
Definition: ThickTracker.h:365
Interface for RF cavity.
Definition: RFCavity.h:37
double getM() const
The constant mass per particle.
Definition: PartData.h:112
DataSink * itsDataSink_m
Definition: ThickTracker.h:368
Abstract collimator.
Definition: Degrader.h:37
The BEAM definition.
Definition: Beam.h:35
virtual void visitDrift(const Drift &)
Apply the algorithm to a Drift.
Definition: ThickTracker.h:425
virtual void visitMultipole(const Multipole &)
Apply the algorithm to a Multipole.
Definition: ThickTracker.h:463
virtual void visitCCollimator(const CCollimator &)
Apply the algorithm to a collimator.
Definition: ThickTracker.h:401
double threshold_m
Threshold for element overlaps and gaps.
Definition: ThickTracker.h:374
void update_m(const double &spos, const std::size_t &step)
MapAnalyser::cfMatrix_t cfMatrix_t
Definition: ThickTracker.h:109
virtual void visitFlexibleCollimator(const FlexibleCollimator &)
Apply the algorithm to a flexible collimator.
Definition: ThickTracker.h:439
PETE_TUTree< FnArcSin, typename T::PETE_Expr_t > asin(const PETE_Expr< T > &l)
Definition: PETE.h:809
Hamiltonian::series_t series_t
Definition: ThickTracker.h:107
Timing::TimerRef TimerRef
Definition: IpplTimings.h:176
void concatenateMaps_m(const map_t &x, map_t &y)
double getEntranceAngle() const
Definition: BendBase.h:97
virtual void execute()
Apply the algorithm to the top-level beamline.
Logical error exception.
Definition: LogicalError.h:33
virtual void visitSolenoid(const Solenoid &)
Apply the algorithm to a Solenoid.
Definition: ThickTracker.h:575
std::list< tuple_t > beamline_t
Definition: ThickTracker.h:113
PartBunchBase< double, 3 > * itsBunch_m
The bunch of particles to be tracked.
Definition: Tracker.h:174
void operator=(const ThickTracker &)=delete
virtual void visitAlignWrapper(const AlignWrapper &)
Apply the algorithm to an align wrapper.
Definition: ThickTracker.h:387
Interface for a Lambertson septum.
Definition: Lambertson.h:33
Vector_t RefPartP_m
Definition: ThickTracker.h:366
Hamiltonian::series_t quadrupole(const double &gamma0, const double &q, const double &k1)
int truncOrder_m
truncation order of map tracking
Definition: ThickTracker.h:380
Track particles or bunches.
Definition: Tracker.h:84