Class IdealRfGap

java.lang.Object
xal.model.elem.Element
xal.model.elem.ThinElement
xal.extension.jels.model.elem.IdealRfGap
All Implemented Interfaces:
IRfCavityCell, IRfGap, IComponent, IElement

public class IdealRfGap extends ThinElement implements IRfGap, IRfCavityCell
Represents the action of an ideal RF gap. Gap is modeled as a thin element whose accelerating action is given by the Panofsky formula.

The gap provides acceleration to the propagation probe as well as longitudinal focusing and radial defocusing. These mechanisms are implemented according to that provided by an ideal gap where the effects can be described analytically.

Author:
Christopher K. Allen, Juan F. Esteban Müller <juanf.estebanmuller@esss.se>
  • Field Details

  • Constructor Details

    • IdealRfGap

      public IdealRfGap(String strId, double dblETL, double dblPhase, double dblFreq)
      Creates a new instance of IdealRfGap
      Parameters:
      strId - instance identifier of element
      dblETL - field/transit time/length factor for gap (in volts)
      dblPhase - operating phase of gap (in radians)
      dblFreq - operating RF frequency of gap (in Hertz)
    • IdealRfGap

      public IdealRfGap()
      JavaBean constructor - creates a new uninitialized instance of IdealRfGap BE CAREFUL
  • Method Details

    • getETL

      public double getETL()
      Return the ETL product of the gap, where E is the longitudinal electric field, T is the transit time factor, and L is the gap length.
      Specified by:
      getETL in interface IRfGap
      Returns:
      the ETL product of the gap (in volts).
    • getPhase

      public double getPhase()
      Return the RF phase delay of the gap with respect to the synchronous particle.
      Specified by:
      getPhase in interface IRfGap
      Returns:
      phase delay w.r.t. synchronous particle (in radians).
    • getFrequency

      public double getFrequency()
      Get the operating frequency of the RF gap.
      Specified by:
      getFrequency in interface IRfGap
      Returns:
      frequency of RF gap (in Hertz)
    • setETL

      public void setETL(double dblETL)
      Set the ETL product of the RF gap where E is the longitudinal electric field of the gap, T is the transit time factor of the gap, L is the length of the gap.

      The maximum energy gain from the gap is given by qETL where q is the charge (in coulombs) of the species particle.

      Specified by:
      setETL in interface IRfGap
      Parameters:
      dblETL - ETL product of gap (in volts).
    • setPhase

      public void setPhase(double cavPhase)
      Set the phase delay of the RF in the cavity with respect to the synchronous particle. The actual energy gain from the gap is given by qETLcos(dblPhi) where dbkPhi is the phase delay.
      Specified by:
      setPhase in interface IRfGap
      Parameters:
      cavPhase - phase delay of the RF w.r.t. synchronous particle (in radians).
    • setFrequency

      public void setFrequency(double dblFreq)
      Set the operating frequency of the RF gap.
      Specified by:
      setFrequency in interface IRfGap
      Parameters:
      dblFreq - frequency of RF gap (in Hertz)
    • setE0

      public void setE0(double cavAmp)
      Set the on accelerating field
      Specified by:
      setE0 in interface IRfGap
      Parameters:
      cavAmp - - cavity amplitude (V)
    • getE0

      public double getE0()
      Get the on accelerating field (V/m)
      Specified by:
      getE0 in interface IRfGap
    • getCellLength

      public double getCellLength()
      return the cell length (m)
    • elapsedTime

      public double elapsedTime(IProbe probe)
      Returns the time taken for the probe to propagate through element.
      Specified by:
      elapsedTime in class ThinElement
      Parameters:
      probe - propagating probe
      Returns:
      value of zero
    • energyGain

      public double energyGain(IProbe probe)
      Compute the energy gain of the RF gap for a probe including the effects of calculating the phase advance.
      Specified by:
      energyGain in class ThinElement
      Returns:
      energy gain for this probe (in electron-volts)
    • computeBetaFromGamma

      protected double computeBetaFromGamma(double gamma)
    • transferMap

      protected PhaseMap transferMap(IProbe probe) throws ModelException

      Compute the transfer map for an ideal RF gap. </p

      New transfer matrix with same definitions of kr and kz from Trace3D manual, but correctly considering XAL and trace3d longitudinal phase. transformation

      Modified on 21 Jul 06 Sako (consistency checked with Trace3D).

      Modified on 15 Aug 17 Juan F. Esteban Müller to correct synchronous phase calculation

      Specified by:
      transferMap in class ThinElement
      Parameters:
      probe - compute transfer map using parameters from this probe
      Returns:
      transfer map for the probe
      Throws:
      ModelException - this should not occur
    • print

      public void print(PrintWriter os)
      Dump current state and content to output stream.
      Overrides:
      print in class Element
      Parameters:
      os - output stream object
    • initializeFrom

      public void initializeFrom(LatticeElement element)
      Conversion method to be provided by the user
      Specified by:
      initializeFrom in interface IComponent
      Overrides:
      initializeFrom in class Element
      Parameters:
      element - the SMF node to convert
    • setCellLength

      public void setCellLength(double cellLength)
    • getStructureMode

      public double getStructureMode()
    • setStructureMode

      public void setStructureMode(double structureMode)
    • setTTFFit

      public void setTTFFit(InverseRealPolynomial ttfFit)
    • longitudinalPhaseAdvance

      protected double longitudinalPhaseAdvance(IProbe probe)
      Description copied from class: ThinElement

      Again, this is a kluge. We return zero since the notion of frequency is not defined for every element (perhaps if this element is the child of an RF cavity). For those elements that do create a phase advance they need to override this method.

      There is some legitimacy in returning zero since a thin element generally has no phase advance. That is, there is no propagation therefore no elapsed time and no phase advance. Only if there is energy gain must there be a corresponding conjugate phase advance.

      Overrides:
      longitudinalPhaseAdvance in class ThinElement
      Parameters:
      probe - probe experiencing a phase advance through this element
      Returns:
      the change in phase while going through the element
    • setCavityCellIndex

      public void setCavityCellIndex(int indCell)
      Description copied from interface: IRfCavityCell

      Set the index n of this cell within the enclosing RF cavity. The index origin begins at 0, specifically, the first cell in the cavity will have a cell index of O. Since cell phase φ seen by the probe is

          φ = nqπ + φ0

      where q is the cavity structure constant and φ0 is the klystron driving phase, the first cell always has the phase of the klystron.

      When considered with an RF gap, it can be convenient to consider the phase rather as a spatial component of the field and combine it with the field amplitude. We simply get a signum function effect where the new field E>n at cell n is given by

          En = E0 cos(nqπ)

      where E0 is the usual gap field strength.

      See the discussion below on cavity mode constants.

      Specified by:
      setCavityCellIndex in interface IRfCavityCell
      Parameters:
      indCell - index of the cavity cell within the cavity, starting at 0
      Since:
      Jan 8, 2015 by Christopher K. Allen
      See Also:
    • setCavityModeConstant

      public void setCavityModeConstant(double dblCavModeConst)
      Description copied from interface: IRfCavityCell

      Sets the structure mode number q for the cavity in which this cell belongs. Here the structure mode number is defined in terms of the fractional phase advance between cells, with respect to π. To make this explicit

          q = 0     ⇛ 0 mode
          q = 1/2 ⇒ π/2 mode
          q = 1     ⇛ π mode

      Thus, a cavity mode constant of q = 1/2 indicates a π/2 phase advance between adjacent cells and a corresponding cell amplitude function An of

          An = cos(nqπ)

      where n is the index of the cell within the coupled cavity.

      Specified by:
      setCavityModeConstant in interface IRfCavityCell
      Parameters:
      dblCavModeConst - the cavity mode structure constant for the cavity containing this cell
      Since:
      Jan 8, 2015 by Christopher K. Allen
      See Also:
    • getCavityCellIndex

      public int getCavityCellIndex()
      Description copied from interface: IRfCavityCell
      Returns the index of this cell within the parent RF cavity. The index origin starts at zero.
      Specified by:
      getCavityCellIndex in interface IRfCavityCell
      Returns:
      the cell number within the parent cavity, starting at zero
      Since:
      Jan 8, 2015 by Christopher K. Allen
      See Also:
    • getCavityModeConstant

      public double getCavityModeConstant()

      Returns the structure mode number q for the cavity in which this gap belongs. Here the structure mode number is defined in terms of the fractional phase advance between cells, with respect to π. To make this explicit

          q = 0     ⇛ 0 mode
          q = 1/2 ⇒ π/2 mode
          q = 1     ⇛ π mode

      Thus, a cavity mode constant of q = 1/2 indicates a π/2 phase advance between adjacent cells and a corresponding cell amplitude function An of

          An = cos(nqπ)

      where n is the index of the cell within the coupled cavity.

      Specified by:
      getCavityModeConstant in interface IRfCavityCell
      Returns:
      the cavity mode constant for the cell containing this gap
      Since:
      Nov 20, 2014
      See Also:
      • RF Linear Accelerators, Thomas P. Wangler (Wiley, 2008).
    • isEndCell

      public boolean isEndCell()
      Returns flag indicating whether or not this gap is in the initial or terminal cell in a string of cells within an RF cavity.
      Specified by:
      isEndCell in interface IRfCavityCell
      Returns:
      true if this gap is in a cavity cell at either end of a cavity cell bank, false otherwise
      Since:
      Jan 23, 2015 by Christopher K. Allen
    • isFirstCell

      public boolean isFirstCell()
      Description copied from interface: IRfCavityCell
      Indicates whether or not this cell is the first cell of an RF cavity.
      Specified by:
      isFirstCell in interface IRfCavityCell
      Returns:
      true if this is the initial cell in an RF cavity, false otherwise
      Since:
      Jan 23, 2015 by Christopher K. Allen
      See Also:
    • computeSynchronousPhaseAndEnergyGain

      public void computeSynchronousPhaseAndEnergyGain(IProbe probe)
      Description copied from interface: IRfGap
      Compute the synchronous phase and the energy gain for a cavity gap.
      Specified by:
      computeSynchronousPhaseAndEnergyGain in interface IRfGap
    • getSynchronousPhase

      public double getSynchronousPhase()
      Description copied from interface: IRfGap
      Return the synchronous phase of a cavity gap, which must be previously calculated using computeSynchronousPhase.
      Specified by:
      getSynchronousPhase in interface IRfGap
      Returns:
      synchronous phase [rad]
    • getEnergyGain

      public double getEnergyGain()
      Description copied from interface: IRfGap
      Return the energy gain of a cavity gap previously calculated.
      Specified by:
      getEnergyGain in interface IRfGap
      Returns:
    • setLongitudinalPhaseReference

      public void setLongitudinalPhaseReference(double longitudinalPhaseReference)
      Specified by:
      setLongitudinalPhaseReference in interface IRfCavityCell
    • getLongitudinalPhaseReference

      public double getLongitudinalPhaseReference()
      Specified by:
      getLongitudinalPhaseReference in interface IRfCavityCell