ccd.sta0500
Class MagellanDriver

java.lang.Object
  extended by util.PropertyContainer
      extended by util.PropertyResources
          extended by util.PropertyBundles
              extended by io.AbstractDriver
                  extended by ccd.AbstractCcdDriver<T>
                      extended by ccd.SynchronousCcdDriver<nom.tam.fits.Fits>
                          extended by ccd.sta0500.MagellanDriver
All Implemented Interfaces:
CcdDriver<nom.tam.fits.Fits>, Driver, Cloneable, Initializable, LocalizedSupplying, PropertySupplying, ResourceSupplying

public class MagellanDriver
extends SynchronousCcdDriver<nom.tam.fits.Fits>

This class interfaces to Thomas Fechner's Wifsip controller (Magellan) type. Due to increased version spread, each new RPC package is put in its own directory.


Nested Class Summary
 
Nested classes/interfaces inherited from class ccd.SynchronousCcdDriver
SynchronousCcdDriver.ExposureThread
 
Nested classes/interfaces inherited from class ccd.AbstractCcdDriver
AbstractCcdDriver.Endurance, AbstractCcdDriver.Exposure, AbstractCcdDriver.Shot
 
Nested classes/interfaces inherited from class util.PropertyResources
PropertyResources.URLResource
 
Field Summary
private  nom.tam.fits.Fits async
          The data buffer for asynchroneous retrieval.
private static WifsipMagellanClient ccdclient
          RPC client instance.
static String CCDSEC
          Fits key for entering y-pregap info to header.
static String CCDSECREM
          Comment for entering y-pregap info to header.
static String COPYREM
          Comment for a key that was copied from the primary.
private static int DEFAMPLIFIERS
          Default property value.
private static int DEFCOLAMPLIFIERS
          Default property value.
static String DEFDRIVERNAME
          The name of this ccd.
private static long DEFEXPOSEMULTIPLY
          Default property value.
private static long DEFMINTIME
          Default property value.
private static int DEFRPCTIMEOUT
          Default property value.
private static String DEFSERVERNAME
          Default property value.
private static int DEFSHUTTERCLOSE
          Default property value.
private static int DEFSHUTTEROPEN
          Default property value.
private static boolean DEFSUPPORTSHUTTER
          Default property value.
private static boolean DEFWRONGENDIAN
          Default property value.
static String DETSIZE
          Fits key for entering x-pregap info to header.
static String DETSIZEREM
          Comment for entering x-pregap info to header.
static String KEY_COLAMPLIFIERS
          Total number of amplifiers expected in row direction.
static String KEY_EXPOSEMULTIPLY
          The multiplier for exposure times returned to ms.
static String KEY_MINTIME
          The minimum exposure time in milliseconds.
static String KEY_RPCTIMEOUT
          The RPC time-out in millisecond.
static String KEY_SERVERNAME
          FCDN of the host where the guider rpc server is running.
static String KEY_SHUTTERCLOSE
          The short paramter for shutter-close.
static String KEY_SHUTTEROPEN
          The short paramter for shutter-open.
static String KEY_SUPPORTSHUTTER
          If true, driver supports shutter operation.
static String KEY_WRONGENDIAN
          If true, endian of received short are little.
static int OK
          General return code from rpc calls indicating okay.
 
Fields inherited from class ccd.AbstractCcdDriver
KEY_AMPLIFIERS, KEY_AREAREADOUT, KEY_COLUMNPOST, KEY_COLUMNPRIOR, KEY_COLUMNREADOUT, KEY_FIXEDREADOUT, KEY_INITSIZE, KEY_ROWPOST, KEY_ROWPRIOR, KEY_ROWREADOUT, KEY_XBINNING, KEY_XCHIPSIZE, KEY_XORIGIN, KEY_XSIZE, KEY_YBINNING, KEY_YCHIPSIZE, KEY_YORIGIN, KEY_YSIZE
 
Fields inherited from class io.AbstractDriver
KEY_DRIVERNAME
 
Fields inherited from class util.PropertyBundles
KEY_LOCALECOUNTRY, KEY_LOCALELANGUAGE, KEY_RESOURCEBUNDLES
 
Fields inherited from class util.PropertyResources
KEY_NOINITONCREATE, localurl, locate, POSTFIX_DIR, POSTFIX_EXT, POSTFIX_FILE, POSTFIX_LIST, POSTFIX_URL, urlset
 
Fields inherited from class util.PropertyContainer
KEY_LISTSEPARATOR, KEY_MAPKEYVALUECHAR, KEY_MAPSEPARATOR
 
Fields inherited from interface ccd.CcdDriver
FITSEXTENSION
 
Fields inherited from interface util.ResourceSupplying
KEY_URLRESOURCES, KEY_URLUSECONFIG, KEY_URLUSECURRENT, KEY_URLUSEHOME
 
Fields inherited from interface util.PropertySupplying
CONFIG, KEY_CLASS
 
Constructor Summary
MagellanDriver(Map<String,String> info)
          Constructor.
 
Method Summary
protected  void addPrimaryCards(List<nom.tam.fits.HeaderCard> pcard)
          Adds header cards for the primary HDU.
protected  void addSecondaryCards(List<nom.tam.fits.HeaderCard> pcard, nom.tam.fits.Header p, int arow, int acol)
          Adds header cards for the secondary HDU.
 boolean close()
          Close the RPC communication.
private  boolean doDark()
          Does a dark exposure.
private  boolean doExposure()
          Does an open-shutter exposure.
private  boolean download(ergf result)
          Takes the result of an exposure and makes a fits file out of it.
 int expose()
          Make an exposure.
 int exposeBias()
          Makes a bias exposure.
 int exposeDark()
          Makes a dark exposure.
 Dimension getBinning()
          Get the binning values in x (columns) and y (rows).
 Class<nom.tam.fits.Fits> getBufferType()
          We work directly on a fits object.
 Map getCcdInfo()
          This ccd does not provide any additional info.
 nom.tam.fits.Fits getDataBuffer()
          Returns the output buffer.
 long getExposureTime()
          Get the current exposure time in milliseconds.
protected  Dimension getMaxPixel()
          Get the max_pixel values for x (columns) and y (rows).
private  Point getPregap()
          Returns the pregap.
private  Dimension getReadoutArea()
          Returns read-ouyt area as a dimension.
protected  double getReadoutDirectionX(int x0, int y0, int n)
          Get the readout direction in x for the current amplifier position
protected  double getReadoutDirectionY(int x0, int y0, int n)
          Get the readout direction in y for the current amplifier position
private static String getSection(int xl, int yd, int xll, int ydd)
          Formats a window to a section string.
 Rectangle getWindow()
          Get the current image origin (pre-gap) in x (columns) and y (rows) and the size
 void init()
          Clear any leftovers.
 boolean isOpen()
          We consider the driver to be open if the ccdclient is initialized.
protected  boolean openController()
          Initializes the fechner driver.
 boolean setBinning(int xbin, int ybin)
          Set the binning values in x (columns) and y (rows).
 boolean setDataBuffer(nom.tam.fits.Fits file)
          Sets the output buffer.
 boolean setExposureTime(long exptime)
          Set the current exposure time in milliseconds.
protected  boolean setMaxPixel(Dimension max)
          Set the max_pixel values for x (columns) and y (rows).
private  boolean setShutter(boolean open)
          Sets the shutter position.
 boolean setWindow(Rectangle window)
          Set the current image window.
private static short[] swap(short[] little, int start, int len)
          Swaps wrong endian in a short array.
 
Methods inherited from class ccd.SynchronousCcdDriver
ensureReady, isExposing, threadedDarkExpose, threadedExpose
 
Methods inherited from class ccd.AbstractCcdDriver
getChipSize, getReadoutTime, open
 
Methods inherited from class io.AbstractDriver
createDriver, equals, getDriverName, hashCode
 
Methods inherited from class util.PropertyBundles
clone, getLocalized, getLocalized, getLocalizedString, getLocalizedString, loadResource
 
Methods inherited from class util.PropertyResources
createFrom, createFrom, createFrom, getApplet, getAsResources, getLocalClassLoader, getPropertiesToKey, getPropertiesToKey, getResource, getResourceAsStream, getResourceFromKey, getResources, keyCreate, keyCreate, reload, setApplet
 
Methods inherited from class util.PropertyContainer
augment, augment, augment, defaultBoolean, defaultChar, defaultDouble, defaultFloat, defaultInt, defaultLong, defaultObject, defaultObject, defaultProperties, defaultProperty, getAsBoolean, getAsChar, getAsDouble, getAsEnums, getAsFloat, getAsInt, getAsList, getAsLong, getAsMap, getAsMap, getAsObject, getAsObject, getProperties, getProperty, has, isNew, parseObject, reload, removeProperty, rescanned, setObject, setProperties, setProperty, stringProperties, toString
 
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface io.Driver
getDriverName
 
Methods inherited from interface util.ResourceSupplying
getResource, getResourceAsStream, getResources
 
Methods inherited from interface util.PropertySupplying
defaultBoolean, defaultChar, defaultDouble, defaultFloat, defaultInt, defaultLong, defaultObject, defaultObject, defaultProperties, defaultProperty, getAsBoolean, getAsChar, getAsDouble, getAsFloat, getAsInt, getAsList, getAsLong, getAsMap, getAsObject, getAsObject, getProperties, getProperty, has, parseObject, removeProperty, setObject, setProperty, stringProperties
 

Field Detail

OK

public static final int OK
General return code from rpc calls indicating okay.

See Also:
Constant Field Values

DETSIZE

public static final String DETSIZE
Fits key for entering x-pregap info to header.

See Also:
Constant Field Values

DETSIZEREM

public static final String DETSIZEREM
Comment for entering x-pregap info to header.

See Also:
Constant Field Values

CCDSEC

public static final String CCDSEC
Fits key for entering y-pregap info to header.

See Also:
Constant Field Values

CCDSECREM

public static final String CCDSECREM
Comment for entering y-pregap info to header.

See Also:
Constant Field Values

COPYREM

public static final String COPYREM
Comment for a key that was copied from the primary.

See Also:
Constant Field Values

KEY_SERVERNAME

public static final String KEY_SERVERNAME
FCDN of the host where the guider rpc server is running.

See Also:
Constant Field Values

KEY_EXPOSEMULTIPLY

public static final String KEY_EXPOSEMULTIPLY
The multiplier for exposure times returned to ms.

See Also:
Constant Field Values

KEY_SUPPORTSHUTTER

public static final String KEY_SUPPORTSHUTTER
If true, driver supports shutter operation.

See Also:
Constant Field Values

KEY_SHUTTEROPEN

public static final String KEY_SHUTTEROPEN
The short paramter for shutter-open.

See Also:
Constant Field Values

KEY_SHUTTERCLOSE

public static final String KEY_SHUTTERCLOSE
The short paramter for shutter-close.

See Also:
Constant Field Values

KEY_MINTIME

public static final String KEY_MINTIME
The minimum exposure time in milliseconds.

See Also:
Constant Field Values

KEY_RPCTIMEOUT

public static final String KEY_RPCTIMEOUT
The RPC time-out in millisecond.

See Also:
Constant Field Values

KEY_WRONGENDIAN

public static final String KEY_WRONGENDIAN
If true, endian of received short are little.

See Also:
Constant Field Values

KEY_COLAMPLIFIERS

public static final String KEY_COLAMPLIFIERS
Total number of amplifiers expected in row direction.

See Also:
Constant Field Values

DEFDRIVERNAME

public static final String DEFDRIVERNAME
The name of this ccd.

See Also:
Constant Field Values

DEFSERVERNAME

private static final String DEFSERVERNAME
Default property value.

See Also:
Constant Field Values

DEFSUPPORTSHUTTER

private static final boolean DEFSUPPORTSHUTTER
Default property value.

See Also:
Constant Field Values

DEFSHUTTEROPEN

private static final int DEFSHUTTEROPEN
Default property value.

See Also:
Constant Field Values

DEFSHUTTERCLOSE

private static final int DEFSHUTTERCLOSE
Default property value.

See Also:
Constant Field Values

DEFMINTIME

private static final long DEFMINTIME
Default property value.

See Also:
Constant Field Values

DEFEXPOSEMULTIPLY

private static final long DEFEXPOSEMULTIPLY
Default property value.

See Also:
Constant Field Values

DEFRPCTIMEOUT

private static final int DEFRPCTIMEOUT
Default property value.

See Also:
Constant Field Values

DEFWRONGENDIAN

private static final boolean DEFWRONGENDIAN
Default property value.

See Also:
Constant Field Values

DEFAMPLIFIERS

private static final int DEFAMPLIFIERS
Default property value.

See Also:
Constant Field Values

DEFCOLAMPLIFIERS

private static final int DEFCOLAMPLIFIERS
Default property value.

See Also:
Constant Field Values

ccdclient

private static WifsipMagellanClient ccdclient
RPC client instance.


async

private nom.tam.fits.Fits async
The data buffer for asynchroneous retrieval.

Constructor Detail

MagellanDriver

public MagellanDriver(Map<String,String> info)
Constructor. Does not open the connection, this is done in init().

Method Detail

init

public void init()
Clear any leftovers.

Specified by:
init in interface Initializable
Overrides:
init in class AbstractCcdDriver<nom.tam.fits.Fits>

openController

protected boolean openController()
                          throws IOException
Initializes the fechner driver. Tries to connect to the server and sets default values for binning, maximum size of the chip and read-out window. If a shutter is supported, it is closed. Returns true if initialization was successful.

Specified by:
openController in class AbstractCcdDriver<nom.tam.fits.Fits>
Throws:
IOException - If controller connection fails.

isOpen

public boolean isOpen()
We consider the driver to be open if the ccdclient is initialized.

Returns:
True, if a previous initialization was successful

close

public boolean close()
              throws IOException
Close the RPC communication.

Returns:
True if clean-up was successful.
Throws:
IOException

setMaxPixel

protected boolean setMaxPixel(Dimension max)
                       throws IOException
Set the max_pixel values for x (columns) and y (rows).

Parameters:
xmax - maximum CCD size in x-direction (1 <= value < 65536)
ymax - maximum CCD size in y-direction (1 <= value < 65536)
Throws:
IOException

getMaxPixel

protected Dimension getMaxPixel()
                         throws IOException
Get the max_pixel values for x (columns) and y (rows).

Returns:
A dimension object, where the size in x is the width.
Throws:
IOException

setBinning

public boolean setBinning(int xbin,
                          int ybin)
                   throws IOException
Set the binning values in x (columns) and y (rows).

Parameters:
xbin - binning factor in x-direction (1 <= binning factor <= 255)
ybin - binning factor in y-direction (1 <= binning factor <= 255)
Returns:
True if successful.
Throws:
IOException - Any subclass of IOException

getBinning

public Dimension getBinning()
                     throws IOException
Get the binning values in x (columns) and y (rows).

Returns:
Dimension object, columns in width.
Throws:
IOException - Any subclass of IOException.

setWindow

public boolean setWindow(Rectangle window)
                  throws IOException
Set the current image window.

Parameters:
window - The origin being the upper left corner of the rectangle.
Returns:
True if successful.
Throws:
IOException - Any subclass of IOException.

getWindow

public Rectangle getWindow()
                    throws IOException
Get the current image origin (pre-gap) in x (columns) and y (rows) and the size

Returns:
A rectangle with pre-gap upper left corner.
Throws:
IOException - Any subclass of IOException.

setExposureTime

public boolean setExposureTime(long exptime)
                        throws IOException
Set the current exposure time in milliseconds.

Parameters:
expTime - exposure time in milliseconds. (0 <= expTime < 65536 ms)
Returns:
True if successful.
Throws:
IOException - Any subclass of IOException.

getExposureTime

public long getExposureTime()
                     throws IOException
Get the current exposure time in milliseconds.

Returns:
current exposure time (in milliseconds).
Throws:
IOException - Any subclass of IOException.

getBufferType

public Class<nom.tam.fits.Fits> getBufferType()
We work directly on a fits object.


setDataBuffer

public boolean setDataBuffer(nom.tam.fits.Fits file)
                      throws IOException
Sets the output buffer. The buffer must be a fits object.

Parameters:
file - Any sort of buffer the driver knows to store CCD-data in.
Returns:
True if successful.
Throws:
IOException - Any subclass of IOException.

getDataBuffer

public nom.tam.fits.Fits getDataBuffer()
                                throws IOException
Returns the output buffer. This is either the fits buffer set via a call to setDataBuffer(nom.tam.fits.Fits), or null if not set and no exposure has been taken. If an exposure has finished and the buffer has not been explicedly set, a new fits object has been allocated, which will be returned here.

Throws:
IOException - Any subclass of IOException.

getCcdInfo

public Map getCcdInfo()
This ccd does not provide any additional info.


expose

public int expose()
           throws IOException
Make an exposure. The exposure time and the data buffer must be set prior to a call to this function. If the driver supports a shutter, the shutter is opened before the exposure starts and closed after. Note that this method does not check for proper settings. In TF's driver this method blocks.

Returns:
Number of pixel writtn.
Throws:
IOException - Any subclass of IOException.
See Also:
startExpose

exposeBias

public int exposeBias()
               throws IOException
Makes a bias exposure. Does an dark exposure with minimum time. The data buffer has to be set prior to a call to this method.

Returns:
Number of pixel writtn.
Throws:
IOException - Any subclass of IOException.

exposeDark

public int exposeDark()
               throws IOException
Makes a dark exposure. The shutter is not moved, even if present. The data buffer has to be set prior to a call to this method.

Returns:
Number of pixel writtn..
Throws:
IOException - Any subclass of IOException.

getPregap

private Point getPregap()
                 throws IOException
Returns the pregap. Returns property setting if not open.

Throws:
IOException

swap

private static short[] swap(short[] little,
                            int start,
                            int len)
Swaps wrong endian in a short array.


getReadoutArea

private Dimension getReadoutArea()
                          throws IOException
Returns read-ouyt area as a dimension. Returns property setting if not open.

Throws:
IOException

setShutter

private boolean setShutter(boolean open)
                    throws IOException
Sets the shutter position. If called with true, shutter is opened. Driver must be opened, this is unchecked.

Throws:
IOException

addPrimaryCards

protected void addPrimaryCards(List<nom.tam.fits.HeaderCard> pcard)
Adds header cards for the primary HDU. Default implementation does nothing.


addSecondaryCards

protected void addSecondaryCards(List<nom.tam.fits.HeaderCard> pcard,
                                 nom.tam.fits.Header p,
                                 int arow,
                                 int acol)
Adds header cards for the secondary HDU. Default implementation copies the BSCALE and BZERO setting from the primary header. The CCD-section is entered in the main method, but possible extension could involve: Point x0y0 = getPregap(); // add as origin if known HeaderCard org; if (x0y0 != null) { org = new HeaderCard(XORIGIN, x0y0.x, XORGREM); cards.add(org.toString()); org = new HeaderCard(YORIGIN, x0y0.y, YORGREM); cards.add(org.toString()); }


getReadoutDirectionX

protected double getReadoutDirectionX(int x0,
                                      int y0,
                                      int n)
Get the readout direction in x for the current amplifier position


getReadoutDirectionY

protected double getReadoutDirectionY(int x0,
                                      int y0,
                                      int n)
Get the readout direction in y for the current amplifier position


getSection

private static String getSection(int xl,
                                 int yd,
                                 int xll,
                                 int ydd)
Formats a window to a section string. The counting starts at zero, but the correct value is added.


doExposure

private boolean doExposure()
                    throws IOException
Does an open-shutter exposure. This method calls the RPC-method StreamClient#DO_EXPOSURE_2, grabs the returned fits object and transforms it to the more general ImageHDU java object. If a data buffer-fits is set, all of its HDU's are deleted and the new Image is added to the fits file. If no async buffer was set, a new fits file is generated with the current data. // the END card is always missing, but we want to add origin

Throws:
IOException

doDark

private boolean doDark()
                throws IOException
Does a dark exposure. This method calls the RPC-method StreamClient#DO_DARK_2, grabs the returned fits object and transforms it to the more general ImageHDU java object. If a data buffer-fits is set, all of its HDU's are deleted and the new Image is added to the fits file. If no async buffer was set, a new fits file is generated with the current data. // the END card is always missing, but we want to add origin

Throws:
IOException

download

private boolean download(ergf result)
                  throws nom.tam.fits.FitsException
Takes the result of an exposure and makes a fits file out of it.

Throws:
nom.tam.fits.FitsException