OPAL (Object Oriented Parallel Accelerator Library)  2021.1.99
OPAL
ParallelCyclotronTracker.h
Go to the documentation of this file.
1 //
2 // Class ParallelCyclotronTracker
3 // Tracker for OPAL-Cycl
4 //
5 // Copyright (c) 2007 - 2014, Jianjun Yang, Andreas Adelmann and Matthias Toggweiler,
6 // Paul Scherrer Institut, Villigen PSI, Switzerland
7 // Copyright (c) 2014, Daniel Winklehner, MIT, Cambridge, MA, USA
8 // Copyright (c) 2012 - 2020, Paul Scherrer Institut, Villigen PSI, Switzerland
9 // All rights reserved
10 //
11 // Implemented as part of the PhD thesis
12 // "Beam dynamics in high intensity cyclotrons including neighboring bunch effects"
13 // and the paper
14 // "Beam dynamics in high intensity cyclotrons including neighboring bunch effects:
15 // Model, implementation, and application"
16 // (https://journals.aps.org/prab/pdf/10.1103/PhysRevSTAB.13.064201)
17 //
18 // This file is part of OPAL.
19 //
20 // OPAL is free software: you can redistribute it and/or modify
21 // it under the terms of the GNU General Public License as published by
22 // the Free Software Foundation, either version 3 of the License, or
23 // (at your option) any later version.
24 //
25 // You should have received a copy of the GNU General Public License
26 // along with OPAL. If not, see <https://www.gnu.org/licenses/>.
27 //
28 #ifndef OPAL_ParallelCyclotronTracker_HH
29 #define OPAL_ParallelCyclotronTracker_HH
30 
31 #include "Algorithms/Tracker.h"
33 #include <vector>
34 #include <tuple>
35 #include <memory>
36 
37 #include "MultiBunchHandler.h"
38 #include "Steppers/Steppers.h"
39 
40 class DataSink;
41 class PluginElement;
42 class LossDataSink;
43 
44 template <class T, unsigned Dim>
45 class PartBunchBase;
46 
49  double sinAzimuth;
50  double cosAzimuth;
52 };
53 
55 
56 public:
57 
58  enum class MODE {
59  UNDEFINED = -1,
60  SINGLE = 0,
61  SEO = 1,
62  BUNCH = 2
63  };
64  typedef std::vector<double> dvector_t;
65  typedef std::vector<int> ivector_t;
66  typedef std::pair<double[8], Component *> element_pair;
67  typedef std::pair<ElementBase::ElementType, element_pair> type_pair;
68  typedef std::list<type_pair *> beamline_list;
69 
71  // The beam line to be tracked is "bl".
72  // The particle reference data are taken from "data".
73  // The particle bunch tracked is taken from [b]bunch[/b].
74  // If [b]revBeam[/b] is true, the beam runs from s = C to s = 0.
75  // If [b]revTrack[/b] is true, we track against the beam.
77  const PartData &data, bool revBeam,
78  bool revTrack, int maxSTEPS,
79  int timeIntegrator,
80  const int& numBunch,
81  const double& mbEta,
82  const double& mbPara,
83  const std::string& mbMode,
84  const std::string& mbBinning);
85 
86  virtual ~ParallelCyclotronTracker();
87 
89  // overwrite the execute-methode from DefaultVisitor
90  virtual void execute();
91 
93  // overwrite the execute-methode from DefaultVisitor
94  virtual void visitBeamline(const Beamline &);
95 
97  virtual void visitCCollimator(const CCollimator &);
98 
100  virtual void visitCorrector(const Corrector &);
101 
103  virtual void visitCyclotron(const Cyclotron &cycl);
104 
106  virtual void visitDegrader(const Degrader &);
107 
109  virtual void visitDrift(const Drift &);
110 
112  virtual void visitFlexibleCollimator(const FlexibleCollimator &);
113 
115  virtual void visitMarker(const Marker &);
116 
118  virtual void visitMonitor(const Monitor &);
119 
121  virtual void visitMultipole(const Multipole &);
122 
124  virtual void visitMultipoleT (const MultipoleT &);
125 
127  virtual void visitMultipoleTStraight (const MultipoleTStraight &);
128 
131 
134 
136  virtual void visitOffset(const Offset &);
137 
139  virtual void visitProbe(const Probe &);
140 
142  virtual void visitRBend(const RBend &);
143 
145  virtual void visitRFCavity(const RFCavity &);
146 
148  virtual void visitRing(const Ring &ring);
149 
151  virtual void visitSBend(const SBend &);
152 
154  virtual void visitSBend3D(const SBend3D &);
155 
157  virtual void visitScalingFFAMagnet(const ScalingFFAMagnet &bend);
158 
160  virtual void visitSeptum(const Septum &);
161 
163  virtual void visitSolenoid(const Solenoid &);
164 
166  virtual void visitStripper(const Stripper &);
167 
169  virtual void visitVacuum(const Vacuum &);
170 
172  virtual void visitVariableRFCavity(const VariableRFCavity &cav);
173 
176  (const VariableRFCavityFringeField &cav);
177 
179  virtual void visitVerticalFFAMagnet(const VerticalFFAMagnet &bend);
180 
182  inline void setLastDumpedStep(const int para) {lastDumpedStep_m = para ; }
183 
185  inline void setPr(double x) {referencePr = x;}
186  inline void setPt(double x) {referencePt = x;}
187  inline void setPz(double x) {referencePz = x;}
188  inline void setR(double x) {referenceR = x;}
189  inline void setTheta(double x) {referenceTheta = x;}
190  inline void setZ(double x) {referenceZ = x;}
191  inline void setBeGa(double x) {bega = x;}
192  inline void setPhi(double x) {referencePhi = x;}
193  inline void setPsi(double x) {referencePsi = x;}
194  inline void setPreviousH5Local(bool x) {previousH5Local = x;}
198 
199 private:
200 
201  // Not implemented.
205 
207  std::list<Component *> myElements;
209  std::vector<PluginElement*> pluginElements_m;
210  std::vector<CavityCrossData> cavCrossDatas_m;
211 
213 
215 
217 
220 
222  static Vector_t const xaxis;
223  static Vector_t const yaxis;
224  static Vector_t const zaxis;
225 
227  double bega;
228  double referenceR;
230  double referenceZ = 0.0;
231 
232  double referencePr;
233  double referencePt;
234  double referencePz = 0.0;
236 
237  double referencePsi;
238  double referencePhi;
239 
240  bool spiral_flag = false;
241 
243 
245 
248 
249  // only used for multi-bunch mode
250  std::unique_ptr<MultiBunchHandler> mbHandler_m;
251 
253 
254  // for each bunch we have a path length
255  double pathLength_m;
256  // Multi time step tracker
257  void MtsTracker();
258 
259  void GenericTracker();
260  bool getFieldsAtPoint(const double &t, const size_t &Pindex, Vector_t &Efield, Vector_t &Bfield);
261 
262  /*
263  Local Variables both used by the integration methods
264  */
265 
266  long long step_m;
267  long long restartStep0_m;
268 
270 
271  // only for dumping
272  double azimuth_m;
274 
275  /* only for dumping to stat-file --> make azimuth monotonically increasing
276  * @param theta computed azimuth [deg]
277  * @param prevAzimuth previous angle [deg]
278  * @param azimuth to be updated [deg]
279  * @param bunchNr in restart mode only --> to compute initial azimuth
280  */
281  void dumpAngle(const double& theta,
282  double& prevAzimuth,
283  double& azimuth,
284  const short& bunchNr = 0);
285 
286  double computeRadius(const Vector_t& meanR) const;
287 
288  void computePathLengthUpdate(std::vector<double>& dl, const double& dt);
289 
290  // external field arrays for dumping
292 
293  const int myNode_m;
294  const size_t initialLocalNum_m;
295  const size_t initialTotalNum_m;
296 
298  std::vector<std::unique_ptr<std::ofstream> > outfTheta_m;
300  std::vector<double> azimuth_angle_m;
302  void openFiles(size_t numFiles, std::string fn);
303  void closeFiles();
306  std::ofstream outfTrackOrbit_m;
307 
308  void buildupFieldList(double BcParameter[], ElementBase::ElementType elementType, Component *elptr);
309 
310  // angle range [0~2PI) degree
311  double calculateAngle(double x, double y);
312  // angle range [-PI~PI) degree
313  double calculateAngle2(double x, double y);
314 
315  bool checkGapCross(Vector_t Rold, Vector_t Rnew, RFCavity * rfcavity, double &DistOld);
316  bool RFkick(RFCavity * rfcavity, const double t, const double dt, const int Pindex);
317 
318  bool getTunes(dvector_t &t, dvector_t &r, dvector_t &z, int lastTurn, double &nur, double &nuz);
319 
326 
327  /*
328  * @param bunchNr if <= -1 --> take all particles in simulation, if bunchNr > -1,
329  * take only particles of *this* bunch
330  */
331  Vector_t calcMeanR(short bunchNr = -1) const;
332 
333  Vector_t calcMeanP() const;
334 
335  void repartition(); // Do repartition between nodes if step_m is multiple of Options::repartFreq
336 
337  // Transform the x- and y-parts of a particle attribute (position, momentum, fields) from the
338  // global reference frame to the local reference frame.
339 
340  // phi is the angle of the bunch measured counter-clockwise from the positive x-axis.
341  void globalToLocal(ParticleAttrib<Vector_t> & vectorArray,
342  double phi, Vector_t const translationToGlobal = 0);
343 
344  // Transform the x- and y-parts of a particle attribute (position, momentum, fields) from the
345  // local reference frame to the global reference frame.
346  void localToGlobal(ParticleAttrib<Vector_t> & vectorArray,
347  double phi, Vector_t const translationToGlobal = 0);
348 
349  // Overloaded version of globalToLocal using a quaternion for 3D rotation
350  inline void globalToLocal(ParticleAttrib<Vector_t> & vectorArray,
351  Quaternion_t const quaternion,
352  Vector_t const meanR = Vector_t(0.0));
353 
354  // Overloaded version of localToGlobal using a quaternion for 3D rotation
355  inline void localToGlobal(ParticleAttrib<Vector_t> & vectorArray,
356  Quaternion_t const quaternion,
357  Vector_t const meanR = Vector_t(0.0));
358 
359  // Overloaded version of globalToLocal using phi and theta for pseudo 3D rotation
360  inline void globalToLocal(ParticleAttrib<Vector_t> & particleVectors,
361  double const phi, double const psi,
362  Vector_t const meanR = Vector_t(0.0));
363 
364  // Overloaded version of localToGlobal using phi and theta for pseudo 3D rotation
365  inline void localToGlobal(ParticleAttrib<Vector_t> & particleVectors,
366  double const phi, double const psi,
367  Vector_t const meanR = Vector_t(0.0));
368 
369  // Overloaded version of globalToLocal using phi and theta for pseudo 3D rotation, single vector
370  inline void globalToLocal(Vector_t & myVector,
371  double const phi, double const psi,
372  Vector_t const meanR = Vector_t(0.0));
373 
374  // Overloaded version of localToGlobal using phi and theta for pseudo 3D rotation, single vector
375  inline void localToGlobal(Vector_t & myVector,
376  double const phi, double const psi,
377  Vector_t const meanR = Vector_t(0.0));
378 
379  // Rotate the particles by an angle and axis defined in the quaternion (4-vector w,x,y,z)
380  inline void rotateWithQuaternion(ParticleAttrib<Vector_t> & vectorArray, Quaternion_t const quaternion);
381 
382  // Returns the quaternion of the rotation from vector u to vector v
383  inline void getQuaternionTwoVectors(Vector_t u, Vector_t v, Quaternion_t & quaternion);
384 
385  // Normalization of a quaternion
386  inline void normalizeQuaternion(Quaternion_t & quaternion);
387 
388  // Normalization of a quaternion
389  inline void normalizeVector(Vector_t & vector);
390 
391  // Some rotations
392  inline void rotateAroundZ(ParticleAttrib<Vector_t> & particleVectors, double const phi);
393  inline void rotateAroundX(ParticleAttrib<Vector_t> & particleVectors, double const psi);
394  inline void rotateAroundZ(Vector_t & myVector, double const phi);
395  inline void rotateAroundX(Vector_t & myVector, double const psi);
396 
397  // Push particles for time h.
398  // Apply effects of RF Gap Crossings.
399  // Unit assumptions: [itsBunch_m->R] = m, [itsBunch_m->P] = 1, [h] = s, [c] = m/s, [itsBunch_m->getT()] = s
400  bool push(double h);
401  // Kick particles for time h
402  // The fields itsBunch_m->Bf, itsBunch_m->Ef are used to calculate the forces
403  bool kick(double h);
404 
405  // Apply the trilogy half push - kick - half push,
406  // considering only external fields
407  void borisExternalFields(double h);
408 
409  // apply the plugin elements: probe, collimator, stripper, septum
410  bool applyPluginElements(const double dt);
411 
412  // destroy particles if they are marked as Bin=-1 in the plugin elements or out of global aperture
413  bool deleteParticle(bool = false);
414 
415  void initTrackOrbitFile();
416 
417  void singleParticleDump();
418 
419  void bunchDumpStatData();
420 
422 
424 
425  void initDistInGlobalFrame();
426 
427  void checkNumPart(std::string s);
428 
429  // we store a pointer explicitly to the Ring
431 
432  // to save geometry losses
433  std::unique_ptr<LossDataSink> lossDs_m;
434 
435  // If Ring is defined take the harmonic number from Ring; else use
436  // cyclotron
437  double getHarmonicNumber() const;
438 
439  typedef std::function<bool(const double&,
440  const size_t&,
441  Vector_t&,
443 
444  std::unique_ptr< Stepper<function_t> > itsStepper_mp;
445 
446  struct settings {
449  double deltaTheta;
452 
454 
456 
458  bool isTurnDone();
459 
461  void update_m(double& t, const double& dt, const bool& finishedTurn);
462 
466  std::tuple<double, double, double> initializeTracking_m();
467 
468  void finalizeTracking_m(dvector_t& Ttime,
469  dvector_t& Tdeltr,
470  dvector_t& Tdeltz,
471  ivector_t& TturnNumber);
472 
473  void seoMode_m(double& t, const double dt, bool& finishedTurn,
474  dvector_t& Ttime, dvector_t& Tdeltr,
475  dvector_t& Tdeltz, ivector_t& TturnNumber);
476 
477  void singleMode_m(double& t, const double dt, bool& finishedTurn, double& oldReferenceTheta);
478 
479  void bunchMode_m(double& t, const double dt, bool& finishedTurn);
480 
481  void gapCrossKick_m(size_t i, double t, double dt,
482  const Vector_t& Rold, const Vector_t& Pold);
483 
484 
485  inline void dumpAzimuthAngles_m(const double& t,
486  const Vector_t& R,
487  const Vector_t& P,
488  const double& oldReferenceTheta,
489  const double& temp_meanTheta);
490 
491  inline void dumpThetaEachTurn_m(const double& t,
492  const Vector_t& R,
493  const Vector_t& P,
494  const double& temp_meanTheta,
495  bool& finishedTurn);
496 
498 
499  bool computeExternalFields_m(const size_t& i,
500  const double& t,
501  Vector_t& Efield,
502  Vector_t& Bfield);
503 
504  void injectBunch(bool& flagTransition);
505 
506  void saveInjectValues();
507 
508  bool isMultiBunch() const;
509 
510  bool hasMultiBunch() const;
511 
512  /*
513  * @param dt time step in ns
514  */
515  void updatePathLength(const double& dt);
516 
517  /*
518  * @param dt time step in ns
519  */
520  void updateTime(const double& dt);
521 
522  void updateAzimuthAndRadius();
523 
531  void initPathLength();
532 };
533 
540 inline
541 double ParallelCyclotronTracker::calculateAngle(double x, double y) {
542  double thetaXY = atan2(y, x);
543 
544  if (thetaXY < 0) return thetaXY + Physics::two_pi;
545  return thetaXY;
546 }
547 
554 inline
556 {
557  return atan2(y,x);
558 }
559 
560 
561 inline
563  return ( (mbHandler_m != nullptr) && itsBunch_m->weHaveBins() );
564 }
565 
566 
567 inline
569  return ( isMultiBunch() && mbHandler_m->getNumBunch() > 1 );
570 }
571 
572 #endif // OPAL_ParallelCyclotronTracker_HH
PETE_TBTree< FnArcTan2, PETE_Scalar< Vektor< T1, Dim > >, typename T2::PETE_Expr_t > atan2(const Vektor< T1, Dim > &l, const PETE_Expr< T2 > &r)
constexpr double two_pi
The value of.
Definition: Physics.h:33
INTEGRATOR
Definition: Steppers.h:26
bool weHaveBins() const
std::pair< ElementBase::ElementType, element_pair > type_pair
void computePathLengthUpdate(std::vector< double > &dl, const double &dt)
void setLastDumpedStep(const int para)
set last dumped step
std::vector< PluginElement * > pluginElements_m
void dumpAzimuthAngles_m(const double &t, const Vector_t &R, const Vector_t &P, const double &oldReferenceTheta, const double &temp_meanTheta)
IpplTimings::TimerRef IntegrationTimer_m
IpplTimings::TimerRef PluginElemTimer_m
virtual void visitDegrader(const Degrader &)
Apply the algorithm to a degrader.
virtual void visitRBend(const RBend &)
Apply the algorithm to a rectangular bend.
static Vector_t const xaxis
The positive axes unit vectors.
virtual void visitProbe(const Probe &)
Apply the algorithm to a probe.
virtual void visitVacuum(const Vacuum &)
Apply the algorithm to a vacuum space.
std::pair< double[8], Component * > element_pair
void setPr(double x)
Method for restart.
void operator=(const ParallelCyclotronTracker &)
std::function< bool(const double &, const size_t &, Vector_t &, Vector_t &)> function_t
std::vector< double > azimuth_angle_m
the different azimuthal angles for the outfTheta_m output files
std::unique_ptr< MultiBunchHandler > mbHandler_m
std::list< Component * > myElements
void injectBunch(bool &flagTransition)
void rotateAroundZ(ParticleAttrib< Vector_t > &particleVectors, double const phi)
virtual void visitStripper(const Stripper &)
Apply the algorithm to a particle stripper.
void normalizeQuaternion(Quaternion_t &quaternion)
virtual void visitCCollimator(const CCollimator &)
Apply the algorithm to a collimator.
void singleMode_m(double &t, const double dt, bool &finishedTurn, double &oldReferenceTheta)
void update_m(double &t, const double &dt, const bool &finishedTurn)
Update time and path length, write to output files.
std::vector< std::unique_ptr< std::ofstream > > outfTheta_m
output coordinates at different azimuthal angles and one after every turn
void rotateAroundX(ParticleAttrib< Vector_t > &particleVectors, double const psi)
double calculateAngle(double x, double y)
bool isTurnDone()
Check if turn done.
virtual void visitBeamline(const Beamline &)
Apply the algorithm to a beam line.
bool checkGapCross(Vector_t Rold, Vector_t Rnew, RFCavity *rfcavity, double &DistOld)
virtual void visitOffset(const Offset &)
Apply the algorithm to a offset (placement).
IpplTimings::TimerRef DelParticleTimer_m
void normalizeVector(Vector_t &vector)
bool RFkick(RFCavity *rfcavity, const double t, const double dt, const int Pindex)
virtual void visitScalingFFAMagnet(const ScalingFFAMagnet &bend)
Apply the algorithm to a scaling FFA magnet.
double computeRadius(const Vector_t &meanR) const
void updatePathLength(const double &dt)
virtual void visitMultipoleTStraight(const MultipoleTStraight &)
Apply the algorithm to an arbitrary straight multipole.
void openFiles(size_t numFiles, std::string fn)
@ open / close output coordinate files
virtual void visitSBend3D(const SBend3D &)
Apply the algorithm to a sector bend with 3D field map.
double bega
The reference variables.
void dumpAngle(const double &theta, double &prevAzimuth, double &azimuth, const short &bunchNr=0)
bool applyPluginElements(const double dt)
virtual void visitCorrector(const Corrector &)
Apply the algorithm to a closed orbit corrector.
std::tuple< double, double, double > initializeTracking_m()
virtual void visitRing(const Ring &ring)
Apply the algorithm to a ring.
IpplTimings::TimerRef BinRepartTimer_m
void globalToLocal(ParticleAttrib< Vector_t > &vectorArray, double phi, Vector_t const translationToGlobal=0)
bool getFieldsAtPoint(const double &t, const size_t &Pindex, Vector_t &Efield, Vector_t &Bfield)
std::vector< CavityCrossData > cavCrossDatas_m
virtual void visitDrift(const Drift &)
Apply the algorithm to a drift space.
std::unique_ptr< Stepper< function_t > > itsStepper_mp
struct ParallelCyclotronTracker::settings setup_m
void finalizeTracking_m(dvector_t &Ttime, dvector_t &Tdeltr, dvector_t &Tdeltz, ivector_t &TturnNumber)
virtual void visitVariableRFCavityFringeField(const VariableRFCavityFringeField &cav)
Apply the algorithm to a variable RF cavity with Fringe Field.
void gapCrossKick_m(size_t i, double t, double dt, const Vector_t &Rold, const Vector_t &Pold)
void getQuaternionTwoVectors(Vector_t u, Vector_t v, Quaternion_t &quaternion)
virtual void visitSBend(const SBend &)
Apply the algorithm to a sector bend.
virtual void visitMarker(const Marker &)
Apply the algorithm to a marker.
virtual void execute()
Apply the algorithm to the top-level beamline.
void dumpThetaEachTurn_m(const double &t, const Vector_t &R, const Vector_t &P, const double &temp_meanTheta, bool &finishedTurn)
void bunchMode_m(double &t, const double dt, bool &finishedTurn)
std::list< type_pair * > beamline_list
std::unique_ptr< LossDataSink > lossDs_m
virtual void visitMultipoleT(const MultipoleT &)
Apply the algorithm to an arbitrary multipole.
virtual void visitVariableRFCavity(const VariableRFCavity &cav)
Apply the algorithm to a variabel RF cavity.
bool computeExternalFields_m(const size_t &i, const double &t, Vector_t &Efield, Vector_t &Bfield)
void rotateWithQuaternion(ParticleAttrib< Vector_t > &vectorArray, Quaternion_t const quaternion)
virtual void visitMultipole(const Multipole &)
Apply the algorithm to a multipole.
virtual void visitSolenoid(const Solenoid &)
Apply the algorithm to a solenoid.
std::vector< double > dvector_t
IpplTimings::TimerRef TransformTimer_m
void buildupFieldList(double BcParameter[], ElementBase::ElementType elementType, Component *elptr)
ParallelCyclotronTracker(const ParallelCyclotronTracker &)
Vector_t calcMeanR(short bunchNr=-1) const
double calculateAngle2(double x, double y)
virtual void visitCyclotron(const Cyclotron &cycl)
Apply the algorithm to a cyclotron.
void localToGlobal(ParticleAttrib< Vector_t > &vectorArray, double phi, Vector_t const translationToGlobal=0)
virtual void visitRFCavity(const RFCavity &)
Apply the algorithm to a RF cavity.
bool getTunes(dvector_t &t, dvector_t &r, dvector_t &z, int lastTurn, double &nur, double &nuz)
virtual void visitFlexibleCollimator(const FlexibleCollimator &)
Apply the algorithm to a flexible collimator.
virtual void visitMultipoleTCurvedVarRadius(const MultipoleTCurvedVarRadius &)
Apply the algorithm to an arbitrary curved multipole of variable radius.
virtual void visitVerticalFFAMagnet(const VerticalFFAMagnet &bend)
Apply the algorithm to a vertical FFA magnet.
virtual void visitSeptum(const Septum &)
Apply the algorithm to a septum.
IpplTimings::TimerRef DumpTimer_m
virtual void visitMultipoleTCurvedConstRadius(const MultipoleTCurvedConstRadius &)
Apply the algorithm to an arbitrary curved multipole of constant radius.
void seoMode_m(double &t, const double dt, bool &finishedTurn, dvector_t &Ttime, dvector_t &Tdeltr, dvector_t &Tdeltz, ivector_t &TturnNumber)
int maxSteps_m
The maximal number of steps the system is integrated.
virtual void visitMonitor(const Monitor &)
Apply the algorithm to a beam position monitor.
Interface for a single beam element.
Definition: Component.h:50
Interface for general corrector.
Definition: Corrector.h:35
Interface for drift space.
Definition: Drift.h:33
Interface for a marker.
Definition: Marker.h:32
Interface for general multipole.
Definition: Multipole.h:47
Definition: Offset.h:66
Definition: Probe.h:28
Definition: RBend.h:58
Interface for RF cavity.
Definition: RFCavity.h:37
Ring describes a ring type geometry for tracking.
Definition: Ring.h:64
Definition: SBend.h:68
Definition: Septum.h:23
Interface for solenoids.
Definition: Solenoid.h:36
Definition: Vacuum.h:67
Particle reference data.
Definition: PartData.h:35
PartBunchBase< double, 3 > * itsBunch_m
The bunch of particles to be tracked.
Definition: Tracker.h:151
An abstract sequence of beam line components.
Definition: Beamline.h:34
Timing::TimerRef TimerRef
Definition: IpplTimings.h:176
Vektor< double, 3 > Vector_t
Definition: Vektor.h:6