GCS Software Updates

Kellee's Notes

  • telemetry updates that should be made:
    • acquisition probe move position
  • need to continue the task of cleaning up the use of class attributes vs DD entries vs passed parameters - there is duplication and unnecessary complication
  • setting DD entries in multiple places (base classes and derived and in top-level) - there's also this method in the top-level GCS class that sets them all(maybe not all?) every minute; DD entries should just be set when they are set (and used the same way); but GCS started using the DD late, so it's not correctly used
  • continue cleaning up the syslog entries - make events of important things and make the logging based on the two debug flags that are settable on the fly
    Maybe the DBG and PROFILING messages should all be prefixed so that they're easy to grep away from the log when you want to see just useful stuff?
  • why soo many "Guide loop may be hung", WFS loop may be hung" ??
  • shouldn't have events for guiding was not active when stopGuiding was called, nothing to do - it happens all the time
  • what's the diff between set new instrument and select agw?
  • change all the config files to set full-frame size for ROI - otherwise it can get whatever was leftover on the camera (see AGW3 issues during startup 2017)
  • status handling (for the GUI) is awkward - there's a determineGuidingStatus method in GCS that looks at the class attribute to return a value - CB suggested each thread should have a status variable available on the GUI for display

AGWUnit classes

The GCS auto acquisition is calling the AGWUnit::CCD2SFPoffset , but not using the results from it.

The guiding thread IS using the AGWUnit::SFP2CCDoffset results on the KFP returned from PCS.

Can we use SFP_rotation configuration variable for Pepsi PFU's 47 instead of the new one?

    • isn't calling mods_getstatus probably because it returns bogus temperature values
    • doUpdateProbePosition fails sometimes because the MODS probe is parked - but GCS limits are set such that the park position is out of those limits; need to have a way to know the probe is parked?

Michele's Notes 2017-05-11


  • ITs (see Software/GCSSoftwareIssueTrakStatus )
  • Get rid of hardcoded paths in the Sextractor (*.sex) files.
  • When GCS loses communication with AGW, GCS should try to re-establish.
  • Allow for de-selection of AGW.
  • Streamline rebinning so no pause is needed.
  • Find out if it is OK to talk to the cameras while an image is being taken.
    If not, disable the requests in the guiding/wfsing loops. The one in the wfsing loop never was used anyway.
  • Get rid of redundant selected AGW unit DD items agwUnit, agwType, agwName, selectedAGW


Extract the portion of the determineWeightedGS method which reads the instrument configuration file as this method is no longer called just once (now called for acquisition and PEPSIPFU guiding),and values from the configuration file are needed in a more general setting now. The values are now being read in the readScaleFactors method.

IT#3488 (GCSGUI Improvements - Take 2)
- Using spares to hold the expected/catalog and measured magnitude of the guide star,
the peak counts, and background counts.
OK gcs.side[side].Spare.d[0] - expected/catalog magnitude
OK gcs.side[side].Spare.d[1] - measured magnitude
gcs.side[side].Spare.d[2] - peak counts
gcs.side[side].Spare.d[3] - background counts

Changes related to binning changes without requiring a pause
// Commented out at this time
- GCS.cpp: setGuideCamBinning()
This method invokes the updateGuideCamBinFactor() method.

// Commented out at this time
- GCS.cpp, GuidingThread.cpp: updateGuideCamBinFactor()
This is inactive code at this time so it should not be considered tested.
One should be able to change the bin factor dynamically from the GCSGUI without pausing the guiding. One has to pause the guiding now to have the code work reliably. There are associated semaphores with this process in both classes: syncChangeBinFactorSem and syncReadyToGuideSem.

// Commented out at this time
- GuidingThread.cpp: requestToChangeBinFactor()

// Commented out at this time
- GCS.cpp, GuidingThread.cpp: readScaleFactors()
This source formerly was part of determineWeightedGS() as this method was formerly only called on acquisition. However, PEPSIPFU guide images are effectively the same as its acquisition image so determineWeightedGS() is being called multiple times and re-reading the configuration variables unnecessarily.
-- Verify using this new method and removing the identical code from the determineWeightedGS() is OK.

// Commented out at this time
- GCS.cpp, GuidingThread.cpp: computeObservedMag()
A new method as the computed magnitude of the guide star is needed for display on the GUI. The magnitude needs to be recomputed for every guide update. Insert an invocation and test.

- GCS.cpp: WCS for acquisition images - A WCS has been defined for MODS only as it has a field large enough to contain multiple objects which I could compare against DSS image cutouts.
- RA/Dec WCS generated for MODS needs to be validated.
- AZ/ALT WCS is currently commented out and needs to be checked off-line and validated on sky. - This needs to be generalized for all instruments.
WCS References:
- ftp://iraf.noao.edu/misc/fitswcs_draft.ps: document describing WCS
- Digital Sky Survey (DSS) from ESO: http://archive.eso.org/dss/dss You can retrieve image cutouts from regions of the sky which match the acquisition area for comparison.
- FITS standard:https://fits.gsfc.nasa.gov/fits_standard.html This document discusses explains the use and meaning of the keywords.

- If WCS is working for acquisition images correctly, a compass rose needs to be added to the acquisition panel on the GCSGUI.

- Create the data dictionary items in refmem for the variables listed below.
The real variable is commented out, and the spare should be above or below the real variable. The "spares" can be deleted once these are resident in the data dictionary.

  gcs.side[side].Spare.i[0] - gcs.side[side].gcsStatusValue gcs.side[side].WFSblocked
  gcs.side[side].Spare.i[1] - gcs.side[side].guidingStatusValue
  gcs.side[side].Spare.i[2] - minimum wfs exposure time
  gcs.side[side].Spare.i[3] - maximum wfs exposure time
  gcs.side[side].Spare.i[4] - minimum guide exposure time
  gcs.side[side].Spare.i[5] - maximum guide exposure time
  gcs.side[side].Spare.i[6] - default/nominal exposure time (gcs.side[side].WFSCam.exposureNominalTime)
  gcs.side[side].Spare.i[7] - default/nominal exposure time (gcs.side[side].GuideCam.exposureNominalTime)
  gcs.side[side].Spare.b[0] -> gcs.side[side].Spare.WFSblocked

- The FITSIO library should be used instead of homegrown FITS handling routines.
There are claims FITSIO was too slow, and the homegrown code is much faster. I am not sure I believe this, but the current code does seem to work, it just leads to bloated code and potential maintenance issues.

- Fake guiding not correct for PEPSI.

- GCS_AgwControl.ui has stuff hidden below bottom of GUI.
- GCS_MainWindow.ui has stuff hidden to the right of the GUI. There is source code too!
Topic revision: r7 - 19 Jun 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