Package gda.scan

Class TurboXasMotorParameters

java.lang.Object
gda.scan.TurboXasMotorParameters

public class TurboXasMotorParameters extends Object
This class calculates real space motor positions for a Turbo XAS scan from user specified set of parameters based on energy.
Since:
14/7/2016
  • Constructor Details

    • TurboXasMotorParameters

      public TurboXasMotorParameters()
    • TurboXasMotorParameters

      public TurboXasMotorParameters(TurboXasParameters params)
  • Method Details

    • setDefaultMotorParams

      public void setDefaultMotorParams()
    • setMotorLimits

      public void setMotorLimits(Scannable scannableMotor)
      Get motor limits from scannableMotor
      Parameters:
      scannableMotor -
    • setScanParameters

      public void setScanParameters(TurboXasParameters params)
    • setPositionToEnergyPolynomial

      public void setPositionToEnergyPolynomial(String eqnString)
    • getPositionToEnergyPolynomial

      public org.apache.commons.math3.analysis.polynomials.PolynomialFunction getPositionToEnergyPolynomial()
    • getScanParameters

      public TurboXasParameters getScanParameters()
    • getCurrentTimingGroup

      public TurboSlitTimingGroup getCurrentTimingGroup()
      Returns:
      timing group last used to set motor parameters by call to setMotorParametersForTimingGroup(int)
    • setMotorParameters

      public void setMotorParameters()
    • setMotorParametersForTimingGroup

      public void setMotorParametersForTimingGroup(int timingGroupIndex)
      Calculate motor parameters for specified timing group of a scan : Initial, final positions including velocity ramp up/down, velocity stabilisation distance; Motor speed is calculated from motor range for energy range of scan and time per spectrum spectrum See Turbo XAS scans confluence page for more details.
      Parameters:
      timingGroupIndex -
    • getScanSpeed

      public double getScanSpeed(double timeForSpectra)
      Calculate motor speed required to move between start, end scan positions in given time
      Parameters:
      timeForSpectra -
      Returns:
      motor speed
    • getTotalTimeForScan

      public double getTotalTimeForScan(double motorSpeed)
      Calculate total time to move from one end of scan to the other at specified motor speed, including accel and velocity stabilisation
      Returns:
      total time
    • getTotalTimeForScan

      public double getTotalTimeForScan()
    • setMotorParametersForTimingGroup

      public void setMotorParametersForTimingGroup(TurboSlitTimingGroup timingGroup)
    • setMotorParametersForTime

      public void setMotorParametersForTime(double timeForSpectrum)
      Calculate and set motor parameters for given time for spectrum.
      Parameters:
      timeForSpectrum -
    • calculateSetPositionStepSize

      public void calculateSetPositionStepSize()
      Calculate motor position step size and number of readouts/steps to use for scan from energy values. (i.e. 'Pulse step' and 'Max pulses' used for Zebra). Stepsize is encoder resolution limited to avoid rounding errors that can lead to difference between expected number of pulses and number produced by zebra from encoder readout - see getResolutionLimitedStepSize().
    • getResolutionLimitedStepSize

      public double getResolutionLimitedStepSize()
      Calculate resolution limited position step size corresponding to currently set energy. Step size is rounded down to nearest stepsizeResolution mm.
      Returns:
      Resolution limited step size
    • getStepsizeResolution

      public double getStepsizeResolution()
    • setStepsizeResolution

      public void setStepsizeResolution(double stepsizeResolution)
    • showParameters

      public void showParameters()
    • validMotorScanRange

      public boolean validMotorScanRange()
      Validate the scan motor move range. If range is zero, it probably means that the initial, final energies are the same, or that something wrong with energy cal. polynomial.
      Returns:
      True if > minimum motor move size
    • validMotorScanSpeed

      public boolean validMotorScanSpeed()
      Validate currently set motor scan speed
      Returns:
      True if speed is invalid input: '<' maximum speed of motor
    • validMotorReturnSpeed

      public boolean validMotorReturnSpeed()
    • validMotorScanSpeeds

      public boolean validMotorScanSpeeds()
      Validate motor scan speed for all timing groups
      Returns:
      True if speeds for all groups are invalid input: '<' maximum speed of motor
    • getMotorPositionsWithinLimits

      public boolean getMotorPositionsWithinLimits()
      Validate motor initial, final position
      Returns:
      True if motor range is within motor limits
    • validateParameters

      public boolean validateParameters()
      Validate motor parameters
      Returns:
      True if motor positions, speed
    • getPositionForEnergy

      public double getPositionForEnergy(double energy)
    • getEnergyForPosition

      public double getEnergyForPosition(double position)
    • getMotorMaxSpeed

      public double getMotorMaxSpeed()
    • setMotorMaxSpeed

      public void setMotorMaxSpeed(double maxMotorSpeed)
    • getMotorTimeToVelocity

      public double getMotorTimeToVelocity()
    • setMotorTimeToVelocity

      public void setMotorTimeToVelocity(double motorTimeToVelocity)
    • getMotorHighLimit

      public double getMotorHighLimit()
    • setMotorHighLimit

      public void setMotorHighLimit(double motorHighLimit)
    • getMotorLowLimit

      public double getMotorLowLimit()
    • setMotorLowLimit

      public void setMotorLowLimit(double motorLowLimit)
    • getMotorStabilisationDistance

      public double getMotorStabilisationDistance()
    • setMotorStabilisationDistance

      public void setMotorStabilisationDistance(double motorStabilisationDistance)
    • getScanStartPosition

      public double getScanStartPosition()
      Returns:
      Start scan position of motor (from user specified start energy)
    • getScanEndPosition

      public double getScanEndPosition()
      Returns:
      End scan position of motor (from user specified end energy)
    • getStartPosition

      public double getStartPosition()
      Returns:
      Start position for motor (including ramp and stabilisation distance)
    • getEndPosition

      public double getEndPosition()
      Returns:
      End position for motor (including ramp and stabilisation distance)
    • getScanMotorSpeed

      public double getScanMotorSpeed()
      Returns:
      Motor speed to be used during scan during data collection
    • getReturnMotorSpeed

      public double getReturnMotorSpeed()
    • setReturnMotorSpeed

      public void setReturnMotorSpeed(double returnMotorSpeed)
    • getScanPositionRange

      public double getScanPositionRange()
    • getMotorRampDistance

      public double getMotorRampDistance()
    • getNumReadoutsForScan

      public int getNumReadoutsForScan()
    • getPositionStepsize

      public double getPositionStepsize()
    • getEnergyStepSize

      public double getEnergyStepSize()
      Returns:
      Energy stepsize corresponding to currently set number of readouts. (Number of readouts is set using a resolution limited position stepsize)
    • toXML

      public String toXML() throws IOException
      Serialize TurboXasMotorParameters object to XML.
      Returns:
      String with XML serialized object
      Throws:
      com.fasterxml.jackson.core.JsonProcessingException
      IOException
    • fromXML

      public static TurboXasMotorParameters fromXML(String xmlString) throws IOException, com.fasterxml.jackson.core.JsonProcessingException
      Create new TurboXasMotorParameters object deserialized from supplied XML string.
      Parameters:
      xmlString -
      Returns:
      TurboXasMotorParameters object
      Throws:
      com.fasterxml.jackson.core.JsonProcessingException
      com.fasterxml.jackson.databind.JsonMappingException
      IOException