18 #ifndef SPECIFICELEMENTVISITOR_H
19 #define SPECIFICELEMENTVISITOR_H
57 #ifdef ENABLE_OPAL_FEL
64 template <
class ELEM1,
class ELEM2>
78 allElements.push_back(dynamic_cast<const ELEM*>(&element));
182 #ifdef ENABLE_OPAL_FEL
183 virtual void visitUndulator(
const Undulator &);
228 beamline.
iterate(*
this,
false);
273 wrappedElement->
accept(*
this);
391 #ifdef ENABLE_OPAL_FEL
423 return allElementsOfTypeE.size();
428 return allElementsOfTypeE.begin();
433 return allElementsOfTypeE.begin();
438 return allElementsOfTypeE.end();
443 return allElementsOfTypeE.end();
448 return allElementsOfTypeE.front();
453 return allElementsOfTypeE.front();
virtual void visitSolenoid(const Solenoid &)
Apply the algorithm to a solenoid.
virtual void visitOutputPlane(const OutputPlane &)
Apply the algorithm to an output plane.
virtual void visitVariableRFCavity(const VariableRFCavity &vcav)
Apply the algorithm to a variable RF cavity.
virtual void visitRFCavity(const RFCavity &)
Apply the algorithm to a RF cavity.
virtual void visitCorrector(const Corrector &)
Apply the algorithm to a closed orbit corrector.
virtual void visitDegrader(const Degrader &)
Apply the algorithm to a degrader.
ElementList_t::const_reference const_reference_t
virtual void execute()
Execute the algorithm on the attached beam line.
virtual void visitComponent(const Component &)
Apply the algorithm to an arbitrary component.
virtual void accept(BeamlineVisitor &visitor) const =0
Apply visitor.
virtual void visitVacuum(const Vacuum &)
Apply the algorithm to a vacuum space.
ElementBase * getElement() const
Get the element pointer.
ElementList_t::reference reference_t
An abstract sequence of beam line components.
Interface for general multipole.
ElementList_t::iterator iterator_t
Interface for drift space.
Interface for general corrector.
virtual void iterate(BeamlineVisitor &, bool reverse) const =0
Apply visitor to all elements of the line.
std::list< const ELEM * > ElementList_t
virtual void visitFlexibleCollimator(const FlexibleCollimator &)
Apply the algorithm to a flexible collimator.
std::string::iterator iterator
virtual void visitMultipoleTStraight(const MultipoleTStraight &)
Apply the algorithm to an arbitrary straight multipole.
virtual void visitDrift(const Drift &)
Apply the algorithm to a drift.
static void apply(ElementList_t &allElements, const ELEM &element)
virtual void visitMultipoleTCurvedVarRadius(const MultipoleTCurvedVarRadius &)
Apply the algorithm to an arbitrary curved multipole of variable radius.
SpecificElementVisitor(const Beamline &beamline)
virtual void visitCyclotron(const Cyclotron &)
Apply the algorithm to an cyclotron.
ElementList_t allElementsOfTypeE
virtual void visitTravelingWave(const TravelingWave &)
Apply the algorithm to a traveling wave.
virtual void visitRBend(const RBend &)
Apply the algorithm to a rectangular bend.
virtual void visitSeptum(const Septum &)
Apply the algorithm to a septum.
virtual void visitVerticalFFAMagnet(const VerticalFFAMagnet &)
Apply the algorithm to a vertical FFA magnet.
virtual void visitScalingFFAMagnet(const ScalingFFAMagnet &)
Apply the algorithm to a scaling FFA magnet.
static void apply(ElementList_t &, const ELEM2 &)
virtual void visitFlaggedElmPtr(const FlaggedElmPtr &)
Apply the algorithm to a FlaggedElmPtr.
virtual void visitMultipole(const Multipole &)
Apply the algorithm to a multipole.
virtual void visitRBend3D(const RBend3D &)
Apply the algorithm to a rectangular bend.
virtual void visitOffset(const Offset &)
Apply the algorithm to an offset (placement).
virtual void visitMarker(const Marker &)
Apply the algorithm to a marker.
virtual void visitCCollimator(const CCollimator &)
Apply the algorithm to a collimator.
virtual void visitRing(const Ring &)
Apply the algorithm to a ring.
virtual void visitStripper(const Stripper &)
Apply the algorithm to a particle stripper.
virtual void visitBeamline(const Beamline &)
Apply the algorithm to a beam line.
virtual void visitSBend(const SBend &)
Apply the algorithm to a sector bend.
ElementList_t::const_iterator const_iterator_t
virtual void visitProbe(const Probe &prob)
Apply the algorithm to a probe.
std::list< const ELEM * > ElementList_t
virtual void visitMultipoleTCurvedConstRadius(const MultipoleTCurvedConstRadius &)
Apply the algorithm to an arbitrary curved multipole of constant radius.
A section of a beam line.
Ring describes a ring type geometry for tracking.
Interface for a single beam element.
virtual void visitSBend3D(const SBend3D &)
Apply the algorithm to a sector bend with 3D field map.
virtual void visitSource(const Source &)
Apply the algorithm to a source.
std::list< const ELEM1 * > ElementList_t
virtual void visitMonitor(const Monitor &)
Apply the algorithm to a beam position monitor.
virtual void visitVariableRFCavityFringeField(const VariableRFCavityFringeField &vcav)
Apply the algorithm to a variable RF cavity with Fringe Field..
virtual void visitMultipoleT(const MultipoleT &)
Apply the algorithm to an arbitrary multipole.