1 #ifndef OPAL_ParallelCyclotronTracker_HH
2 #define OPAL_ParallelCyclotronTracker_HH
34 template <
class T,
unsigned Dim>
60 typedef std::pair<ElementBase::ElementType, element_pair>
type_pair;
71 bool revTrack,
int maxSTEPS,
76 const std::string& mbMode,
77 const std::string& mbBinning);
298 const short& bunchNr = 0);
316 void openFiles(
size_t numFiles, std::string fn);
330 bool RFkick(
RFCavity * rfcavity,
const double t,
const double dt,
const int Pindex);
356 double phi,
Vector_t const translationToGlobal = 0);
361 double phi,
Vector_t const translationToGlobal = 0);
375 double const phi,
double const psi,
380 double const phi,
double const psi,
385 double const phi,
double const psi,
390 double const phi,
double const psi,
453 typedef std::function<bool(
const double&,
475 void update_m(
double& t,
const double& dt,
const bool& finishedTurn);
487 void seoMode_m(
double& t,
const double dt,
bool& finishedTurn,
491 void singleMode_m(
double& t,
const double dt,
bool& finishedTurn,
double& oldReferenceTheta);
493 void bunchMode_m(
double& t,
const double dt,
bool& finishedTurn);
502 const double& oldReferenceTheta,
503 const double& temp_meanTheta);
508 const double& temp_meanTheta,
556 double thetaXY =
atan2(y, x);
586 #endif // OPAL_ParallelCyclotronTracker_HH
void updatePathLength(const double &dt)
void singleParticleDump()
static Vector_t const yaxis
bool computeExternalFields_m(const size_t &i, const double &t, Vector_t &Efield, Vector_t &Bfield)
double calculateAngle(double x, double y)
virtual void visitOffset(const Offset &)
Apply the algorithm to a Offset.
void evaluateSpaceChargeField()
void finalizeTracking_m(dvector_t &Ttime, dvector_t &Tdeltr, dvector_t &Tdeltz, ivector_t &TturnNumber)
virtual ~ParallelCyclotronTracker()
void dumpAngle(const double &theta, double &prevAzimuth, double &azimuth, const short &bunchNr=0)
std::tuple< double, double, double > initializeTracking_m()
std::vector< double > azimuth_angle_m
the different azimuthal angles for the outfTheta_m output files
Interface for septum magnet.
void bgf_main_collision_test()
Interface for electrostatic separator.
virtual void visitMarker(const Marker &)
Apply the algorithm to a Marker.
Interface for a Cyclotron.
void updateAzimuthAndRadius()
std::list< Component * > myElements
virtual void visitCCollimator(const CCollimator &)
Apply the algorithm to a collimator.
Interface for beam position monitors.
Interface for RF Quadrupole.
constexpr double two_pi
The value of .
std::vector< PluginElement * > pluginElements_m
virtual void visitDegrader(const Degrader &)
Apply the algorithm to a Degrader.
virtual void visitVerticalFFAMagnet(const VerticalFFAMagnet &bend)
Apply the algorithm to a VerticalFFAMagnet.
virtual void visitRFCavity(const RFCavity &)
Apply the algorithm to a RFCavity.
IpplTimings::TimerRef DumpTimer_m
static Vector_t const zaxis
Interface for general corrector.
std::vector< int > ivector_t
Interface for beam diagnostics.
double computeRadius(const Vector_t &meanR) const
std::list< type_pair * > beamline_list
struct ParallelCyclotronTracker::settings setup_m
virtual void visitRFQuadrupole(const RFQuadrupole &)
Apply the algorithm to a RFQuadrupole.
IpplTimings::TimerRef IntegrationTimer_m
virtual void visitVariableRFCavity(const VariableRFCavity &cav)
Apply the algorithm to a VariabelRFCavity.
double getHarmonicNumber() const
int maxSteps_m
The maximal number of steps the system is integrated.
void initializeBoundaryGeometry()
void localToGlobal(ParticleAttrib< Vector_t > &vectorArray, double phi, Vector_t const translationToGlobal=0)
virtual void visitSeptum(const Septum &)
Apply the algorithm to a Septum.
void globalToLocal(ParticleAttrib< Vector_t > &vectorArray, double phi, Vector_t const translationToGlobal=0)
Interface for drift space.
virtual void visitDrift(const Drift &)
Apply the algorithm to a Drift.
void rotateAroundZ(ParticleAttrib< Vector_t > &particleVectors, double const phi)
void update_m(double &t, const double &dt, const bool &finishedTurn)
Update time and path length, write to output files.
void getQuaternionTwoVectors(Vector_t u, Vector_t v, Quaternion_t &quaternion)
virtual void visitSolenoid(const Solenoid &)
Apply the algorithm to a Solenoid.
Interface for general multipole.
void gapCrossKick_m(size_t i, double t, double dt, const Vector_t &Rold, const Vector_t &Pold)
Vector_t calcMeanR(short bunchNr=-1) const
virtual void visitMultipoleTCurvedVarRadius(const MultipoleTCurvedVarRadius &)
Apply the algorithm to a MultipoleTCurvedVarRadius.
double bega
The reference variables.
void bunchMode_m(double &t, const double dt, bool &finishedTurn)
ParallelCyclotronTracker()
std::unique_ptr< Stepper< function_t > > itsStepper_mp
IpplTimings::TimerRef DelParticleTimer_m
virtual void visitProbe(const Probe &)
Apply the algorithm to a Probe.
virtual void execute()
Apply the algorithm to the top-level beamline.
void rotateAroundX(ParticleAttrib< Vector_t > &particleVectors, double const psi)
void setLastDumpedStep(const int para)
set last dumped step
virtual void visitFlexibleCollimator(const FlexibleCollimator &)
Apply the algorithm to a flexible collimator.
void initTrackOrbitFile()
void initDistInGlobalFrame()
virtual void visitRBend(const RBend &)
Apply the algorithm to a RBend.
bool getFieldsAtPoint(const double &t, const size_t &Pindex, Vector_t &Efield, Vector_t &Bfield)
bool getTunes(dvector_t &t, dvector_t &r, dvector_t &z, int lastTurn, double &nur, double &nuz)
void injectBunch(bool &flagTransition)
virtual void visitMultipoleTCurvedConstRadius(const MultipoleTCurvedConstRadius &)
Apply the algorithm to a MultipoleTCurvedConstRadius.
virtual void visitMultipole(const Multipole &)
Apply the algorithm to a Multipole.
void bunchDumpPhaseSpaceData()
bool isTurnDone()
Check if turn done.
Interface for cyclotron collimator.
virtual void visitCyclotronValley(const CyclotronValley &)
Apply the algorithm to a CyclotronValley.it is empty for cyclotrontracker .
virtual void visitRing(const Ring &ring)
Apply the algorithm to an Ring.
virtual void visitScalingFFAMagnet(const ScalingFFAMagnet &bend)
Apply the algorithm to a ScalingFFAMagnet.
void computePathLengthUpdate(std::vector< double > &dl, const double &dt)
Abstract beam-beam interaction.
const size_t initialLocalNum_m
void computeSpaceChargeFields_m()
IpplTimings::TimerRef TransformTimer_m
void dumpAzimuthAngles_m(const double &t, const Vector_t &R, const Vector_t &P, const double &oldReferenceTheta, const double &temp_meanTheta)
bool RFkick(RFCavity *rfcavity, const double t, const double dt, const int Pindex)
Interface for cyclotron valley.
PETE_TBTree< FnArcTan2, PETE_Scalar< Vektor< T1, Dim > >, typename T2::PETE_Expr_t > atan2(const Vektor< T1, Dim > &l, const PETE_Expr< T2 > &r)
IpplTimings::TimerRef BinRepartTimer_m
Vektor< double, 3 > Vector_t
std::unique_ptr< MultiBunchHandler > mbHandler_m
bool hasMultiBunch() const
std::vector< std::unique_ptr< std::ofstream > > outfTheta_m
output coordinates at different azimuthal angles and one after every turn
virtual void visitCorrector(const Corrector &)
Apply the algorithm to a Corrector.
std::ofstream outfTrackOrbit_m
stepper::INTEGRATOR stepper_m
An abstract sequence of beam line components.
std::pair< ElementBase::ElementType, element_pair > type_pair
void borisExternalFields(double h)
virtual void visitVariableRFCavityFringeField(const VariableRFCavityFringeField &cav)
Apply the algorithm to a VariabelRFCavity.
void openFiles(size_t numFiles, std::string fn)
@ open / close output coordinate files
Vector_t calcMeanP() const
beamline_list FieldDimensions
std::function< bool(const double &, const size_t &, Vector_t &, Vector_t &)> function_t
virtual void visitSBend3D(const SBend3D &)
Apply the algorithm to a SBend3D.
virtual void visitCyclotron(const Cyclotron &cycl)
Apply the algorithm to a Cyclotorn.
virtual void visitMultipoleT(const MultipoleT &)
Apply the algorithm to a MultipoleT.
bool isMultiBunch() const
void singleMode_m(double &t, const double dt, bool &finishedTurn, double &oldReferenceTheta)
void setPreviousH5Local(bool x)
IpplTimings::TimerRef PluginElemTimer_m
static Vector_t const xaxis
The positive axes unit vectors.
virtual void visitBeamStripping(const BeamStripping &)
Apply the algorithm to a Beam Stripping.
bool deleteParticle(bool=false)
virtual void visitBeamline(const Beamline &)
Apply the algorithm to a beam line.
std::vector< CavityCrossData > cavCrossDatas_m
void normalizeVector(Vector_t &vector)
virtual void visitBeamBeam(const BeamBeam &)
Apply the algorithm to a BeamBeam.
void setPr(double x)
Method for restart.
bool applyPluginElements(const double dt)
virtual void visitMonitor(const Monitor &)
Apply the algorithm to a Monitor.
Ring describes a ring type geometry for tracking.
virtual void visitSBend(const SBend &)
Apply the algorithm to a SBend.
virtual void visitSeparator(const Separator &)
Apply the algorithm to a Separator.
void rotateWithQuaternion(ParticleAttrib< Vector_t > &vectorArray, Quaternion_t const quaternion)
virtual void visitLambertson(const Lambertson &)
Apply the algorithm to a Lambertson.
Timing::TimerRef TimerRef
Interface for a single beam element.
void seoMode_m(double &t, const double dt, bool &finishedTurn, dvector_t &Ttime, dvector_t &Tdeltr, dvector_t &Tdeltz, ivector_t &TturnNumber)
void operator=(const ParallelCyclotronTracker &)
void dumpThetaEachTurn_m(const double &t, const Vector_t &R, const Vector_t &P, const double &temp_meanTheta, bool &finishedTurn)
bool checkGapCross(Vector_t Rold, Vector_t Rnew, RFCavity *rfcavity, double &DistOld)
const size_t initialTotalNum_m
void normalizeQuaternion(Quaternion_t &quaternion)
void updateTime(const double &dt)
virtual void visitDiagnostic(const Diagnostic &)
Apply the algorithm to a Diagnostic.
std::pair< double[8], Component * > element_pair
void checkNumPart(std::string s)
virtual void visitMultipoleTStraight(const MultipoleTStraight &)
Apply the algorithm to a MultipoleTStraight.
void buildupFieldList(double BcParameter[], ElementBase::ElementType elementType, Component *elptr)
double calculateAngle2(double x, double y)
PartBunchBase< double, 3 > * itsBunch_m
The bunch of particles to be tracked.
std::vector< double > dvector_t
virtual void visitStripper(const Stripper &)
Apply the algorithm to a charge stripper.
Interface for a Lambertson septum.
virtual void visitParallelPlate(const ParallelPlate &)
Apply the algorithm to a ParallelPlate, it is empty for cyclotrontracker .
std::unique_ptr< LossDataSink > lossDs_m
Track particles or bunches.