A CTIO Hydra simulator is available for observers to learn how to use Hydra. There are versions for both Linux and Solaris. The Linux version is known to run on Red Hat 6.1+ and S.U.S.E. 6.2+. It probably runs under most new versions of Linux but we have not tested it on any other distribution. We would appreciate observers who try it on other Linuxes to let us know whether it does or does not work.
If you want to use it, point your browser here [1]. It is also available from the CTIO ftp mirror at NOAO Tucson [2] (updated nightly).
Any comments or suggestions are always welcome! Send them to rcantaruttiATnoao.edu
As far as we know, the simulator works fine. Please let us know if you have any problems. If you don't want to bother downloading the simulator, you can get some idea of what you are dealing with by looking at the most recent CTIO Hydra GUI. [3]
IMPORTANT: If you are using the simulator to prepare for an observing run, be sure to install the latest version since the Hydra code is continuously being upgraded. A new simulator is always generated when the working software is updated. Any version can be used for practice, but if one is generating assignment files for real observing, the simulator must be the same version as the Hydra program itself or the assignments may not work.
When using the simulator for generating assignment files please be sure that the time set in the simulator is the same as the time at which you anticipate the observations will actually be made. If the time is set incorrectly, atmospheric refraction corrections can produce assignment files which will cause unexpected collisions or ask Hydra to go to unattainable configurations.
Hydra-CTIO GUI runs on ctioa6 and connects to the Hydra instrument through an RS-422 serial line. The ctioa6 machine is also connected to the local ethernet network allowing Hydra GUI to request status and send commands to the TCS [4] through the GWC router.
The FOPS Guider machine is also connected to the local ethernet network allowing Hydra-CTIO to send direct commands to enable/disable guiding. The FOPS Guider machine send the guiding command thorugh an RS-232 serial line to the TCS program running on ctiox0.
The TCS program running on ctiox0 doesn't have native support for the GWC libraries so an auxiliary program running on ctiot2 provides that support. The program running on ctiot2 is called tcsrouter [5] and basically routes messages from other applications, coming through the router, to the TCS.
This function is called on system reset. It's a special label (Galil Firmware) to create an autostart program on power-up. Everything starts from here. One of it's main functions is to flag that nothing is initialized. Various functions read the variable "Reboot" and terminate if it is non zero. Other functions are to lock the brakes and turn the drives off.
File: main.g
Args: (none)
Results: (none)
Messages sent to the Mid-level code: (none)
Embedded functions called from this one:
JS #Brakes
JS #DbCreat
JS #Temp
This function locks/unlocks the brakes on the x/y gantry.
File: xyops.g
Args:
BraARG1 -- Lock/unlock flag
0 = lock Brakes
<> 0 = un-lock Brakes
Results:
BraRSLT1
0 = No Error.
>0 = Gallil error code resulting from "OB" command.
Messages sent to the Mid-level code:
(normal)
MG "boxBrakes set state starting"
MG "boxBrakes set mode locked"
MG "boxBrakes set mode unlocked"
MG "boxBrakes done"
(errors)
MG "boxBrakes set result error"
MG "boxBrakes set error NoBrakes"
This function closes the gripper. It then tests for button presence. It takes no arguments and set two different result variables before it exits. Result variable CloRSLT1 is set to the result of closing the gripper. Result variable CloRSLT2 is set to zero if the gripper is empty after closing the jaw. If after closing the jaw a button is present CloRSLT2 is set to one.
File: gripops.g
Args: (none )
Results:
CloRSLT1 Result of closing gripper.
0 = No error, i.e. closed
2-99 = Error. Value from galil "SC" command.
CloRSLT2 Button presence after gripper close.
0 = Gripper empty
1 = Button in gripper
Messages sent to the Mid-level code:
(normal)
MG "boxClose set state starting"
MG "boxClose set result ok"
MG "boxClose set mode closed"
MG "boxClose done"
(errors)
MG "boxClose set result error"
MG "boxClose set error NoClose"
Embedded functions called from this one: (none)
This function traps command errors and causes them to retrun an error code to whatever function happened to be running at the time. Basically this is a "I forgot to test for it" trap.
File: main.g
Args: (none)
Results: (none)
Messages sent to the Mid-level code: (none)
Embedded functions called from this one: (none)
This function starts up the system. First, the system is put in a safe state. Next the satus monitor is started up. Finally, the initialization functions (init and home) for each axis are called with safety checks along the way. The initialization will abort if there is an unexpected error.
File: coldstart.g
Args:
ColARG1 = Level of safety override
0 = No safety overrides.
1 = Initialize with a button present.
Results: (none)
Messages sent to the Mid-level code:
(normal)
MG "boxCold set state starting"
MG "boxCold set result ok"
MG "boxCold done"
(errors)
MG "boxCold set result error"
MG "boxCold set error ButtonOnInit"
MG "boxCold set error ButtonNotID"
MG "boxCold set error GripInit"
MG "boxCold set error NoStatMon"
MG "boxCold set error NoGripInit"
MG "boxCold set error NoZInit"
MG "boxCold set error NoXYInit"
MG "boxCold set error UnknownErrInit"
Embedded functions called from this one:
JS #Ginit -- initializes the gripper axis
JS #Ghome -- homes the gripper axis
JS #IfButt -- see if a button is present
JS #Zinit -- initializes z axis
JS #Zhome -- homes the z axis
JS #XYinit -- initializes xy gantry system
JS #XYhome -- home the xy gantry system
This function drops up a button on the plate using the user supplied argument to decide how much to descend on the z axis. It determines the Z distance based on current radius from the center of the plate. Set argument variable DroARG1 to zero to compute the drop height based on x/y position. Set GraARG1 to 1 to assume drop on plate. Set GraARG1 to 2 to assume drop on park circle.
File: gripops.g
Args:
DroARG1 = Plate distance. See comment block above.
0 = Compute drop height from x/y position
1 = Assume drop on plate.
2 = Assume drop on park circle.
Results:
DroRSLT1 = Result of attempt to drop button.
0 = No Error.
1 = button still in gripper.
2 = Motion error
3 = Bad Argument
DroRSLT2 = Z status after dropping.
0 = No Error.
>1 = Galil "SC" result for last z move
DroRSLT3 = griper status after dropping.
0 = No Error.
>1 = Galil "SC" result for last gripper move
Messages sent to the Mid-level code:
(normal)
MG "boxDrop set state starting"
MG "boxDrop set result ok"
MG "boxDrop done"
(error)
MG "boxDrop set result error"
MG "boxDrop set error GripInop"
MG "boxDrop set error NotDropped"
MG "boxDrop set error zInop"
MG "boxDrop set error BadArg"
Embedded functions called from this one:
#Open -- opens the gripper
#Close -- closes the gripper
This function computes the encoder position from the distance between two reference marks. Note that this algorithm is specific to the Heidenhain Encoders. Variable names follow those in the documentation from the manufacturer.
The basic premise of this scheme is that index marks can be positioned in such a way that one only need traverse two of them and knowing the direction of travel, the absolute position of the first mark encountered can be determined.
The xhome, whome, and yhome routines all call this function as they all use the same type of encoder. This is a generic routine for any encoder of this type.
Note that this function is used internally and sends no messages back to the mid level code.
One should read the encoder documentation and the source for a complete understanding of how these routines work.
Args:
encARG1 = encoder position of 1st index mark encountered
encARG2 = encoder position of 2nd index mark encountered
encARGz = direction of travel
Results:
encRSLT1 = result of encoder formula.
This function turns the electronic box cooling fan on/off. Set the argument variable FanARG1 to zero if you want to turn the fan off, and set it to one if you want to turn the fan on. The function use output 16 of the Galil Box to command the fan.
File: periphio.g
Args:
FanARG1
0 = Fan Goes off
1 = Fan Goes on
Results: (none, just writes an i/o bit)
Messages sent to the Mid-level code:
MG "boxFan set state starting"
MG "boxFan set mode 0"
MG "boxFan set mode 1"
MG "boxFan set result ok"
MG "boxFan done"
Embedded functions called from this one: (none)
This function handles the hardware "error" interrupt. This interrupt is assigned to input 5.
File: errors.g
Args: (none)
Results: (none)
Messages sent to the Mid-level code: (none)
Embedded functions called from this one: (none)
This function homes the Gripper axis. First it checks to see if it's already into the home switch. If so, it backs out of it. Then it jogs slowly into the switch.
File: gripops.g
Args: (none)
Results:
GhoRSLT1 = 0 % Result code.
0 = No error
Messages sent to the Mid-level code:
(normal)
MG "boxGhome set state starting"
MG "boxGhome set result ok"
MG "boxGhome done"
(error)
MG "boxGhome set result error"
MG "boxGhome set error NoHome"
Embedded functions called from this one: (none)
This function initializes the gripper axis. Every time this function is called it loads the GripPos array. Then configures the encoders and motor type for G and enable the motor.
File: gripops.g
Args: (none)
Results:
GinRSLT1 = Result of homing gripper.
0 = No error
Messages sent to the Mid-level code:
MG "boxGinit set state starting"
MG "boxGinit set result ok"
MG "boxGinit done"
Embedded functions called from this one: (none)
This function picks up a button from the plate using the user supplied argument to decide how much to descend on the z axis. It determines the Z distance based on current radius from the center of the plate. Set argument variable GraARG1 to zero to compute the distance based on x/y position. Set GraARG1 to 1 to assume gripper is over the plate. Set GraARG1 to 2 to assume gripper is over the park/stow area.
File: gripops.g
Args:
GraARG1 = What height to use
0 = Compute z distance based on x/y position
1 = Assume gripper is over the plate
2 = Assume gripper is over the park/stow area.
Results:
GraRSLT1 = Result code.
0 = No Error.
1 = Gripper Inoperative.
2 = No button found.
Messages sent to the Mid-level code:
(normal)
MG "boxGrab set state starting"
MG "boxGrab set result ok"
MG "boxGrab done"
(errors)
MG "boxGrab set result error"
MG "boxGrab set error GripInop"
MG "boxGrab set error NotFound"
MG "boxGrab set error BadArg"
Embedded functions called from this one:
#Open -- opens the gripper #Close -- closes the gripper
This function Determines if a button is in the gripper. It first insures that the gripper is configured such that the test is valid. Under the present design, this means closing the jaws, and returning the result of the close operation. Later, it might be possible to detect a button no matter what the state of the gripper, and this function would be modified accordingly.
File: gripops.g
Args: (none)
Results:
IfBRSLT1 = Result of test for button.
0 = No Button.
1 = Button in gripper.
>1 = Gripper Error ( See "Close" )
Messages sent to the Mid-Level code:
(normal)
MG "boxIfButt set state starting"
MG "boxIfButt set mode nobutton"
MG "boxIfButt set mode button"
MG "boxIfButt set result ok"
MG "boxIfButt done"
(errors)
MG "boxIfButt set result error"
MG "boxIfButt set error NoClose"
Embedded functions called by this one:
#Close -- closes the gripper
This function is reserved by the box as the input intterupt handler. If any of the input interrupts have been enbled by the "II" command, this routine will called when the associated input bit goes low. From there, this routine will poll to see what needs service. "Reboot" and terminate if it is non zero.
File: main.g
Args: (none)
Results: (none)
Messages sent to the Mid-level code: (none)
Embedded functions called by this one: (none)
This function allows a user to reenable interrupts after an error.
File: errors.g
Args: (none)
Results: (none)
Messages sent to the Mid-level code: (none)
Embedded functions called by this one: (none)
This function read back the vacuum sense switch on the plate. It takes no arguments. The current on/off state of the sense switch is returned in result variable IsWRSLT1. The function reads analog input 9 to check the switch out.
File: periphio.g
Args: (none)
Results:
IsWRSLT1 = sense sqitch status.
0 Plate is flat.
1 Plate is warped.
Messages sent to the Mid-level code:
MG "boxIsWarpd set state starting"
MG "boxIsWarpd set mode", IsWRSLT1 {F2.0}
MG "boxIsWarpd set result ok"
MG "boxIsWarpd done"
Embedded functions called from this one: (none)
This function turn the gripper LED on to the specified level (Or else off....). Set argument variable LedARG1 to the desire level of intensity. A value of zero will turn the gripper LED off. The function uses the lowest 3 bits of I/O port 0 on the Galil Box to select the desired level (mask used with "OP" is 65532 or "1111 1111 1111 1000").
File: periphio.g
Args:
LedARG1 = intensity level.
0 = Led off
1 = On, low
2 = On, medium
3 = On, high.
Results: (none, just sets IO bits)
Messages sent to the Mid-level code:
MG "boxLed set state starting"
MG "boxLed set result ok"
MG "boxLed done"
Embedded functions called by this one: (none)
Caution: This page is meant to be an abstract of calling conventions and function behavior and does not document the details of the code.
The #Move function moves a fiber from one location to another as specified in the arguments. This is the fundemental function of the system, and all other functions are secondary to this one.
Pre-move safety checks include making sure of no collisions, valid destination, and no button presence in the gripper. All this checkings must be made by the mid/high-level code before moving a fiber. If you are using this function directly then be very careful because no safety checks are made by this function.
Next, the gripper travels to the button (see the functions in "xyops.g"), and attempts to grab it. (documented with the file "gripops.g") If successful, the gripper relax and the button is carried to the new location, and an attempt made to drop it. If the drop fails, the button can be parked directly from the gripper.
File: buttmove.g
Args:
MovARG1 = x current location
MovARG2 = y current location
MovARG3 = x destination location
MovARG4 = y destination location
Results:
MovRSLT1 = Result code. Note that 0-4 are same as button status.
0 = No Error.
1 = Locked.
2 = Not found
3 = Dropped
4 = Positioner not operational
5 = Last move not yet broadcast.
6 = Could not drop
7 = X,Y Motion Failure
8 = Button present on entry
9 = Database has not been initialized since reboot
Messages sent to the Mid-level code:
(normal)
MG "boxMove set state starting"
MG "boxMove set state seek"
MG "boxMove set state grab"
MG "boxMove set state carry"
MG "boxMove set state drop"
MG "boxMove set result ok"
MG "boxMove done"
(errors)
MG "boxMove set error FibLocked"
MG "boxMove set error NotFound"
MG "boxMove set error LostInTransit"
MG "boxMove set error PosNotOp"
MG "boxMove set error LastNotBroadcast"
MG "boxMove set error NotDropped"
MG "boxMove set error NoXYmove"
MG "boxMove set error GripNotEmpty"
MG "boxMove set error DbaseUndef"
Embedded functions called from this one:
JS #IfButt -- see if a button is present.
JS #xygo -- the xy move function
JS #Grab -- pick up the button.
JS #xygo -- the xy move function
JS # IfButt -- see if a button is present.
JS #Drop -- drop the button.
This function opens the gripper. The user supplied argument is used to determine the final position. If OpeARG1 is 0 then the final position will be "closed". If set to 1 the final position will be "relaxed". If set to 2 final position will be "normal open" position. If set to 3 the final position will be "open wide" position. This are the same values used in the array GripPos.
File: gripops.g
Args:
OpeARG1 = Position to open gripper to.
0 = Closed position
1 = Relaxed position
2 = Normal open position
3 = Open wide position
Note that the values used are in the array "GripPos", defined at the top of this file. Note also that this function doesn't return any button presence and that an open with an arg of zero is NOT the same as a "close" The first option is just there for completeness.
Results:
OpeRSLT1 = Result of opening gripper.
0 = No error, i.e. open
2-99 = Error moving gripper jaws. Value from galil "SC" command
Messages sent to the Mid-level code:
(normal)
MG "boxOpen set state starting"
MG "boxOpen set mode ", OpenARG1
MG "boxOpen set result ok"
MG "boxOpen done"
(errors)
MG "boxOpen set result error"
MG "boxOpen set error NoOpen"
Embedded functions called from this one: (none)
This function is called by the interrupt handler to see if the interrupt was caused by a stage mis-alignment.
File: errors.g
Args: (none)
Results:
OrtRSLT1
0 = No Orthoganality Problem
1 = Stages mis-aligned, System stopped.
2 = Stages mis-aligned, Couldn't stop.
Messages sent to the Mid-level code:(none)
Embedded functions called from this one: (none)
DISCUSSION
This function parks the specified button. It is simply a shell wrapped around the Move function. It generates the appropriate destination coordinate mathematically, and adds one additional return value: "button already parked". The computations used to determine the park position are discussed below:
Compute the angle, at the center of the plate, between the "zero" fiber and the park position of the target fiber. thetaSep is the angle between adjacent parked buttons, in a polar coordinate system coincident to the center of the focal plane plate.
thetaP = thetaSep * ParARGid
Since variables are scarce, use the input variables for the move command as working storage... Then, if we actually move, they'll already be ready to go.
MovARGx = rPark * @COS[ thetaP ] MovARGy = rPark * @SIN[ thetaP ]
We always test for already being there. First, compute the x,y errors from the desired position, and then skip the rest if both are less than the prescribed value. tmp1 and tmp2 are scratch variables and my get used by other functions. Don't count on them being valid any time after this function ends.
tmp1 = @ABS[ MovARGx - ButtX[MovARGid] ] distance from "parked" in X
tmp2 = @ABS[ MovARGy - ButtY[MovARGid] ] distance from "parked" in Y
tmp1 and tmp2 then get tested against a tolerance.
File: buttmove.g
Args:
ParARGid , button to be moved.
Results:
ParRSLT1 , Result code. Note that the first 8 are the same as "Move" and are simply passed back from it.
0 = No Error.
1 = Locked.
2 = Not found
3 = Dropped
4 = Positioner not operational
5 = Last move not yet broadcast.
6 = Could not drop
7 = X,Y Motion Failure
8 = Button present on entry
9 = Already parked, no action.
Messages sent to the Mid-level code:
(normal)
MG "boxPark set result ok"
MG "boxPark done"
(errors)
MG "boxPark set result error"
MG "boxPark set error NotParked"
MG "boxPark set error AlreadyParked!"
Embedded functions called from this one:
JS #Move % Call the Move Subroutine.
This function warp or flatten the focal plane plate. Set PlaARG1 to 0 to flatten the focal plate. Set PlaARG1 to 1 to warp the focal plate. The function uses output bit 10 to open/close the vaccum valve thus warping or flattening the plate.
File: periphio.g
Args:
PlaARG1 = Warp or flatten.
0 = Flatten plate
1 = Warpe plate
Results:
PlaRSLT1 = Result code.
0 = NoError
1 = Plate didn't warp
2 = Plate didn't flatten
Messages sent to the Mid-level code:
(normal)
MG "boxPlate set state starting"
MG "boxPlate set mode warp"
MG "boxPlate set mode flat"
MG "boxPlate set result ok"
MG "boxPlate done"
(errors)
MG "boxPlate set state error"
MG "boxPlate set error NoWarp"
MG "boxPlate set error NoFlat"
Embedded functions called from this one:
JS #IsWarpd -- read back the vaccum sense switch.
This function returns the status of various power monitoring bits. Use this function to check the status of the power supplies and U.P.S. Bit 0 (blackbox input 11) refers to the 'on battery' U.P.S. condition. Bits 1 (blackbox input 12) refers to the 'low battery' U.P.S. condition. A value of one for bits 0 and 1 indicates that the condition is active. Bit 3 (blackbox input 14) shows the status of the 5V power suply. Bit 4 (blackbox input 15) shows the status of the 12V power supply. A value of zero for bits 3 and 4 indicates fault condition.
File: periphio.g
Args: (none)
Results:
PwrRSLT1, returns an integer with the appropriate bits
Messages sent to the Mid-level code:
MG "boxPwr set state starting"
MG "boxPwr set mode", PwrTmp {F3.0}
MG "boxPwr set result ok"
MG "boxPwr done"
Embedded functions called from this one: (none)
This function shut's down the system to an inert state system. Each level representents a progressively greater shutdown and includes the operations from the level below it.
File: coldstart.g
Args:
ShuARG1, how far the shut down
0 = Gripper Moves out
1 = Brakes lock and Drives power off.
2 = All switchable Optos go off.
3 = DataBase is invalidated.
Results:
ShuRSLT1, result of shutting down
0 = No Error.
Messages sent to the Mid-level code:
(normal)
MG "boxShutDn set state starting"
MG "boxShutDn set state GripOut"
MG "boxShutDn set state DrivesOff"
MG "boxShutDn set state OptosOff"
MG "boxShutDn set result ok"
MG "boxShutDn done"
(errors)
MG "boxShutDn set result error"
MG "boxShutDn set error NoShutDown"
Embedded functions called from this one:
JS #xygo -- moves the xy gantry system
JS #Brakes -- lock/unlock brakes on xy gantry system
This function choose and read back one of the temperature sensors. The temperature sensors are selected by writing the given 3 bit mask TemARG1 to the I/O port 0 on the box. The function uses bits 5-7 of this port. The mask used with "OP" is 65311 or "1111 1111 0001 1111". Once the channel is selected the function reads back analog input 5. This readout is then scaled and corrected using local constants "Tscale" and "Toofset" to get the actual temperature.
File: periphio.g
Args:
TemARG1, 3 bit mask for selection of channel
Results:
TemRSLT1, number respresenting temp.
Messages sent to the Mid-level code:
MG "boxTemp set state starting"
MG "boxTemp set mode", TempVal {F3.2}
MG "boxTemp set result ok"
MG "boxTemp done"
Embedded functions called from this one: (none)
This function Simply returns the positions of the various axis as a TCL set.
File: xyops.g
Args: (none)
Results: Outpouts a string
Messages sent to the Mid-level code:
(normal)
MG "boxwhere set state starting"
MG "boxwhere set mode { ", {N}
MG " ", _TPX {F7.0}, {N}
MG " ", _TPY {F7.0}, {N}
MG " ", _TPW {F7.0}, {N}
MG " ", _TPZ {F6.0}, {N}
MG "}"
MG "boxwhere done"
These functions home the various gantry axis (note that this function is essentially identical for all 3 axis and only the variable names change. The one exception to this is that the X encoder is mounted backwards and there is a bit of extra code in "xhome" to compensate for that). These homing routines are *entirely* dependent on the Heidenhein encoders and their coded referrence marks. This will not work with any other kind of encoder. The axis moves until two index pulses are found and then the positions are fed to an algorithm that determines the absolute position of the first index mark. The stage moves back to that mark and then sets the encoder value to the computed position, offset by a user supplied constant that is used to put the zero point at the convenient position.
File: xyops.g
Args: (none)
Results:
xhRSLT1
0 = No Error.
1 = Motion didn't start.
2 = No index pulses were found.
Messages sent to the Mid-level code:
(normal)
MG "boxxhome set state starting"
MG "boxxhome set result ok"
MG "boxxhome done"
(errors)
MG "boxxhome set result error"
MG "boxxhome set error NoMotion"
MG "boxxhome set error NoIndexMark"
Embedded functions called from this one:
JS #encCalc
This function Moves the x/y gantry system to the specified coordinates.
NOTE: This is the master function for x/y motion and should be the only one used since it impliments various safety checks. Direct operation of the x,y,w axis should be avoided. Moves generated using this function will be coordinated in X and Y. This function also makes sure that all the drives are on, and sets up a non-orthognality interrupt.
File: xyops.g
Args:
xygARGx -- New X position
xygARGy -- New Y position
xygARGa -- Acceleration along the vector
xygARGv -- Velocity along the vector
Results:
xygRSLT1
0 = No Error.
1 = No motion
2 = Motion inhibited
3 = No Drives
Messages sent to the Mid-level code:
(normal)
MG "boxxygo set state starting"
MG "boxxygo set result ok"
MG "boxxygo done"
(errors)
MG "boxxygo set result error"
MG "boxxygo set error NoDrive"
MG "boxxygo set error NoMotion"
MG "boxxygo set error Inhibited"
Embedded functions called from this one: (none)
This function homes the x/y gantry system including setting the orthoganality of x/y. If the argument is zero, it will exit upon finding a button in the gripper, without moving anything. The steps followed are:
1 Check for buttons.
2 Gear X to W.
3 Home W.
4 Gear W to X
5 Home X
6 Send X/W to the average of their positions. (This is the orthoganality correction)
7 Define the true position of X/W.
8 Home Y
9 Define the true position of Y.
10 Move the gantry to the 0,0 point (tradition)
File: xyops.g
Args:
XYhARG1 Level of safety override
0 = No safety overrides.
1 = Home with button present.
2 = Continue even if one axis fails
Results:
XYhRSLT10 = No Error.
1 = Called before initialization
2 = Unknown button in jaws.
3 = Individual axis failure.
Messages sent to the Mid-level code:
(normal)
MG "boxXYhome set state starting"
MG "boxXYhome set state wHome"
MG "boxXYhome set state xHome"
MG "boxXYhome set state align"
MG "boxXYhome set state yHome"
MG "boxXYhome set result ok"
MG "boxXYhome done"
(errors)
MG "boxXYhome set error NoInit"
MG "boxXYhome set state error"
MG "boxXYhome set error ButtonFound"
MG "boxXYhome set error AxisFailure"
Embedded functions called from this one:
JS #whome
JS #xhome
JS #yhome
JS #xygo
This function initializes the x/y gantry system to the proper modes. See the Galil DMC1500 manual and the source for an explanation of the initialization commands used. Most of the commands called have no real return code so this function tends to be dependent on working on the first pass. If this function won't run to completion, nothing else is going to.
File: xyops.g
Args: (none)
Results:
XYiRSLT1
0 = No Error.
1 = Brakes not released
Messages sent to the Mid-level code:
(normal)
MG "boxXYinit set state starting"
MG "boxXYinit set result ok"
MG "boxXYinit done"
(errors)
MG "boxXYinit set result error"
MG "boxXYinit set error NoXYinit"
Embedded functions called from this one:
JS #Brakes
This function moves the z gantry to the specified coordinate. The new Z position must be in encoder steps. The screw lead is 0.2 inches and the motor resolution is 2000 steps per revolution. The scale is then 2.54 microns per step.
File: gripops.g
Args:
zgoARGz = New Z position
zgoARGa = Acceleration along the vector
zgoARGv = Velocity along the vector
Results:
zgoRSLT1
0 = No Error.
Messages sent to the Mid-level code
(normal)
MG "boxzgo set state starting"
MG "boxzgo set result ok"
MG "boxzgo done"
(errors)
MG "boxzgo set result error"
MG "boxzgo set error NoDrive"
MG "boxzgo set error NoMotion"
MG "boxzgo set error Inhibited"
Embedded functions called from this one: (none)
This function homes the Z axis. First make sure that the motor and the opto for the home switch are on. Then moves the motor until it find the edge on home switch and gets a little ways off the edge in the positive direction. Then it makes a nice and slow final aproach to the the edge.
File: gripops.g
Args: (none)
Results:
ZhoRSLT1 = 0 Result code.
0 = No error
Messages sent to the Mid-level code:
(normal)
MG "boxZhome set state starting"
MG "boxZhome done"
(errors)
MG "boxZhome set result error"
MG "boxZhome set error NoHome"
Embedded functions called from this one: (none)
This function initializes the Z axis. It configures the encoders and motor type for Z. It also configures the Z home switch level, make sure sure the opto is on and enable the motor.
File: gripops.g
Args: (none)
Results:
ZinRSLT1 Result of z axis initialization.
0 = No error
Messages sent to the Mid-level code:
(normal)
MG "boxZinit set state starting"
MG "boxZinit set result ok"
MG "boxZinit done"
(errors)
MG "boxZinit set result error"
MG "boxZinit set error NoInit"
Embedded functions called from this one: (none)
Last Modified: March 23, 2000
rcantarutti
Galil ID | Conn# | Function | Notes |
INP1 | J5-25 | Index mark latch: X | |
INP2 | J5-24 | Index mark latch: Y | |
INP3 | J5-23 | Non-Orthogonal (1 degree, 1 = ok) | |
INP4 | J5-22 | Index mark latch: W | |
INP5 | J5-21 | Master Fault (1 = ok) | XA1-58 |
INP6 | J5-20 | Gripper; Closed sense switch (0 = closed) | |
INP7 | J5-19 | Gripper; Open (wide) sense switch | |
INP8 | J5-18 | Gripper; Button sense switch (0 = empty) |
INP9 | JD5-25 | Vac sense switch, plate (1 = warp) | |
INP10 | JD5-24 | Vac sense switch, source | -unsused |
INP11 | JD5-23 | UPS input; /ON BATTERY | |
INP12 | JD5-22 | UPD input; /LOW BATTERY | |
INP13 | JD5-21 | Drive Power (1 = on) | |
INP14 | JD5-20 | Power Monitor +5V O.K. | XA3 U18-13 1=ok |
INP15 | JD5-19 | Power Monitor +12V O.K. | XA3 U18-11 1=ok |
INP16 | JD5-18 | Output of optical switch Z-axis | (HOMEZ) |
INP17 | JD5-1 | X Drive Fault | |
INP18 | JD5-2 | W (X2) Drive Fault | |
INP19 | JD5-3 | Y Drive Fault | |
INP20 | JD5-4 | Z Drive Fault | |
INP21 | JD5-5 | X1 Level 2 Safety Fault (1 = ok) | |
INP22 | JD5-6 | W (X2) Level 2 Safety Fault (1 = ok) | |
INP23 | JD5-7 | Y Level 2 Safety Fault (1 = ok) | |
INP24 | JD5-24 | (unassigned) | -unused |
Last Modified: April 27, 2000
(based on Philip Massey's "whydra")
"Hydraassign" is an useful program for assigning fibers that comes as part of the Hydra-CTIO software distribution [1]. It takes an input file containing celestial coordinates of objects and determines a "pretty good" assignment of fibers for Hydra. Phil Massey has written an instruction guide [7].
The objects in the input file should be listed in priority order, with the most important objects at the top of the list. The coordinates of clean sky positions and field-orientation-probe stars ("fops stars") should also be included in the same file. The file must also contain the coordinates of the field center, along with a number of things that are needed to properly account for the effects of differential refraction. The output file will contain all of the input objects, assigned or not, with fiber assignments indicated with a numerical value in the "STATUS=" field. The stars with assigned fibers are rotated to the bottom of the list, but the input order is otherwise preserved; thus, one can use each output file as a new input file, with previously assigned stars dropped in priority.
The input file must begin by specifying nine keywords, one per line. Each keyword ends with a colon followed by a value. The order in which they appear is not relevant.
FIELD NAME - <= 64 character ID
INPUT EPOCH - Equinox of the input coordinates; must be 1855-2010.
CURRENT EPOCH - Epoch of the proposed observations, e.g., 1992.251, must be 1991-2010
SIDEREAL TIME - LST at mid-exposure, must be 0.00-23.999
EXPOSURE LENGTH - Decimal hours expected for exposure, 0.0-10.0
WAVELENGTH - Wavelength of spectrograph in A
CABLE - Either SMALL or LARGE
WEIGHTING - Possible answers are STRONG (default), WEAK, or NONE
GUIDEWAVE - wavelength of TV camera, defaults to 6000 A
After the keywords is the list of coordinates. Each coordinate entry consists of a single line, and includes the following. The format is fixed.
Integer ID (4 digits or less). This should be a unique number that allows you to tell the fiber positioner what star you are talking about if you wish to drive the gripper over that locale. It will also be kept as a secondary identifier when you reduce the data with IRAF. COLS1-4
Name (20 characters or less). This name is the principle object identifier; it will be kept with the individual spectrum when you reduce the data with IRAF. COLS 6-25
RA. This should be specified the usual way, e.g., "02 12 14.123". The leading zeros are not required. Since we are reading this numbers in a fixed format, you may include colons (or anything else) where the spaces go. COLS 27-38
DEC. This should be specified the usual way, e.g., "-01 12 13.21". For positive declinations the plus sign is optimal. The value of the degrees must be between -89 and 89, and the values of the minutes and seconds < 60. The SIGN goes into COL 40; the rest go in COLS 41-51.
CLASS. This is a one letter code that specifies what type of object this is. COL 53. Possible answers are:
C Center. There must be exactly one of these in the file; it is the coordinates of the plate center.
O Object. This is the default if the item is unspecified, and is a normal program object. Currently the maximum number of objects is 2000.
S Sky. Currently the maximum number of sky positions is 2000.
F Field orientation probe star (FOPS). Currently the maximum number of FOPS is 2000.
In order to provide some capability for you to document what you are doing, we interpret any line that begins with a pound sign ("#") to denote a comment field. These will be retained in the output file. Items with double pound signs will not be retained ; these are used in the output files to denote warning messages.
When running hydraassign you will be asked for the input and output file names, as well as the number of fops and skies you require. In the example below user hydra specified the name of the input file as lepusastrom.hydra and the output file name as test2.hydra. The user required 3 FOPS and 6 skies to be assigned :
hydra% hydraassign
## CTIO Concentricities file Version 2.1 12/8/98
## v2.1 FOPS, Large fibers, no small fibers
## proper slit to fiber assignments for large cable
## -----------------------------------------------
##
## Astroparams Version 3.0 10/05/98
## -----------------------------------------------
##
## Systemparams Version 3.0 12/23/98
## -----------------------------------------------
Input file name: lepusastrom.hydra [8]
Output root name: test2
test2.hydra
There are 3 fops stars found
How many fops need to be assigned to fops stars?: 3
There are 75 objects found
There are 20 skies found
How many skies are required?: 6
Would you like to tweak the center? y or n: n
Field center= 15.4505 22 22.456 -19 06 25.67 1950.00 Ag= 179.988
Assigned: 49/ 75 objs; 6/ 20 skys; 3/ 3 fops; Total wts= 4.01
Last Modified: April 27, 2000
rcantarutti
The Hydra-CTIO positioner GUI software lives in ctioa6:/home/hercules/Hydra. The structure of the source directory tree is as follows:
The Hydra positioner GUI consists of an extended TCL/TK interpreter plus a set of TCL/TK scripts that build the functionality required by the application. The extended TCL/TK interpreter lives at sub directory Hydra/src/main. Support is provided for compiling the interpreter under Linux, SunOs and Solaris. The TCL/TK scripts live at sub directory Hydra/lib/tclhydra.
Last Modified: May 9, 2000
The init files live in directory Hydra/data/inits. There are four of them: astroparams, concentricities, limitparams and systemparams.
This file defines several important constants and values for doing astrometry calculations. The list below shows the names and a a short description for each of the included values.
CTIO_LAT - Obserbatory Latitude : -30.16542
CTIO_ALT - Height of the observatory: 2200 m
CTIO_ATM_PRESS - Typical atmospheric pressure in milibars
LAPSE_RATE - Temperature lapse rate in the troposphere (degK/meter)
POLAR_FLAG - Activate polar misalignment corrections
ME, MA - Polar misalignment correction parameters
REFRACT_PREC - Refraction calculation precission
REFRACT_PTS - Number of refractions points.
TEMP_MONTH - Comma separated list with average nightime temperatures for each moth
FOCALLEN - Focal length in mm
D3 - Parameter d3 of the optic correction model
D5 - Parameter d5 of the optic correction model
CTIO_SCALE - Plate scale in arcsec/mm
CTIO_RADIUS - Radius of curvature (mm) of focal surface located 6 mm above mid-plate radius
CTIO_WARP_DISTANCE - Border to decide waht curve to use when applying warp model (mm)
CTIO_INNERMID_RADIUS - Radius of the mid-plate in mm (measured plate radius plus thickness devided by two) for inner warp model
CTIO_OUTERMID_RADIUS - Radius of the mid-plate in mm for outer warp model
UNWARP_A1 - First coefficient to the model for unwarping the plate
UNWARP_A2 - Second coefficient to the model for unwarping the plate
ENCODER_SCALE - Encoder steps per mm of travel: 1 step/mm
DEFAULT_WAVECAM - Default wave length: 6000 A
ROT_CORRECTION - Rotational mis-alignment correction
This file contains the cable and fiber definitions. The format for a cable definition is a line containing 5 fields. The first field is the cable identifier consisting of one upper case character. The second field is the cable label. It is a character, either 'A' or 'N'. It affects references to slit position inquiries. 'A' means that fibers are identified with alpha characters (A-Z, limit of 26 fibers in cable). 'N' means that integers are used to reference them. For alpha references a slit position of 1 maps to 'A', 2 maps to 'B', etc. The third field is a character 'Y' or 'N' saying if this cable can be selected. The fourth field isthe cable name, consisting of a string with no spaces and case insensitive. Finally, the fifth field is a short description of the cable been defined.
NOTE: a cable doesn't exists if it's not listed in this file.
The format for a fiber definition is a line containing six fields. The first field is the fiber number on plate represented by an integer and beginning from zero. The second field is a positive integer representing the slit position for that fiber. The third field is a single character saying to which cable this fiber belongs to. The fourth field is a single character flag stating the status of this fiber: 'A' for active fiber, 'B' for broken fiber, 'L' for locked fiber and 'Z' for noexistant fiber. The fifth field is a floating point number in encoder units representing the concentricity offset of the fiber. The sixth field is a floating point number in radians representing the concentricity angle.
The concentricity offset and angle data can be measured at any time as described in chapter Measuring Concentricities. [9]
The latest concentricities files are available here:
This file contains the data for the initialization of the data structures that are used in testing for limit conditions.
This file include instrument specific parameters like the plate radii, button diameter, tube diameter,etc. It also includes the mechanical correction parameters (coefficients to the mechanical model of the positioner). The list below describes some of the constants declared in this file.
PLATE Plate radius in microns
STOW Radius of the fiducial stow position circle in microns
PARK Radius of the park position circle in microns
PIVOT Radius of the fiber pivot in microns
STOWSLOP Not used
STOWOFFSET Offset added to the stow position angle of a fiber when the x/y stow position is calculated.
MAXANGLE Is the max angle in radians for flexing a fiber without overstressing it.
ANGLE_SOFTNESS Offset in radians added to MAXANGLE before checking for overflexure.
PARKEDATRISK Not used
BUTTONHEIGHT Not used
GRABHEIGHT Not used
BUTTONDIA Diameter of a button in microns
TUBEDIA Diameter of a tube in microns
BUTTON_TUBE_MARGIN Offset for interactions between a tube and a button
BUTTON_BUTTON_MARGIN Offset for interactions between two buttons.
REQPREC Not used
CRITICALANGLE Not used
MAXFORPRECALC Constant used in fiber to button distance calculations.
THERM_COEF Thermal expansion coefficient (K^-1)
TZERO Thermal expansion zero point (Celcius degrees)
XSCALE_ADJUST, YSCALE_ADJUST, DXY_LINEAR, DYX_LINEAR,DXY_QUAD, DYY_QUAD. Stage distorsion correction constants. Units in terms of encoder steps.
FDXX_LINEAR, FDYY_LINEAR, FDXX_QUAD, FDYY_QUAD Constants used to do final tweaking of positional error; units interms of encoder steps.
XH_LINEAR, XH_QUAD, XD_LINEAR, XD_QUAD, YH_LINEAR, YH_QUAD, YD_LINEAR, YD_QUAD. Constants used in flexure calculations. X-Y Gravitational terms
COMPLAMP_TIMEOUT Timeout when waiting for comparison lamps to complete motion.
A set of scripts are available for doing repetitive job automatically. Things like parking all the fibers of one type or configuring the fibers in a circle type pattern are easily made by executing script files. The script files are kept at "ctioa6:/home/hercules/Hydra/data/scripts". You can either use the execfile [12] cli command or use the "File/Run Script..." menu option to source a script file.
viewlarge, viewsmall, viewfops - Use these scripts to take a look at the fibers by type. Hydra CTIO has three type of fibers installed: LARGE, SMALL and FOPS. The gripper will go fiber after fiber waiting exactly one second before moving to the next one. For example to view the FOPS fibers type at the CLI/Script Tool command line:
Fiborg3.2.0> execfile viewfops
parklarge, parksmall, parkfops - Use these scripts to park the fibers by type. For example to park the large fibers type at the CLI/Script Tool command line:
Fiborg3.2.0> execfile parklarge
configparklarge, configparksmall, configparkfops - Use these scripts to park the fibers by type. This scripts use the configure -c [13] commad to execute "parklarge", "parksmall" and "parkfops" saving time by doing an "intelligent" transition from the current configuration to park position.
largecircle, smallcircle, fopscircle - These scripts put the fiber in a circle.
configlargecircle, configsmallcircle, configfopscircle - These scripts put the fiber in a circle. This scripts use the configure -c [13] commad to execute "largecircle", "smallcircle" and "fopscircle" saving time by doing an "intelligent" transition from the current configuration to circle type pattern. Otherwise you would have to park all the fiber and then run the circle script. For example to configure a circle using the small fibers type at the CLI/Script Tool command line:
Fiborg3.2.0> execfile configsmallcircle
measlarge, meassmall, measfops - This scripts drive the user through the process of measuring the concentricities. The script will go fiber after fiber allowing the user to correct for fiber position and grab the button and fiber coordinates. For examples to measure the concentricities for the small fiber type:
Fiborg3.2.0> execfile meassmall
The coord files are the ouput files after doing the astrometry calculations for configuring a star field. The format is no different to the one of the input files to the hydraassign program [14] but it adds an extra field for specifying the x-y plate coordinates:
FIELD NAME - <= 64 character ID.
INPUT EPOCH - Equinox of the input coordinates; must be 1855-2010.
CURRENT EPOCH - Epoch of the proposed observations, e.g., 1992.251, must be 1991-2010
SIDEREAL TIME - LST at mid-exposure, must be 0.00-23.999.
EXPOSURE LENGTH - Seconds expected for exposure, 0.0-10.0.
WAVELENGTH - Wavelength of spectrograph in A.
CABLE - Either SMALL or LARGE.
WEIGHTING - Possible answers are STRONG (default), WEAK, or NONE.
GUIDEWAVE - wavelength of TV camera, defaults to 6000 A.
After the keywords is the list of coordinates. Each coordinate entry consists of a single line, and includes the following. The format is fixed.
Integer ID (4 digits or less). This should be a unique number that allows you to tell the fiber positioner what star you are talking about if you wish to drive the gripper over that locale. It will also be kept as a secondary identifier when you reduce the data with IRAF. COLS1-4
Name (20 characters or less). This name is the principle object identifier; it will be kept with the individual spectrum when you reduce the data with IRAF. COLS 6-25
RA. This should be specified the usual way, e.g., "02 12 14.123". The leading zeros are not required. Since we are reading this numbers in a fixed format, you may include colons (or anything else) where the spaces go. COLS 27-38
DEC. This should be specified the usual way, e.g., "-01 12 13.21". For positive declinations the plus sign is optimal. The value of the degrees must be between -89 and 89, and the values of the minutes and seconds < 60. The SIGN goes into COL 40; the rest go in COLS 41-51.
CLASS. This is a one letter code that specifies what type of object this is. COL 53. Possible answers are:
C Center. There must be exactly one of these in the file; it is the coordinates of the plate center.
O Object. This is the default if the item is unspecified, and is a normal program object. Currently the maximum number of objects is 2000.
S Sky. Currently the maximum number of sky positions is 2000.
F Field orientation probe star (FOPS). Currently the maximum number of FOPS is 2000.
STATUS. This is empty, OK or a number (0-287). Empty means that the object is outside the plate bounderies. OK means that the object is inside the plate bounderies but was not assigned to a fiber. A number means that a fiber was assigned to that object.
PLATE. This are the plate coordinates of the object after astrometry corrections.
CAMERA. This are the plate coordinates seen by the camera.
Last Modified: April 16, 2004
Open an xterm window and type hydractio to start the program (or hydrasim to start the simulator). This start up shell script will search your home directory for file .fiborg to set the environment before running. For example to start the program you would type.
% hydractio
No & sign is required.
Hydra CTIO presents a terminal window to type commands and send them to the instrument. This command line interface to the Hydra-CTIO instrument gives complete control over the instrument and its functionality. Following is the list with the available commands and a short description of what they do and their arguments.
coldstart [15] - Initialize the motors, find the home positions for the X, Y, and Z axes and resets the encoder to correspond to the center of the focal plate.
home [16] axis - This procedure homes the specified axis and reset the zero point. Available axes are xy, x, w, y, z and gripper. Be aware that homing x, y or w individually *doesn't ensures orthogonality*. Also remember that if x and w are not electrically geared then the gantry can run out of the orthogonal limits.
minit [17] axis - This procedure initialize the specified axis. Available axis are xy, x, y, w, z, gripper. Although you can call x, y or w individually there's only one embedded galil function for initializing the x/y gantry system. This means that no matter you specified x, y or w you will also initialize the other two axes too.
brakes [18] option - Turn the stage brakes on or off. Multiple ways for giving the same order are allowed. To lock the brakes use lock/on/1 as argument. To unlock the brakes use unlock/off/0.
gox [19] x ?vel? ?accel? ?sys? - Move the gripper to the specified position in x leaving the y position the same. Used defaults for the one's that are not supplied in the command line.
goy [20] y ?vel? ?accel? ?sys? - Move the gripper to the specified position in y leaving the x position the same. Used defaults for the one's that are not supplied in the command line.
goxy [21] x y ?vel? ?accel? ?sys? - Move the gripper to the specified position. Used defaults for the one's that aren't supplied in the command line.
gotag [22] tagid - This procedure move the x/y gantry system to the location recorded in the specified tag.
goz [23] z - Move the Z axis to the specified position. Use defaults for missing arguments. The units for position are encoder steps.
gripin [24] - Power up and bring in the gripper.
gripout [25] - This procedure moves the gripper to its stow position. If running under real mode then check for button presence and warn if a button is in the gripper.
tag [26] id ?x? ?y? - This procedure tag the specified location for future reference. It receives as arguments a tag id and an optional coordinate. If only the id is specified by the user, then the current gripper location is taged. The coordinates are x,y sky coordinates.
view [27] name/number ?type? - This procedure let the user view the specified button/object/slit by moving the x/y gantry system to that position. If no type is specified then it will be assumed that the number correspond to a fiber number. Valid names are characters identifying FOPS. Valid type specifiers are "o" for object, "f" for fiber, "s" for slit and "P" for FOPS.
gopen [28] - Open the gripper to its normal open position.
relax [29] - Open the gripper to its relaxed position.
gclose [30] - Close the gripper.
openwide [31] - Open the gripper to its wide open position.
griptest [32] - Test the gripper functionality and return a report.
abump [33] amount direction - Nudge the gripper by the specified amount of arcseconds in the specified cardinal direction. Valid directions are "w", "e", "n" and "s".
bump [34] amount direction - Nudge the gripper by the specified amount of steps in the specified cardinal direction. Valid directions are "w", "e", "n" and "s".
offset [35] dx dy ?vel? ?accel? - Incrementally offset from the current position. Substitute default values for missing arguments.
dropit [36] - Put down a button (if there is one...) at the current location. If the fiber in trouble structure is not empty, calculate and record new information for that fiber.
mark [37] button - This procedure let the user view a button an mark it as the button to be remembered when later you decide to correct the button.
move [38] button x y ?deadzone? - Move a button to the specified location. If the difference beetwen the current location of the button and its target position is smaller than the specified deadzone then the button is assumed to be at the target position.
park [39] button - Move a button to its parked position.
thisis [40] - Handle failures to grab and drop buttons and it helps to identify unknown buttons in the gripper.
ThisIs [41] button - Bring the specified button to the current gripper location. This routine is used to tweak button positions to corrected coordinates interactively.
unstow [42] button - Move the button specified in the argument from its stow position to its park position. If the specified button happens to be the current button in troubles then its trouble condition is cleared.
aload [43] filename - Load a star field. It first looks for it in the directories in environment variables FIBFIELDS and STDFIELDS. If this variables are not defined attempt loading the file using filename as a complete path/filename name.
assign [44] userid button - Attempt to assign the specified object to a button. If the assignment is valid then the button is moved to the object position. The userid corresponds to the id given by the user to each one of the objects of the star field.
configure [45] filename - This procedure configure the star field in file filename.
config1 [46] id x y - This function is much like procedure "configure" except that it takes as an argument a fiber and a coordinate which it passes on to the transition program. This procedure always leave unused fibers alone.
preview [47] first last time - This procedure view the set of objects whoes internal id are beetwen the "first" and "last" specified values. It waits for "time" seconds to get to the next object.
save [48] filename - This procedure save the currently loaded field including tweaks, unassignments, etc been made.
setup field [49] - This command step the astronomet through the field configuration process in order to simplify the instrumental configuration. For a complete description read The Setup Field Command [50].
configmode [51] boolean - This procedure turns the configuration flag on or off. correct Bring the "current" button to the current gripper location. The current button is the last one that was moved or viewed. In some cases, there may not be a current button. This routine is used to tweak button positions to corrected coordinates interactively.
concenmode [52] boolean - Turn the button concentricity correction on/off.
flexmode [53] boolean - Turn the gravitational flexure mapping on or off.
thermmode [54] boolean - Turn the thermal expansion correction on or off.
scalemode [55] boolean - Turn the stage characteristic curve mapping on or off.
lit [56] ?arg arg ...? - This procedure sends its argument list directly to the controller and return just the controller first answer.
ping [57] - This procedure performs a simple test to check communcation towards the Galil Box. It sends a TP command and shows the response. This is the procedure suggested by the vendor to test communications. With good communications you would expect to get a bunch of numbers indicating the current motor positions.
dangle [58] declination - Set the global variable that holds the declination angle. This value is used in flexure calculations.
hangle [59] hourangle - Set the global variable that holds the hour angle. This value is used in flexure calculations.
setcable [60] cable - Set the current cable to the specified cable.
thermval [61] val - Set the instrument temperature to the specified value.
hist [62] - This procedure will open an xterm terminal to show the current session log file.
listdump [63] mode - This procedure when called with argument mode set to "i" dump the iraf file for the currently loaded field and eventually tell the gwc world that it just made it. If called with argument mode set to "c" then dump the currently loaded field to disk and open an xterm running the view program displaying the file contents.
listtag [64] tagid - This procedure will print the coordinates in the tag entry for the specified tag id.
status [65] - Print a summary of the system status. This summary include the current exposure information and the correction flags that are currently working.
where [66] - Return a the encoder positions and corrections.
whereis [67] name/number ?type? - This procedure returns the location of the specified fiber, object, slit or FOPS. The first argument for this procedure can be either an alpha character or an integer. If an alpha character (A, B, C ...) the argument is supposed to be a FOP. If an integer the argument is supposed to be a fiber. A second optional argument can be added to specify what is this integer identifying. Type "f" for fiber, "o" for object and "s" for slit.
purge [68] - Close, compress, and re-open the position archive.
restore [69] - Restore the internal database of button locations from the disk file.
xparked [70] button - This procedure force the software to update a button location to be the parked position.
xstowed [71] button - This procedure force the software to update a buttons location to be the stowed position. If the specified button happens to be the current button in troubles then its trouble condition is cleared.
zdb [72] option - This procedure will zero the database to either stowed or parked position. Set argument position to "parked" to zero to park position and "stowed" to zero to stowed position.
listTI [73] - List the Galil Box Input assignments
listTS [74] - Show the current status of Galil Box switches.
inputchart [75] - Display a window showing the Galil Box inputs.
swchart [76] - Display a window showing the Galil Box switches.
execfile [77] - Source the specified script.
complamp [78] off|tha|etalon|pen|qua|hene - Turn the complams system on/off.
led option ?arg? - This command let the user turn the bank of LEDs on/off and set the current intensity for the light of the LEDs. To turn the LEDs on set argument option to "on". To turn the LEDs off set argument option to "off". To set the current intensity set argument option to "illum" and specify the desired intensity with a number from 1 to 3.
help - Dump the current list of commands and a short description.
plate [79] boolean - Flat/warp the focal plate.
quit [80] - This command exits the application cleanly saving all what has to be saved and leaving the system in a known state.
The field display tool window is the main point of interaction between the user and the instrument. The Field Display Tool allow the user to do from basic things, like commanding the X-Y stages to move, to more high level stuff like configuring a star field using assignment files. It also provide an interface to other systems like the FOPS guider and the comparison lamps.
The field display tool include a menu bar, a field info panel, positioner, comparison lamps and FOPS guider control pages, a status bar and a field display.
The menu bar has six options: File, Setup, Modes, Windows, View and Help
Use the Load Field option to load a star field file. The Hydra-CTIO simulator [81] includes three files of this type that can be used as examples to create your own files. When loaded the objects in the file will be presented in the field display area as springgreen circles, the FOPS as blueviolet circles and the sky positions as lightskyblue squares. Click on the circles and squares to present the name and current assignment of the objects. The related CLI command is aload.
Use the Save Field option to save a star field and you current fiber assignments. Fibers not assigned to objects will be saved as random sky positions. The associated CLI command is save.
Use the Run Script option to run command scripts. The associated CLI command is execfile.
Use the Quit option to exit the application. Before actually exiting the application will prompt the user to decide if he really wants to exit the application. It will also prompt to decide if the X-Y stages have to be left at their transport position (remove from telescope). The user must answer yes to this question only if Hydra is about to be removed from telescope. Finally the user will be prompted to answer yes or no to turn the drives off. We recomend turning the drives off only if you are planning to finish the observing night.
In order to simplify the instrumental configuration, we have created user commands which step the astronomer through the configuration process.
Use this option to configure a star field using a assignment files. When selected a dialog box as the one showed below will come up.
Enter the name of the configuration file you are planning to use in the text entry labeled "Name of hydra file". You can use a complete path or just the name. In this last case the Configuration Tool will search for the requested file at the fields directory. You can also browse to find the configuration file by pressing the button with a folder on it. A file open dialog box will came up and let you select your configuration file.
Press the button labeled "Load Field" to load the configuration file. If the file is not designed for the currently selected fiber cable, a warning message will be given and you will have the opportunity to switch to the cable that your field is designed for. NOTE: This only changes a software flag of cable type. You must still verify that the Bench Spectrograph has the appropriate cable installed. (The cable installed on the Bench Spectrograph should be displayed in the HYDRA-GRAPHICS display.)
Here you will be given the opportunity to modify how long you plan to observe the field in this configuration and what the anticipated midpoint sidereal time will be. Both of these values will be used to fine tune the atmospheric refraction component of the astrometry. If you are rerunning a setup due to a button problem, make sure that you answer these questions in an identical manner as before or the positioner may end up tweaking each and every fiber instead of picking up where it had left off.
You have the option to either park all unused fibers or leave unused fibers where they are as long as they don't interfere with fiber placement by clicking on the check box labeled "Park unused fibers". Leaving them where they are allows such fibers to be flagged as random sky positions and also decreases the configuration overhead since the positioner doesn't have to spend time moving them.
The program will then check certain aspects of the instrument status (plate flat, comps off, rotator at zero degrees), compute the new astrometry, and proceed to move the fibers.
When all fibers have been positioned, the .iraf file will be generated and fiber information will be passed to the CCD for inclusion in the data headers.
NOTE: The instrument is not yet ready to take the observations. You MUST execute the setup observe command.
You can always abort the configuration precedure by pressing the abort button or by typing ^C at the command line. The associated CLI command is setup field.
Use this option to prepare the instrument to start observing. First the gripper LEDs will be turned off, the X-Y stages will move to the field center and the user will be prompt to see if he wants to view any fibers. Answering yes will pop up a window to view the desired fibers by fiber name, by slit position or by assigned object.
Next either you finish viewing fiber or you answer no to view any fibers, the gripper will be parked. Then you are ready to begin observing. The associated CLI command is setup observe.
Use this option to prepare the instrument to start taking comparison lamps exposures. The gripper LEDs will be turned off and the X-Y stages will be parked. The associated CLI command is setup comps.
Use this option to prepare the instrument to start taking flats. The gripper LEDs will be turned off, the comparison lamps sources will be turned off and the X-Y stages will be parked. The associated CLI command is setup flats.
Use this option to open a connection to the FOPS guider. Not very useful since the automatic recovery procedure was implemented.
Use this option to turn the audible alarm tone on or off.
Use this menu to turn on/off the different types of corrections applied by the model to the x-y coordinates. The thermal expansion correction corrects for thermal expansion in the linear encoders according to vendor specifications. The concentricity correction corrects for the small offset between the center of the button and the fiber. The stage/screw distorsion correction compensate for small distorsion in the stages. The gravitational flexure corrections correct for gravitational effects over the stages.
Use this option to open an xterm window showing the current log file and to open an xterm window showing the currently loaded assignment file.
Use this option to show/hide objects, fops, fibers and sky positions at the field display. The Reset option show all the object types in the field.
Use this option to open an xterm window with the available CLI commands.
The status panel consists of a set of labels that show information about the currently loaded star field. The information include header information plus assignment statistics and fiber object cross references.
When the user click over an object or a fiber in the field, the Fiber and/or the Obect entry shows the id of the object and its assigned fiber/object.
The positioner tab present a graphic interface to some common user commands to the instrument. Two buttons allow the user to park and activate the gripper. When parked the gripper is moved out of the field and the motor drives are turned off.
Another button allow the user to warp the plate. An animation let the user wait untill the plate is flat or warped before moving fibers.
Another button control the gripper LEDs state and their intensity. There are three available intensities ranging from low to high.
A paddle let the user cruise around using different step sizes. To use the paddle the user must press the button that says "Paddle Disabled". The button will turn green an its text will change to "Paddle Enabled". The arrows keys will change their disable condition to active. Click in the arrows to move the stages. The size of the step in microns can be changed by moving the scale at the right side of the paddle.
The positioner tab also include the x-y coordinates of the cursor while over the field display area and the field display scale control.
The lamps tab allow the user to turn the comparison lamps system on/off and to select the comparison lamps sources.
When no motion is sensed, the status labels are blue and white. When a mechanism is active or moving the status labels blink and the background color goes yellow to reflect the new status. If no status information is available or an error condition is sensed the status labels blink and the background goes red.
The guider bab allow the user to remotely turn the FOPS guider on/off an to enable/disable specific FOPS for guiding.
The status bar present the communication links status. The Hydra-CTIO GUI communicates with the FOPS guider through a socket connection and with the TCS through the GWC router. When the communication is working the status labels are green. When the communication links is broken the status labels go red.
Last Modified: May 9, 2000
The graphical display doesn't show an object properly assigned.
This is common symptom that you gave the same number to two or more different objects in your hydra file. Check the number and make sure it is unique.
Hydra error messages start with the word ERROR followed by a sequence of collon separated list of precedure names and explanatory messages. Most of the time is the last part of the message the one that gives more information about what's wrong with the system.
The system returns this error message when the user attempt to execute a Galil box macro while the same Galil macro is under execution. Following are examples of real error messages of this type.
ERROR: gripin: couldn't bring gripper in: gripIn: ColdStart: st_sequence: boxCold: already running or not initialized
ERROR: home: HomeMotors: st_sequence: boxGhome: already running or not initialized
ERROR: move: unresolved: buttonPresent: unable to test: st_sequence: boxIfButt: already running or not initialized
ERROR: tempsense: can't sense temperature: st_sequence: boxTemp: already running or not initialized
The system returns this error messages when the user attempt to execute a Galil box macro while another Galil box macro is under execution. Following are examples of reat error messages of this type.
ERROR: bump: offsetToXY: unresolved: buttonPresent: unable to test: st_sequence: boxIfButt: can't grab the box
ERROR: coldstart: led: st_sequence: boxLed: can't grab the box
ERROR: gripin: couldn't bring gripper in: gripIn: ColdStart: st_sequence: boxCold: can't grab the box
ERROR: gripout: buttonPresent: unable to test: st_sequence: boxIfButt: can't grab the box
ERROR: minit: InitMotors: st_sequence: boxGinit: can't grab the box
ERROR: move: unresolved: buttonPresent: unable to test: st_sequence: boxIfButt: can't grab the box
ERROR: park: buttonPresent: unable to test: st_sequence: boxIfButt: can't grab the box
ERROR: plate: st_sequence: boxIsWarpd: can't grab the box
ERROR: plate: st_sequence: boxPlate: can't grab the box
ERROR: view: buttonPresent: unable to test: st_sequence: boxIfButt: can't grab the box
The system returns this error message when a Galil box macro command has been succesfully written to the serial port, but no response was received in the last 25 seconds. The last under the assumption that no operation takes longer than that. Following are examples of real error messages of this type.
ERROR: brakes: Brakes: st_sequence: boxBrakes: NoResponse
ERROR: coldstart: ColdStart: st_sequence: boxCold: NoResponse
ERROR: coldstart: led: st_sequence: boxLed: NoResponse
ERROR: gox: unresolved: buttonPresent: unable to test: st_sequence: boxIfButt: NoResponse
ERROR: goz: no motion: GoToZ: can't move: st_sequence: boxzgo: NoResponse
ERROR: gripin: couldn't bring gripper in: gripIn: ColdStart: st_sequence: boxCold: NoResponse
ERROR: gripout: buttonPresent: unable to test: st_sequence: boxIfButt: NoResponse
ERROR: home: HomeMotors: st_sequence: boxXYhome: NoResponse
ERROR: home: HomeMotors: st_sequence: boxZhome: NoResponse
ERROR: home: HomeMotors: st_sequence: boxGhome: NoResponse
ERROR: minit: InitMotors: st_sequence: boxGinit: NoResponse
ERROR: minit: InitMotors: st_sequence: boxXYinit: NoResponse
ERROR: minit: InitMotors: st_sequence: boxZinit: NoResponse
ERROR: move: unresolved: buttonPresent: unable to test: st_sequence: boxIfButt: NoResponse
ERROR: move: MoveButt: unknown error: st_sequence: boxMove: NoResponse
ERROR: openwide: OpenWide: st_sequence: boxOpen: NoResponse
ERROR: park: ParkButt: MoveButt: unknown error: st_sequence: boxMove: NoResponse
ERROR: park: buttonPresent: unable to test: st_sequence: boxIfButt: NoResponse
ERROR: plate: st_sequence: boxPlate: NoResponse
ERROR: view: buttonPresent: unable to test: st_sequence: boxIfButt: NoResponse
ERROR: view: buttonview: ViewButt: GoToXY: can't move: st_sequence: boxxygo: NoResponse
The error message above may indicate problems in the serial link between Hydra Instrument and its host computer.
Check that the Galil Box is up and running and that the serial link is OK. Try the ping command [57] to test the link. If it works then the Galil Box might be in error condition. Try cycling the power.
This error message indicates that the drive power is off. Following are examples of real error messages of this type.
ERROR: gripout: gripOut: no xy motion: GoToXY: can't move: st_sequence: boxxygo: NoDrive
ERROR: minit: InitMotors: st_sequence: boxZinit: NoDrivePower
ERROR: view: buttonview: ViewButt: GoToXY: can't move: st_sequence: boxxygo: NoDrive
This error message indicates that the Z motor was not properly initialize during a cold start sequence (i.e. coldstart [83] and gripin [24] commands). During a cold start sequence the Z motor is powered up and then initialized to its zero point. Following are examples of real error messages of this type.
ERROR: coldstart: ColdStart: st_sequence: boxCold: NoZInit
ERROR: gripin: couldn't bring gripper in: gripIn: ColdStart: st_sequence: boxCold: NoZInit
To figure out what exactly caused the problem try manually initializing the motor using the minit z command [17] and the home z command [16]. Then look for the new error messages in this trouble shooting guide.
This error message indicates that the motor was unable to find the fiducial point. The motor is then probably at one of its limits. Following are examples of real error messages of this type.
ERROR: gripout: gripOut: HomeMotors: st_sequence: boxZhome: NoHome
ERROR: home: HomeMotors: st_sequence: boxZhome: NoHome
Unfortunately often this failure to find the fiducial hangs the Galil built in macro to find the zero point and prevent the box from answering to further command macro requests. Below is a crude procedure to try to clear this fault.
If the above doesn't work you might have to check hardware issues like drive power, limit switches, optical switch, etc.
This error message indicates that at least one of the following safety intelock signals has been activated: FSA interlocks, orthogonality switch, forward and reverse X-Y limits. Following are examples of real error messages of this type.
ERROR: goxy: no motion: GoToXY: can't move: st_sequence: boxxygo: FsaOrthoRFL2
ERROR: gripout: gripOut: no xy motion: GoToXY: can't move: st_sequence: boxxygo: FsaOrthoRFL2
ERROR: view: buttonview: ViewButt: GoToXY: can't move: st_sequence: boxxygo: FsaOrthoRFL2
Each of the interlocks mentioned above are AND gated before input to the Galil Box. So when the this error message occurs all three possible causes has to be checked, that is, check that the FSA is properly closed, check that the second forward and reverse limits are clear and check that the system is orthogonal. Read the listTI command [73] documentation since it can be of great help when dealing withi problem.
This error message indicates that the stages had not been initialized. Use the coldstart command [83] to initialize the system. Following are examples of real error messages of this type.
ERROR: goxy: no motion: GoToXY: can't move: st_sequence: boxxygo: Inhibited
ERROR: gripout: gripOut: no xy motion: GoToXY: can't move: st_sequence: boxxygo: Inhibited
ERROR: view: buttonview: ViewButt: GoToXY: can't move: st_sequence: boxxygo: Inhibited
This error message appears when the system has been commanded to move while the gripper is below its home position. The home position for the gripper is high enough to clear the fibers on the field as well as the fiber slots. Following are examples of real error messages of this type.
ERROR: dropit: releaseHere: DisposeButt: GoToXY: can't move: st_sequence: boxxygo: BelowHome
ERROR: park: ParkButt: DisposeButt: GoToXY: can't move: st_sequence: boxxygo: BelowHome
ERROR: view: buttonview: ViewButt: GoToXY: can't move: st_sequence: boxxygo: BelowHome
To clear this problem move the gripper up at least to its home position. In order to do that you can either home the gripper with the coldstart command [83] or move it with the goz command [23] and a positive value.
This error message indicates that an error ocurred during the initialization of the x and y motors. Following are examples of real error messages of this type.
ERROR: home: HomeMotors: st_sequence: boxXYhome: AxisFailure
Use the listTI command [73] to figure out which of the motors is causing the problem and why.
This message indicates that the system has found a button in the gripper at the moment of initialization. You may have to follow a recovery procedure to drop the button before initializing the system. Following are examples of real error messages of this type.
ERROR: coldstart: ColdStart: st_sequence: boxCold: ButtonOnInit
ERROR: gripin: couldn't bring gripper in: gripIn: ColdStart: st_sequence: boxCold: ButtonOnInit
The recovery procedure starts by initializing the gripper motor and the Z axis motor using the minit command [17] and then the home command [16] for each axis.
For example to initialize the axis:
Fiborg3.2.5> minit gripper
Fiborg3.2.5> home gripper
Fiborg3.2.5> minit z
Fiborg3.2.5> home z
The second step is to drop the button by using the dropit command. It may be necessary to issue the command several times before the system
drop the button. If no success open the gripper to its wide open position and try removing the button from the gripper jaws manually.
This message appear when the motor is not able to finish its motion. Try the listTI command [73] for more diagnosis information. Following are examples of real error messages of this type.
ERROR: goz: no motion: GoToZ: can't move: st_sequence: boxzgo: NoMotion
This message appear when a the system has been ordered to move the stages while the stages are at their park position. Following are examples of real error messages of this type.
ERROR: bump: offsetToXY: GoToXY: gripper is disabled, use gripin to activate
ERROR: goxy: no motion: GoToXY: gripper is disabled, use gripin to activate
ERROR: move: MoveButt: gripper is disabled, use gripin to activate
ERROR: park: ParkButt: MoveButt: gripper is disabled, use gripin to activate
ERROR: view: buttonview: ViewButt: GoToXY: gripper is disabled, use gripin to activate
Activate the gripper either by using the GUI button or typing the gripin command [24]
This message appear if the user has tried to activate the gripper too soon after parking it. For some unknown reason the motor drives have to rest a few seconds after been turned off to prevent the Galil Box to run into a fault condition. Following are examples of real error messages of this type.
ERROR: coldstart: ColdStart: please wait a few seconds and try again
ERROR: gripin: couldn't bring gripper in: ColdStart: please wait a few seconds and try again
This message appear when the user tries to move the gripper to a non valid position. Following are examples of real error messages of this type.
ERROR: bump: offsetToXY: GoToXY: target is beyond X-Y limits
This message tell the user he has tried to move a fiber that has been marked as "non existant" in the concentricities [84] configuration file. Following are examples of real error messages of this type.
ERROR: configure: mqu_orderMoves: ERROR: park: ParkButt: MoveButt: fiber #102 doesn't physically exists...
ERROR: configure: mqu_orderMoves: ERROR: physmove: MoveButt: fiber #2 doesn't physically exists...
ERROR: configure: orderMoves: ERROR: physmove: MoveButt: fiber #2 doesn't physically exists...
ERROR: fieldsetup2: ERROR: configure: mqu_orderMoves: ERROR: park: ParkButt: MoveButt: fiber #232 doesn't physically exists...
ERROR: fieldsetup2: ERROR: configure: mqu_orderMoves: ERROR: physmove: MoveButt: fiber #232 doesn't physically exists...
ERROR: move: MoveButt: fiber #10 doesn't physically exists...
ERROR: park: ParkButt: MoveButt: fiber #102 doesn't physically exists...
Check the concentricities [84] configuration file for more information about the fiber.
This error message tell the user he has tried to stowed a fiber that is not actually stowed, that is, is not at its fiducial position in the plate. Following are examples of real error messages of this type.
ERROR: unstow: Unstow: button 249 is not stowed
This message appear when the user tries to move a fiber with the plate at its warp position. Following are examples of real error messages of this type.
ERROR: configure: can't move with plate warped
ERROR: move: can't move with plate warped
ERROR: park: can't move with plate warped
Use either the GUI button or the plate command [79] to unwarp the plate.
This message appear when the user tries to move a fiber to a non-valid position. The actual reason why the target position is not valid can be found at the xterm window from which hydractio was launched. Following are examples of real error messages of this type.
ERROR: configure: mqu_orderMoves: ERROR: physmove: invalid move requested for button #207
ERROR: configure: orderMoves: ERROR: physmove: invalid move requested for button #159
ERROR: fieldsetup2: ERROR: configure: mqu_orderMoves: ERROR: physmove: invalid move requested for button #88
ERROR: move: invalid move requested for button #0
This message tell the user that the position that the known position of the fiber is out of bounder. Following are examples of real error messages of this type.
ERROR: configure: mqu_orderMoves: ERROR: park: ParkButt: MoveButt: it's not safe to grab button at current location
ERROR: fieldsetup2: ERROR: configure: mqu_orderMoves: ERROR: park: ParkButt: MoveButt: it's not safe to grab button at current location
This is a very unusual error message and may be an indication that the Galil Box variables that are set the first time the application starts up has been corrupted some how or the result of incorrect use of either thisis [40] or ThisIs [41] recovery commands.
This message tell the user that the system failed in grabing the specified button. Following are examples of real error messages of this type.
ERROR: configure: mqu_orderMoves: ERROR: park: ParkButt: MoveButt: couldn't pick up button 1
ERROR: configure: mqu_orderMoves: ERROR: physmove: MoveButt: couldn't pick up button 101
ERROR: configure: orderMoves: ERROR: park: ParkButt: MoveButt: couldn't pick up button 159
ERROR: configure: orderMoves: ERROR: physmove: MoveButt: couldn't pick up button 247
ERROR: fieldsetup2: ERROR: configure: mqu_orderMoves: ERROR: park: ParkButt: MoveButt: couldn't pick up button 0
ERROR: fieldsetup2: ERROR: configure: mqu_orderMoves: ERROR: physmove: MoveButt: couldn't pick up button 7
ERROR: move: MoveButt: couldn't pick up button 0
ERROR: park: ParkButt: MoveButt: couldn't pick up button 84
To actually pick up the button we recommend using the thisis [40] or ThisIs [41] command to correct the known coordinates of the software. You will have to cruise around and center the gripper on top of the button and then issue one of the two commands. Then park the button.
This message indicate that the button was lost during the move. This is a very dangerous situation sice is not possible to know were the button was left. Following are examples of real error messages of this type.
ERROR: configure: orderMoves: ERROR: physmove: MoveButt: gripper has no button to drop
ERROR: fieldsetup2: ERROR: configure: mqu_orderMoves: ERROR: park: ParkButt: MoveButt: gripper has no button to drop
ERROR: fieldsetup2: ERROR: configure: mqu_orderMoves: ERROR: physmove: MoveButt: gripper has no button to drop
ERROR: move: MoveButt: gripper has no button to drop
ERROR: park: ParkButt: MoveButt: gripper has no button to drop
You can use the gripper camera two see if you can find the button and then update its last known coordinates to its current position with the ThisIs command [41] . The other way to go is to manually stow the fiber and then tell the software with the xstowed command [71] that the fiber is now stowed.
This message tell the user that the gripper still has the button in the gripper after trying to drop it at its target position. Following are examples of real error messages of this type.
ERROR: configure: mqu_orderMoves: ERROR: park: ParkButt: MoveButt: couldn't drop button 88
ERROR: configure: mqu_orderMoves: ERROR: physmove: MoveButt: couldn't drop button 174
ERROR: dropit: releaseHere: DisposeButt: DropButt: couldn't drop button!
ERROR: move: MoveButt: couldn't drop button 170
ERROR: park: ParkButt: DisposeButt: DropButt: couldn't drop button!
ERROR: park: ParkButt: MoveButt: couldn't drop button 103
Try releasing the fiber using the dropit command [36]. This command will try to cleanly release the fiber at the current gripper position. Try it several times, sometimes takes more than one try to release the offending fiber.
If the above doesn't work you can still try opening the gripper jaws to their open wide position using the openwide command [31]. This command will open the jaws more than usual hopefully releasing the button. If not then try releasing it manually.
This message tell the user that there is no button in the gripper to drop.
This message tell the user that the software has a record of another fiber at the current gripper position when using the thisis command [40] . This prevents from giving a button the coordinates of another button.
ERROR: ... : fiber in jaws - this message appear when trying to park the gripper while holding a button in the gripper. Following is an example of this type of message.
ERROR: gripout: fiber in jaws
This message tell the user that te system won't move any other fiber until he resolves the problem with a lost fiber. Following is an example of this type of message.
ERROR: configure: mqu_orderMoves: ERROR: physmove: can't move button 0 with 168 in transit
You will have to find the lost fiber and then update its current location with the thisis [40] or ThisIs [41] command. Only then you will be able to continue moving fibers. Not knowing the lost fiber position can result in fiber collisions.
The read temperature value is out of range. You can override the read value by manually entering the temperature value using the themval command [61]. Following are some examples of this type of message.
ERROR: tempsense: can't set current temperature: ERROR: thermval: temperature is to large/small
This message tell the user that it was not possible for the software to do a transition from its current configuration to the one specified by the assignment file. The error message now includes information about the offending fiber. Following are examples of real error messages of this type.
ERROR: configure: mqu_orderMoves: ERROR: transition: unable to do the transition. Please check your assignment file for invalid moves.
ERROR: transition: unable to do the transition. Please check your assignment file for invalid moves.
The short way to solve this problem is to comment out the line in your assignments file containing the offending fiber assignment. The long way is to run hydraassign and get new assignments for the objects in the file.
The init file astroparams [85] is corrupted or the environment variable that holds the path to the file is undefined. Check your environment for the ASTROPARAMS environment variable, check you read permissions to the astroparams file and check that the file actually exists.
The init file systemparams [86] is corrupted or the environment variable that holds the path to the file is undefined. Check your environment for the SYSTEMPARAMS environment variable, check you read permissions to the systemparams file and check that the file actually exists.
the transition program was unable to open the script containing fiber moves.
ERROR: configure: mqu_orderMoves: ERROR: transition: hydra file "parkall" not found.
ERROR: transition: hydra file "parkall" not found.
The transition program was unable to find the plate coordinates file created by the astrometry program. Following are examples of this type of message.
ERROR: configure: mqu_orderMoves: ERROR: transition: transition couldn't find file: "GM.1.out1.hydra.coords"
ERROR: transition: transition couldn't find file: "GM.1.out1.hydra.coords"
Check for error messages about the astrometry program.
the scpecified file name doesn't exist. Following are examples of this type of message.
ERROR: fieldsetup2: ERROR: aload: file /home/hydra/fields/GM.out2.hydra doesn't exists
The user interrupt the script execution by typing ^C. Following are examples of this type of message.
ERROR: User interrupt while sourcing largecircle
This message tell the user that no connection was opened to the FOPS guider. Check the ethernet connection and check that the FOPS guider program is actually running.
This message tell the user that the program failed to send the command to the FOPS guider. Check the ethernet connection and check that the FOPS guider program is actually running.
This message tell the user that the program failed to read the command response coming from the FOPS guider. Check the ethernet connection and check that the FOPS guider program is actually running.
Last Modified: May 9, 2000
The measurement of concentricities has to be made off telescope probably at the Coude Room. The minimal setup required to measure the concentricities includes, besides Hydra, a video monitor, an ICCD controller, a video cursor, a light source and the Hydra Laptop (or the Hydra PC). The video monitor plus the ICCD controller display the video signal from the gripper camera. The light source is used to illuminate the fibers from behind. And the Laptop controls the instrument. When illuminating the fibers environmental light has shown to be sufficient for the small and large fibers. To illuminate the FOPS it's not necessary to remove the FOPS camera. Removing the filter in front of the camera will allow you to introduce enough light through the space left by the filter.
If you are using the Hydra Laptop to control the instrument during this procedure you better be sure that the "CurrentLocations" and "statusFile" are not different from the ones in ctioa6 (Hydra PC). Copying this files from ctioa6 to the laptop will ensures that the software knows exactly where the fibers are. For example if the Ethernet connection is available, typing the following commands in a shell window will do it for you. Don't forget to login as "hydra".
% cd Hydra/data/status
% rcp ctioa6:/home/hercules/Hydra/data/status/CurrentLocations .
% rcp ctioa6:/home/hercules/Hydra/data/statuc/statusFile .
Now you can start "hydractio" or "hydractio-comm" if you don't want to communicate with the TCS and FOPS Guider systems (this will be often the case).
The canonical procedure is first to put the fibers in a circle. There is a script that can do this job for you. For example, if you are measuring the concentricities for the small fibers type at the CLI/Script Tool command line:
Fiborg3.2.0> execfile configsmallcircle
After it finishes you can execute the script to actually measure the offset between the button position and the fiber position for every fiber. Don't forget to check that your light source is illuminating the fibers evenly before executing the script. What the script does is to go fiber after fiber grabbing its current position, allowing you to correct the position by offsetting the gripper and grabbing the new position. The idea is to use a video reference (video cursor) to center, by moving the gripper, the light beam coming from the fiber and use the offset between the original (button position) and final position (fiber position) to calculate the concentricity correction for that particular fiber. You should repeat the process a minimum of three times (five is a good number of repetitions), that is parking all the fibers, putting them back in a circle and grabbing the corrections. Make sure you also do FOPS concentricities measurements interleaved with the small or large concentricities measurements. The FOPS serve as the zero point correction. It is recommended to do all the fibers (small, large and FOPS) with the same TV setup just to ensure that they are all on the same zero point. All the recorded positions are kept in the log file of the current session.
For example, if you want to record concentricity data for the small fibers you should type at the CLI prompt:
Fiborg3.2.0> execfile meassmall
The gripper will move to the first small fiber and will wait for you to move the gripper. You can use the arrow buttons in the "Field Display Tool" window or the keyboard by typing "h, j, k, l" (make sure the mouse cursor is on top of the "Field Display Tool" window) to offset the gripper. You can change the size of the step by moving the red slider in the field display or by pressing a key from 1 to 9. After you finish with the first fiber type "q" or press the "Enabled" green button. At this moment the "Enabled" button will go red, the gripper will move to the second small fiber and the "Enabled" button will go green again. Repeat the process above until you finish all the small fibers.
After you finish logging the concentricities raw data you can use the "concenctio" program to generate a new concentricities file. [84] This program lives in /home/hydra/src/concenct. First you'll have to copy the old concentricities files to that directory plus the log file(s) containing the raw data. The old concentricities file will be used as a template to produce the new file. If the name of your current concentricities file is different than "concentricities" you will have to rename it as "concentricities". Then run the program to generate the new concentricities file. The name of the new file will be "nconcentricities". For example, to generate a new concentricities file from the current "concentricities" file plus the "hydra.currentLog" log file you should do:
% cd /home/hydra/src/concenct
% cp /home/hydra/Hydra/data/inits/concentricities .
% cp /home/hydra/fiblogs/hydra.currentLog .
% concen
Enter the name of the log file: hydra.currentLog
Small Concentricities
Group 1 Average is X= 0.000000 Y= 0.000000 for 135 measurements
Another file to read? (y or n): n
ave x = 0.000000, ave y = 0.000000, sdev x = 0.000000, sdev y = 0.000000
ave r = 0.000000, sdev r = 0.000000
var = 0.000000
var = 0.000000
var = 0.000000
ave x = 0.000000, ave y = 0.000000, sdev x = 0.000000, sdev y = 0.000000
ave r = 0.000000, sdev r = 0.000000
var = 0.000000
var = 0.000000
var = 0.000000
.
.
.
ave x = 0.000000, ave y = 0.000000, sdev x = 0.000000, sdev y = 0.000000
ave r = 0.000000, sdev r = 0.000000
var = 0.000000
var = 0.000000
var = 0.000000
%
If the data is contained in more than one log file, then copy all the log files to the concenct directory and answer yes to the question "Another file to read? (y or n):". The program will prompt you for the name of the second file, third file, etc.
When you run the program, make sure you also enter the large fiber and FOPS concentricity measurements (either a new set or old data took previously) to make sure that the zero point correction is handled appropriately.
Besides the nconcentricities file there are four other output files: raw.dat, ave.dat, con.dat and plot.macro. "plot.macro" is a supermongo script to generate individual plots for the concentricity measurement for each fiber. It uses the "ave.dat" and "raw.dat" files. File "con.dat" is for diagnostic value in case something looks strange. For example, to print the concentricity measurement plots:
% sm (sm is available in solaris and sunos workstations)
Hello hydra, please give me a command
: macro read plot.macro
: device postlandfile plotset1.ps
: plotset1
: device postlandfile plotset2.ps
: plotset2
: device postlandfile plotset3.ps
: plotset3
: device postlandfile plotset4.ps
: plotset4
: device postlandfile plotset5.ps
: plotset5
: device postlandfile plotset6.ps
: plotset6
Remember to place a comment in the header of the new concentricities file and to increment its version number. Then copy the new concentricities files to its final location at the Hydra PC and test at the telescope by configuring a standard field.
Last Modified: April 27, 2000
Before you can download code, you need to have the appropriate hardware and software configurations. Various switches and software items need to be configured. These are discussed below for both the host machine and the Galil Box.
a) Host Machine
The easiest way to download the code is to use the "Editor Tool" provided with the Visual Basic Tool. In order to use this software you will need your host machine to be running under Windows95 and the Visual Basic Tool installed.
b) Galil Box
While a comprehensive discussion of the Galil DMC-1500 is ledt to the Galil User Manual, a few pointers are given below.
In order to be able to do anything with the box, you have to be able to talk to it. To that end, a cable and the correct switch settings are required. No other hardware is necessary to talk to the box. Notice the little set of dip switches next to the serial ports on the black box. Set them as follows:
switch # | Name | Position |
1 | MRST | OFF |
2 | 1200 | OFF |
3 | 9600 | OFF |
4 | 19.2k | OFF |
5 | HSHK | OFF |
This will set up things up for a baudrate of 9600 with no hardware handshake.
Now that you have the right hardware and software configuration you can start the Visual Basic Tool and get ready to download the code.
Start the Visual Basic Tool application and press the button labeled "Source Edit". The Editor Tool window will appear. Use the file directory window to browse for your makefile file. The Editor Tool use this file to load the files containing the code you are planning to download. This is a simple text file with a newline separated list of file names. If you are downloading the Galil Embedded Code [87] that file is "makefile.mak". It includes seven files: buttmove.g, coldstrt.g, errors.g, gripops.g, main.g, periphio.g and xyops.g.
Choose the makefile by clicking on it. The contents of the file will be showed in the "Make File Contents" entry. Here the Editor Tool gives you the opportunity to check the code in the files you just loaded before you attempt to make a download. Remember that each time you make a download the current code is lost. Click a file name in the "Make File Contents" box and the source code and declared variables will be showed.
The final step is to download the code into the Galil. Press the button labeled "Download all files" to download the code. The download will take approximately 25 seconds. If everything went O.K. then a dialog box should pop up saying "Download OK".
Last Modified: April 27, 2000
Software binaries are available to run under Linux and Solaris. The latest versions will be found in hydrasimLinux [88] for Linux and in hydrasimSolaris [89] for Solaris. Both versions can also be found in the Tucson mirror of the CTIO ftp site [90] (updated nightly). Current version of the software is 4.0.2.
You will probably also want to download the the documentation file hydraassign.ps [7]. Thanks to Phil Massey for providing the documentation and software for the Hydra-CTIO version of hydraassign [14].
First, be sure you are running the c-shell or one of its derivatives (e.g. tsch). If you are running the bash shell, you can change to the c-shell using the command chsh -s /bin/csh Put the tar file in your home directory, change to your home directory and then
gunzip hydrasimLinux.tar.gz
tar -xf hydrasimLinux.tar
uncompress hydrasimSolaris.tar.Z
tar -xf hydrasimSolaris.tar
Now change to subdirectory "/Hydra/bin" and execute "~/install.org". This is a script that will create three sub-directories (fiblogs, fields & stdfields) in your home directory. Copy the file "~/Hydra/bin/sample.fiborg" to .fiborg in your home directory as well. Then include in the "set path" command of either your ".login" or ".cshrc" file the following path:
~/Hydra/bin
Also, add the folowing line to your .login or .cshrc file to source the .fiborg and set the environment:
source ~/.fiborg
Log out and back in to allow the new path to be activated or type "source ~/.login" (or source ~/.cshrc or whatever is your particular rc file). If you chose not to decompress and de-tar the downloaded file in your home directory change variable FIBHOME in file ".fiborg" to reflect the new location of the software as well as the bin path for the "set path" command.
Two windows will appear. One is a simple command line window (CLI/Script Tool window) and the other is a window showing a graphical representation of the fibers and the focal plate. It also includes various information about the current star field and status. The terminal window used to launch the program will be used as a console.
Last modified: October 17, 2001
This program lets you define the screen positions for the FOPS. The program runs in the same vme pizza box where the hydra guider does.
First edit the boot parameters by booting the computer and stopping the countdown sequence (to reboot type reboot at the prompt or Ctrl+X). To edit the boot parameters type c and then press enter, as follows:
[VxWorks Boot]: c
In response, the boot program prompts you for each parameter. Change the startup script field to "/tftpboot/align.cmd":
startup script (s) : /tftpboot/align.cmd
That will download the right binary and will setup things to run the alignment program.
To run the FOPS alignment program call the function AlignFops from the vxWorks shell. When the program starts you will have the X,Y,Z and Mode information at the top of the screen and a box in the center of the screen. To move the box use the arrow keys on the numeric keypad. Make sure that
NUMLOCK is on.
The <tab> key will increment the step size that the box moves with each key stroke. The range is from 1 pixel per key to 20 in steps of 5. It will be clear how it works once you test it out.
Make sure you are in Mode 0. This is done with the ] key. Move the box so that the first fop you want to align is centered in it. Once you have the FOP centered in the box record the X, and Y values. These are the ROI starting coordinates for this FOP.
Now switch to mode 1, (the [ key). Again, using the arrow keys on the numeric keypad move the aligment dot to the center of each FOP fiber and record the X,Y coordinates. The Z value is displayed to aid in choosing the center of the fiber.
Now switch back to mode 0 (the ] key). Do this for each FOP.
Once you collect all of the data you need to put it into the hydra.ini file in the proper format.
It is important to collect fiber information from each FOP in the same order. I usually start with the top most fiber and proceed clockwise ending with the center fiber.
Once you have a good INI file you can check the alignment by loading the guider code and calling the function regFiber(0). This will display the alignment boxes around each fiber of
each FOP. To turn these off call regFiber(3).
Some debug information that you can display is very helpful. Once the guider code is running, in the vxWorks shell you can set nDebugLevel1, to the value '1'. This will start the debugging output. Setting it equal to 0 will turn it off.
nDebugLevel1 will give the (for each FOP)
FopID
Fiber #
Fiber Mean Intensity
Fiber Mean Intensity - Background,
Sky level,
Frame bias value,
Number of pixels in fiber ROI
Sum of the pixels in the fiber ROI
Last Modified: October 17, 2001
At the VxWorks prompt type "Guide". You will notice that the FOPS monitor will flash and then a bunch of messages will be printed to the terminal output:
-> Guide
Before guiding you have to activate the Fops you want to use. You can activate the FOPS by sending the command from the Hydra-CTIO gui or by typing a command at the VxWorks shell prompt.
In the first case select the fiber from the list and press the green button labeled "Enable FOPS".
In the second case just type chgFop(fop#, type, state), where:
fop# is the fop number from 0 to 11.
type is 1 for GUIDE, 2 for SKY and 3 for MONITOR.
state is 1 for active and 2 for inactive.
For example to activate FOPS 6 as a monitor FOPS type:
-> chgFop(6, 3, 1)
Finally to start guiding press the green button labeled "Guider On" or type at the VxWorks shell prompt:
-> GuiderOn
To stop guiding type:
-> GuiderOff
Last Modified: March 11, 1999Contents: | |
1. | Software Code |
2. | Starting The Program |
3. | Hydra GUI |
3.1 Menu Bar | |
3.2 Status Panel | |
3.3 Control Panel | |
3.4 Status Bar | |
4. | GWC Status Variables |
5. | Trouble Shooting |
The Hydra Spectrograph GUI software lives in /usr/local/Bench4m. The structure of the directory tree is as follows:
The Hydra spectrograph GUI consists of an extended TCL/TK interpreter plus a set of TCL/TK scripts that build the functionality required by the application. The extended TCL/TK interpreter lives at sub directory "src". Support is provided for compiling the interpreter under Linux, SunOs and Solaris. The TCL/TK scripts live at sub directory lib/bench4m and lib/common.
Open an xterm window and type start_bench4m to start the program. This start up shell script will search your home directory for file .bench4mrc to set the environment before running. If not found it will look for the default version of that file at /usr/local/Bench4m/bin for bench4mrc.
Following is an example of that file:
#-------------------------------------------------------
#!/bin/csh
# Environment variables for the hydra spectrograph gui program
#
# modification history
# --------------------
# 01a 04apr2000, rcr - Created
# Bench 4m environment
setenv BENCH4MHOME /usr/local/Bench4m
# The TCL/TK package libraries
setenv TCL_LIBRARY $BENCH4MHOME/share/lib/tcl8.0
setenv TK_LIBRARY $BENCH4MHOME/share/lib/tk8.0
# The MPG_ROUTER variable designates the name of the host in which
# the router run. When not defined the the mpg router is supposed
# to be running in indus.tuc.noao.edu.
setenv MPG_ROUTER ctioa1
# The variable MPG_ROUTER_PORT designates the port in which the mpg
# router is listening for incoming connections. The default value
# for this variable is 1 plus the the wiyn router port (2345).
setenv MPG_ROUTER_PORT 2347
# Directory containing configuration files
setenv BENCH4MCONF $BENCH4MHOME/config
# Serial port to connect to
setenv BENCH4MSPORT /dev/ttya
# Others
#setenv PATH $PATH":/usr/local/bench4m/bin"
#setenv LD_LIBRARY_PATH /local/X11R5/lib:$LD_LIBRARY_PATH
#------------------------------------------------------
The program also use three configuration files that live at /usr/local/bench4m/config: gratings.conf, bench4m.ini and filters.ini.
gratings.conf - text file containing grating parameters. Following is an example of this file:
-------------------------------------------------------------- | |||||||
# CTIO Hydra Bench Spectrograph gratings parameters. | |||||||
# Name | l/mm | Blaze | Wrange | Disp | gr_0 | gr_fdg | incl_0 |
KPGL3 | 527 | 5500 | 3417 | 1.16 | -0.3 | 0.988 | 0.0 |
KPGL1 | 632 | 4200 | 2872 | 1.02 | -0.491 | 0.988 | 0.0 |
KPGLF | 632 | 8200 | 2872 | 1.01 | -0.30 | 0.988 | 0.0 |
G450 | 632 | 11000 | 2872 | 0.47 | -0.33 | 0.988 | 0.0 |
KPGLD | 790 | 8500 | 2290 | 0.79 | -0.27 | 0.988 | 0.0 |
KPGLG | 860 | 11000 | 2101 | 0.68 | -0.3 | 0.988 | 0.0 |
G380 | 1200 | 8000 | 1563 | 0.48 | -0.3 | 0.988 | 0.0 |
Echelle | 316 | 56120 | 2888/ | 0.94/n | -0.1 | 0.988 | 0.0 |
-------------------------------------------------------------- |
name - a label for the grating
l/mm - number of lines per millimeter
Blaze - self explanatory
Wrange - wavelength range
Disp -
gr_0 - grating angle value for order 0
gr_fdg -
incl_0 - fiber head assembly angle for
bench4m.ini - text file containing the last grating and grating order used. There is a user version of this file called ".bench4m.ini". When the user exits the application the grating and the grating order are saved to this file at the home directory.
filters.ini - text file containing the last filter labels used. There is a user version of this file called ".filters.ini". When the user exits the application the filter labels he defined are saved to this file at the home directory.
The Hydra Spectrograph GUI (shown below) is the front end which controls the motors on the Hydra Bench Spectrograph. The GUI connects to a "Smart Motor Controller" (SMC) which controls each of the motors via a serial line through which status information and movement commands are sent.
The GUI also connects to the so-called "GWC" router which publishes the status of the various motors and switches. This allows Arcon to build header information during image acquisition.
At the top of the GUI is a menu bar with four pop-up menus: Setup, Windows, Options and Help.
Clicking on "Setup" gives you three options:
Use the "Load Grating" option to select the desired grating. The gratings database is loaded from a text file called "gratings.conf". This file can be manually edited to add new gratings. This file is loaded when the application starts and every time the "Gratings" dialog box is opened.
Use this option also to set the current grating order. The current grating and the current grating order appear in the GUI title bar.
This dialog box will also appear when you press the left mouse button over the "Grating" entry on the main GUI. The selected grating and the grating order will be saved in the initializstion file (bench4m.ini) whenever you exit the application.
This option allows you to view the current grating specifications. The user must select a grating using "Load Grating" before using this option. The data presented in this box is read from the grating database each time "Load Grating" is used.
Note: Grating parameters may not be altered in this window. They can only be changed by manually editing the gratings.conf file.
The "Filter" option permits the user to label the installed filters with names. Labeling the filters will allow the program to publish the filter names through the GWC router. The user names will also be used to label the filter control buttons on the GUI.
The filter labels you are saved every time the application is exited.
The "Windows Option on the GUI menu offers a single option: "Terminal". This opens a terminal window allowing one to manually send commands to the SMC. The user should not normally have any need to use this option.
If commands must be sent manually to the SMC, read the following document explaining the syntax and function of SMC commands [91]. This is usually only done for testing and diagnosing equipment failures.
The "Options" menu presents a single option: "Alarm Bell". Use this option to activate/deactivate a bell tone that warns the user that the link to the GWC router is not functioning.
The status panel consists of a set of labels that show the current status of the spectrographs motors and switches. When no motion is sensed, the status labels are blue and white. When a mechanism is active or moving the status labels blink and the background color goes yellow to reflect the new status. If no status information is available or an error condition is sensed the status labels blink and the background goes red.
The control panel consists of a set of widget clusters that group some common functionality.
Four clusters are present: grating control, fiber mount focus control, shutter/newall control and
filter wheel control.
Use the grating control panel to set the grating tilt angle the inclination of fibers angle. To set this values the user must load a grating with the "Load Grating" option first.
The user typically enters a wave length and press return to calculate the proper grating tilt angle and inclination angle. To actually move the mechanisms the user must select "Set Grating and Inclination Angles" from the "Commands" menu button.
Use the fiber mount focus control panel to set the focus distance. The user typically enters a focus value and press return to actually move the focus mechanism.
Use the shutter/newall control panel to set the shutter/newall position. The actions taken depend on whether control of the shutter comes from the SMC or Arcon.
When the SMC is in control, the actions taken are immediate and direct. The shutter is a large rotating disc. If you ask for it to be open or closed, it does exactly what you expect. When you ask for "upper" or "lower" position, it moves to a positions with the upper or lower half of the aperture covered.
When control over the shutter is transferred to Arcon, if "Newall normal" has been selected, Arcon will open the shutter fully when an exposure begins. If "Newall upper" or "lower" is selected, during the exposure the respective half the aperture is left covered. At all other times the shutter remains fully closed.
Use the filter control panel to set the filter wheel position and to set the LEDs intensity.
So far the status bar has a single widget that presents the status of the GWC link. When the GWC link brakes the widget goes blinking and if the "Alarm Bell" option is set, a tone will be heard.
The status information collected by the application is published by the GWC router to other applications that use it (i.e icsInfo). Following are the data streams that the application defines to publish its data. Client applications can subscribe to this data through the GWC router.
bench4m.main.grat - grating angle (degrees)
bench4m.main.fiber - fiber mount focus
bench4m.main.filter - filter position
bench4m.main.shutter - Shutter position
bench4m.main.newall - Newal mask position
bench4m.main.led - LED status (on/off)
bench4m.main.incli - fiber line inclination
Check that the GWC router is actually running on its host machine. If its running check that the machine in which the bench spectrograph GUI is running is an enabled machine. Check the /usr/local/gwc/config/routersetup.tcl file for your machine name. If not present add the name using the rest of the file as a template.
Check also that the environment variables MPG_ROUTER and MPG_ROUTER_PORT are set to the proper values in the bench4mrc file.
Check that environment variable BENCH4MSPORT is set to the right serial device in the bench4mrc file. Under SunOs and Solaris that variable is either /dev/ttya or /dev/ttyb. Under Linux that variable is either /dev/ttyS0 or /dev/ttyS1.
This error message signals that the serial device was opened successfully but no answer has been received to a sent command. Check you opened the right serial device and that the receptor of your commands is connected to that port and alive.
This warning message appear to warn the user he chose not to connect to the GWC router. Consequences are that no header information will be available when image acquisition with the Arcon system.
Last Modified:for manually operating the Comparison lamps and the Bench Spectrograph:
Both the comparison lamp system and the bench spectrograph have a GUI which should make their operation easy. However, if for some reason the GUI doesn't work or something is suspect, both systems can be moved manually with a lower level interface which is qcryptic and primitive but is not difficult to use.
To manually control the comparison lamp system you must use the telescope control system by opening a window in the "command mode" and typing your commands in it, preceeded by the word "local". To control the bench spectrograph you have to open a tif window in the Arcon computer and type your commands in there.
If these commands don't work and things don't seem to make sense, try resetting the corresponding "SMC" (Smart Motor Controller).
Both boxes function with the same command syntax:
boxname mechanism action value
Some actions (e.g. init) do not require a value
Some actions (e.g. move) must have a value
Some actions (e.g. status) return a value
Commands must be typed EXACTLY as written when entered manually. The software is not very forgiving. If you make a mistake, type amd start over.
There are three useful General commands, applicable to all boxes.
To reset the box:
[boxname] reset
To make sure the version of software in the box is right:
[boxname] set version
This should always be done after a reset.
To manually turn the motor power on or off and leave it there:
[boxname] (on/off}
The name of the box which controls the comparision lamps is cfadc
cfadc is a peripheral of the tcs. Commands must be passed to the tcs or typed into a command window of the TCS as "local" commands. All manually entered commands must be prefixed by the word "local", e.g.[ local cfadc lamps mov 700 ] .
The first 4 lamps are selected by putting a "lamp" mirror in a numerically identified position with:
COMMAND: [local] cfadc lamps (status/position/init/move) (value)
The best values for the lamp positions are:
etalon 64
tha 241
qua 754
hene 909
The lamps are then turned on or off with
COMMAND:
[local] cfadc lamps (etalon/tha/qua/hene/pen) (move/status) (on/off)
4. There is a television camera which when activated allows you to see what is going on inside the chimney.
This TV (which contains its own light source) is turned on and off with the command:
[local] cfadc outlet1 move on/off
With this camera, you can tell if the flat and spherical mirrors are in or out and if the quartz lamp is on. The other lamps aren't bright enough.
If you use this camera, be sure to turn it (and its light) off when you are through!
-----------------
Example 1:
To make a quartz lamp exposure:
Setup
[local] cfadc flat move in
[local] cfadc sphe move in
[local] cfadc lamps move 754
[local] cfadc lamps qua move on
[local] cfadc lamps qua status (check position-optional, but a good idea) (should be 754 ~+/-1)
Take exposure:
Turn off comparison system:
Turn off lights
[local] cfadc lamps qua move off
[local] cfadc flat move out
[local] cfadc sphe move out
Check status of everything, if desired
[local] cfadc lamps qua status (returns off)
[local] cfadc flat status (returns out)
[local] cfadc sphe status (returns out))
Example 2:
To make an exposure with the penray lamps:
Setup:
[local] cfadc flat move in
[local] cfadc sphe move in
[local] cfadc plamps move in
[local] cfadc lamps pen move on
Take exposure:
Turn off comparison system:
[local] cfadc plamps move out
[local] cfadc lamps pen move off
[local] cfadc flat move out
[local] cfadc sphe move out
Check status of everything, if desired
[local] cfadc plamps status (returns out)
[local] cfadc lamps pen status (returns off)
[local] cfadc flat status (returns out) [local] cfadc sphe status (returns out)
The Bench Spectrograph SMC is called bench4m. Commands can be sent manually to the bench4m SMC from the "Terminal" window which can be opened using the spectrograph GUI.
-----------
Emergency only! If for some reason the GUI doesn't work, the SMC can also be controlled directly from a tip window. The interface is rather primitive. You must type exactly what is written. Any mistakes will cause the command to be rejected and you have to start over. No back spaces or deletes allowed
Start the tip window from an xterm on the Arcon computer with the following command:
tip ttyb
~s
le=on
------------
In the Terminal or (in an emergency only) in a"tip" window, type commands using the following syntax (remember that backspace works in the terminal window, but not using tip)
The shutter is normally under Arcon control. In this mode, it remains closed until Arcon tells it to open and then stays open (or partially open according to the state of the Newall mask flag) until the exposure has ended and then rotates back to closed. The shutter disc can also be controlled directly from the smc.
bench4m shu control arcon [transfers open/closed control to Arcon]
(The box comes up in "smc" mode so this command must be issued after any reset before any exposures can be taken.)
bench4m shu control smc [transfers control to direct mode]
To move the shutter manually in direct mode, one must send it to specific numbered positions:
open = 100
close = 20600
upper = 2400
lower = 3100
using the command
bench4m shu (move/init/stop/status) #position
e.g.
bench4m shu control smc
bench4m shu move 100
manually opens the shutter.
If you move the shutter manually it should be manually closed before returning control to Arcon. Returning control does not automatically close it.
T. Ingerson
Last update:
22 June 1999-tei
13 August 1999 -tei
20 May 2000 - tei
2 August 2000 - tei
27 October 2000 - tei
Links
[1] http://www.ctio.noao.edu/noao/content/How-obtain-Hydra-CTIO-Simulator
[2] ftp://ftp.noao.edu/ctio
[3] http://www.ctio.noao.edu/noao/sites/default/files/instruments/spectrographs/hydra_gui.gif
[4] http://www.ctio.noao.edu/noao/content/tcs-commands
[5] http://www.ctio.noao.edu/noao/content/tcs-router
[6] http://www.ctio.noao.edu/noao/content/Embedded-Galil-Software-Coding-Standard
[7] http://www.ctio.noao.edu/noao/sites/default/files/instruments/spectrographs/hydraassign.ps
[8] ftp://ftp.ctio.noao.edu/ctio/hydra/lepusastrom.hydra
[9] http://www.ctio.noao.edu/noao/content/measuring-concentricities
[10] http://www.ctio.noao.edu/noao/sites/default/files/instruments/spectrographs/alternating_concentricities
[11] http://www.ctio.noao.edu/noao/sites/default/files/instruments/spectrographs/concentricitieslarge.txt
[12] http://www.ctio.noao.edu/noao/content/user-interfase#execfile
[13] http://www.ctio.noao.edu/noao/content/user-interfase#configure
[14] http://www.ctio.noao.edu/noao/content/hydraassign
[15] http://www.ctio.noao.edu/noao/content/hydra-cli-coldstar
[16] http://www.ctio.noao.edu/noao/content/hydra-cli-home
[17] http://www.ctio.noao.edu/noao/content/hydra-cli-minit
[18] http://www.ctio.noao.edu/noao/content/hydra-cli-brakes
[19] http://www.ctio.noao.edu/noao/content/hydra-cli-gox
[20] http://www.ctio.noao.edu/noao/content/hydra-cli-goy
[21] http://www.ctio.noao.edu/noao/content/hydra-cli-goxy
[22] http://www.ctio.noao.edu/noao/content/hydra-cli-gotag
[23] http://www.ctio.noao.edu/noao/content/hydra-cli-goz
[24] http://www.ctio.noao.edu/noao/content/hydra-cli-gripin
[25] http://www.ctio.noao.edu/noao/content/hydra-cli-gripout
[26] http://www.ctio.noao.edu/noao/content/hydra-cli-tag
[27] http://www.ctio.noao.edu/noao/content/hydra-cli-view
[28] http://www.ctio.noao.edu/noao/content/hydra-cli-gopen
[29] http://www.ctio.noao.edu/noao/content/hydra-cli-relax
[30] http://www.ctio.noao.edu/noao/content/hydra-cli-gclose
[31] http://www.ctio.noao.edu/noao/content/hydra-cli-openwide
[32] http://www.ctio.noao.edu/noao/content/hydra-cli-griptest
[33] http://www.ctio.noao.edu/noao/content/hydra-cli-abump
[34] http://www.ctio.noao.edu/noao/content/hydra-cli-bump
[35] http://www.ctio.noao.edu/noao/content/hydra-cli-offset
[36] http://www.ctio.noao.edu/noao/content/hydra-cli-dropit
[37] http://www.ctio.noao.edu/noao/content/hydra-cli-mark
[38] http://www.ctio.noao.edu/noao/content/hydra-cli-move
[39] http://www.ctio.noao.edu/noao/content/hydra-cli-park
[40] http://www.ctio.noao.edu/noao/content/hydra-cli-thisis
[41] http://www.ctio.noao.edu/noao/content/hydra-cli-thisis-0
[42] http://www.ctio.noao.edu/noao/content/hydra-cli-unstow
[43] http://www.ctio.noao.edu/noao/content/hydra-cli-aload
[44] http://www.ctio.noao.edu/noao/content/hydra-cli-assign
[45] http://www.ctio.noao.edu/noao/content/hydra-cli-configure
[46] http://www.ctio.noao.edu/noao/content/hydra-cli-config1
[47] http://www.ctio.noao.edu/noao/content/hydra-cli-preview
[48] http://www.ctio.noao.edu/noao/content/hydra-cli-save
[49] http://www.ctio.noao.edu/noao/content/hydra-cli-setup
[50] http://www.ctio.noao.edu/noao/content/hydra-cli-setup-field-command
[51] http://www.ctio.noao.edu/noao/content/hydra-cli-configmode
[52] http://www.ctio.noao.edu/noao/content/hydra-cli-concenmode
[53] http://www.ctio.noao.edu/noao/content/hydra-cli-flexmode
[54] http://www.ctio.noao.edu/noao/content/hydra-cli-thermmode
[55] http://www.ctio.noao.edu/noao/content/hydra-cli-scalemode
[56] http://www.ctio.noao.edu/noao/content/hydra-cli-lit
[57] http://www.ctio.noao.edu/noao/content/hydra-cli-ping
[58] http://www.ctio.noao.edu/noao/content/hydra-cli-dangle
[59] http://www.ctio.noao.edu/noao/content/hydra-cli-hangle
[60] http://www.ctio.noao.edu/noao/content/hydra-cli-setcable
[61] http://www.ctio.noao.edu/noao/content/hydra-cli-thermval
[62] http://www.ctio.noao.edu/noao/content/hydra-cli-hist
[63] http://www.ctio.noao.edu/noao/content/hydra-cli-listdump
[64] http://www.ctio.noao.edu/noao/content/hydra-cli-listtag
[65] http://www.ctio.noao.edu/noao/content/hydra-cli-status
[66] http://www.ctio.noao.edu/noao/content/hydra-cli-where
[67] http://www.ctio.noao.edu/noao/content/hydra-cli-whereis
[68] http://www.ctio.noao.edu/noao/content/hydra-cli-purge
[69] http://www.ctio.noao.edu/noao/content/hydra-cli-restore
[70] http://www.ctio.noao.edu/noao/content/hydra-cli-xparked
[71] http://www.ctio.noao.edu/noao/content/hydra-cli-xstowed
[72] http://www.ctio.noao.edu/noao/content/hydra-cli-zdb
[73] http://www.ctio.noao.edu/noao/content/hydra-cli-listti
[74] http://www.ctio.noao.edu/noao/content/hydra-cli-listts
[75] http://www.ctio.noao.edu/noao/content/hydra-cli-inputchart
[76] http://www.ctio.noao.edu/noao/content/hydra-cli-swchart
[77] http://www.ctio.noao.edu/noao/content/hydra-cli-execfile
[78] http://www.ctio.noao.edu/noao/content/hydra-cli-complamp
[79] http://www.ctio.noao.edu/noao/content/hydra-cli-plate
[80] http://www.ctio.noao.edu/noao/content/hydra-cli-quit
[81] http://www.ctio.noao.edu/noao/content/how-obtain-hydra-ctio-simulator
[82] http://www.ctio.noao.edu/noao/content/user-interfase#listdump
[83] http://www.ctio.noao.edu/noao/content/hydra-cli-coldstart
[84] http://www.ctio.noao.edu/noao/content/init-status-script-and-coord-files#concentricities
[85] http://www.ctio.noao.edu/noao/content/init-status-script-and-coord-files#astroparams
[86] http://www.ctio.noao.edu/noao/content/init-status-script-and-coord-files#systemparams
[87] http://www.ctio.noao.edu/noao/content/embedded-galil-software-files
[88] ftp://ftp.ctio.noao.edu/ctio/hydra/hydrasimLinux.tar.gz
[89] ftp://ftp.ctio.noao.edu/ctio/hydra/hydrasimSolaris.tar.Z
[90] ftp://ftp.noao.edu/ctio/hydra
[91] http://www.ctio.noao.edu/noao/content/smc-commands