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: Wed Jun 28 11:14:00 2017.
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: DECODE_FALCON_BUFFERS PURPOSE: This function parses the buffers collected with the XIA Falcon modules in MCA mapping mode. CATEGORY: Detectors. CALLING SEQUENCE: Data = DECODE_FALCON_BUFFERS(BufferData) INPUTS: BufferData: An array containing the buffer data. This array will typically have been read with the READ_ND_NETCDF function, but it could also have been created in other ways. This array is of type INT, i.e. 16-bit data. Its dimensions are [BufferSize, NumChannels, NumArrays]. NumArrays is the number of arrays that were collected. NumChannels is the number of detectors in the system (i.e. 1, 2, 4, etc.) BufferSize is the size of each buffer that was read from the Falcon. OUTPUTS: This function returns a structure with the decoded data from the buffer array. The structure definition depends on the mapping mode that was used to collect the data. In MCA mapping mode the structure is the following: FalconData = {FalconData, $ firstPixel: 0L, $ numPixels: 0L, $ pData: ptr_new(), $ pRealTime: ptr_new(), $ pLiveTime: ptr_new(), $ pInputCounts: ptr_new(), $ pOutputCounts: ptr_new() $ } firstPixel is the number of the first pixel in the first array numPixels is the total number of pixels in the output arrays pData is a pointer to the MCA spectra array. The dimensions of this array in MCA mapping mode is [numChannels, numDetectors, numPixels] pRealTime is a pointer to an array of real time at each pixel, [numDetectors, numPixels] pLiveTime is a pointer to an array of live time at each pixel, [numDetectors, numPixels] pInputCounts is a pointer to an array of trigger counts at each pixel, [numDetectors, numPixels] pOutputCounts is a pointer to an array of event counts at each pixel, [numDetectors, numPixels] EXAMPLES: This is an example of decoding the buffers for MCA mapping mode data: IDL> buff = read_nd_netcdf('mca_mapping_001.nc') IDL> help, buff BUFF INT = Array[1047808, 4, 9] IDL> d = decode_xmap_buffers(buff) IDL> help, /structure, d ** Structure XMAPDATA, 7 tags, length=28, data length=28: FIRSTPIXEL LONG 0 NUMPIXELS LONG 1000 PDATA POINTERPREALTIME POINTER PLIVETIME POINTER PINPUTCOUNTS POINTER POUTPUTCOUNTS POINTER IDL> help, *d.pData INT = Array[2048, 16, 1116] IDL> help, *d.pRealTime FLOAT = Array[16, 1116] MODIFICATION HISTORY: Written by: Mark Rivers, May 10, 2017
(See decode_falcon_buffers.pro)
NAME: DECODE_XMAP_BUFFERS PURPOSE: This function parses the buffers collected with the XIA xMAP or Mercury modules in one of the mapping modes. CATEGORY: Detectors. CALLING SEQUENCE: Data = DECODE_XMAP_BUFFERS(BufferData) INPUTS: BufferData: An array containing the buffer data. This array will typically have been read with the READ_ND_NETCDF function, but it could also have been created in other ways. This array is of type INT, i.e. 16-bit data. Its dimensions are [BufferSize, NumArrays, NumModules]. NumArrays is the number of arrays that were collected. NumModules is the number of xMAP modules in the system. BufferSize is the size of each buffer that was read from the xMAP. OUTPUTS: This function returns a structure with the decoded data from the buffer array. The structure definition depends on the mapping mode that was used to collect the data. In MCA mapping and SCA mapping modes the structure is the following: xMAPData = {xMAPData, $ firstPixel: 0L, $ numPixels: 0L, $ pData: ptr_new(), $ pRealTime: ptr_new(), $ pLiveTime: ptr_new(), $ pInputCounts: ptr_new(), $ pOutputCounts: ptr_new() $ } firstPixel is the number of the first pixel in the first array numPixels is the total number of pixels in the output arrays pData is a pointer to the MCA spectra (MCA mapping mode) or SCA counts (SCA mapping mode) array. The dimensions of this array in MCA mapping mode is [numChannels, numDetectors, numPixels] The dimensions of this array in SCA mapping mode is [numSCAs, numDetectors, numPixels] pRealTime is a pointer to an array of real time at each pixel, [numDetectors, numPixels] pLiveTime is a pointer to an array of live time at each pixel, [numDetectors, numPixels] pInputCounts is a pointer to an array of trigger counts at each pixel, [numDetectors, numPixels] pOutputCounts is a pointer to an array of event counts at each pixel, [numDetectors, numPixels] In List mapping mode the structure is the following: xMAPListData = {xMAPListData, $ listMode: 0L, $ pData: ptr_new(), $ pPixelClock: ptr_new(), $ pNumEvents: ptr_new(), $ pRealTime: ptr_new(), $ pLiveTime: ptr_new(), $ pInputCounts: ptr_new(), $ pOutputCounts: ptr_new() $ } listMode is the list mode variant (Gate, Sync, or Clock) of this data pData is a pointer to the event mode data array. The dimensions of this array is [maxEvents*numArrays, numModules]. This array contains the energy of each event in bits 0-12, and the detector number (0-3) in bits 13-14. pPixelClock is a point to an array of pixel clock information. In Gate or Sync variants this is the pixel number of each event. In Clock variant this is the clock time in ticks of the 50MHz system clock since acquisition was started. Dimensions = [maxEvents*numArrays, numModules] pNumEvents is a pointer to an array containing the number of actual events in each the first dimension of the pData array for each module. Dimensions = [numDetectors, numArrays] pRealTime is a pointer to an array of real time at each pixel, [numDetectors, numArrays] pLiveTime is a pointer to an array of live time at each pixel, [numDetectors, numArrays] pInputCounts is a pointer to an array of trigger counts at each pixel, [numDetectors, numArrays] pOutputCounts is a pointer to an array of event counts at each pixel, [numDetectors, numArrays] EXAMPLES: This is an example of decoding the buffers for MCA mapping mode data: IDL> buff = read_nd_netcdf('mca_mapping_001.nc') IDL> help, buff BUFF INT = Array[1047808, 4, 9] IDL> d = decode_xmap_buffers(buff) IDL> help, /structure, d ** Structure XMAPDATA, 7 tags, length=28, data length=28: FIRSTPIXEL LONG 0 NUMPIXELS LONG 1000 PDATA POINTERPREALTIME POINTER PLIVETIME POINTER PINPUTCOUNTS POINTER POUTPUTCOUNTS POINTER IDL> help, *d.pData INT = Array[2048, 16, 1116] IDL> help, *d.pRealTime FLOAT = Array[16, 1116] This is an example of decoding the buffers for SCA mapping mode data: IDL> buff = read_nd_netcdf('sca_mapping_001.nc') IDL> help, buff BUFF INT = Array[1048320, 4] IDL> d = decode_xmap_buffers(buff) IDL> help, /structure, d ** Structure XMAPDATA, 7 tags, length=28, data length=28: FIRSTPIXEL LONG 0 NUMPIXELS LONG 1000 PDATA POINTER PREALTIME POINTER PLIVETIME POINTER PINPUTCOUNTS POINTER POUTPUTCOUNTS POINTER IDL> help, *d.pData LONG = Array[8, 16, 1000] IDL> help, *d.pRealTime FLOAT = Array[16, 1000] This is an example of decoding the buffers for List Sync mode data: IDL> buff = read_nd_netcdf('list_mapping_sync_001.nc') IDL> help, buff BUFF INT = Array[1048576, 4] IDL> d = decode_xmap_buffers(buff) IDL> help, /structure, d ** Structure XMAPLISTDATA, 8 tags, length=32, data length=32: LISTMODE LONG 1 PDATA POINTER PPIXELCLOCK POINTER PNUMEVENTS POINTER PREALTIME POINTER PLIVETIME POINTER PINPUTCOUNTS POINTER POUTPUTCOUNTS POINTER IDL> help, *d.pData INT = Array[349525, 4] IDL> help, *d.pPixelClock LONG = Array[349525, 4] IDL> help, *d.pRealTime FLOAT = Array[16] IDL> h = histogram((*d.pData) and 8191) IDL> iplot, h, yrange=[1,1e3], /ylog This is an example of decoding the buffers for List Sync mode data: IDL> buff = read_nd_netcdf('list_mapping_clock_001.nc') IDL> help, buff BUFF INT = Array[1048576, 4] IDL> d = decode_xmap_buffers(buff) IDL> help, /structure, d ** Structure XMAPLISTDATA, 8 tags, length=32, data length=32: LISTMODE LONG 2 PDATA POINTER PPIXELCLOCK POINTER PNUMEVENTS POINTER PREALTIME POINTER PLIVETIME POINTER PINPUTCOUNTS POINTER POUTPUTCOUNTS POINTER IDL> print, (*d.pPixelClock)[0:49] 16597 16597 16597 21414 21414 21414 58937 58937 58937 63590 63590 63590 86560 86560 86560 106343 106343 106343 114362 114362 114362 120760 120760 120760 135015 135015 135015 157845 174007 174007 174007 174845 174845 193928 193928 193928 198542 225748 225748 225748 238293 238293 238293 281407 344284 349105 349105 349105 355190 355190 The above are the pixel clock values in units of 20 ns ticks IDL> print, (*d.pData)[0:49] 9735 17934 26123 9746 17946 26134 9748 17948 26138 26322 9934 18135 9735 17935 26118 17947 26135 9745 8477 16671 24861 9939 18141 26328 26105 9716 17918 1476 17920 26105 9719 9745 17946 9745 17946 26133 1308 9745 17946 26134 26108 9720 17921 1470 1474 9718 17919 26106 9753 17958 The above are the energy values of the first 50 events. Bits 13-14 contain the detector number IDL> print, (*d.pData)[0:49] and 8191 1543 1550 1547 1554 1562 1558 1556 1564 1562 1746 1742 1751 1543 1551 1542 1563 1559 1553 285 87 285 1747 1757 1752 1529 1524 1534 1476 1536 1529 1527 1553 1562 1553 1562 1557 1308 1553 1562 1558 1532 1528 1537 1470 1474 1526 1535 1530 1561 1574 The above are the energy values of the first 50 events with bits 13-14 masked off. MODIFICATION HISTORY: Written by: Mark Rivers, July 2010
(See decode_xmap_buffers.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, NoData=NoData) 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. NoData: Set this keyword to 1 to not read the data itself, but only the attributes and dimension info. OUTPUTS: This function returns the N-Dimensional array of data. The dimensions are [dim0, dim1, ..., NumArrays] If the NoData keyword is set then the function just returns 0. 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 POINTERIDL> 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. March 26, 2016 Mark Rivers. Added NoData keyword.
(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 Mark Rivers 5/28/13 Added support for V3.x SPE files with XML footer
(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: READ_XMAP_2D PURPOSE: This function reads a series of MCA mapping netCDF files written by the DXP mapping mode software. The data are assumed to be 1 file for each row of a 2-D scan, with file names base_name + num + '.nc'. CATEGORY: Detectors. CALLING SEQUENCE: Data = READ_XMAP_2D(base_file, nY, $ live_time=live_time, real_time=real_time, $ triggers=triggers, events=events, $ xRange=xRange, yRange=yRange, $ channelRange=channelRange, detectorRange=detectorRange) INPUTS: base_file: The base name of the input files. The files are assumed to be named base_file + num + '.nc', where num goes from 1 to nY and .nc is the file extension for netCDF files nY: The number of Y points in the scan, i.e. the number of netCDF mapping files. KEYWORD INPUTS: xRange: Used to optionally restrict the returned data to only a specific range of pixels in the X (fast) direction. The default is to return all pixels in that direction. Example: xRange=[100,200]. yRange: Used to optionally restrict the returned data to only a specific range of pixels in the Y (slow) direction. The default is to return all pixels in that direction. Example: yRange=[100,200]. channelRange: Used to optionally restrict the returned data to only a specific range of MCA channels. The default is to return all MCAchannels. This is very useful for extracting the data for a specific ROI from the data, for example the counts around the Zn K-alpha peak. Example: channelRange=[680,720]. detectorRange: Used to optionally restrict the returned data to only a specific range of detectors. The default is to return all detectors. Example: detectorRange=[5,5] will return the data for detector 5 only. OUTPUTS: By default this function returns a 4-D array [nChannels, nDetectors, nX, nY], i.e. the MCA counts for each detector, at each X and Y pixel in the scan. This can be an enormous amount of data! The amount of data returned by the function can be restricted with the input keywords described above. KEYWORD OUTPUTS: live_time: The live time for each detector at each pixel in the scan real_time: The real time for each detector at each pixel in the scan triggers : The number of triggers (input counts) for each detector at each pixel in the scan events: The number of events (output counts) for each detector at each pixel in the scan EXAMPLE: The following is an IDL program that calls read_xmap_2d for a 501x500 scan of a Ni mesh. It extracts the Ni Ka peak (channels 716 to 776) from the data. It sums over all the channels in this region, normalizes by live time, sums over all 7 detectors, and finally displays the image with the IDL iTools iimage procedure. ; Read data, only channels 716 to 776 d = read_xmap_2d('Scan4_', 501, live_time=live_time, real_time=real_time, events=events, $ triggers=triggers, channel=[716,776]) ; Sum over channels 716 to 776 (first dimension) tot = total(d, 1) ; Divide by live time for each detector for each pixel, but live=0 increase to .001 tot1 = tot/(live_time>.001) ; Sum over the detectors tot2 = total(tot1, 1) ; Display iimage, tot2 end MODIFICATION HISTORY: Written by: Mark Rivers, September 2010
(See read_xmap_2d.pro)
NAME: READ_XMAP_NETCDF PURPOSE: This function reads a netCDF file written by the NDPluginFile plugin in the areaDetector module containing mapping mode data from the XIA xMAP or Mercury modules. This function simply calls READ_ND_NETCDF, and then calls DECODE_XMAP_BUFFERS. It returns the structure returned by DECODE_XMAP_BUFFERS. CATEGORY: Detectors. CALLING SEQUENCE: Data = READ_XMAP_NETCDF(File, Range=Range) 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: This keyword is simply passed to READ_ND_NETCDF. See the documentation for that function for detailed information. OUTPUTS: This function returns the structure returned by DECODE_XMAP_BUFFERS. See the documentation for that function for detailed information. EXAMPLE: This is an example of decoding the buffers for MCA mapping mode data: IDL> d = read_xmap_netcdf('mca_mapping_001.nc') IDL> help, /structure, d ** Structure XMAPDATA, 7 tags, length=28, data length=28: FIRSTPIXEL LONG 0 NUMPIXELS LONG 1000 PDATA POINTERPREALTIME POINTER PLIVETIME POINTER PINPUTCOUNTS POINTER POUTPUTCOUNTS POINTER MODIFICATION HISTORY: Written by: Mark Rivers, July 2010
(See read_xmap_netcdf.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)