This page was created by the IDL library routine
mk_html_help. For more information on
this routine, refer to the IDL Online Help Navigator
or type:
? mk_html_help
at the IDL command line prompt.
Last modified: Sun Aug 2 11:27:01 2009.
NAME:
BAS2000_RESPONSE
PURPOSE:
This function converts values measured by the BAS2000 scanner into
actual x-ray intensities.
CATEGORY:
Detectors.
CALLING SEQUENCE:
Results = BAS2000_RESPONSE(Settings, Data)
INPUTS:
Settings:
A structure of BAS2000 instrument settings of the type created by
READ_BAS2000.
Data:
Raw data values such as those read by READ_BAS2000. This can be either
a single value or an array of values.
OUTPUTS:
This function returns the actual x-ray intensities corresponding to the
raw input values.
PROCEDURE:
This function converts values measured by the BAS2000 scanner into
actual x-ray intensities according to the equation:
PSL = (4000/S)*10^(L*QSL)/1023 - 0.5)
where
PSL = x-ray intensity
S = sensitivity setting
L = latitude setting
QSL = measured value from BAS2000
This equation appears somewhere in the BAS2000 documentation?
EXAMPLE:
READ_BAS2000, 'Myfile', settings, data
Actual = BAS2000_RESPONSE(settings, data)
MODIFICATION HISTORY:
Written by: Mark Rivers, 1997?
Modifications:
MLR 26-APR-1999 Added documentation header
(See bas2000_response.pro)
NAME:
READ_BAS2000
PURPOSE:
This procedure reads data files from the Fuji BAS2000 image plate scanner.
CATEGORY:
Detectors.
CALLING SEQUENCE:
READ_BAS2000, File, Settings, Data
INPUTS:
File:
The name of the input file without the '.inf' or '.img' extensions.
OUTPUTS:
Settings:
A structure which contains the instrument settings for the scanner.
The names of the fields in this structure are meant to be
self-explanatory.
Data:
The 2-D array of intensities. This is either an 8-bit BYTE array or
a 16-bit INT array depending upon the setting of the scanner when
the file was written.
RESTRICTIONS:
This procedure requires at least IDL 5.1 because it uses the
SWAP_IF_LITTLE_ENDIAN keyword to BYTEORDER.
EXAMPLE:
READ_BAS2000, 'Myfile', settings, data
MODIFICATION HISTORY:
Written by: Mark Rivers, 1993?
Modifications:
MLR 20-AUG-1998 Changed to use SWAP_IF_LITTLE_ENDIAN on BYTEORDER.
MLR 26-APR-1999 Added documentation header
MLR 21-JUL-1999 Fixed bug, replace CLOSE, lun with FREE_LUN, lun
MLR 08-NOV-2001 Changes to allow reading BAS2500. Used unsigned int
for 16 bit data, BAS2500 does not have #saturated pixels
in .inf file.
(See read_bas2000.pro)
NAME:
READ_MAR345
PURPOSE:
This procedures reads a MAR 345 image plate file.
CATEGORY:
Detectors.
CALLING SEQUENCE:
READ_MAR345, File, Data, Header
INPUTS:
File:
The name of the MAR345 input file.
OUTPUTS:
Data:
The 2-D array of intensities. This is a 16-bit UINT array if the data
does not contain any high pixels (>65535) , and LONG if the data does contain
any high pixels.
Header:
A structure which contains the header information.
The names of the fields in this structure are meant to be
self-explanatory.
OPERATION:
This routine uses IDL to read the header information and the table
of high pixel values (if present).
It can also use IDL to read and decompress the data, but this is quite slow,
about 90 seconds for a 3450x3450 image.
To improve performance there is a C code function provided that can read the files
and decompress them much faster, about 2 seconds for a 3450x3450 image.
This C code is built into a shareable object or DLL which is called from IDL.
Prebuilt shareable libraries are provided for Linux (mar345_IDL.so) and
Windows (mar345_IDL.dll). The source code (mar345_IDL.c) and Makefile for Linux and Unix,
and a .bat file to build on Windows are also provided in this directory.
The required support files, mar3xx_pck.c and mar3xx_pck.h are also provided.
At run time this IDL routine will see if there is an environment variable
called MAR345_IDL. If it exists, it is assumed to be the complete path specification
to a shareable library. If the environment variable does not exist or does not
point to a valid file, then the routine will search the IDL_PATH for mar345_IDL.dll
(on Windows) or mar345_IDL.so (all other operating systems). If the shareable
object is found then read_mar345.pro will call that shareable library to read and
decompress the file. If the shareable object is not found then the built-in IDL
code will be used instead, which is quite slow.
EXAMPLE:
READ_MAR345, 'Myfile.mar345', data, header
MODIFICATION HISTORY:
Written by: Mark Rivers, 2006
Modifications:
(See read_mar345.pro)
NAME:
READ_MARCCD
PURPOSE:
This procedures reads a MAR-CCD format file
CATEGORY:
Detectors.
CALLING SEQUENCE:
READ_MARCCD, File, Data, Header
INPUTS:
File:
The name of the MAR-CCD input file.
OUTPUTS:
Data:
The 2-D array of intensities. This is a 16-bit UINT array
Header:
A structure which contains the header information.
The names of the fields in this structure are meant to be
self-explanatory.
EXAMPLE:
IDL> READ_MARCCD, 'MgO_090.tif', data, header
IDL> print, header.exposure_time
60178
MODIFICATION HISTORY:
Written by: Mark Rivers, March 21, 2006
(See read_marccd.pro)
NAME:
READ_ND_NETCDF
PURPOSE:
This function reads a netCDF file written by the NDPluginFile plugin in the areaDetector module.
CATEGORY:
Detectors.
CALLING SEQUENCE:
Data = READ_ND_NETCDF(File, Range=Range, Attributes=Attributes, DimInfo=DimInfo)
INPUTS:
File:
The name of the input file. If this argument is missing then the dialog_pickfile() function
will be called to produce a file browser to select a file interactively.
KEYWORD INPUTS:
Range:
The range to read for each dimension. If this keyword is missing then the entire file is read.
Specify as a 2D array. [-1,-1] for any dimension means the
full value in the file. Only dimensions up to the last one to be limited need to be included
in the array, i.e. for a 2-D array range=[[0,10]] is equivalent to range=[[0,10],[-1,-1]]
Examples:
range=[[-1,-1], [0,100], [2,5]]
means read the full range of the data in the first (fastest) dimension, elements 0 to 100 for
the second dimension and elements 2 to 5 for the last (slowest) dimension.
OUTPUTS:
This function returns the N-Dimensional array of data.
The dimensions are [dim0, dim1, ..., NumArrays]
KEYWORD OUTPUTS:
Attributes: An array of structures of the following type containing the name, description and pointer to value
for each additional variable (NDArray attribute) in the file:
attrInfo = {netCDFAttrInfo, $
name: "", $
description: "", $
pValue: ptr_new()}
DimInfo: An array of structures of the following type containing the size, offset, binning and reverse fields
for each dimension:
dimInfo = {netCDFDimInfo, $
size: 0L, $
offset: 0L, $
binning: 0L, $
reverse: 0L}
EXAMPLE:
IDL> data = read_nd_netcdf('/home/epics/scratch/test_color_70.nc', attributes=attributes, dimInfo=dimInfo)
IDL> help, data
DATA BYTE = Array[3, 640, 480, 50]
IDL> help, /structure, dimInfo
** Structure NETCDFDIMINFO, 4 tags, length=16, data length=16:
SIZE LONG 3
OFFSET LONG 0
BINNING LONG 1
REVERSE LONG 0
IDL> help, /structure, attributes[3]
** Structure NETCDFATTRINFO, 3 tags, length=28, data length=28:
NAME STRING 'I8Value'
DESCRIPTION STRING 'Signed 8-bit time'
PVALUE POINTER
IDL> print, attributes[10].name
F64Value
IDL> help, *attributes[10].pValue
DOUBLE = Array[50]
IDL> print, (*attributes[10].pValue)[0:9], format='(f20.10)'
609361297.6659992933
609361297.6907505989
609361297.7110251188
609361297.7338150740
609361297.7543159723
609361297.7819019556
609361297.8048160076
609361297.8250850439
609361297.8466095924
609361297.8699282408
Read just a subset of the array data. Arrays 30-39, complete data in the other dimensions
IDL> data = read_nd_netcdf('/home/epics/scratch/test_color_70.nc', attributes=attributes, dimInfo=dimInfo, $
range=[[-1,-1],[-1,-1],[-1,-1],[30,39]])
IDL> help, data
DATA BYTE = Array[3, 640, 480, 10]
MODIFICATION HISTORY:
Written by: Mark Rivers, April 17, 2008
January 25, 2009 Mark Rivers Added arrayInfo support and RANGE keyword to read only a subset of the data
Changed uniqueId, timeStamp and dimInfo to be keyword rather than positional
April 23, 2009 Mark Rivers. Added support for new file format with NDArray attributes. Removed uniqueId and timeStamp
keywords, these are now handled under general attributes. colorMode and bayerPattern no longer
returned in arrayInfo structure, they are also general attributes of each array.
(See read_nd_netcdf.pro)
NAME:
READ_PHANTOM
PURPOSE:
Reads in data files written by the Vision Research Phantom high-speed cameras.
CATEGORY:
Detectors
CALLING SEQUENCE:
Result = READ_PHANTOM(File)
INPUTS:
File:
The name of the volume file to be read. If this is not specified then
the function will use DIALOG_PICKFILE to allow the user to select a
file.
KEYWORD PARAMETERS:
XRANGE=[xstart, xstop]
The range of X values to read in. The default is to read the entire
X range of the data
YRANGE=[ystart, ystop]
The range of Y values to read in. The default is to read the entire
Y range of the data
ZRANGE=[zstart, zstop]
The range of Z values to read in. The default is to read the entire
Z range of the data
OUTPUTS:
This function returns a 3-D 8-bit unsigned array. The dimensions are
NX, NY, NZ
KEYWORD OUTPUTS:
HEADER=header
A structure of type {phantom_header} containing the file header. This structure
is defined as:
{phantom_header, $
cineHeader: {phantom_cine_header}, $
bitmapInfo: {phantom_bitmap_info}, $
cameraSetup: {phantom_camera_setup} $
}
These structures are all defined in the file phantom_header__define.pro
RESTRICTIONS:
There are some fields in the phantom_camera_setup structure that are not described in the
documentation we have, and so are not being read correctly.
This routine will currently only work on little-endian machines like Intel, since I have
not added byte-swapping yet.
EXAMPLE:
IDL> data = read_phantom('BMD_30mm_60mmh_1.cin', header=header)
IDL> help, data
DATA BYTE = Array[800, 600, 831]
IDL> help, /structure, header
** Structure PHANTOM_HEADER, 3 tags, length=1048, data length=1040:
CINEHEADER STRUCT -> PHANTOM_CINE_HEADER Array[1]
BITMAPINFO STRUCT -> PHANTOM_BITMAP_INFO Array[1]
CAMERASETUP STRUCT -> PHANTOM_CAMERA_SETUP Array[1]
IDL> help, /structure, header.cineheader
** Structure PHANTOM_CINE_HEADER, 12 tags, length=44, data length=44:
TYPE UINT 18755
HEADERSIZE UINT 44
COMPRESSION UINT 0
VERSION UINT 1
FIRSTMOVIEIMAGE LONG -2939
TOTALIMAGECOUNT ULONG 2940
FIRSTIMAGENO LONG -2286
IMAGECOUNT ULONG 831
OFFIMAGEHEADER ULONG 44
OFFSETUP ULONG 84
OFFIMAGEOFFSETS ULONG 11576
TRIGGERTIME STRUCT -> PHANTOMTIME64 Array[1]
The cineHeader tells how many frames were captured (2940), the total number that were saved
to disk (831), the index of the first captured frame relative to the trigger (-2939),
and the index of the first saved frame relative to the trigger (-2286). It also contains
information on where the data are located in the file.
IDL> help, /structure, header.bitmapinfo
** Structure PHANTOM_BITMAP_INFO, 11 tags, length=40, data length=40:
BISIZE ULONG 40
BIWIDTH LONG 800
BIHEIGHT LONG 600
BIPLANES UINT 1
BIBITCOUNT UINT 8
BICOMPRESSION ULONG 0
BISIZEIMAGE ULONG 480000
BIXPELSPERMETER LONG 45454
BIYPELSPERMETER LONG 45454
BICLRUSED ULONG 0
BICLRIMPORTANT ULONG 0
The bitmapHeader give the dimension of each frame, the how many bits, etc.
IDL> help, /structure, header.camerasetup
** Structure PHANTOM_CAMERA_SETUP, 87 tags, length=964, data length=956:
FRAMERATE16 UINT 4800
SHUTTER16 UINT 125
POSTTRIGGER16 UINT 1
FRAMEDELAY16 UINT 0
ASPECTRATIO UINT 1
CONTRASTP UINT 0
BRIGHTP UINT 0
ROTATEP BYTE 0
TIMEANNOTATION BYTE 1
TRIGCINE BYTE 1
TRIGFRAME BYTE 0
SHUTTERON BYTE 1
DESCRIPTION BYTE Array[121]
MARK UINT 21587
LENGTH UINT 1504
BINNING UINT 1
BINENABLE UINT 0
BINCHANNELS INT 0
BINSAMPLES BYTE 1
BINNAME BYTE Array[11, 8]
...
MODIFICATION HISTORY:
Written by: Mark Rivers, March 5, 2005
(See read_phantom.pro)
NAME:
READ_PHOTOMETRICS
PURPOSE:
This procedures reads a Photometrics image proicessing format file (PMIS).
CATEGORY:
Detectors.
CALLING SEQUENCE:
READ_PHOTOMETRICS, File, Header, Data
INPUTS:
File:
The name of the Photometrics PMIS input file.
OUTPUTS:
Header:
A structure which contains the header information.
The names of the fields in this structure are meant to be
self-explanatory.
Data:
The 2-D array of intensities. This is a 16-bit INT array
EXAMPLE:
READ_PHOTOMETRICS, 'Myfile.pmis', header, data
MODIFICATION HISTORY:
Written by: Mark Rivers, 1993?
Modifications:
MLR 26-APR-1999 Added documentation header
(See read_photometrics.pro)
NAME:
READ_PRINCETON
PURPOSE:
This procedure reads data files written by Princeton Instruments'
WinSPEC and WinVIEW software.
CATEGORY:
File input.
CALLING SEQUENCE:
READ_PRINCETON, File, Data
INPUTS:
File:
The name of the data file to read.
OUTPUTS:
Data[nx, ny, nframes]:
The output data array. The array will be 1, 2 or 3 dimensions
(depending upon whether ny and nframes are 1) and can be integer,
long or float data type.
KEYWORD OUTPUTS:
HEADER:
The 4100 byte header from the file. This header can be used to
extract additional information about the file. See the Princteon
Instruments "PC Interface Library Programming Manual" for the
description of the header structure, and this procedure for
examples of how to extract information from the header.
X_CALIBRATION:
An nx array of calibrated values for each pixel in the X direction.
Y_CALIBRATION:
An ny array of calibrated values for each pixel in the Y direction.
COMMENTS:
A 5-element string array containing the "experiment comments"
fields, which is a 5x80 byte array starting at location 200 in
the PI header. These fields are typically used to store
experiment-specific information. For example, in the tomography
experiments we use the first two strings to store the frame type
and rotation angle.
DATE:
A date string of the form DDMMMYYYY:HH:MM:SS
EXPOSURE:
The exposure time in seconds.
BACKGROUND_FILE:
The name of the background file that was subtracted from the data
RESTRICTIONS:
This procedure currently only extracts limited information from the
header. It should be exhanced to extract more fields, probably into a
structure.
The data and calibration are corrected for byte order when reading on
a big-endian host, but other elements of the header are not converted.
EXAMPLE:
Read a data file:
IDL> READ_PRINCETON, 'test.spe', data, header=header, x_cal=x_cal
IDL> plot, x_cal, data
IDL> clock_speed = float(header, 1428)
IDL> print, 'Vertical clock speed (microseconds) = ', clock_speed
MODIFICATION HISTORY:
Written by: Mark Rivers, 11/4/97
Mark Rivers 10/27/98 Convert data to long if any pixels are > 32K
Mark Rivers 11/12/98 Fix to not convert data if already long
Mark Rivers 3/16/99 Added /BLOCK keyword to openr to work with VMS
Mark Rivers 3/27/99 Added "Comments" keyword
Mark Rivers 3/29/99 Added "Date" keyword
Mark Rivers 2/22/00 Corrected byte order for data and calibration.
Mark Rivers 9/11/01 Added "exposure" keyword
Mark Rivers 9/12/01 Added "background_file" keyword
(See read_princeton.pro)
NAME:
READ_PXL
PURPOSE:
This procedures reads a Photometrics PXL image processing format file
CATEGORY:
Detectors.
CALLING SEQUENCE:
READ_PXL, File, Header, Data
INPUTS:
File:
The name of the Photometrics PXL input file.
OUTPUTS:
Header:
A structure which contains the header information.
The names of the fields in this structure are meant to be
self-explanatory.
Data:
The 2-D array of intensities. This is a 16-bit INT array
EXAMPLE:
READ_PXL, 'Myfile.pxl', header, data
MODIFICATION HISTORY:
Written by: Mark Rivers, Feb. 20, 2000
(See read_pxl.pro)
NAME:
READ_SIEMENS
PURPOSE:
This procedure reads Siemens (now Bruker) CCD data files written by
their SMART software.
CATEGORY:
Detectors
CALLING SEQUENCE:
READ_SIEMENS, File, Header, Data
INPUTS:
File:
The name of the input file to be read.
OUTPUTS:
Header:
A string array [2, 96]. Header[0,i] is a keyword, such as "NROWS"
or "ANGLES". Header[1,i] is the value of that keyword parameter,
such as "512" or "29.9989000 90.0001000 2.2500000 .0000000"
Data:
A 2-D LONG array containing the CCD data.
RESTRICTIONS:
This procedure requires at least IDL 5.1 because it uses the
SWAP_IF_LITTLE_ENDIAN keyword to BYTEORDER.
EXAMPLE:
READ_SIEMENS, 'Corund13.178', Header, Data
MODIFICATION HISTORY:
Written by: Mark Rivers, 1995?
MLR 4-FEB-1999 Modified procedure to work with 8-bit data files
MLR 26-APR-1999 Added documentation header
(See read_siemens.pro)
NAME:
READ_WDX
PURPOSE:
This procedure reads scan data files written by the "Qualitative Analysis"
program in the Windows version of Oxford Instruments/Microspec WinSpec
software for driving the WDX wavelength spectrometer.
CATEGORY:
Detectors.
CALLING SEQUENCE:
READ_WDX, File, Energy, Counts, Header
INPUTS:
File:
The name of the WDX input file.
OUTPUTS:
Energy:
A 1-D array containing the energy values for each point in the scan.
Counts:
A 1-D array containing the counts for each point in the scan.
Header:
A structure containing the instrument settings under which the scan
was collected. The fields in this structure are meant to be
self-explanatory.
RESTRICTIONS:
This procedure requires at least IDL 5.1 because it uses the
SWAP_IF_LITTLE_ENDIAN keyword to BYTEORDER.
PROCEDURE:
This code is a bit complex because of a deficiency in the point_lun
function under Windows. Under Unix and VMS this procedure could be
simpler, because point_lun work correctly, but under Windows it does not.
The files have an ASCII header, followed by a control-Z, CR, LF, then
binary 32-bit integer pairs of (wavelength*10000, counts).
EXAMPLE:
READ_WDX, 'Myfile.001', Energy, Counts, Header
MODIFICATION HISTORY:
Written by: Mark Rivers, 1996?
Modifications:
MLR 26-APR-1999 Added documentation header
(See read_wdx.pro)
NAME:
WINX32_CCD::busy
PURPOSE:
This function returns the busy status of the WINX32_CCD object. 1 means the controller
is busy exposing or reading out, 0 means the controller is idle.
CATEGORY:
IDL device class library.
CALLING SEQUENCE:
busy = ccd->busy()
INPUTS:
None:
OUTPUTS:
This function returns the busy status of the controller, 1 means the controller
is busy exposing or reading out, 0 means the controller is idle.
;
EXAMPLE:
ccd = obj_new('WINX32_CCD')
busy = ccd->busy()
MODIFICATION HISTORY:
Written by: Mark Rivers, November 1, 2006.
(See winx32_ccd__define.pro)
NAME:
WINX32_CCD::closeDocFile
PURPOSE:
This function closes the current DocFile for the WINX32_CCD object. This has the effect of
closing the image window in WinView/WinSpec and freeing the DocFile resources.
CATEGORY:
IDL device class library.
CALLING SEQUENCE:
status = ccd->closeDocFile()
INPUTS:
None
OUTPUTS:
This function returns the status of the command, typically 0 for success, -1 for failure.
EXAMPLE:
ccd = obj_new('WINX32_CCD')
status = ccd->closeDocFile()
MODIFICATION HISTORY:
Written by: Mark Rivers, November 1, 2006.
(See winx32_ccd__define.pro)
NAME:
WINX32_CCD::docfileValid
PURPOSE:
This function returns 1 if there is a valid docFile open with the current
WINX32_CCD object, and 0 if there is no valid docFile.
CATEGORY:
IDL device class library.
CALLING SEQUENCE:
valid = ccd->docfileValid()
INPUTS:
None
OUTPUTS:
This function returns 1 if there is a valid docFile open with the current
WINX32_CCD object, and 0 if there is no valid docFile.
EXAMPLE:
ccd = obj_new('WINX32_CCD')
valid = ccd->docfileValid()
MODIFICATION HISTORY:
Written by: Mark Rivers, November 1, 2006.
(See winx32_ccd__define.pro)
NAME:
WINX32_CCD::getData
PURPOSE:
This function returns the data for a single frame from the WINX32_CCD object.
CATEGORY:
IDL device class library.
CALLING SEQUENCE:
status = ccd->getData(Data)
INPUTS:
None:
OUTPUTS:
Data:
The data for the frame.
This function returns the status of the command, typically 0 for success and -1 for
for failure.
KEYWORD PARAMETERS:
FRAME: The frame number to return. Default=1.
EXAMPLE:
ccd = obj_new('WINX32_CCD')
status = ccd->getData(data, frame=100)
MODIFICATION HISTORY:
Written by: Mark Rivers, November 1, 2006.
(See winx32_ccd__define.pro)
NAME:
WINX32_CCD::getDocFileProperty
PURPOSE:
This function gets a single DocFile property of the WINX32_CCD object. Note that for
the most commonly read properties the function WINX32_CCD::getProperty can be used
instead of this function.
CATEGORY:
IDL device class library.
CALLING SEQUENCE:
status = ccd->getDocFileProperty(Property, Value)
INPUTS:
Property:
The property to return. This is an integer value, which is typically obtained
as a member of the structure type {WINX32_DM_CMD}.
OUTPUTS:
Value:
The value of the property. The data type of the value will depend on the property
being read.
This function returns the status of the command, typically 0 for success and -1 for
for failure.
;
EXAMPLE:
ccd = obj_new('WINX32_CCD')
dm_cmd = WINX32_DM_CMD_INIT()
status = ccd->getDocFileProperty(dm_cmd.DM_USERCOMMENT1, comment1)
MODIFICATION HISTORY:
Written by: Mark Rivers, November 1, 2006.
(See winx32_ccd__define.pro)
NAME:
WINX32_CCD::getExpCmdProperty
PURPOSE:
This function gets a single ExpCmd property of the WINX32_CCD object. Note that for
the most commonly read properties the function WINX32_CCD::getProperty can be used
instead of this function.
CATEGORY:
IDL device class library.
CALLING SEQUENCE:
status = ccd->getExpCmdProperty(Property, Value)
INPUTS:
Property:
The property to returned. This is an integer value, which is typically obtained
as a member of the structure type {WINX32_EXP_CMD}.
OUTPUTS:
Value:
The current value of the property. The data type of the value will depend on the property
being read.
This function returns the status of the command, typically 0 for success and -1 for
for failure.
;
EXAMPLE:
ccd = obj_new('WINX32_CCD')
exp_cmd = WINX32_EXP_CMD_INIT()
status = ccd->getExpCmdProperty(exp_cmd.EXP_EXPOSURE, exposure_time)
MODIFICATION HISTORY:
Written by: Mark Rivers, November 1, 2006.
(See winx32_ccd__define.pro)
NAME:
WINX32_CCD::getProperty
PURPOSE:
This function gets one or more properties of the WINX32_CCD object. Note that this
keyword driven function only allows reading the most commonly used properties.
The functions WINX32_CCD::getExpCmdProperty and WINX32_CCD:getDocFileProperty can be used
to get any property.
CATEGORY:
IDL device class library.
CALLING SEQUENCE:
status = ccd->getProperty()
INPUTS:
None
OUTPUTS:
This function returns the status of the command, typically 0 for success and -1 for
for failure.
KEYWORD PARAMETERS:
EXPOSURE_TIME: The exposure time in seconds.
NFRAMES: The number of frames to be collected with a single call to WINX32_CCD::Start
TIMING_MODE: The timing mode. 1=Free run, 3=External trigger.
FILE_NAME: The name of the data file for this image.
FILE_INCREMENT_COUNT: The next file number if file increment is enabled.
FILE_INCREMENT_ENABLE: Set to 1 to enable automatic file incrementing, 0 to disable.
CONTROLLER_NAME: The type of controller. Note that this is actually a number, not a string.
0 = "No Controller"
1 = "ST143"
2 = "ST130"
3 = "ST138"
4 = "VICCD BOX"
5 = "PentaMax"
6 = "ST120_T1"
7 = "ST120_T2"
8 = "ST121"
9 = "ST135"
10 = "ST133"
11 = "VICCD"
12 = "ST116"
13 = "OMA3"
14 = "LOW_COST_SPEC"
15 = "MICROMAX"
16 = "SPECTROMAX"
17 = "MICROVIEW"
18 = "ST133_5MHZ"
19 = "EMPTY_5MHZ"
20 = "EPIX_CONTROLLER"
21 = "PVCAM"
22 = "GENERIC"
23 = "ARC_CCD_100"
24 = "ST133_2MHZ"
COMMENTS: An string array of 5 elements containing comments for the data file header. data file.
EXAMPLE:
ccd = obj_new('WINX32_CCD')
status = ccd->getProperty(exposure_time=exposure_time, timing_mode=timing_mode,$
file_name=file_name, controller_name=controller_name)
MODIFICATION HISTORY:
Written by: Mark Rivers, November 1, 2006.
(See winx32_ccd__define.pro)
NAME:
WINX32_CCD::INIT
PURPOSE:
This is the initialization code which is invoked when a new object of
type WINX32_CCD is created. It cannot be called directly, but only
indirectly by the IDL OBJ_NEW() function. It initializes the COM interface
so that IDL can call the Princeton WINX32 class library under Windows.
CATEGORY:
IDL device class library.
CALLING SEQUENCE:
Result = OBJ_NEW('WINX32_CCD')
INPUTS:
None
OUTPUTS:
This function returns success (1) if it was able to create the EXP_SETUP object in
the Princeton WINX32 COM interface. It returns failure (0) if is was unable to create
this object.
Typically failure means that the Princeton Instruments WinView or WinSpec software is not
installed on the machine running IDL.
RESTRICTIONS:
This routine cannot be called directly. It is called indirectly when
creating a new object of class MCA by the IDL OBJ_NEW() function.
This function only works on Windows systems that have the Princeton Instruments
WinView or WinSpec software installed.
EXAMPLE:
ccd = obj_new('WINX32_CCD')
status = ccd->start()
MODIFICATION HISTORY:
Written by: Mark Rivers, November 1, 2006
(See winx32_ccd__define.pro)
NAME:
WINX32_CCD::save
PURPOSE:
This function saves the data for the WINX32_CCD object.
CATEGORY:
IDL device class library.
CALLING SEQUENCE:
status = ccd->save, Filename
OPTIONAL INPUTS:
Filename:
The name of the file to save the data to. If this input is present then the file
name is used to set the DM_FILENAME parameter of the current DocFile object before
saving the file.
OUTPUTS:
This function returns the status of the command, typically 0 for success, -1 for failure.
EXAMPLE:
ccd = obj_new('WINX32_CCD')
status = ccd->save('Test1.SPE')
MODIFICATION HISTORY:
Written by: Mark Rivers, November 1, 2006.
(See winx32_ccd__define.pro)
NAME:
WINX32_CCD::setDocFileProperty
PURPOSE:
This function sets a single DocFile property of the WINX32_CCD object. Note that for
the most commonly set properties the function WINX32_CCD::setProperty can be used
instead of this function.
CATEGORY:
IDL device class library.
CALLING SEQUENCE:
status = ccd->setDocFileProperty(Property, Value)
INPUTS:
Property:
The property to set. This is an integer value, which is typically obtained
as a member of the structure type {WINX32_DM_CMD}.
Value:
The value of the property. The data type of the value will depend on the property
being set.
OUTPUTS:
This function returns the status of the command, typically 0 for success and -1 for
for failure.
;
EXAMPLE:
ccd = obj_new('WINX32_CCD')
dm_cmd = WINX32_DM_CMD_INIT()
status = ccd->setDocFileProperty(dm_cmd.DM_USERCOMMENT1, "This is comment 1")
MODIFICATION HISTORY:
Written by: Mark Rivers, November 1, 2006.
(See winx32_ccd__define.pro)
NAME:
WINX32_CCD::setExpCmdProperty
PURPOSE:
This function sets a single ExpCmd property of the WINX32_CCD object. Note that for
the most commonly set properties the function WINX32_CCD::setProperty can be used
instead of this function.
CATEGORY:
IDL device class library.
CALLING SEQUENCE:
status = ccd->setExpCmdProperty(Property, Value)
INPUTS:
Property:
The property to set. This is an integer value, which is typically obtained
as a member of the structure type {WINX32_EXP_CMD}.
Value:
The value of the property. The data type of the value will depend on the property
being set.
OUTPUTS:
This function returns the status of the command, typically 0 for success and -1 for
for failure.
;
EXAMPLE:
ccd = obj_new('WINX32_CCD')
exp_cmd = WINX32_EXP_CMD_INIT()
status = ccd->setExpCmdProperty(exp_cmd.EXP_EXPOSURE, 0.1)
MODIFICATION HISTORY:
Written by: Mark Rivers, November 1, 2006.
(See winx32_ccd__define.pro)
NAME:
WINX32_CCD::setProperty
PURPOSE:
This function sets one or more properties of the WINX32_CCD object. Note that this
keyword driven function only allows setting the most commonly used properties.
The functions WINX32_CCD::setExpCmdProperty and WINX32_CCD:setDocFileProperty can be used
to set any property.
CATEGORY:
IDL device class library.
CALLING SEQUENCE:
status = ccd->setProperty()
INPUTS:
None
OUTPUTS:
This function returns the status of the command, typically 0 for success and -1 for
for failure.
KEYWORD PARAMETERS:
EXPOSURE_TIME: The exposure time in seconds.
NFRAMES: The number of frames to be collected with a single call to WINX32_CCD::Start
TIMING_MODE: The timing mode. 1=Free run, 3=External trigger.
FILE_NAME: The name of the data file for this image.
FILE_INCREMENT_COUNT: The next file number if file increment is enabled.
FILE_INCREMENT_ENABLE: Set to 1 to enable automatic file incrementing, 0 to disable.
COMMENTS: An string array of up to 5 elements containing comments to be put into the
data file.
EXAMPLE:
ccd = obj_new('WINX32_CCD')
status = ccd->setProperty(exposure_time=0.1, timing_mode=1, file_name='myfile')
MODIFICATION HISTORY:
Written by: Mark Rivers, November 1, 2006.
(See winx32_ccd__define.pro)
NAME:
WINX32_CCD::start
PURPOSE:
This function starts data acquisition on the WINX32_CCD object.
CATEGORY:
IDL device class library.
CALLING SEQUENCE:
status = ccd->start()
INPUTS:
None:
OUTPUTS:
This function returns the status of the command, typically 0 for success, -1 for failure.
EXAMPLE:
ccd = obj_new('WINX32_CCD')
status = ccd->start()
MODIFICATION HISTORY:
Written by: Mark Rivers, November 1, 2006.
(See winx32_ccd__define.pro)
NAME:
WINX32_CCD::stop
PURPOSE:
This function stops data acquisition on the WINX32_CCD object.
CATEGORY:
IDL device class library.
CALLING SEQUENCE:
status = ccd->stop()
INPUTS:
None:
OUTPUTS:
This function returns the status of the command, typically 0 for success, -1 for failure.
EXAMPLE:
ccd = obj_new('WINX32_CCD')
status = ccd->stop()
MODIFICATION HISTORY:
Written by: Mark Rivers, November 1, 2006.
(See winx32_ccd__define.pro)
NAME:
WINX32_CCD__DEFINE
PURPOSE:
This is the definition code which is invoked when a new object of
type WINX32_CCD is created. It cannot be called directly, but only
indirectly by the IDL OBJ_NEW() function. It defines the data
structures used for the WINX32_CCD class.
CATEGORY:
IDL device class library.
CALLING SEQUENCE:
Result = OBJ_NEW('WINX32_CCD')
INPUTS:
None
OUTPUTS:
None
RESTRICTIONS:
This routine cannot be called directly. It is called indirectly when
creating a new object of class WINX32_CCD by the IDL OBJ_NEW()
function.
This procedure only works on Windows systems that have the Princeton Instruments
WinView or WinSpec software installed.
EXAMPLE:
ccd = obj_new('WINX32_CCD')
status = ccd->getProperty(exposure_time=exposure_time)
MODIFICATION HISTORY:
Written by: Mark Rivers, November 1, 2006
(See winx32_ccd__define.pro)
NAME:
WINX32_DM_CMD_INIT
PURPOSE:
This function returns a structure of type {WINX32_DM_CMD} with all of the
structure members initialized to the integer values for these parameters.
This structure is used instead of C constants, which are not supported in IDL.
These values were obtained by opening Microsoft Visual Studio and using
Tools/OLD/COM Object Viewer.
Open "Type Libraries/Roper Scienfic's WinX/32 3.6 Type Library/typedef enum DM_CMD.
CATEGORY:
IDL device class library.
CALLING SEQUENCE:
dm_cmd = WINX32_DM_CMD_INIT()
INPUTS:
None
OUTPUTS:
This function returns a structure of type {WINX32_DM_CMD} with all of the
structure members initialized to the integer values for these parameters.
EXAMPLE:
dm_cmd = WINX32_EXP_CMD_INIT()
ccd = obj_new('WINX32_CCD')
status = ccd->setProperty(exposure_time=0.1)
status = ccd->start()
wait, 1.
status = ccd->getDocFileProperty(dm_cmd.DM_USERCOMMENT1, comment1)
MODIFICATION HISTORY:
Written by: Mark Rivers, November 1, 2006
(See winx32_dm_cmd_init.pro)
NAME:
WINX32_DM_CMD__DEFINE
PURPOSE:
This is the definition code which is invoked when a new structure of
type WINX32_DM_CMD is created. It cannot be called directly, but only
indirectly by using the IDL automatic structure creation mechanism.
It defines the data structure for the WINX32_DM_CMD structure type.
CATEGORY:
IDL device class library.
CALLING SEQUENCE:
dm_cmd = {WINX32_DM_CMD}
INPUTS:
None
OUTPUTS:
None
RESTRICTIONS:
This routine cannot be called directly. It is called indirectly when
creating a new structure of type WINX32_DM_CMD.
Note that the values in the definition are actually lost when the structure is
created, all values are set to 0. The function WINX32_DM_CMD_INIT() should be used
to create a structure of this type with their values initialized correctly.
;
EXAMPLE:
dm_cmd = {WINX32_DM_CMD}
print, dm_cmd.DM_USERCOMMENT1
MODIFICATION HISTORY:
Written by: Mark Rivers, November 1, 2006
(See winx32_dm_cmd__define.pro)
NAME:
WINX32_EXP_CMD_INIT
PURPOSE:
This function returns a structure of type {WINX32_EXP_CMD} with all of the
structure members initialized to the integer values for these parameters.
This structure is used instead of C constants, which are not supported in IDL.
These values were obtained by opening Microsoft Visual Studio and using
Tools/OLD/COM Object Viewer.
Open "Type Libraries/Roper Scienfic's WinX/32 3.6 Type Library/typedef enum EXP_CMD.
CATEGORY:
IDL device class library.
CALLING SEQUENCE:
exp_cmd = WINX32_EXP_CMD_INIT()
INPUTS:
None
OUTPUTS:
This function returns a structure of type {WINX32_EXP_CMD} with all of the
structure members initialized to the integer values for these parameters.
EXAMPLE:
exp_cmd = WINX32_EXP_CMD_INIT()
ccd = obj_new('WINX32_CCD')
status = ccd->getExpCmdProperty(exp_cmd.EXP_EXPOSURE, exposure_time)
MODIFICATION HISTORY:
Written by: Mark Rivers, November 1, 2006
(See winx32_exp_cmd_init.pro)
NAME:
WINX32_EXP_CMD__DEFINE
PURPOSE:
This is the definition code which is invoked when a new structure of
type WINX32_EXP_CMD is created. It cannot be called directly, but only
indirectly by using the IDL automatic structure creation mechanism.
It defines the data structure for the WINX32_EXP_CMD structure type.
CATEGORY:
IDL device class library.
CALLING SEQUENCE:
exp_cmd = {WINX32_EXP_CMD}
INPUTS:
None
OUTPUTS:
None
RESTRICTIONS:
This routine cannot be called directly. It is called indirectly when
creating a new structure of type WINX32_EXP_CMD.
Note that the values in the definition are actually lost when the structure is
created, all values are set to 0. The function WINX32_EXP_CMD_INIT() should be used
to create a structure of this type with their values initialized correctly.
;
EXAMPLE:
exp_cmd = {WINX32_EXP_CMD}
print, exp_cmd.EXP_EXPOSURE
MODIFICATION HISTORY:
Written by: Mark Rivers, November 1, 2006
(See winx32_exp_cmd__define.pro)
NAME:
WRITE_BAS2000
PURPOSE:
This procedure writes an 8 bit data file in BAS2000 format. It can then
be sent to the BAS2000 printer, although colors are a problem.
CATEGORY:
Detectors.
CALLING SEQUENCE:
WRITE_BAS2000, Data, File
INPUTS:
Data:
An 8-bit array of data. The first dimension must be 1024 or 2048
and the second dimension must be 1280, 2048 or 4096.
File:
The name of the output file without the '.inf' or '.img' extensions
SIDE EFFECTS:
This procedure creates File.inf and File.img, which the scanner software
can then read.
RESTRICTIONS:
This routine is really only useful for creating files to be printed on
the BAS2000 printer, which probably does not even work any more!
EXAMPLE:
data = bytscl(dist(256))
WRITE_BAS2000, data, 'Myfile'
MODIFICATION HISTORY:
Written by: Mark Rivers, 1993?
Modifications:
MLR 26-APR-1999 Added documentation header
(See write_bas2000.pro)
NAME:
WRITE_PRINCETON
PURPOSE:
This procedure writes data files that can be read by Princeton Instruments'
WinSPEC and WinVIEW software.
CATEGORY:
File input.
CALLING SEQUENCE:
WRITE_PRINCETON, File, Data, Header
INPUTS:
File:
The name of the data file to read.
Data[nx, ny, nframes]:
The output data array. The array will be 1, 2 or 3 dimensions
(depending upon whether ny and nframes are 1) and can be integer,
long or float data type.
HEADER:
The 4100 byte header from the file. This header can be used to
extract additional information about the file. See the Princteon
Instruments "PC Interface Library Programming Manual" for the
description of the header structure, and this procedure for
examples of how to extract information from the header.
RESTRICTIONS:
This procedure currently only extracts limited information from the
header. It should be exhanced to extract more fields, probably into a
structure.
The data and calibration are corrected for byte order when reading on
a big-endian host, but other elements of the header are not converted.
EXAMPLE:
Write a data file:
IDL> READ_PRINCETON, 'test.spe', data, header=header
IDL> header.comments[2]='
IDL> clock_speed = float(header, 1428)
IDL> print, 'Vertical clock speed (microseconds) = ', clock_speed
MODIFICATION HISTORY:
Written by: Mark Rivers, 11/4/97
Mark Rivers 10/27/98 Convert data to long if any pixels are > 32K
Mark Rivers 11/12/98 Fix to not convert data if already long
Mark Rivers 3/16/99 Added /BLOCK keyword to openr to work with VMS
Mark Rivers 3/27/99 Added "Comments" keyword
Mark Rivers 3/29/99 Added "Date" keyword
Mark Rivers 2/22/00 Corrected byte order for data and calibration.
Mark Rivers 9/11/01 Added "exposure" keyword
Mark Rivers 9/12/01 Added "background_file" keyword
(See write_princeton.pro)