28 #ifndef OPAL_ParallelCyclotronTracker_HH
29 #define OPAL_ParallelCyclotronTracker_HH
45 template <
class T,
unsigned Dim>
61 typedef std::pair<ElementType, element_pair>
type_pair;
72 bool revTrack,
int maxSTEPS,
77 const std::string& mbMode,
78 const std::string& mbBinning);
302 const short& bunchNr = 0);
320 void openFiles(
size_t numFiles, std::string fn);
334 bool RFkick(
RFCavity* rfcavity,
const double t,
const double dt,
const int Pindex);
360 double phi,
Vector_t const translationToGlobal = 0);
365 double phi,
Vector_t const translationToGlobal = 0);
379 double const phi,
double const psi,
384 double const phi,
double const psi,
389 double const phi,
double const psi,
394 double const phi,
double const psi,
486 void update_m(
double& t,
const double& dt,
const bool& finishedTurn);
500 void seoMode_m(
double& t,
const double dt,
bool& finishedTurn,
504 void singleMode_m(
double& t,
const double dt,
bool& finishedTurn,
double& oldReferenceTheta);
506 void bunchMode_m(
double& t,
const double dt,
bool& finishedTurn);
515 const double& oldReferenceTheta,
516 const double& temp_meanTheta);
521 const double& temp_meanTheta,
598 #endif // OPAL_ParallelCyclotronTracker_HH
virtual void visitOffset(const Offset &)
Apply the algorithm to a offset (placement).
virtual void visitVacuum(const Vacuum &)
Apply the algorithm to a vacuum space.
std::vector< double > dvector_t
boost::numeric::ublas::matrix< double > matrix_t
bool computeExternalFields_m(const Vector_t &R, const Vector_t &P, const double &t, Vector_t &Efield, Vector_t &Bfield)
Calculate the field map at an arbitrary point.
void computePathLengthUpdate(std::vector< double > &dl, const double &dt)
virtual void visitScalingFFAMagnet(const ScalingFFAMagnet &bend)
Apply the algorithm to a scaling FFA magnet.
std::pair< double[8], Component * > element_pair
void dumpAzimuthAngles_m(const double &t, const Vector_t &R, const Vector_t &P, const double &oldReferenceTheta, const double &temp_meanTheta)
IpplTimings::TimerRef TransformTimer_m
void singleParticleDump()
virtual void visitMarker(const Marker &)
Apply the algorithm to a marker.
bool RFkick(RFCavity *rfcavity, const double t, const double dt, const int Pindex)
IpplTimings::TimerRef BinRepartTimer_m
bool hasMultiBunch() const
std::vector< std::unique_ptr< std::ofstream > > outfTheta_m
output coordinates at different azimuthal angles and one after every turn
constexpr double two_pi
The value of .
std::unique_ptr< MultiBunchHandler > mbHandler_m
void borisExternalFields(double h)
virtual void visitCorrector(const Corrector &)
Apply the algorithm to a closed orbit corrector.
Vector_t calcMeanP() const
virtual void visitDegrader(const Degrader &)
Apply the algorithm to a degrader.
virtual void visitRFCavity(const RFCavity &)
Apply the algorithm to a RF cavity.
std::tuple< double, double, double > initializeTracking_m()
virtual void visitSBend3D(const SBend3D &)
Apply the algorithm to a sector bend with 3D field map.
void bgf_main_collision_test()
virtual void visitMultipoleT(const MultipoleT &)
Apply the algorithm to an arbitrary multipole.
double getHarmonicNumber() const
Vektor< double, 3 > Vector_t
virtual void visitDrift(const Drift &)
Apply the algorithm to a drift space.
void rotateAroundZ(ParticleAttrib< Vector_t > &particleVectors, double const phi)
virtual void visitVerticalFFAMagnet(const VerticalFFAMagnet &bend)
Apply the algorithm to a vertical FFA magnet.
void update_m(double &t, const double &dt, const bool &finishedTurn)
Update time and path length, write to output files.
virtual void visitBeamline(const Beamline &)
Apply the algorithm to a beam line.
std::vector< CavityCrossData > cavCrossDatas_m
bool applyPluginElements(const double dt)
virtual void visitMultipoleTCurvedVarRadius(const MultipoleTCurvedVarRadius &)
Apply the algorithm to an arbitrary curved multipole of variable radius.
void setPr(double x)
Method for restart.
double computeRadius(const Vector_t &meanR) const
An abstract sequence of beam line components.
void bunchMode_m(double &t, const double dt, bool &finishedTurn)
Interface for general multipole.
virtual void visitSBend(const SBend &)
Apply the algorithm to a sector bend.
virtual void visitVariableRFCavity(const VariableRFCavity &cav)
Apply the algorithm to a variabel RF cavity.
Interface for drift space.
Interface for general corrector.
void rotateWithQuaternion(ParticleAttrib< Vector_t > &vectorArray, Quaternion_t const quaternion)
PETE_TBTree< FnArcTan2, PETE_Scalar< Vektor< T1, Dim > >, typename T2::PETE_Expr_t > atan2(const Vektor< T1, Dim > &l, const PETE_Expr< T2 > &r)
void operator=(const ParallelCyclotronTracker &)
Timing::TimerRef TimerRef
bool checkGapCross(Vector_t Rold, Vector_t Rnew, RFCavity *rfcavity, double &DistOld)
void setLastDumpedStep(const int para)
set last dumped step
void normalizeQuaternion(Quaternion_t &quaternion)
void updateTime(const double &dt)
void seoMode_m(double &t, const double dt, bool &finishedTurn, dvector_t &Ttime, dvector_t &Tdeltr, dvector_t &Tdeltz, ivector_t &TturnNumber)
void initTrackOrbitFile()
void dumpThetaEachTurn_m(const double &t, const Vector_t &R, const Vector_t &P, const double &temp_meanTheta, bool &finishedTurn)
void initDistInGlobalFrame()
virtual void visitRBend(const RBend &)
Apply the algorithm to a rectangular bend.
bool getFieldsAtPoint(const double &t, const size_t &Pindex, Vector_t &Efield, Vector_t &Bfield)
double beamInitialRotation
std::unique_ptr< Stepper< function_t > > itsStepper_mp
double calculateAngle2(double x, double y)
bool isTurnDone()
Check if turn done.
virtual void visitStripper(const Stripper &)
Apply the algorithm to a particle stripper.
virtual void visitProbe(const Probe &)
Apply the algorithm to a probe.
void buildupFieldList(double BcParameter[], ElementType elementType, Component *elptr)
virtual void visitRing(const Ring &ring)
Apply the algorithm to a ring.
void rotateAroundX(ParticleAttrib< Vector_t > &particleVectors, double const psi)
std::unique_ptr< LossDataSink > lossDs_m
void updatePathLength(const double &dt)
double calculateAngle(double x, double y)
bool getTunes(dvector_t &t, dvector_t &r, dvector_t &z, int lastTurn, double &nur, double &nuz)
static Vector_t const yaxis
void injectBunch(bool &flagTransition)
virtual void visitMultipoleTCurvedConstRadius(const MultipoleTCurvedConstRadius &)
Apply the algorithm to an arbitrary curved multipole of constant radius.
virtual void visitMultipole(const Multipole &)
Apply the algorithm to a multipole.
double function(PyOpalObjectNS::PyOpalObject< C > pyobject, double t)
void evaluateSpaceChargeField()
virtual void visitVariableRFCavityFringeField(const VariableRFCavityFringeField &cav)
Apply the algorithm to a variable RF cavity with Fringe Field.
void finalizeTracking_m(dvector_t &Ttime, dvector_t &Tdeltr, dvector_t &Tdeltz, ivector_t &TturnNumber)
void dumpAngle(const double &theta, double &prevAzimuth, double &azimuth, const short &bunchNr=0)
beamline_list FieldDimensions
virtual ~ParallelCyclotronTracker()
const size_t initialLocalNum_m
virtual void visitCyclotron(const Cyclotron &cycl)
Apply the algorithm to a cyclotron.
void computeSpaceChargeFields_m()
std::vector< double > azimuth_angle_m
the different azimuthal angles for the outfTheta_m output files
Steppers::TimeIntegrator stepper_m
void updateAzimuthAndRadius()
IpplTimings::TimerRef PluginElemTimer_m
virtual void visitOutputPlane(const OutputPlane &)
Apply the algorithm to a outputplane.
std::ofstream outfTrackOrbit_m
static Vector_t const xaxis
The positive axes unit vectors.
virtual void visitCCollimator(const CCollimator &)
Apply the algorithm to a collimator.
std::vector< PluginElement * > pluginElements_m
void openFiles(size_t numFiles, std::string fn)
@ open / close output coordinate files
IpplTimings::TimerRef DumpTimer_m
std::function< bool(const double &, const size_t &, Vector_t &, Vector_t &)> function_t
static Vector_t const zaxis
struct ParallelCyclotronTracker::settings setup_m
std::vector< int > ivector_t
IpplTimings::TimerRef IntegrationTimer_m
PartBunchBase< double, 3 > * itsBunch_m
The bunch of particles to be tracked.
int maxSteps_m
The maximal number of steps the system is integrated.
std::pair< ElementType, element_pair > type_pair
void initializeBoundaryGeometry()
void localToGlobal(ParticleAttrib< Vector_t > &vectorArray, double phi, Vector_t const translationToGlobal=0)
bool isMultiBunch() const
void globalToLocal(ParticleAttrib< Vector_t > &vectorArray, double phi, Vector_t const translationToGlobal=0)
void singleMode_m(double &t, const double dt, bool &finishedTurn, double &oldReferenceTheta)
void setPreviousH5Local(bool x)
virtual void visitSeptum(const Septum &)
Apply the algorithm to a septum.
bool deleteParticle(bool=false)
void normalizeVector(Vector_t &vector)
Ring describes a ring type geometry for tracking.
void getQuaternionTwoVectors(Vector_t u, Vector_t v, Quaternion_t &quaternion)
Vector_t calcMeanR(short bunchNr=-1) const
virtual void visitSolenoid(const Solenoid &)
Apply the algorithm to a solenoid.
Interface for a single beam element.
void gapCrossKick_m(size_t i, double t, double dt, const Vector_t &Rold, const Vector_t &Pold)
double bega
The reference variables.
virtual void visitMonitor(const Monitor &)
Apply the algorithm to a beam position monitor.
void checkNumPart(std::string s)
ParallelCyclotronTracker()
IpplTimings::TimerRef DelParticleTimer_m
std::list< type_pair * > beamline_list
virtual void execute()
Apply the algorithm to the top-level beamline.
virtual void visitFlexibleCollimator(const FlexibleCollimator &)
Apply the algorithm to a flexible collimator.
std::list< Component * > myElements
const size_t initialTotalNum_m
void bunchDumpPhaseSpaceData()
virtual void visitMultipoleTStraight(const MultipoleTStraight &)
Apply the algorithm to an arbitrary straight multipole.