Software Release Notes for Build "2017A"

Release Date: Jun 29, 2017
Release Name: 2017A
General Description: Rollup of changes and patches since 2016B.

Telescope Operator Overview Information

  • none

Support Astronomer Overview Information

  • none

The Details

New Functionality Tests that need to be performed with the Telescope

  • none

Patches to the Release

  • GCS 5.5a - 30-Aug-2017
  • GCS 5.5b - 31-Aug-2017
  • GCS 5.5c - 03-Sep-2017
  • GCS 5.5d - 01-Nov-2017 - added wavefront telemetry when "is collimated"
  • GCS 5.5e - 18-Dec-2017 - sanity check MODS error codes when translating to string

Known Bugs

  • none

Release Overview

  • none

IIF list of Public Data Dictionary Variables

Operating System, System Configuration, TCS and Hardware Computers

TCS Servers / Workstations

  • none

jet computer, DSP, FPGA

  • none


  • none


  • none

FACSUM - Facility Summary

WEATHERSTATION - Weather Station

TCS Subsystems and GUIs, and significant configuration files

AOS - Adaptive Optics

  • AOS Version 16.6
    • Added a 'metrics' telemetry stream

    • none

DDS - Data Dictionary Server

  • DDS Version 1.7
    • Set ICE proxy name as sender.
    • Add ICE network and protocol tracing support.
    • Add configurable ICE endpoint host IP. This prevents long delays on a client when the client probes a non-existent IP (i.e.,
    • Use the commandIP instead of ddsIP in instrument/DDS.cpp since there are no C++ clients for the DDS.
    • DDS is now an INDI driver, sending INDI properties for everything used by the FLAO INDI GUI.

    • none

ECS - Enclosure Control

    • none

ENV - Environmental Sensors

  • ENV Version 1.27
    • Remove duplicate SMT weather telemetry values (IssueTrak 6181).
    • Do not convert mm_h20 to hPa (IssueTrak 6181).
    • Add ignore flag for LBT weather which is 'true' for all locales but mountain.

    • none

IIF - Instrument Interface

  • IIF Version 8.33
    • Set ICE proxy name as sender.
    • Check for RunAO transition from RUNNING to DONE to avoid 'fall-forward' check when DONE occurs.
    • Add nsQueryEngine.tcl to build and set path to it in iif.conf.
    • Support ARGOS returning a warning from offsetXY for too large an offset.
    • Changes for IssueTrak 6268:
      • Add offset mount delay to reflective memory and make it settable on the GUI through setOffsetThresh().
      • Always do mount delay, followed by optics delay if binocular. Times are now minimum delay, so measure them from when corresponding PCS actions were done.
      • Add event to describe actual delay.
    • Use spaces instead of tabs for indenting in DDNames.
    • Use empty lines instead of just comment character in DDNames.conf.
    • When setting AO status check AO loop closed first to support ARGOS.
    • Add side name to error message when side is not allowed for the current proxy.
    • Add instrument and focal station names to error message when they (or the combination) is illegal.
    • Wait for current commands to finish before stopping.
    • Add DD variable DIMM.meanFlux per Kellee.
    • Add ICE network and protocol tracing support.
    • Add configurable ICE endpoint host IP. This prevents long delays on a client when the client probes a non-existent IP (i.e.,
    • Clean up comments: Preset hotspot is pointing origin and units are always mm. Change 'ALTAZ' to 'AZALT'. Only pixel units are in SetGuidingHotspot command.
    • Clean up instrument and focal station classes.
    • Deprecate BinocularControl CLEARPRESET.
    • Clear PCS target buffers for async Preset when the other side has no Preset. This 'replaces' the CLEARBUFFERS operation.
    • Require coordinate system to be RADEC for all non-sidereal objects in Preset.
    • Add NonSidereal constructor from a Position object.
    • Do not quit pseudo-monocular Preset and Offset commands until the PCS has the target or offset data.
    • Convert AOS errors to warnings in authorize (IssueTrak 6127).
    • Reject non-sidereal stars in GetKFPCoordinates.

  • IIFGUI Version 4.14
    • Make Ra/Dec boxes yellow if Ra = 0 and Dec = -90.
    • Support changing offset mount delay (IssueTrak 6269).
    • Clean up use of instrument and focal station objects.

GCS - Guiding Control

  • GCS Version 5.5
    • Add WFS telemetry entry when WFS thread is exiting so isCollimated is correct.
    • Update spares in GCS and Guiding thread to use DD entries.

  • GCS Version 5.5a
    • Fix PFU doSetProbePosition to only care about Z, not X,Y
    • Added external capability to reset AzCam controller - available from eng GUI and command line
    • Fix GS_FWHMS FITS keyword for LUCI and PFU; both mean and sigma keywords were getting the mean value
    • Fix setting GUI status when transitioning from GS outside to close to HS
    • other cleanup:
      . delete unused local vars
      . delete intermediary telemetry values, use DD/attributes to set when possible
      . fix logging in moveProbeOnGuideStar for isPosAccessible, call for all types
      . combine readArtificialStarSettings and setArtificialStarDefaults
      . delete unused and misleading rad2mm attribute/config file entry
      . added probe telemetry stream in guiding thread so we don't write the guiding stream when only probe error is changing
      . set GT::isGuiding from return status of setup methods
      . add logging when returning false during initialization

    • added reset controller to Engineering window

  • gcsclient
    • none

LSS - Event Logging

    • none

MCS / mcstemp - Mount Control

    • none

OSS - Optical Support

  • OSS Version 4.4
    • Remove single tertiary umac code.
    • Add configuration for secondary hexapod HP3
    • Wait for commands to finish before stopping.

  • Adsec firmware
    • Removed "(rigid)" from HP3 file name.
    • Added README and scripts to load all combinations of firmware.

    • none

PCS - Pointing Control

  • PCS_Version-6.40f
    • Added automatic collection of pointing data for the updateReferenceOrigin function where a pointing correction is performed as requested by AOS. This update is a follow-on to the original implementation done for the updateGuideOrigin function where the pointing correction is performed as requested by the GCS. The output log files are now named: PCSInstrumentName_focalStation_side_subsystem.log (mods_directgregorian_sx_gcs.log or lucifer_bentgregorianfront_dx_aos.log)
    • Overload the great circle midpoint computation (the parameters are ObjectBuffer or tpk::spherical) and move both versions of the computation to the Utility file for general use.
    • Added bookkeeping for the equatorial coordinates associated with the base pointing origin. These are the coordinates needed for ARGOS. It was necessary to create new data dictionary items for this data.
    • Data dictionary items for mount midpoint position for ARGOS
               SPARE (2016B)  2017A Private names                  Public names
               pcs.spareDBL7  pcs.mount.midPt.midPt_RA.Radians     MountMidPtRA
               pcs.spareDBL8  pcs.mount.midPt.midPt_DEC.Radians    MountMidPtDEC
               pcs.spareSTR7  pcs.mount.midPt.midPt_RA.RAString    MountMidPtRAHMS
               pcs.spareSTR8  pcs.mount.midPt.midPt_DEC.DECString  MountMidPtDECDMS
    • Sided ARGOS coordinates for the laser are:
               SPARE (2016B)  2017A Private names                                            Public names
               pcs.spareDBL3  pcs.side[SX].pointingStatus.pointingOrigin.base_RA.Radians     L_PORABase
               pcs.spareDBL4  pcs.side[SX].pointingStatus.pointingOrigin.base_DEC.Radians    L_PODECBase
               pcs.spareSTR3  pcs.side[SX].pointingStatus.pointingOrigin.base_RA.RAString    L_PORABaseHMS
               pcs.spareSTR4  pcs.side[SX].pointingStatus.pointingOrigin.base_DEC.DECString  L_PODECBaseDMS

               pcs.spareDBL5  pcs.side[DX].pointingStatus.pointingOrigin.base_RA.Radians     R_PORABase
               pcs.spareDBL6  pcs.side[DX].pointingStatus.pointingOrigin.base_DEC.Radians    R_PODECBase
               pcs.spareSTR5  pcs.side[DX].pointingStatus.pointingOrigin.base_RA.RAString    R_PORABaseHMS
               pcs.spareSTR6  pcs.side[DX].pointingStatus.pointingOrigin.base_DEC.DECString  R_PODECBaseDMS
    • Created new public data dictionary items in support of LUCI WCS. These values are the object coordinates (OBJRA/OBJDEC) which are the target base coordinates. These values only change on a Preset or after an RADEC absorb. The private names currently exist, so this update just sets the PUBLIC names in the IIF configuration file.
               2016B Existing private names                            Public names
               pcs.side[0|1]     S_TargetRABase     
               pcs.side[0|1]    S_TargetDECBase    
               pcs.side[0|1]    S_TargetRABaseHMS  
               pcs.side[0|1]  S_TargetDECBaseDMS 
    • Deleted these public names

  • PCS Version 6.40g
    • Merged from 2016B
      • Added checks in the UpdateReferenceOrigin() method on the input X and Y values received from AOS. At John's suggestion, an error limit of 1000 mm and a warning limit of 50 mm have been implemented. This is in response to IT#6479 where ARGOS is submitting large and unreasonable values to the PCS for the pointing correction. This change requires new events.
      • Modified the guide routine which was designed for use by LBC. The modification was done to make it more general for use by any instrument which computes its own guide updates and just sends the updates to the PCS.
        • Modified when the guiding reflective memory variables are initialized.
        • The upgrade required changing the telemetry variables in the guide stream used to accommodate the guide updates. All instruments will now use the same variables (filteredCentroid[X|Y]) to store the applied guide updates. This is a change for LBC which formerly used LBCFilteredCentroid[X|Y]. The LBC values have been deprecated and will be removed for TCS Build 2017A.
        • There is now a new telemetry variable in the guide stream, authInstrument, which is an enumerated type representing the authorized instrument. Because PCS has a data-driven configuration file, all instrument and focal station combinations are represented in this file. The current list of PCS authorized instruments are: LBC, MAT, MODS, LUCIFER, LUCIFERARGOS, LINC, PEPSIPOL, PEPSIPFU, LBTI, IRTCDG, IRTCBGF, IRTCBGARGOS, IRTCBGC, IRTCBGB, RETROREFBGF, RETROREFBGARGOS, RETROREFBGC, RETROREFBGB, and RETROREF4DINT.
      • Fixed typos ((1013->2013) in PCSInstrument.conf file (as seen on mountain) for LINC, IRTCBGC, RETROREFBGC, and RETROREF4DINT. Fixed on mountain and in SVN.
      • All PCS changes in 2016Bpcs (below) have been merged onto trunk on 03 March 2017. The changes missing are those in /2016B which have been done for proper computation of the midpoint on ingest. Needs to be checked.
        • Patch on mountain: PCS.20170305a (Activated on 05 March 2017). Working in 2016B branch in /2016Bpcs and in /data/mdelapena/2016B working areas. Checked in PCS and IIF configuration file changes on 03 March 2017 in 2016B branch.

  • PCS Version 7.0
    • IT#6233 and IT#6626
      • When re-using the setDifferentialRateTarget method, distinguish between a fresh Preset non-sidereal object and an updated non-sidereal object. In the former case, any offsets should be cleared, but in the latter case, the current offset needs to be retained. Added an optional flag as the last parameter to the low-level setDifferentialRateTarget object which controls whether or not the pointing origin data is reset. The arguement is modifyTargetPO and is set to true by default.
      • Addressed real issue: any local or guiding adjustments which are tracked by the pointing kernel should NOT be cleared when updating a non-sidereal target versus imposing a fresh, new target.
    • Improved the validation of the ephemeris filename specifically to complain regarding an empty filename. This addresses IT#6624.
    • Fixed the text of the event log description associated with the updatePointingReference lock/unlock of the telescope side. It claims the actions are to change the pointing origin, but the actions are to change the pointing or the equatorial origin.
    • Implemented the Non-sidereal observing plan for targets, guide, and reference objects.
    • Automatic updates have been implemented for targets, guide, and reference objects.
    • Guide and reference objects can be specified as non-sidereal: NS_DIFFERENTIAL, NS_FILE (their own ephemeris) or NS_Target (same as target) and get updates on demand.
    • ComputeKFPCoordinates_differential.
      • ephemerisUpdateFlag - new Event: pcs.command.enableEphemerisUpdateFlag.started/complete
      • modified failed event for updateDifferentialRateTarget as these are mutually exclusive
      • If a non-Sidereal target were defined from an ephemeris, and the automatic updates to the coordinates of the target are enabled (which is the default), the use of updateDifferentialRateTarget which allows updates to the differential tracking rates is disabled and a failed event is generated.
      • Created updateDifferentialRateGuide to handle updates to the differential rates of the guide or reference objects.
      • Removed obsolete variable aoMoveOption from Guider class and pcs.conf.
        • Forced default values in source for any missing variable are the same as the value in the configuration file.
      • Removed obsolete variable commErrorLimit from the TipTilt2PSF class and pcs.conf.
      • Removed warning regarding use of default pointing model.
      • Careful: If target is NS_DIFFERENTIAL or NS_FILE (with update turned off), then the tracking rates can be updated. If the guide/reference object is the same as the target, then its tracking rates should also be updated. We only know if the guide/ref is the target if NS_TARGET is chosen when the guide/ref is submitted. The guide/ref could be the same as the target, but a separate ephemeris or differential rates were provided for it. Therefore, if the guide/ref is the same as the target, then NS_TARGET must be used in order to the guide/ref to receive the benefit of the updated tracking rates.
      • Created a new client function, enableEphemerisUpdateFlag(), which allows one to set the enable/disable state of automated updates to target coordinates from an ephemeris from the PCSGUI.
      • Created new computeKFPCoordinates routine which can handle non-sidereal guide or AO objects.
    • NS_FILE - An ephemeris exists for the guide/reference object. The file must be read and a differential object created Implemented the plan. Target could already be non-sidereal. Now guide/ref can also be non-sidereal. Also, auto updates from ephemeris for target and guide/ref. Guide/ref can be NS_File (their own ephemeris) or NS_Target (same as target) and get updates on demand.
      • ephemerisUpdateFlag, guideEphemerisUpdateFlag, refEphemerisUpdateFlag
      • pcs.ephemerisUpdateFlag, pcs.guideEphemerisUpdateFlag, pcs.refEphemerisUpdateFlag
        • new Event: pcs.command.enableEphemerisUpdateFlag.started/complete
      • modified failed event for updateDifferentialRateTarget as these are mutually exclusive
      • If a non-Sidereal target were defined from an ephemeris, and the automatic updates to the coordinates of the target are enabled (which is the default), the use of updateDifferentialRateTarget which allows updates to the differential tracking rates is disabled and a failed event is generated.
      • Created updateDifferentialRateGuide to handle updates to the differential rates of the guide or reference objects.
      • REPLACED
        • OLD pcs.side[telSide_].pointingStatus.guider.primeDelta[X|Y]
        • NEW pcs.side[telSide_].pointingStatus.guider.rawCentroid_[X|Y]
      • Moved linTerp() and generateCoordinates() to the Utility class for generalized purposes.
    • Telescope class
      • Changed default value of data dictionary item pcs.side[].preset.target_NStype to the empty string.
      • Changed units of the RA and Dec non-sidereal rates in the Events for setDifferentialRateTarget to be in arcseconds.
    • Modified the way each line of data is read from the non-sidereal ephemeris to accommodate a bug in the JPL Horizons telnet interface. Even though the human readable time requested from JPL Horizons is told always to generate fractional seconds, it does not. If the request issued to JPL Horizons specifies the minute or second of the start time, the returned ephemeris will only have enough digits corresponding to the way the time was specified. This caused PCS to read the ephemeris incorrectly and problems ensued. The way the reading of the ephemeris line was originally implemented was to accommodate yet other issues with the way data is provided by JPL Horizons. Fortunately, this issue can still be addressed by modifying the way the data is read. Fixed: IT#6557 (NSIGUI Glitch)
    • Fixed a bug when acquiring ephemeris data from the stored ephemeris vector. The index entry was off by one which caused ephemeris data one minute earlier than intended to be used for the target. This was not a big issue as the pointing kernel will linearly interpolate to the current time, but it was a bug.
    • Deleted commented out lines in several classes.
      • Created new private non-sidereal guide/reference object data dictionary items (akin to the target items) as set in the Preset.
        pcs.targetEmphemerisRead - indicator the target ephemeris has been read and ingested by the pointing kernel
        pcs.guideEmphemerisRead - indicator the guide object ephemeris has been read and ingested by the pointing kernel
        pcs.ephemerisUpdateFlag - indicator of enable/disable state for automatic updates to the coordinates of the non-sidereal target
        pcs.refEmphemerisRead - indicator the reference object ephemeris has been read and ingested by the pointing kernel

      • Updated all spares in PCS trunk from 2016B Build in source and renamed spares used to their real data dictionary names.
        pcs.spareDBL3  pcs.side[SX].pointingStatus.pointingOrigin.base_RA.Radians     
        pcs.spareDBL4  pcs.side[SX].pointingStatus.pointingOrigin.base_DEC.Radians    
        pcs.spareSTR3  pcs.side[SX].pointingStatus.pointingOrigin.base_RA.RAString    
        pcs.spareSTR4  pcs.side[SX].pointingStatus.pointingOrigin.base_DEC.DECString  
        pcs.spareDBL5  pcs.side[DX].pointingStatus.pointingOrigin.base_RA.Radians     
        pcs.spareDBL6  pcs.side[DX].pointingStatus.pointingOrigin.base_DEC.Radians    
        pcs.spareSTR5  pcs.side[DX].pointingStatus.pointingOrigin.base_RA.RAString    
        pcs.spareSTR6  pcs.side[DX].pointingStatus.pointingOrigin.base_DEC.DECString  
        pcs.spareDBL7  pcs.mount.midPt.midPt_RA.Radians     
        pcs.spareDBL8  pcs.mount.midPt.midPt_DEC.Radians    
        pcs.spareSTR7  pcs.mount.midPt.midPt_RA.RAString    
        pcs.spareSTR8  pcs.mount.midPt.midPt_DEC.DECString  
        pcs.spareINT1   pcs.firstSideOfPresetPair 
        pcs.spareINT2   pcs.secondSideOfPresetPair
        pcs.spareINT3  pcs.firstSideOfOffsetPair 
        pcs.spareINT4  pcs.secondSideOfOffsetPair
        pcs.spareINT5  pcs.firstSideOfPCorrPair 
        pcs.spareINT6  pcs.secondSideOfPCorrPair
        pcs.spareINT9  pcs.usePCSCoordinates
      • Updated PCS spares in DDNames.conf to the real names.

    • EVENTS
      • Removed warning event on startup or authorization of a new instrument and there is no instrument authorized on one side of the telescope. PCS would warn about loading a default pointing model. Only the warning event has been suppressed. All the actions remain the same.
      • Deleted
        • pcs.defaultPointingModelWarning
        • pcs.telescope.command.setNewInstrument.defaultPointingModelWarning
      • Modified
        • UpdateReferenceOrigin: warning, coordinateWarning (IT#6479)
      • New
        • ComputeKFPCoordinates: readFile, logFileOrNoData, and fileNotFound
        • ComputeKFPCoordinates_Differential: started, complete, failed, cosDecWarning
        • UpdateDifferentialRateGuide: started, complete, failed
        • EnableEphemerisUpdateFlag: started, complete
        • CollectPointingLogData: started, complete, failed
        • nonSiderealIntervalWarning

    • pcs.conf
      • Upgraded for a new variable which represents the update cycle time for re-reading a target ephemeris and updating the target coordinates.
      • Upgraded for a flag to indicate whether or not a non-sidereal target, guide, or AO reference object defined via an ephemeris should have the target coordinates updated in an automatic way.
      • Updates to the differential tracking rates only of an ephemeris-defined target via updateDifferentialRateTarget() are only allowed when the automatic ephemeris updates are disabled.
            *** NOTE: Ability to update the differential rates for the guide or AO 
                reference object has not been tested in simulation at this time,
                updateDifferentialRateGuide() method.  This routine should have
                sided variables. *** I NEED TO CHECK THIS.
      • nsInterval float 60000.0 (ms)
      • ephemerisUpdateFlag bool true
      • guideEphemerisUpdateFlag bool true
      • refEphemerisUpdateFlag bool true

  • PCSGUI Version 1.14
    • Force the scrollbox to go to the bottom to ensure all events are fully viewed
    • Added an enable/disable button on the "Pointing" subpanel to control the automatic updates to the coordinates of the target, guide, and AO objects by extracting new data from the ephemeris.

  • Pointing Kernel / Pointing Kernel tools
    • none

PMC - Primary Mirror Cell

  • PMC Version 5.38
    • Add severity messages to all components. Add getStatus() command to read them.
    • Add pmcclient command to display the messages.
    • Add call to new method CSQHost::stop() to wait for all running commands before exiting.
    • Clean up #include statements.
    • Make timing throttles in PMCLogger item specific so messages from different actuators, hardpoints, and servoloops will not be missed (IssueTrak 6490).

    • none

  • pmcclient
    • New client to list all items with warnings or errors.

PSF - Point Spread Function

  • PSF Version 6.14
    • Wait for commands to finish before stopping.
    • Do not force collimation angle to 90 for simulator.
    • Use temp301 for collimation temperature for simulator.

    • none


  • Start and stop subsystems as side 'noSide' instead of side left so invalid side check works properly.


  • Remove arcetri1 and arcetri2 locales per Luca.
  • Remove MAT information.
  • Remove ddsIP information.
  • Add TOPlist set.

TCS Common Software

commandreturn - client command status returns

  • none

commandsequencer - client/subsystem command handling

  • CSQHandle
    • Do not check for RPC connected in getStatus(). Let the RPC do the checking. (None of the other CSQHandle methods did this check.)
    • Check for new 'SUBSYSTEMSTOPPING' and associated returns.

  • CSQHost
    • Add method int stop(int msec) to block new commands and wait for current commands to finish. Called by a subsystem just before threads are stopped.
    • Use 'indexof()' to get RPC id to avoid potential race condition when starting multiple subsystems.

  • CSQServer
    • Add method stop() to block new commands from starting.
    • Add method int getCount(int msec) to wait up to msec for running commands to finish.
    • Generate 'ERROR: Subsystem is stopping" return for all inquiry methods when block is active.

core - foundation routines

  • syslog.c sends UDP messages to syslogserver to avoid using rsyslog.

editor - data dictionary editor

  • none

eventhandler - event handling

  • none

networkconfig - subsystem management

  • NetworkBase
    • Do not use 'num_subsystems' from tcs.conf. Instead use size of 'subsystems' map.

  • NetworkConfig
    • Require side to be 'noSide' when starting/stopping unsided subsystems.

  • netconfig
    • Use new 'TOPlist' from tcs.conf for 'netconfig top' command.
    • For both 'netconfig ps' and 'netconfig top' prevent grep from matching trailing characters so TOPlist can omit GUIs and they won't be found from the subsystem name.

reflectivememory - global shared memory

  • none

rpc - communication protocol

  • RPC
    • Allow RPCs to connect to a network different than the command network. The network first octet values are in tcs.conf.
  • RPCServer
    • Allow RPC alias to be replaced. Print Syslog messages on alias errors and alias replacement.

setvalue - reflective memory access

  • none

tcs_config - tcs configuration

  • none


  • none

viewer - data dictionary viewer

  • none

TCS Tools

DDAccess - Data Dictionary Writer client

  • none

ddsclient - Data Dictionary Subsystem client

  • none

iifclient - Instrument Interface client

  • none


  • none

Telemetry Collector

  • Version 4.1
    • Add a slash to the end of the 'base' telemetry files path only if it doesn't end with one.
    • Always set file permissions to 0664 on an existing file just before it is opened.

IRTC - Infrared Test Camera

  • IRTC Version 4.8
    • Use Stephen's syslog.c to write to the TCS syslog.
    • Use newest
    • Support running IRS on obs computers.
    • Add client parameter IRC.IIFNSQuery and make it true for downtown and mountain, false for testing.
    • Do not clobber the ephemeris file name in NSIGUI if 'choose file' is exited with 'cancel' (IssueTrak 6624).
    • Set correct fonts in NSIGUI so sizes look good.
    • Change 'target' to 'object' in NSIGUI.
    • Disable AORefTarget check box in Update tab in NSIGUI.
Topic revision: r63 - 02 Jan 2018, KelleeSummers
This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding Foswiki? Send feedback