OPAL (Object Oriented Parallel Accelerator Library)
2.2.0
OPAL
|
Track particles or bunches. More...
#include <Tracker.h>
Public Member Functions | |
Tracker (const Beamline &, const PartData &, bool backBeam, bool backTrack) | |
Constructor. More... | |
Tracker (const Beamline &, PartBunchBase< double, 3 > *bunch, const PartData &, bool backBeam, bool backTrack) | |
Constructor. More... | |
virtual | ~Tracker () |
const PartBunchBase< double, 3 > * | getBunch () const |
Return the current bunch. More... | |
void | addToBunch (const OpalParticle &) |
Add particle to bunch. More... | |
virtual void | visitComponent (const Component &) |
Store the bunch. More... | |
virtual void | visitPatch (const Patch &pat) |
Apply the algorithm to a patch. More... | |
virtual void | visitAlignWrapper (const AlignWrapper &) |
Apply the algorithm to an align wrapper. More... | |
virtual void | visitTrackIntegrator (const TrackIntegrator &) |
Apply the algorithm to an integrator capable of tracking. More... | |
virtual void | visitMapIntegrator (const MapIntegrator &) |
Apply the algorithm to an integrator capable of mapping. More... | |
virtual void | setNumBunch (int) |
set total number of tracked bunches More... | |
virtual int | getNumBunch () |
get total number of tracked bunches More... | |
![]() | |
AbstractTracker (const Beamline &, const PartData &, bool backBeam, bool backTrack) | |
Constructor. More... | |
virtual | ~AbstractTracker () |
![]() | |
DefaultVisitor (const Beamline &beamline, bool backBeam, bool backTrack) | |
Constructor. More... | |
virtual | ~DefaultVisitor ()=0 |
virtual void | execute () |
Apply the algorithm to the top-level beamline. More... | |
virtual void | visitBeamBeam (const BeamBeam &) |
Apply the algorithm to a beam-beam. More... | |
virtual void | visitBeamStripping (const BeamStripping &) |
Apply the algorithm to a beam stripping. More... | |
virtual void | visitCCollimator (const CCollimator &) |
Apply the algorithm to a collimator. More... | |
virtual void | visitCyclotron (const Cyclotron &) |
Apply the algorithm to an cyclotron. More... | |
virtual void | visitRing (const Ring &) |
Apply the algorithm to an opal ring.. More... | |
virtual void | visitCorrector (const Corrector &) |
Apply the algorithm to a corrector. More... | |
virtual void | visitDegrader (const Degrader &) |
Apply the algorithm to a drift. More... | |
virtual void | visitDiagnostic (const Diagnostic &) |
Apply the algorithm to a diagnostic. More... | |
virtual void | visitDrift (const Drift &) |
Apply the algorithm to a drift. More... | |
virtual void | visitFlexibleCollimator (const FlexibleCollimator &) |
Apply the algorithm to a flexible collimator. More... | |
virtual void | visitLambertson (const Lambertson &) |
Apply the algorithm to a Lambertson. More... | |
virtual void | visitMarker (const Marker &) |
Apply the algorithm to a marker. More... | |
virtual void | visitMonitor (const Monitor &) |
Apply the algorithm to a monitor. More... | |
virtual void | visitMultipole (const Multipole &) |
Apply the algorithm to a multipole. More... | |
virtual void | visitMultipoleT (const MultipoleT &) |
Apply the algorithm to a multipoleT. More... | |
virtual void | visitMultipoleTStraight (const MultipoleTStraight &) |
Apply the algorithm to a multipoleTStraight. More... | |
virtual void | visitMultipoleTCurvedConstRadius (const MultipoleTCurvedConstRadius &) |
Apply the algorithm to a multipoleTCurvedConstRadius. More... | |
virtual void | visitMultipoleTCurvedVarRadius (const MultipoleTCurvedVarRadius &) |
Apply the algorithm to a multipoleTCurvedVarRadius. More... | |
virtual void | visitOffset (const Offset &) |
Apply the algorithm to an Offset. More... | |
virtual void | visitProbe (const Probe &prob) |
Apply the algorithm to a probe. More... | |
virtual void | visitRBend (const RBend &) |
Apply the algorithm to a rectangular bend. More... | |
virtual void | visitRBend3D (const RBend3D &) |
Apply the algorithm to a rectangular bend. More... | |
virtual void | visitVariableRFCavity (const VariableRFCavity &vcav) |
Apply the algorithm to a RF cavity. More... | |
virtual void | visitVariableRFCavityFringeField (const VariableRFCavityFringeField &vcav) |
Apply the algorithm to a RF cavity. More... | |
virtual void | visitRFCavity (const RFCavity &) |
Apply the algorithm to a RF cavity. More... | |
virtual void | visitTravelingWave (const TravelingWave &) |
Apply the algorithm to a RF cavity. More... | |
virtual void | visitRFQuadrupole (const RFQuadrupole &) |
Apply the algorithm to a RF quadrupole. More... | |
virtual void | visitSBend (const SBend &) |
Apply the algorithm to a sector bend. More... | |
virtual void | visitSBend3D (const SBend3D &) |
Apply the algorithm to a sector bend. More... | |
virtual void | visitScalingFFAMagnet (const ScalingFFAMagnet &) |
Apply the algorithm to a scaling FFA magnet. More... | |
virtual void | visitVerticalFFAMagnet (const VerticalFFAMagnet &) |
Apply the algorithm to a RF cavity. More... | |
virtual void | visitSeparator (const Separator &) |
Apply the algorithm to a separator. More... | |
virtual void | visitSeptum (const Septum &) |
Apply the algorithm to a septum. More... | |
virtual void | visitSolenoid (const Solenoid &) |
Apply the algorithm to a solenoid. More... | |
virtual void | visitSource (const Source &) |
Apply the algorithm to a source. More... | |
virtual void | visitParallelPlate (const ParallelPlate &) |
Apply the algorithm to a ParallelPlate. More... | |
virtual void | visitCyclotronValley (const CyclotronValley &) |
Apply the algorithm to a CyclotronValley. More... | |
virtual void | visitStripper (const Stripper &) |
Apply the algorithm to a charge stripper. More... | |
virtual void | visitBeamline (const Beamline &) |
Apply the algorithm to a beam line. More... | |
virtual void | visitFlaggedElmPtr (const FlaggedElmPtr &) |
Apply the algorithm to a FlaggedElmPtr. More... | |
virtual void | visitCorrectorWrapper (const CorrectorWrapper &) |
Apply the algorithm to an corrector wrapper.. More... | |
virtual void | visitCyclotronWrapper (const CyclotronWrapper &) |
Apply the algorithm to an cyclotron wrapper.. More... | |
virtual void | visitMultipoleWrapper (const MultipoleWrapper &) |
Apply the algorithm to an multipole wrapper.. More... | |
virtual void | visitRBendWrapper (const RBendWrapper &) |
Apply the algorithm to an RBend wrapper.. More... | |
virtual void | visitSBendWrapper (const SBendWrapper &) |
Apply the algorithm to an SBend wrapper.. More... | |
virtual void | visitIntegrator (const Integrator &) |
Apply the algorithm to a generic integrator. More... | |
![]() | |
BeamlineVisitor () | |
virtual | ~BeamlineVisitor () |
Public Attributes | |
FieldList | cavities_m |
set multipacting flag More... | |
const Beamline & | itsBeamline_m |
Protected Member Functions | |
void | applyDrift (double length) |
Apply a drift length. More... | |
void | applyThinMultipole (const BMultipoleField &field, double factor) |
void | applyThinSBend (const BMultipoleField &field, double scale, double h) |
void | applyTransform (const Euclid3D &, double refLength=0.0) |
Apply a geometric transformation. More... | |
FTps< double, 2 > | buildMultipoleVectorPotential2D (const BMultipoleField &) |
Construct vector potential for a Multipole. More... | |
FTps< double, 6 > | buildMultipoleVectorPotential (const BMultipoleField &) |
Construct vector potential for a Multipole. More... | |
FTps< double, 2 > | buildSBendVectorPotential2D (const BMultipoleField &, double h) |
Construct vector potential for a SBend. More... | |
FTps< double, 6 > | buildSBendVectorPotential (const BMultipoleField &, double h) |
Construct vector potential for a SBend. More... | |
Protected Attributes | |
PartBunchBase< double, 3 > * | itsBunch_m |
The bunch of particles to be tracked. More... | |
![]() | |
const PartData | itsReference |
The reference information. More... | |
![]() | |
const Beamline & | itsLine |
bool | back_beam |
bool | back_track |
bool | back_path |
double | flip_B |
double | flip_s |
Private Member Functions | |
Tracker () | |
Tracker (const Tracker &) | |
void | operator= (const Tracker &) |
Additional Inherited Members | |
![]() | |
enum | { X, PX, Y, PY, T, PT } |
Tracker::Tracker | ( | const Beamline & | beamline, |
const PartData & | reference, | ||
bool | backBeam, | ||
bool | backTrack | ||
) |
Constructor.
Definition at line 45 of file Tracker.cpp.
Tracker::Tracker | ( | const Beamline & | beamline, |
PartBunchBase< double, 3 > * | bunch, | ||
const PartData & | reference, | ||
bool | backBeam, | ||
bool | backTrack | ||
) |
Constructor.
Definition at line 60 of file Tracker.cpp.
|
virtual |
Definition at line 70 of file Tracker.cpp.
|
private |
|
private |
void Tracker::addToBunch | ( | const OpalParticle & | part | ) |
Add particle to bunch.
Definition at line 79 of file Tracker.cpp.
References itsBunch_m, and PartBunchBase< T, Dim >::push_back().
|
protected |
Apply a drift length.
Definition at line 133 of file Tracker.cpp.
References PartBunchBase< T, Dim >::get_part(), PartData::getBeta(), PartBunchBase< T, Dim >::getLocalNum(), PartData::getM(), PartData::getP(), itsBunch_m, AbstractTracker::itsReference, max(), OpalParticle::pt(), OpalParticle::px(), OpalParticle::py(), PartBunchBase< T, Dim >::set_part(), sqrt(), OpalParticle::t(), OpalParticle::x(), and OpalParticle::y().
|
protected |
Definition at line 154 of file Tracker.cpp.
References max(), BMultipoleField::normal(), BMultipoleField::order(), OpalParticle::px(), OpalParticle::py(), BMultipoleField::skew(), OpalParticle::x(), and OpalParticle::y().
Referenced by ThinTracker::visitMultipole().
|
protected |
Definition at line 183 of file Tracker.cpp.
References FTps< T, N >::derivative(), FTps< T, N >::evaluate(), OpalParticle::px(), OpalParticle::py(), OpalParticle::x(), and OpalParticle::y().
|
protected |
Apply a geometric transformation.
Definition at line 202 of file Tracker.cpp.
References PartBunchBase< T, Dim >::get_part(), PartData::getBeta(), PartBunchBase< T, Dim >::getLocalNum(), PartData::getM(), PartData::getP(), Euclid3D::getX(), Euclid3D::getY(), Euclid3D::getZ(), Euclid3D::isIdentity(), itsBunch_m, AbstractTracker::itsReference, Euclid3D::M(), OpalParticle::pt(), OpalParticle::px(), OpalParticle::py(), PartBunchBase< T, Dim >::set_part(), sqrt(), OpalParticle::t(), OpalParticle::x(), and OpalParticle::y().
Referenced by visitAlignWrapper(), and visitPatch().
|
protected |
Construct vector potential for a Multipole.
Definition at line 266 of file Tracker.cpp.
References FTps< T, N >::getMaxOrder(), FTps< double, 6 >::makeVariable(), BMultipoleField::normal(), BMultipoleField::order(), FTps< T, N >::setTruncOrder(), BMultipoleField::skew(), AbstractTracker::X, and AbstractTracker::Y.
|
protected |
Construct vector potential for a Multipole.
Definition at line 239 of file Tracker.cpp.
References FTps< T, N >::getMaxOrder(), FTps< T, N >::makeVariable(), BMultipoleField::normal(), BMultipoleField::order(), FTps< T, N >::setTruncOrder(), and BMultipoleField::skew().
|
protected |
Construct vector potential for a SBend.
Definition at line 345 of file Tracker.cpp.
References FTps< T, N >::derivative(), FTps< T, N >::getMaxOrder(), FTps< double, 6 >::makeVariable(), BMultipoleField::normal(), BMultipoleField::order(), FTps< T, N >::setTruncOrder(), BMultipoleField::skew(), AbstractTracker::X, and AbstractTracker::Y.
|
protected |
Construct vector potential for a SBend.
Definition at line 293 of file Tracker.cpp.
References FTps< T, N >::derivative(), FTps< T, N >::getMaxOrder(), FTps< T, N >::makeVariable(), BMultipoleField::normal(), BMultipoleField::order(), FTps< T, N >::setTruncOrder(), BMultipoleField::skew(), and AbstractTracker::X.
const PartBunchBase< double, 3 > * Tracker::getBunch | ( | ) | const |
|
inlinevirtual |
|
private |
|
inlinevirtual |
|
virtual |
Apply the algorithm to an align wrapper.
Reimplemented from DefaultVisitor.
Reimplemented in ThickTracker, ParallelTTracker, ParallelSliceTracker, and NilTracker.
Definition at line 101 of file Tracker.cpp.
References ElementBase::accept(), applyTransform(), DefaultVisitor::back_path, AlignWrapper::getElement(), AlignWrapper::getEntranceTransform(), AlignWrapper::getExitTransform(), Inverse(), Euclid3D::isIdentity(), and AlignWrapper::offset().
|
virtual |
Store the bunch.
Apply the algorithm to an arbitrary component.
Reimplemented from DefaultVisitor.
Definition at line 89 of file Tracker.cpp.
References DefaultVisitor::back_beam, DefaultVisitor::back_track, itsBunch_m, AbstractTracker::itsReference, and Component::trackBunch().
|
virtual |
Apply the algorithm to an integrator capable of mapping.
Reimplemented from DefaultVisitor.
Definition at line 128 of file Tracker.cpp.
References DefaultVisitor::back_beam, DefaultVisitor::back_track, itsBunch_m, AbstractTracker::itsReference, and MapIntegrator::trackBunch().
|
virtual |
Apply the algorithm to a patch.
Reimplemented from DefaultVisitor.
Definition at line 94 of file Tracker.cpp.
References applyTransform(), DefaultVisitor::back_path, Patch::getPatch(), and Inverse().
|
virtual |
Apply the algorithm to an integrator capable of tracking.
Reimplemented from DefaultVisitor.
Definition at line 123 of file Tracker.cpp.
References DefaultVisitor::back_beam, DefaultVisitor::back_track, itsBunch_m, AbstractTracker::itsReference, and Integrator::trackBunch().
FieldList Tracker::cavities_m |
set multipacting flag
Definition at line 143 of file Tracker.h.
Referenced by ParallelSliceTracker::ParallelSliceTracker(), ParallelSliceTracker::printRFPhases(), and ParallelSliceTracker::updateRFElement().
const Beamline& Tracker::itsBeamline_m |
Definition at line 145 of file Tracker.h.
Referenced by ParallelSliceTracker::prepareSections(), ThickTracker::prepareSections(), and ParallelTTracker::prepareSections().
|
protected |
The bunch of particles to be tracked.
Definition at line 174 of file Tracker.h.
Referenced by addToBunch(), ThickTracker::advanceDispersion_m(), ThickTracker::advanceParticles_m(), ThinTracker::applyDrift(), applyDrift(), ParallelTTracker::applyFractionalStep(), ParallelCyclotronTracker::applyPluginElements(), applyTransform(), ParallelTTracker::autophaseCavities(), ParallelCyclotronTracker::bgf_main_collision_test(), ParallelCyclotronTracker::borisExternalFields(), ParallelCyclotronTracker::bunchDumpPhaseSpaceData(), ParallelCyclotronTracker::bunchDumpStatData(), ParallelCyclotronTracker::bunchMode_m(), ParallelCyclotronTracker::calcMeanP(), ParallelCyclotronTracker::calcMeanR(), ParallelTTracker::changeDT(), ParallelCyclotronTracker::checkNumPart(), ParallelTTracker::computeExternalFields(), ParallelTTracker::computeParticleMatterInteraction(), ParallelCyclotronTracker::computePathLengthUpdate(), ParallelTTracker::computeSpaceChargeFields(), ParallelCyclotronTracker::computeSpaceChargeFields_m(), ParallelTTracker::computeWakefield(), ParallelCyclotronTracker::deleteParticle(), ParallelTTracker::doBinaryRepartition(), ThickTracker::dump_m(), ParallelTTracker::dumpStats(), ParallelTTracker::emitParticles(), ParallelTTracker::evenlyDistributeParticles(), ParallelCyclotronTracker::execute(), ParallelTTracker::execute(), ThickTracker::execute(), ParallelCyclotronTracker::finalizeTracking_m(), ParallelTTracker::findStartPosition(), ParallelCyclotronTracker::gapCrossKick_m(), ParallelCyclotronTracker::GenericTracker(), getBunch(), ParallelCyclotronTracker::getFieldsAtPoint(), ParallelCyclotronTracker::globalToLocal(), ParallelCyclotronTracker::initDistInGlobalFrame(), ParallelCyclotronTracker::initializeTracking_m(), ParallelCyclotronTracker::initTrackOrbitFile(), ParallelCyclotronTracker::injectBunch(), ParallelCyclotronTracker::isMultiBunch(), ParallelCyclotronTracker::kick(), ParallelTTracker::kickParticles(), ParallelCyclotronTracker::localToGlobal(), ParallelCyclotronTracker::MtsTracker(), ParallelTTracker::prepareEmission(), ParallelCyclotronTracker::push(), ParallelTTracker::pushParticles(), ParallelCyclotronTracker::repartition(), ParallelCyclotronTracker::RFkick(), ParallelCyclotronTracker::rotateAroundX(), ParallelCyclotronTracker::rotateAroundZ(), ParallelCyclotronTracker::rotateWithQuaternion(), ParallelCyclotronTracker::saveInjectValues(), ParallelTTracker::selectDT(), ParallelCyclotronTracker::seoMode_m(), ParallelTTracker::setTime(), ParallelCyclotronTracker::singleMode_m(), ParallelCyclotronTracker::singleParticleDump(), ParallelTTracker::timeIntegration2(), ThickTracker::track_m(), ParallelTTracker::transformBunch(), ThickTracker::update_m(), ParallelCyclotronTracker::update_m(), ThickTracker::updateParticle_m(), ParallelCyclotronTracker::updatePathLength(), ParallelTTracker::updateReferenceParticle(), ParallelTTracker::updateRefToLabCSTrafo(), ParallelCyclotronTracker::updateTime(), ParallelTTracker::visitAlignWrapper(), ThinTracker::visitBeamBeam(), ParallelTTracker::visitBeamBeam(), ParallelCyclotronTracker::visitBeamStripping(), ParallelTTracker::visitBeamStripping(), ThickTracker::visitBeamStripping(), ParallelCyclotronTracker::visitCCollimator(), ParallelTTracker::visitCCollimator(), visitComponent(), ThinTracker::visitCorrector(), ParallelTTracker::visitCorrector(), ParallelCyclotronTracker::visitCyclotron(), ParallelTTracker::visitCyclotronValley(), ParallelTTracker::visitDegrader(), ParallelTTracker::visitDiagnostic(), ParallelTTracker::visitDrift(), ThickTracker::visitDrift(), ParallelTTracker::visitFlexibleCollimator(), ParallelTTracker::visitLambertson(), visitMapIntegrator(), ParallelTTracker::visitMarker(), ParallelTTracker::visitMonitor(), ParallelTTracker::visitMultipole(), ThickTracker::visitMultipole(), ParallelTTracker::visitMultipoleT(), ParallelTTracker::visitParallelPlate(), ParallelCyclotronTracker::visitProbe(), ParallelTTracker::visitProbe(), ThinTracker::visitRBend(), ParallelTTracker::visitRBend(), ParallelTTracker::visitRBend3D(), ParallelCyclotronTracker::visitRFCavity(), ThinTracker::visitRFCavity(), ParallelTTracker::visitRFCavity(), ParallelTTracker::visitRFQuadrupole(), ParallelCyclotronTracker::visitRing(), ThinTracker::visitSBend(), ParallelTTracker::visitSBend(), ThickTracker::visitSBend(), ThinTracker::visitSeparator(), ParallelTTracker::visitSeparator(), ParallelCyclotronTracker::visitSeptum(), ParallelTTracker::visitSeptum(), ThinTracker::visitSolenoid(), ParallelTTracker::visitSolenoid(), ParallelTTracker::visitSource(), ParallelCyclotronTracker::visitStripper(), visitTrackIntegrator(), ParallelTTracker::visitTravelingWave(), and ParallelTTracker::writePhaseSpace().