TCC: Changes from the Old TCC
This document describes changes from the original TCC to version 1.0 of the current TCC. This document will not be updated as the TCC evolves; see the TCC Version History for such information.
Basic Changes
- The original TCC was writting in DEC Fortran 77 and ran on OpenVMS. This TCC is written in C++ and python and runs on linux and MacOS X.
- The new TCC does not communicate with guide cameras or guider mechanical controllers. This improves the architecture, since now only the guider need control the guide cameras. This significantly simplifies the TCC's command set. However, it also means that Track/PtErr can no longer measure or apply a pointing correction.
- The new TCC controls mirrors via new mirror controller actors (one per mirrir). These actors provides better control of the mirrors, because they know where the actuators are, as well as the encoders, which reduces systematic error in moves and should lead to faster convergence on the desired orientation. Consequences include:
- You can command mirror orientation by talking directly to the appropriate mirror controller. There is no need for a SetMir utility.
- Iteration is done in the new mirror control actor, not the Galil. As a result <mir>ActMount and <mir>CmdMount will not necessarily be equal (due to inaccuracy in our mirror model) when <mir>Orient and <mir>DesOrient are equal.
- The new TCC uses one socket per device (e.g. axis controller or mirror); the old TCC allowed multiple axes to be controlled by one LAT stream. This simplifies the TCC code and makes initialization and such more robust (though the SDSS, which combines axes into one controller, will have to use some sort of multiplexor, losing the advantages of this change).
- The new TCC acts as a normal TCP/IP server; there is no need to log in. The new TCC also communicates with hardware controllers via TCP/IP instead of LAT; this has the potential to reduce the use of terminal servers at APO.
Deleted Commands
The following commands are no longer supported; unless otherwise noted, the command is gone because the TCC no longer talks to a guide camera:
- GCamera
- GenOffset (not used and rather complicated)
- GMechanical
- Guide
- PtErr (with no connection to the guider, external code must collect and log pointing data)
- Set and Show ExpTime
- Set and Show GBinFactor
- Set and Show GBoxSize
- Set and Show GScanSize
- Set and Show GStar
- Set and Show MsgFilter (no obvious need for it, but can be added if necessary)
- Set and Show PredFWHM
- Set and Show PtRefRadius
- Set and Show PtScanSize
- Set and Show GFilter
- Set GFocus
- Show Database (the new TCC does not use a central repository to store data)
- Show GStats
- Show Locks (the new TCC does not use resource locks)
- Show Physical (requires extra computation and probably not needed, but could be re-added)
- Spawn (not needed, and it would have to act entirely differently even if provided)
- Wait (no longer needed because batch jobs can automatically wait for commands to finish)
Deleted Features
- Set Block and Show Block no longer support the following blocks (which are gone): AppGeo, Mir, GHist and GS.
- The /Wait qualifier is gone; it is no longer needed because batch jobs can automatically wait for commands to finish.
- Physical coordinate are gone; you cannot Track Physical coordinates; as a replacement use Observed coordinates if you want automatic wrap and Mount coordinates if you want the axis to go exactly where you command it (without unwrapping).
- /TDICorrection is not supported, because it is rather complicated and we had no immediate need for it. It can be re-added if necessary.
- Object offsets are gone; use arc offsets instead.
- Axis TrkErr: this hasn't worked on the 3.5m for years and there are much better ways to obtain the information.
Changed Features
- All offsets are now specified in on-sky distance. Arc and Boresight offsets have always have been this way, but:
- Object offsets are gone (as mentioned earlier); use Arc offsets instead.
- Guide and Calibration offsets are on-sky. We can restore calibration offsets to the old behavior if it proves important. Meanwhile you can tweak IE and IA in the pointing model to achieve the same effect.
- Track/Pterr is more restricted (since it cannot measure pointing error).
- Track/Chebyshev has changed because the object block format has changed. Also, the old technique for loading files is deprecated and no longer documented; use track/cheby=filename instead.
- Track has slightly different and more predictable time handling: when time is specified with the coords then that time is used as the default time for the coordinate system.
- Track/ScanVel now accepts an optional third value: TAI.
- Track has slightly different and more predictable rotation handling: if you are rotating with object or horizon and then slew in az/alt mount coordinates, the TCC warns and sets rotType=None. The old TCC remembered (but didn't use) the rotation settings and magically restored them later, if it could.
- Convert also has slightly different and more predictable time handling: when time is specified with the coords then that time is used as the default time for the "from" and "to" coordinate systems AND the conversion is computed at that time.
- The new TCC applies telescope models backwards from the old one. All terms must be negated to switch between TCCs.
- Targets (e.g. stars) do not have parallax removed before applying offsets. The old TCC code not only removed proper motion and radial velocity, but also parallax. It turned out to be safer and simpler to leave parallax in. The effect should only matter if you are relying on reported RA/Dec near targets with large parallax.
- Superseding slews should be slightly more reliable when an axis is moving at full speed. As a tradeoff, the new TCC will sometimes choose a slower slew path if an axis starts out moving at nearly maximum speed (the old TCC might start the slew by speeding up; the new TCC will not).
- The Talk command is much more limited. You can only send one-line commands and /Input is not supported. Also, not all replies will be shown.
- The Queue command has changed. You can no longer specify iterations or a time limit, but you can list available jobs.
- The Broadcast command's Type qualifier: added Debug and corrected spelling of Superceded to Superseded.
New Commands
- PtCorr: supports guiding and pointing model data collection. It takes a guide star's sky position and measured position on a guider or instrument and provides the pointing correction, plus the star's position in the "rotator azimuth" frame of reference. The latter allows you to easily combine data for multiple guide stars to determine rotation and scale correction.
File Changes
- Data files are now kept in a directory pointed to by environment variable
TCC_DATA_DIR
. Furthermore, instrument data files are in subdirectory inst
and batch jobs are in subdirectory jobs
.
- Inst data files need slight modifications:
- RotID, GCamID and GMechID are each a single integer instead of a pair of integers.
- InstPos is a string instead of a code. However, most instrument data files have this commented out, since the "set inst" command determines this information from the file name. If the data is commented out then you need not update it.
- A few fields are obsolete, but those are safely ignored by the new Inst loader, so you can leave them alone. These include GCFocLim, GCCurrFiltInd, GCNFilt guider mechanical fields, but GCNomFocus is still reported, since clients may want the information.
- Collimation coefficients must be tweaked to produce the same mirror positions as the old TCC, because the old and new TCCs have different physical models for the mirrors. This can be done automatically, as follows:
- Place the converted instrument data files with the old collimation coefficients into
$TCC_DATA_DIR/instWithOldMirCoeffs/
- Run mirrorCtrl/bin/35mCoeffConverter.py (a similar script will have to be written for other telescopes)
- The Tune block has changed: names no longer have underscores and some fields have been removed or renamed.
- The new TCC Obj class cannot load old Obj data files. However, you can use the function tcc.base.loadOldObj for this purpose. This is mostly an issue for unit tests that comparing the behavior of the old TCC to the new TCC. One never loads object files during normal operation.
Deleted Keywords
- BadUser (using a different technique to communicate with users)
- BlockInfo (not using a global database to store blocks)
- EText
- FlushedFromBox (not using mailboxes to communication with users)
- GCamBusy, GCamCmd, GCamInfo, GCamReply (GCamID is still output)
- GCFilt, CurrGCFilt, GCFocus, GCFocusLim, GCPist, GCNFilt, GCCurrFiltInd, GMechStat (GCNomFocus is still output)
- GBinFactor, GBoxSize, GFitChiSq, GResid, GScanSize, GSDataPix, GStats
- GPCentroid, GPNoStar
- GSMag, GSName, GSPos, GSSys, GSPM
- GuideOff, GuidePrep, GuideStart
- LockInfo (the new TCC does not use resource locking)
- Meas2PredErr (no guiding)
- MsgsLost (the new TCC cannot keep track of this)
- Modu
- NoStarsFound
- NotEnoughData
- NoRotOrScaleCorr
- SchMoveTimes (use the log to diagnose timing issues)
- SpiderGImAng (not really a change; the old TCC hasn't output this for years)
- PredFWHM (no communication with guide cameras)
- PtRefRadius (no communication with guide cameras)
- TelPhys (the TCSpk library makes this trickier to compute)
- TCCStatus (long ago superseded by AxisCmdState and DisabledProc)
- VMSMsg, NoVMSMsg, Facil, NoFacil (the new TCC does not use the VMS operating system)
- Job (replaced by JobStatus and JobList)
Deprecated Keywords
The following keywords are still output, but but not indefinitely.
- GProbe, GPCtr, GPLim, GPRotXY, GPRotGImAng (use GProbeInfo instead)
- UT1 (use UT1_TAI instead)
- YourUserNum (use YourUserID instead)
Changed Keywords
- StInterval now shows all 3 values (tracking, slewing and neither), instead of just the first two.
New Keywords
- GProbeInfo (supersedes GProbe, GPCtr, GPLim, GPRotXY, GPRotGImAng; easier to machine-parse because all related data is together)
- <mir>State
- UT1_TAI (more accurate than UT1, if the machine knows TAI)
- YourUserID (supersedes YourUserNum; the new name is more widely used by actors)