Class ThickRfFieldMap

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

public class ThickRfFieldMap extends ThickElement implements IRfGap, IRfCavityCell
Thick element version for RF field map implementation. This class is supposed to be faster than the ThinRfFieldMap for fieldmaps with many data points, since it removes the overhead of creating an element for every point in the fieldmap. The drawback is that it can't be superposed to other ThickElements.
Author:
Juan F. Esteban Müller <JuanF.EstebanMuller@esss.se>
  • Constructor Details

    • ThickRfFieldMap

      public ThickRfFieldMap()
    • ThickRfFieldMap

      public ThickRfFieldMap(String strId)
  • Method Details

    • getCellLength

      public double getCellLength()
    • setCellLength

      public void setCellLength(double cellLength)
    • initializeFrom

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

      public void computePhaseDriftAndEnergyGain(IProbe probe, double dblLen)
      Method calculates the phase drift and the energy gain on the current range (i.e from probe.getPosition, and for dblLength).
      Throws:
      ModelException
    • transferMap

      public PhaseMap transferMap(IProbe probe, double dblLen)
      Method calculates transfer matrix for the field map on the current range (i.e from probe.getPosition, and for dblLength).
      Specified by:
      transferMap in interface IElement
      Specified by:
      transferMap in class ThickElement
      Parameters:
      probe - probe containing parameters for the sub-sectional transfer matrix
      dblLen - length of sub-element
      Returns:
      See Also:
    • longitudinalPhaseAdvance

      public double longitudinalPhaseAdvance(IProbe probe, double dblLen)
      Description copied from class: ThickElement
      This is a kluge to make RF gaps work, since frequency is not defined for modeling elements outside RF cavities. For such elements we simply return 0 phase advance. For elements where frequency is defined, we compute the phase advance as the angular frequency times the elapsed time through the element (see ThickElement.elapsedTime(IProbe, double)).
      Specified by:
      longitudinalPhaseAdvance in interface IElement
      Overrides:
      longitudinalPhaseAdvance in class ThickElement
      Parameters:
      probe - the probe propagating through this element
      dblLen - distance the probe propagates through the element
      Returns:
      longitudinal phase advance of the probe through given distance
      See Also:
    • energyGain

      public double energyGain(IProbe probe, double dblLen)
      Description copied from class: ThickElement
      Return the energy gain of the beamline element over a subsection of the specified length.
      Specified by:
      energyGain in interface IElement
      Specified by:
      energyGain in class ThickElement
      Parameters:
      probe - probe for which energy gain is to be determined
      dblLen - subsection length to calculate energyGain for
      Returns:
      the value #subEnergyGain(probe)*#getCount()
    • elapsedTime

      public double elapsedTime(IProbe probe, double dblLen)
      Description copied from class: Element
      Returns the time taken for the probe probe to propagate through a subsection of the element with length dblLen.
      Specified by:
      elapsedTime in interface IElement
      Specified by:
      elapsedTime in class ThickElement
      Parameters:
      probe - determine energy gain for this probe
      dblLen - length of subsection to calculate energy gain for
      Returns:
      the elapsed time through sectionUnits: seconds
    • setETL

      public void setETL(double dblETL)
      Description copied from interface: IRfGap
      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).
    • setE0

      public void setE0(double cavAmp)
      Description copied from interface: IRfGap
      Set the on accelerating field. This method should be called by the RF cavity containing this gap and should use the amplitude factor.
      Specified by:
      setE0 in interface IRfGap
      Parameters:
      cavAmp - - the on axis field (V/m)
    • setPhase

      public void setPhase(double cavPhase)
      Description copied from interface: IRfGap
      Set the phase delay of the RF in gap with respect to the synchronous particle. The actual energy gain from the gap is given by qETLcos(dblPhi) where dbkPhi is the phase delay. This method should be called by the RF cavity containing this gap and should use the phase factor.
      Specified by:
      setPhase in interface IRfGap
      Parameters:
      cavPhase -
    • setFrequency

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

      public double getETL()
      Description copied from interface: IRfGap
      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()
      Description copied from interface: IRfGap
      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()
      Description copied from interface: IRfGap
      Get the operating frequency of the RF gap.
      Specified by:
      getFrequency in interface IRfGap
      Returns:
      frequency of RF gap (in Hertz)
    • getE0

      public double getE0()
      Description copied from interface: IRfGap
      Get the on accelerating field (V/m)
      Specified by:
      getE0 in interface IRfGap
    • 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
    • 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
      See Also:
      • RF Linear Accelerators, Thomas P. Wangler (Wiley, 2008).
    • 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
      See Also:
    • getCavityModeConstant

      public double getCavityModeConstant()
      Description copied from interface: IRfCavityCell

      Returns the structure mode number q for the cavity in which this gap belongs. This is the fractional phase advance between cells, with respect to π. It can also be interpreted as describing the spatial advance of the axial electric field from cell to cell.

      Specified by:
      getCavityModeConstant in interface IRfCavityCell
      Returns:
      the cavity mode constant for the cell containing this gap
      See Also:
    • isEndCell

      public boolean isEndCell()
      Description copied from interface: IRfCavityCell
      Returns whether or not the cell is the first or last in a string of cells within an RF cavity. This is particularly important in structures operating outside 0 mode where the cell phasing may change.
      Specified by:
      isEndCell in interface IRfCavityCell
      Returns:
      true if this cell is at either end in a bank of cells, false otherwise
    • 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
    • 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 longitudinalPhaseEntrance)
      Specified by:
      setLongitudinalPhaseReference in interface IRfCavityCell
    • getLongitudinalPhaseReference

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