AXIS 2000 Programs

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: Mon Aug 03 18:10:35 2015.


List of Routines


Routine Descriptions

AA_WRITECONFIG.PRO

[Next Routine] [List of Routines]
NAME:
		AA_WriteConfig.pro

LAST CHANGED: ----------------------------------- 	23-Jul-10

 PURPOSE:
	This function writes the configuration file for the XSpecSim program

 CATEGORY:
	Utility; part of XSpecSim, spectral simulator package

 CALLING SEQUENCE:
	Result = AA_WriteConfig(AAPATH = AAPATH)

 INPUTS: none

 KEYWORDS:
	AApath	name of folder inside aXis2000 code directory

 OUTPUTS:
	configuration file is written

COMMON BLOCKS:
	axis_com
	XSpecSim_Com		X-SpecSim common block


 MODIFICATION HISTORY:
 (28-feb-07 jso) first version
 (18-Jul-10 aph) AXIS standard header added;
                 axis_com and XSpecSim_com added
 (23-Jul-10 aph) modified parameter in call from 'file' to 'AApath'

(See c:\axis2000\aa_writeconfig.pro)


ALIGN

[Previous Routine] [Next Routine] [List of Routines]
NAME: 
	ALIGN 
 
LAST CHANGED: ----------------------------------- 31-dec-99 
 
 PURPOSE: 
	This procedure is the image alignment part of STACK_ANALYZE. 
 It uses 2d fourier transform correlation techniques 
 to shift one image to the same pixel scale as a reference image. 
 Numerous options to control the alignment procedure are provided 
 
 CATEGORY: 
	AXIS: stack analysis 
 
 CALLING SEQUENCE: 
 align,image1,image2,xshift,yshift,image2_shifted,$ 
    [ sobel=sobel,roberts=roberts,edgegauss=edgegauss,$ 
    cm=cm,maxshift=maxshift,$ 
    meanfill=meanfill,medianfill=medianfill,$ 
    xcorimg_win=xcorimg_win,xcorimg_zoom=xcorimg_zoom,$ 
    xplot_win=xplot_win,yplot_win=yplot_win,$ 
    debug=debug,help=help ] 
 
 INPUTS: 
	IMAGE1  - reference image 
	IMAGE2  - image to be shifted to reference image 
 
 KEYWORDS: 
	SOBEL	- use sobel edge sharpening 
	ROBERTS	- use roberts edge sharpening 
	EDGEGAUSS = # - sigma value for gaussian edge sharpening (default = 4) 
	CM	- align on centre-of-mass of correlation FFT (default = peak) 
	MAXSHIFT - maximum number of pixels to shift 
	MEANFILL - use mean for image pixels not in shifted image 
	MEDIANFILL - use median for image pixels not in shifted image 
			(default is to leave those pixels as zero) 
	XCORING_WIN - number of window to display correlation image 
	XCORIMG_ZOOM - zoom factor for alignment images 
	XPLOT_WIN - number of window to display x-shifts 
	YPLOT_WIN - number of window to display y-shifts 
	DEBUG - debug code implemented 
	HELP - display help message 
 
 OUTPUTS: 
	XSHIFT 	- value of x-shift (in fractional pixels) 
	YSHIFT - value of y-shift (in fractional pixels) 
	IMAGE2_SHIFTED - shifted second image 
 
 COMMON BLOCKS: 
   none 
 
 EXAMPLE: 
	Call from stack_align.pro : 
            align,ref_image,this_image,this_x_shift,this_y_shift,$ 
              shifted_image, sobel = sobel, roberts=roberts, $ 
              maxshift=maxshift, /meanfill, $ 
              xcorimg_win = stack_align_par.diff_image_win, $ 
              xcorimg_zoom = img_zoom 
 
 CAUTIONS 
	Image alignment will often fail in cases of ambigous or low contrast 
 
 MODIFICATION HISTORY: 
 (25-mar-1998 cjj) modified to deal with 24 bit color 
   If you provide the white, red, and green colors, then 
   it is assumed that the color table is preloaded. 
   "white" is an index for a color table from 0 to 255, 
   whereas "red" and "green" are plot color indices 
   which might be longs on 24 bit graphics devices.  CJJ 
 (11-jul-98 cjj) Significantly modified 
 Eliminated the correl option, and made /peak the default (i.e., you 
 cannot specify it anymore).  Fit the three pixels about the 
 peak to z=a+bx*cx^2 and z=a+by+cy^2 for subpixel location 
 (30-dec-99 aph) documented as part of AXIS 

(See c:\axis2000\align.pro)


ALS2NCDF

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	ALS2NCDF

LAST CHANGED: ----------------------------------- 27-feb-00

 PURPOSE:
	This procedure converts one or a series of ALS image files
 into netCDF format and, if multiple files, writes a stack_list (*.sl) file
 with names of converted files

 CATEGORY:
	AXIS: image analysis

 CALLING SEQUENCE:
	ALS2NCDF, file

 INPUTS:
	FILE - an ALS image file (*.im%) to be converted to netCDF format (*.nc)

 KEYWORD PARAMETERS:
	LIST - name of file with list of image files (*.lst)
	BIN - average by combining 2x2 pixels (bin=2) or 3x3 pixels (bin=3), etc
   OUTLIST - name of a file to write list of netCDF files (*.sl)
   DELE - delta_E is a photon energy shift (real - measured) (eV)
	ONE - convert only a single file

 OUTPUTS:
  FILE.NC - image written to a netCDF format binary file

 COMMON BLOCKS:
   @AXIS_COM - set of common blocks for AXIS
   @BSIF_COM - common block for netCDF

 SIDE EFFECTS:
	many !

 RESTRICTIONS:
	caveat emptor

 PROCEDURE:
	ALS2NCDF assumes that ax_rd_im has put the image and associated information
 into BSIF_COMMON variables:
	image_data (the array which holds the image - possibly several
	planes deep for I, IO, CLOCK)

 EXAMPLE:
	ALS2NCDF is used from AXIS by supplying user-defined keywords

  fileget=PICKFILE2(/Read, FILTER='*.lst', /LPATH, DEFPATH=defpath)
  if strlen(fileget) GT 0 THEN BEGIN
  		WIDGET_CONTROL, Uprompt, SET_VALUE= 'ALS->nc: smooth by binning?'
		bin_num=1				; optional binning of data
		bin_num=get_num(Val=bin_num,PROMPT='bin *', group=axis_ID)
		WIDGET_CONTROL, Uprompt, Bad_ID = badID, SET_VALUE= 'ALS->nc: calibrate E?'
		del_E=0.
		del_E = get_num(Val=del_E,PROMPT='dE(real-meas, eV)', group=axis_ID)
		sl_file = get_text(Prompt = 'stack_list file',val = sl_file, group=axis_ID)
	    ALS2NCDF,list=fileget,bin=bin_num, outlist=sl_file, delE=del_E
  endif

 MODIFICATION HISTORY:
 (xx-mar-98 aph) developed to support stacks at ALS
 (14-jun-98 aph) axis_com, bsif_com (for Linux idl 5.03)
 ( 2-aug-98 aph) define extension which is the image (switches !)
 (16-aug-98 aph) allow use of *.lst files generated by ALS stxm.vi
 (20-nov-98 aph) get rid of IDL command window prompt
 ( 7-jan-99 aph) sorting out problem with multi-file processing (stalls)
 (12-jan-99 aph) adapt to find data files when using ALS *.lst paths are wrong
 (14-apr-99 aph) DataPath default to Defath
 (13-May-99 aph) conditional plotting at end if 1 file
 ( 6-jul-99 aph) free_lun NOT just close !
 (11-aug-99 aph) fix up path issues;
 (05-sep-99 aph) write to real netcdf
 (19-sep-99 aph) write outlist file in ZIMBA format
 (15-oct-99 aph) correct path information at top oz Zimba format
 (30-dec-99 aph) AXIS standard documentation; add ONE keyword
 (27-feb-00 aph) groupID added to get_text
 (18-jul-01 aph) fixe error in optional /one and /list options

(See c:\axis2000\als2ncdf.pro)


ALS_SPECIN

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	ALS_SPECIN

LAST CHANGED: ----------------------------------- 19-mar-02

 PURPOSE:
	This function reads in an ALS BL7.0 stxm spectral data file
	based on parameters generated by the ALS_SPECTRA widget

 CATEGORY:
	AXIS: spectra analysis

 CALLING SEQUENCE:
	Result =  ALS_SPECIN(in_file, REF=ref, COL=col, _extra=e)

 INPUTS:
	IN_FILE  - name of ALS BL 7.0 STXM data file (transmission or yield signal)

 KEYWORDS:
	REF - switch to indicate this is incident flux reference
	COL=# - data column to read in
	_EXTRA_E - in case one wants to pass plot paramaters

 OUTPUTS:
	Result is an AXIS 1d data structure.
 The y data values are calculated according to the readin parameters

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks
;
 PROCEDURE:
 uses current values of I_process, Io_process to determine what to do
 set KEYWORD REF to 1 to use Io_process
 I_process =
 'all'  - return both dark and data values
 'none' - ignore dark counts
 'dark' - average dark, subtract
 'OSA'  - ratio signal to OSA (without dark correction)
 'both' -  ratio signal to OSA (with dark correction of each)

 -------- internal parameter, OPT, used to control processing -------
default (no opt) is to read in E,col1,col2
 OPT = col1:   raw data - ASSUMES transmission detector in col(1); OSA in col(2)
 OPT = col2:  extract col(2)  - OSA (pre-98) or trans (after Dec-97; flipped here)
 OPT = col3;  extract col(3)  - TEY
 OPT = dark:  dark correct signals
 OPT = OSA;   divide by OSA signal (no dark correct)
 OPT = OSA-dark; dark correct, then divide by OSA signal

 ALS BL7.0 point spectra consist of ascii files (*.dat, *.xas)
 ------ FORMAT of *.DAT file (scan details)
10	5	50000	100000		(#dark points) (#sections) (shutter delay - us) (dwell/dark - us)
2.7500E+2	2.0000E-1	40	100000 Region 1:(first-E in eV) (step in eV) (number) (dwell)
2.8300E+2	7.9710E-2	138	100000 Region 2:
2.9400E+2	1.2000E-1	50	100000 Region 3:
3.0000E+2	2.0000E-1	75	100000 Region 4:
3.1500E+2	2.5000E-1	60	100000 Region 5:
 ------ FORMAT of *.xas file
273.000	36	16
273.200	37	17		dark signal levels before scan
 .....
275.000	16774	51465	E, signal_1, signal_2 (as many defined in acquire)
275.200	16820	52070
275.400	16824	52848
 .....
330.200	36	16
330.400	37	17		dark signal levels after scan
 .....

 CAUTIONS
 the data format was modified several times in 1997
 this routine attempts to auto-detect the format of the file
	but some errors do occur

 MODIFICATION HISTORY:
 (09-Dec-97 aph) multi-section files; single file to do all types of read-in of ALS STXM spectral files
 (15-feb-98 aph) cancel protect; read 0 dark_pt  files
 (04-mar-98 aph) still problems with 0 dark pts;
 (09-apr-98 aph) save img_shifts; correct spike; add col(3) = TEY
 (07-aug-98 aph) indicate extension (? not done since col indicated already)
 (02-jan-99 aph) derived from XAS1.pro
 (03-jan-99 aph) add ytitle (s.yl)
 (28-jan-99 aph) xlabel consistent with nsls readin; DefPath in pickfile2
 (18-sep-99 aph) correct to allow read-in with no dark points
 (30-dec-99 aph) AXIS standard documentation
 (19-mar-02 aph) adapt to new stxm701 which dies not use OSA (only 2 cols)

(See c:\axis2000\als_specin.pro)


ALS_SPECTRA

[Previous Routine] [Next Routine] [List of Routines]
NAME:
 ALS_SPECTRA

LAST CHANGED: ----------------------------------- 31-dec-99

 PURPOSE:
	These procedures generate a widget used to read in ALS BL 7.0 STXM
 spectral data.

 CATEGORY:
	AXIS: spectra analysis

 CALLING SEQUENCE:
	als_spectra [, GROUP_LEADER=wGroup, _EXTRA=_VWBExtra_ ]

 ROUTINES:
	BSE_ALS_SPECTRA_event, Event - processes the events generated by user
                            using the ALS_SPECTRA_EVENTCB routines
	BSE_ALS_SPECTRA, GROUP_LEADER=wGroup, _EXTRA=_VWBExtra_ - generates widget structure
	ALS_SPECTRA - stub for loading

 INPUTS:
	none

 KEYWORDS:
	GROUP_LEADER: ID of calling widget

 OUTPUTS:
	read in of data occurs when the 'GO' button is pushed
	code for read-in is in ALS_SPECTRA_EVENTCB callback processing

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

 MODIFICATION HISTORY:
 Generated on:	01/08/99 12:58.18
 (30-dec-99 aph) AXIS standard documentation

(See c:\axis2000\als_spectra.pro)


ALS_SPECTRA_EVENTCB

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	ALS_SPECTRA_EVENTCB

LAST CHANGED: ----------------------------------- 31-dec-99

PURPOSE:
	This IDL Event Callback procedure processes the events generated
	by the buttons in the >READ>ALS-STXM spectral input command of AXIS

CATEGORY:
	AXIS spectra analysis
	IDL Event Callback Procedure for als_spectra_eventcb

ROUTINES:
	ALS_Spectra_Update - indicate current values of read-in parameters
	BUT_I_all		BUT_I_none		BUT_I_dark		BUT_I_OSA		BUT_I_both
	BUT_Io_all		BUT_Io_none		BUT_Io_dark		BUT_Io_OSA		BUT_Io_both
	TXT_I_check		TXT_I_col		BUT_I_Browse
	TXT_Io_check	TXT_Io_col		BUT_Io_Browse
	Scan_Par_Update
	BUT_Load_Sample
	BUT_Load_ratio
	BUT_Load_Absorption
	BUT_Load_Data
	BUT_Cancel
	ALS_SPEC_EVENTCB - stub routine to load all the rest

INPUTS: none

KEYWORDS: none

OUTPUTS: none

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

RESTRICTIONS:
 Whenever re-generate ALS_Spectra, add the following to pro BSE_ALS_SPECTRA,:
 to ADD an explicit Font command to handle different
 choices of Font Size at Windows level
  @axis_com
  WIDGET_CONTROL, Default_Font = BufLblFont

 NB -- Remove the All_Events keyword from the creation
       of the TXT_I_check and TXT_Io_check text widgets in ALS_Spectra,pro
		to trigger events only on newlines.
 END OF STUFF to add to pro BSE_ALS_SPECTRA, GROUP_LEADER=wGroup, _EXTRA=_VWBExtra_

MODIFICATIONS
 First generated on:	01/01/99 16:14.31
 (03-jan-99 aph) add ytitle (sample.yl) to returned Data
 (08-jan-99 aph) change display of parameters to table widget to get round overlap crash
 (11-jan-99 aph) error recovery if request reference with no file defined
 (28-jan-99 aph) DefPath for path and get_path
 (25-jun-99 aph) remove ambiguity of Scan_par_Update (function) & ScanPar_Update (paramater)
 (04-jul-99 aph) correct error in last procedure !
 (10-sep-99 aph) correct error in interpolation
 (30-dec-99 aph) add AXIS documentation

(See c:\axis2000\als_spectra.pro)


APS_XRF_COM.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		APS_XRF_COM.PRO

LAST CHANGED: ----------------------------------- 	20-Jun-10

 PURPOSE:
	This file contains the common block for the widget which displays XRF maps

 CATEGORY:
	utility

 ------------------------------
 XRF - structure with xrf map and label information
 XRF_maps  returns index numbers (sshifted up by 1) of maps for buffers 1-9
 XRF_MAP_ID - group label
 XRF_Map_List - set of labels of maps

 MODIFICATION HISTORY:
 (20-Jun-10 aph) first version, adapted from sdf_com.pro

(See c:\axis2000\xrf_com.pro)


AVERAGEVAL.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		AVERAGEVAL.PRO

LAST CHANGED: -----------------------------------  19-Jul-10

 PURPOSE:
	This function projects from existing spectral data the value at a requested X-point

 CATEGORY:
	spectra processing; part of XSpecSim package

 CALLING SEQUENCE:
	Result = AverageVal(ARR=ARR, VAL=VAL)

 INPUTS: none

 KEYWORDS:
	ARR		2d array of energy and spectral data
	VAL 	energy value to generate interpolated data

 OUTPUTS: none

 COMMON BLOCKS: none

 MODIFICATION HISTORY:
 (21-Jul-06 jso) first version
 (19-jul-10 aph) AXIS standard header added

(See c:\axis2000\averageval.pro)


AXB_LOAD

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AXB_LOAD

LAST CHANGED: ----------------------------------- 03-Jan-15 (aph)

PURPOSE:
	This function reads in AXIS format image or spectra from
 the XDR transferrable binary format. (Files written using AXB_SAVE).

CATEGORY:
	STAND ALONE: utility

CALLING SEQUENCE:
	Result = AXB_LOAD([ NOF=nof, error=err, file=file, title=title, _extra=e])

CALLED FROM AXIS:
	Read->Images->AXIS (and in many analysis routines)

INPUTS: none. All input parameters are passed as keywords.

KEYWORDS:
	/NOF 	- no filter (default filter = '*.axb')
	FILE 	- filename to read
	/SILENT - do not display feedback on progress
	_EXTRA 	- passed on parameters

OUTPUTS:
	RESULT = AXIS 1d or 2d structure

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

PROCEDURE:
	AXB_LOAD uses the XDR external, machine-independent binary representation.
 Please see the IDL manual (help under 'XDR') for details.
 AXB_LOAD uses information on the first line to determine the structure type.

EXAMPLE:
 Create a sample nxn image, write as binary using AXB_SAVE, read using AXB_LOAD
	n = 100 & t = findgen(n) & d = dist(n)
	a = {t:'2d', x:t, y:t, xl:'x (um)    E = 288.601 eV     dwell =  0.20 ms', yl:'y', d: d, dl:'test'}
	t = AXB_SAVE(a)
	b = AXB_LOAD(file = t)
	splot2d, b

MODIFICATION HISTORY:
 (09-aug-97 aph) isolated from AXIS
 (21-jan-98 aph) added s.dn component to 1d structure to be axis-compatible
 (18-jan-99 aph) allow silent readins if provide filename by keyword
 (08-aug-99 aph) image information printed
 (17-oct-99 aph) save energy & dwell in sd.wavelength, sd.dwell  so nsls write works !
 (02-jan-00 aph) AXIS standard documentation
 (26-sep-00 aph) store energy explcitly in 2d structure
 (13-Nov-05 aph) use axis_log for feedback
 (14-jul-07 aph) add /silent keyword
 (02-feb-11 aph) remove path from axis log
 (15-Jul-12 aph) get rid of NaN values when read image data
 (03-Jan-15 aph) add keyword TITLE to allow indication of type of file to load

(See c:\axis2000\axb_load.pro)


AXB_SAVE

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AXB_SAVE

LAST CHANGED: ----------------------------------- 02-Jan-15

PURPOSE:
	This function writes an AXIS format image or spectrum to the XDR
 transferrable binary format.These files can be read using AXB_LOAD.

CATEGORY:
	STAND ALONE: utility

CALLING SEQUENCE:
	Result = AXB_SAVE(tmp [, NOF=nof, file=file, noLbl = noLbl, silent=silent])

CALLED FROM AXIS:
	Read->Images->AXIS

INPUTS:
	TMP - AXIS 1d or 2d structure

KEYWORDS:
	/NOF - no filter (default filter = '*.axb')
	NOLBL - if set, do not query for label
	FILE - filename to read
	SILENT  flag to control entry to axis log

OUTPUTS:
	RESULT = filename (a blank string if the user cancels)

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

PROCEDURE:
	uses the XDR external, machine-independent binary representation.
 Please see the IDL manual (help under 'XDR') for details.
 If the filename is not supplied via the FILE keyword, the
 user is prompted for the filename using the pick file dialog.
 If the filename is supplied, a check for overwriting is made unless
 the global flag, overwrite_all is set to 1

EXAMPLE:
 Create a sample nxn image, write as binary using AXB_SAVE, read using AXB_LOAD
	n = 100 & t = findgen(n) & d = dist(n)
	a = {t:'2d', x:t, y:t, xl:'x (um)    E = 288.601 eV     dwell =  0.20 ms', yl:'y', d: d, dl:'test'}
	t = AXB_SAVE(a)
	b = AXB_LOAD(file = t)
	splot2d, b

;MODIFICATION HISTORY:
 (  fall-97 aph) first made
 (14-jun-98 aph) axis_com
 (18-jan-99 aph) keyword to allow silent writes (no file dialog)
 ( 8-jul-99 aph) FREE_LUN not just close
 ( 8-sep-99 aph) update label
 (02-jan-00 aph) AXIS standard documentation
 (09-jan-00 aph) add hourglass for long writes
 (27-feb-00 aph) add groupID to get_text
 (06-may-01 aph) remove groupID call if not running axis
 (04-jun-03 aph) add keyword to force label to current value
 (15-Jan-07 aph) add keyword silent
 (29-dec-07 aph) remove path info from log
 (02-Jan-15 aph) add no_aXis keyword to suppress loading result into aXis2000 buffer

(See c:\axis2000\axb_save.pro)


AXIS

[Previous Routine] [Next Routine] [List of Routines]
NAME: 
	AXIS 
 
LAST CHANGED: -----------------------------------  29-jun-00 
 
PURPOSE: 
	This procedure compiles all files used by the AXIS widget. 
 
CATEGORY: 
	AXIS: utility 
 
CALLING SEQUENCE:  @axis (at the IDL prompt) 
 
INPUTS: none 
 
KEYWORDS: none 
 
OUTPUTS: starts execution of AXIS 
 
COMMON BLOCKS: none 
 
 PROCEDURE 
	The AXIS batch file is used to start AXIS in order to 
 ensure the  subdirectory from which AXIS is being run 
 contains a complete set of pro files. In principle the IDL auto load 
 or the RESOLVE_ALL routine could be used to achieve this. 
 However, a number of the utility and event call back pro files 
 contain multiple routines that are not visible to RESOLVE_ALL. 
 The working AXIS code directory can be set from the Utilities->Set preferences 
 command in AXIS. The default is C:\axis on WIN machines. 
 IDL library files are loaded as needed 
 
MODIFICATION HISTORY: 
 (02-jan-00 aph) AXIS standard documentation. See file for more 

(See c:\axis2000\axis_sub.pro)


AXIS2000

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AXIS2000

LAST CHANGED: -----------------------------------  25-Jul-15 (aph)

PURPOSE:
	This procedure starts the aXis2000 widget.

CATEGORY:
	AXIS: utility

CALLING SEQUENCE:  AXIS2000, directory=directory, start_file='*.ini', , help=help, /dialog

INPUTS: none

KEYWORDS:
	spin		activate spinning logo
	help		print a help text

OUTPUTS: starts execution of AXIS

COMMON BLOCKS:
 axis_com
 sdf_com

 PROCEDURE

 LIMITATIONS
 this has problems for MacOS

MODIFICATION HISTORY:
 (08-dec-00 cgz) first written
 (23-jan-01 cgz) Added initial specification of ini_file if start_file is not specified
 (23-jan-01 cgz) Added /help option to give help message
 (31-jan-01 aph) get so that will auto-run on PC from start_file call (redo of 12-jan-01 changes)
 (22-aug-01 aph) add spin keyword
 (28-jul-02 aph) set directory to 'CodePath' (from axis.ini file), if not defined in call
 (20-Apr-08 aph) explicitly force CodePath to 'c:\axis2000' if not exist
 (25-Jan-12 aph) adapt CodePath to deal with Mac versus Windows
 (20-May-13 bw ) Use internal IDL routines to get codepath to simplify and make more platform independent
 (27-MAy-13 aph) adapt to Windows so it will work with IDL version 6.3;  use as standard start file
 (14-Jan-14 aph) add @sdf_com - so now remembers last SDF file type
 (21-Jul-15 aph) activate auto detection of code path

(See c:\axis2000\axis2000.pro)


AXIS2000_BATCH.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		AXIS2000_BATCH.PRO

LAST CHANGED: ----------------------------------- 	27-May-2013

 PURPOSE:
	This batch file is used to start aXis2000. Originally it provided
 keywords to define the source folder ('directory' and options to spin the logo
 now it runs axis2000.pro directly so is not strictly needed bit is kept for those who
 use old versions of aXis2000 where this was the recommended start file

 CATEGORY:
	Image display.

 CALLING SEQUENCE:
 	axis2000_batch

 INPUTS: none

 KEYWORDS: none

 OUTPUTS:
	starts axis2000 widget using axis2000.pro

 COMMON BLOCKS: none

 SIDE EFFECTS: none

 MODIFICATION HISTORY:
 (27-May-13 aph) AXIS standard header added

(See c:\axis2000\axis2000_batch.pro)


AXIS_ADD

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AXIS_ADD

LAST CHANGED: ----------------------------------- 21-apr-05

PURPOSE:
	This procedure interpolates then sums the y-values over the
 common x-axis range of two 1-d structures (spectra) in AXIS

CATEGORY:
	AXIS: spectra analysis

CALLING SEQUENCE:
	AXIS_ADD

CALLED FROM AXIS:
	Spectra->Add->Buffers

INPUTS: none

KEYWORDS: none

OUTPUTS:
	The sum of the spectra is placed in buffer 0.

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

PROCEDURE:
	The user is prompted for a scale factor for first file,
 the buffer of the second file, and a scale factor for the second file.

MODIFICATION HISTORY:
 (09-aug-97 aph) split out from axis_c
 (29-dec-97 aph) remembers numerical factors
 (14-jun-98 aph) axis_com
 (13-dec-98 aph) allow for cancel when choosing 2nd buffer
 (08-jun-99 aph) add group call to get_num
 (30-dec-99 aph) use AX_MESH to interpolate
 (23-feb-99 aph) add groupID to buffer call
 (02-jan-00 aph) AXIS standard documentation
 (21-apr-05 aph) use FIRST keyword for axis_mesh to force E-scale to that of first file
                 when interpolating spectra

(See c:\axis2000\axis_add.pro)


AXIS_APP

[Previous Routine] [Next Routine] [List of Routines]
NAME: 
	AXIS_APP 
 
LAST CHANGED: ----------------------------------- 23-feb-00 
 
PURPOSE: 
	This procedure appends two 1-d AXIS data structures (spectra). 
 If the data overlaps the user is prompted to select inclusion 
 of the first, second or average data in the overlapping region. 
 
CATEGORY: 
	AXIS: spectra analysis 
 
CALLING SEQUENCE: 
	AXIS_APP 
 
CALLED FROM AXIS: 
	Spectra->Add->Append 
 
INPUTS: none 
 
KEYWORDS: none 
 
OUTPUTS: 
	The appended spectrum is placed in buffer 0. 
 
COMMON BLOCKS: 
	@AXIS_COM	standard set of common blocks 
 
MODIFICATION HISTORY: 
 (09-aug-97 aph) isolated from AXIS 
 (24-jan-98 aph) corrrected to add s.dn 
 (14-jun-98 aph) axis_com 
 (02-jan-00 aph) 1st, 2nd, average in common region; AXIS standard documentation 
 (23-feb-00 aph) add groupID to call to Buffer 

(See c:\axis2000\axis_app.pro)


AXIS_C

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AXIS_C

LAST CHANGED: ----------------------------------- 31 Jul 15 (aph)

PURPOSE:
	This file contains three procedures (AXIS_C, AXIS_EVENT, AXIS_MENU_EVENT)
 which execute all menu items and displays for the AXIS2000 widget.
 It is the core of the aXis2000 widget.

CATEGORY:
	AXIS: data analysis

CALLING SEQUENCE:
	AXIS_C [, start_file = start_file, group = group, spin=spin]

 ROUTINES
	PRO AXISMENU_EVENT, Event
	PRO AXIS_EVENT, Event
	PRO AXIS_C, start_file = start_file, GROUP=Group

INPUTS:
	EVENT - ID of event code (button push)

KEYWORDS:
	START_FILE 	name of initial parameters (default = AXIS.INI)
	GROUP 		group name (AXIS_ID - stored in AXIS_COM)
	SPIN		spin the globe on start-up; activate web links

OUTPUTS: none

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks
   @sdf_com
   @AX_PEEM_COM  common for PEEM widget read-in
   COMMON tif_convert_common   - common for Tif convert (PEEM stacks)
	@ptycho_com

PROCEDURE:
  HELP for using aXis2000 is given in AXIS.PDF which can be accessed
 by the AXIS help button which starts Adobe Acrobat to view that file.
  If this does not come up, you may not have the Adobe reader on your
  system and/or, the system level command to run Acrobat may not be correct.
  To fix this:
       1. Download Adobe Acroreader from www.adobe.com (it is freeware)
       2. change the command to execute Acrobat in the axis.ini file
          (use the Windows RUN command to determine the correct syntax)
       3. restart aXis2000
  The source of AXIS.PDF is a Word97 document, axis2000.doc

 HELP for coding aXis2000 and a file-by-file description of the code
 is contained in AXIS_PROGRAMS.HTML which can be viewed with a web browser.

MODIFICATION HISTORY:
 ***** for detailed history please see the top of the source file (AXIS_C.PRO) *****

(See c:\axis2000\axis_c.pro)


AXIS_COM.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AXIS_COM.PRO

LAST CHANGED: ----------------------------------- 29-Mar-15

PURPOSE:
	This INCLUDE file contains COMMON blocks for AXIS.

CATEGORY:
	AXIS: utility

CALLING SEQUENCE: @axis_com

 NAMES AND MEANING OF COMMON VARIABLES
 *************************************************************************
 ***********         AXIS COMMON PARAMETERS             ******************
 *************************************************************************

 CAUTION - if you use one of these variable names in a subroutine for
 a different purpose and have included @axis_com, this can be a source
 of hard to trace errors in other routines. A common cuplrit is DATA.

 *************************************************************************
 KEEP the ansls line THE LAST !! - it is a structure of variable size
 *************************************************************************

COMMON aDRAWID,    Axis_ID, MainWid, MainImg, XZPlot, YZPlot, Thumbnails, AxSpin
	Axis_ID		ID of AXIS widget base
	MainWid		graphics window # of draw window (not same as Widget ID !!)
	MainImg		ID of MainImg draw window
	XZPlot		graphics window #  of XZ line-out draw window
	YZPlot		graphics window #  of XZ line-out draw window
   ColorbarPlot graphics window #  of colorbar draw window
	Thumbnails	graphics window #  of Thumbnails draw window
	AxSpin		= 1 if using spinning globe logo; = 0 if single image
COMMON aBUF, CurBuf, Data, pData, pNum, pBufs, BufStat, ButIDs, BufButs, OptButs
	CurBuf		number of current buffer (0-12; only 0-9 directly displayable)
	Data		pointers to the data structures
	pData		pointers to spectra components for overplotting
	pNum		number of plots in temporary storage for overplotting
	pBufs		original buffers of overplot files (order scrambled by user sleection in overplotting)
	BufStat		status of displayed buffers (multiple buffer display in overplot)
	ButIDs		ID values of the buffer labels
	BufButs		ID values of the buffer selection boxes
	OptButs		ID values of the option buttons
COMMON BufScal,    Xscl,Yscl, Zscl,  Xmin, Xmax, Ymin, Ymax, Zmin, Zmax, G_slider
	Xscl		Array of (xmin, xmax) for all 10 buffers
	Yscl		Array of (ymin, ymax) for all 10 buffers
	Zscl		Array of (zmin, zmax) for all 10 buffers
	Xmin		Widget ID for Text box with user selectable Xmin (15-Nov-99)
	Xmax		Widget ID for Text box with user selectable Xmax (15-Nov-99)
	Ymin		Widget ID for Text box with user selectable Ymin (15-Nov-99)
	Ymax		Widget ID for Text box with user selectable Ymax (15-Nov-99)
	Zmin		Widget ID for Text box with user selectable Zmin (20-Dec-98)
	Zmax		Widget ID for Text box with user selectable Zmax (20-Dec-98)
	G_slider	Widget ID for gamma slider control (16-nov-99)
COMMON aPATHS,  DefPath, WritePath, ini_file, codepath, last_image_ext,location
	DefPath		path for READING datafiles
	WritePath	path for Writing data files
	ini_file	name of program paramaters
	codepath	path to code files
   last_image_ext  extension (data type) of last image read by axis (default *.im1)
	location	physical location (used as switch for some spcific cases)
COMMON aPRINT,  gr_dev, gr_scale, Print_dev, Pr_Command, print_file
	gr_dev		IDL device for screen display ('WIN', 'X')
	gr_scale	graphics scal factor (0.5 to 2.0)
	Print_dev	IDL device for printing ('PS'=postscript, 'PCL'=HP PCL language)
	Pr_Command	command to transfer file to printer   (11-May-99)
	print_file	name of print file
	Help_cmd	command to load acrobat file (axis.pdf)  (24-may-99)
   Net_command command to start web browser (31-jan-00)
COMMON aCURS1,	CursorX, CursorY, CursorZ, PixelX, PixelY, xline, yline, Xval, Yval, Zval
	CursorX		widget ID for x value display
	CursorY		widget ID for y value display
	CursorZ		widget ID for z value display
	PixelX		widget ID of x pixel value display
	PixelY		widget ID of y pixel value display
	xline		[x1, x2] data values for user selected line
	yline		[y1, y2] data values for user selected line
	Xval		x value of cursor
	Yval		y value of cursor
	Zval		z value of cursor
COMMON aCURS2,	GraphFrozen, CurFroz, CurX, CurY, Xrng, Yrng, Zrng
	GraphFrozen	switch indicating MainImg cursor nor active (NO LONGER USED)
	CurFroz		[x,y] values where MainImg cursor is frozen
	CurX		x-cursor index (device)
	CurY		y-cursor index (device)
	Xrng		[Xmin, Xmax] graph limits (data units)
	Yrng		[Ymin, Ymax] graph limits (data units)
	Zrng		[Zmin, Zmax] graph limits (data units)
COMMON aCURS3,
	Xold		previous X-cursor value (for del-X computation)
	Yold		previous Y-cursor value (for del-Y computation)
	MainCurCol	color of cursor (NOT USED ??)
	First_Plot	flag to indicate whether ax_color should be called
	Last_Img	flag indicating last display on MainGraf was image (NOT USED ??)
COMMON aCURS4,	delX, delY, delR, delZ, DXval, DYval, DRval, DZval, click1
	delX		widget ID for delta-x value display
	delY		widget ID for delta-y value display
	delR		widget ID for delta-R value display (distance between points)
	delZ		widget ID for delta-z value display (image intensity)
	DXval		delta-x value
	DYval		delta-y value
	DRval		delta-R value
	DZval		delta-z value
	click1		0 - cursor free; 1 - first point selected; 2 - second point selected
COMMON aprompt,
	Uprompt		index for AXIS communication text window
	version		version identifier (# (date))  					(10-may-98)
   profl		profl=1 - extract profile                       (11-may-98)
COMMON acolor,     ColTbl, bColor, UserR, UserG, UserB
COMMON aSCALEBAR,  scale_bar, bar_pos
	scale_bar	flag to plot or not plot bar
	bar_pos		[bar_x, bar_y] position of start of bar in fraction of plot units
COMMON aselect,
	select_flag	flag to switch Thumbs from replot to select mode (28-sep-99)
   copy_flag   flag to indicate copy operation
	NewBuf		Number of new buffer
   img_rep_line  flag to indicate mode to identify a replacement line
	norm_flag	flag to control if ring current normalization is to be carried out (11-mar-07)
	norm_value	standard ring current (default = 400 mA - ALS top up target) (07-Aug-08)
	norm_string	text string defining type of normalization performed  (moved from sdf_com, 21-Jul-14)
   xy_correct_flag flag to control if xy correction is to be carried out (01-feb-09)
COMMON axis_color_common,
	ax_low_color_index, ax_top_color_index, $
	ax_black_color_index, ax_white_color_index, $
	ax_color00_index, ax_color01_index, ax_color02_index, ax_color03_index, $
	ax_color04_index, ax_color05_index, ax_color06_index, ax_color07_index, $
	ax_color08_index, ax_color09_index, ax_color10_index, ax_color11_index, $
	ax_color12_index, ax_color13_index, ax_color14_index, ax_color15_index
COMMON aLBL,       Label, BufLblFont
	Label			array of 9 labels displayed with file list
	BufLblFont		font used for widget (system specific !!)
COMMON aOPTIONS, Axes, Mouse, Line_Sym, pan_smooth, thumb_plot
	Axes			switch to indicate if axes are to be plotted on 2D graph
   Mouse		   	switch to indicate if Main_graph is active on mouse MOTION (=1) or click (=0)
	Line_Sym		switch to determine if symbols are plotted (=1)
	pan_smooth		switch to indicate if zoom graph updated on mouse MOTION (=1) or click (=0)
   thumb_plot      switch to indicate that a ThumbZoom (4 or 9) is plotted (aph 10-jul-99)
COMMON aparam,     (3-mar-98, 11-may-99)
	X_calib  	X-slope, X-intercept for auto spectral scale setting
	Y_calib     Y-slope, Y-intercept for auto spectral scale setting
	constant	add/subtract constant
	gain_m		multiplicative gain constant
	gain_d		divisive gain constant
	factor      constants for conversions
	Xlock       standard (x1,x2) values (for image alignment)
	Ylock       standard (y1,y2) values (for image alignment)
	cll         (x,y) lower left of cutout (Zoom; align images)
	cur  		(x,y) upper right of cutout (Zoom; align images)
	pix_siz		size of pixel (for image aligmnment)
	PrintSize   size in inchess of the printed Main Window in utilities~Print   ; added 7-May-11
	PrintColor  color switch (1 = B/W, 0 = color for printouts   ; added 7-May-11

COMMON lastpath,	(2-mar-98; 4-jan-00 overwrite_all)
	lpath			last path accessed in pickfile routine
	lfile			last file accessed in pickfile routine
	overwrite_all	switch to indicate ignore overwrite checks in file writes
COMMON alsRead,	(01-Jan-99)
	I_process	procedure to massage I_file (none, dark, OSA, both)
	Io_process	procedure to massage I_file (none, dark, OSA, both)
	S_file		name of sample data file  (NB I_file used by stacks !!)
	Io_file		name of reference data file
	I_col		Column number for sample data
	Io_col		Column number for reference data
	als_readin	method of processing sample, ref (data, ratio, absorption)
   Scan_Par_Update  switch to indicate updating paramaters during Browse
COMMON ax_logo_com, (29-jan-00)
	ax_logo		array of logo_num logo images
	logo_rate	display rate
	logo_num	number of images
	logo_now 	current image
	logo_size	size of image (gr_scale*360)
   frontpanel	if = 1 then front panel (single or rotating) is up
	logo_more	if = 1 continue displaying logo
	logo_win	array of pixmap indices
	logo_R		red color
	logo_G
	logo_B
 COMMON asfcom (25-nov-01)
	sf_cmpd		formula
	sf_emin		minimum energy
	sf_emax		maximum energy
	sf_mode		tpye of calculation (trans or mass abs)
	sf_density	density
	sf_thick	thickness
 COMMON tofcom  (14-feb-04)
	tofE		photon energy
 	stop1		stop # 1
	stop2		stop # 2
	bin_ns		bin size
	tof1_min	minimum time for stop 1
	tof1_max	maximum time for stop 1
	tof2_min	minimum time for stop 2
	tof2_max	maximum time for stop 2
 COMMON logtext  (14-sep-04)
	log_last_line  index of last line in Widget_text box in panel
 COMMON MCF_EVENT, mcf  (26-Oct-04)  for multi-column ascii file read-in
	MCF_ID		widget ID
	MCF_Channel_List  list of channels
	mcf_ext		current file extension
	MCF_Xcol	column for X
	MCF_Ycol_I	column for Y_I
	MCF_Ycol_I0	column for Y_I0
	convert_OD_flag  set to read I, Io columns from multicolumn file
	MCF_rows	# of rows to skip
	MCF_lasfile	name of last file
	MCF_lastrow	last row
 COMMON aparam2   mesh_x, mesh_y, Io-val, nsmooth
	mesh_x		#y-pixels to interpolate images to
	mesh_y		#y-pixels to interpolate images to
	Io_val		value of Io for converting images to OD
	nsmooth		number of smooths (Savitsky-Golay or median)
	xrf_cols_start	first non-zero column in the XRF maps written by INCA
	xrf_cols_stop	last non-zero column in the XRF maps written by INCA
	xrf_rows_start	first non-zero rows in the XRF maps written by INCA
	xrf_rows_stop	last non-zero rows in the XRF maps written by INCA
	xrf_map_width	size (um) along x-axis
	xrf_energy		beam energy (eV)
	xrf_dwell		pixel dwell time (ms)
 Common aparam3,	   img_bin, img_SumAdd, spec_bin, spec_SumAdd
	img_bin			factor to bin images by
	img_SumAdd		switch from (Average) to (Sum) when binning images
	spec_bin		factor to bin spectra by
	spec_SumAdd		switch from (Average) to (Sum) when binning spectra
	dist_xy			2-d float - X_factor, Y_factor distortion parameters used by AX_XYDIS
 COMMON aptycho,		ptycho_E, ptycho_pix, ptycho_dwell		(01-Dec-12)
	ptycho_E		energy of ptycho image
 	ptycho_pix		pixel size (nm) of ptycho image
	ptycho_dwell	dwell time used to record ptycho image
 COMMON ansls,		(2-mar-98)
   SD			ScanData - structure containing info of NSLS image scan
				sd.wavelength - photon wavelength
				sd.dwell - pixel dwell for images
				sd.clock_frequency - something involved with count normalization


MODIFICATION HISTORY:
 (16-Nov-99 aph) last addition
 (02-jan-00 aph) AXIS standard documentation
 (10-dec-00 cgz) added CurrentPath to COMMON aPATHS
 (25-NOV-01 APH) add asfcom
 (28-dec-01 aph) add pixelX, pixelY to COMMON aCurs1;
				   frontpanel to ax_logo_com; img_rep_line to aselect
 (29-dec-01 aph) add aROTATE  ax_angle, ax_centre  ; alphabetized common blocks
 (31-dec-01 aph) add AxSpin to ADRAWID
 (16-feb-02 aph) add ascalebar
 (14-feb-04 aph) add tofcom
 (14-sep-04 aph) add log_text, log_last_line  (to use for storable log)
 (26-oct-04 aph) incorporate mcf_com
 (25-Feb-05 aph) add a_param2 - these ones are NOT set at start so must use
                if n_Elements(parameter) EQ 0 then parameter = 'initial value'
 (23-Apr-05 aph) add nsmooth to a_param2
 (11-mar-07 aph) add flag for ring current normalization
 (17-Aug-08 aph)  not annotated change
 (17-Sep-08 aph) moved aselect down to see if there si a limit of recursive common
 (01-feb-09 aph) add xy_correct_flag
 (7-mar-10 aph) added sbin
 (27-mar-10 aph) added xrf_cols, xrf_rows (range of data for inca XRF maps)
 (11-mar-10 aph) add xrf_energy, xrf_dwell
 (25-Jul-11 aph) add img_bin, img_SumAdd, spec_bin, spec_SumAdd to aparam3
 (11-Dec-11 aph) add dist_xy to aparam3
 (21-Nov-12 aph) add mcf_Y_I0 to allow auto conversion to OD
 (01-Dec-12 aph) add COMMON aptycho
 (20-Jul-14 aph) add Axes, to aOPTIONS
 (29-Mar-15 aph) removed last comment line - Eclipse IDL 8.3 did not like

(See c:\axis2000\axis_com.pro)


AXIS_DIALOG

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AXIS_DIALOG

LAST CHANGED: -----------------------------------  02 Aug 2015 (aph)

PURPOSE:
	This procedure creates the widget for use with aXis2000

CATEGORY:
	AXIS: data analysis

CALLING SEQUENCE:
	AXIS_DIALOG

INPUTS:  NONE

KEYWORDS:  NONE

OUTPUTS: NONE

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

MODIFICATION HISTORY:
 (10-mar-00 cgz) initially written
 (30-mar-00 cgz) modifications to acommadate changes by APH in AXIS
 (30-may-00 cgz) modifications to acommadate changes by APH in AXIS
 (09-dec-00 cgz) reconciliation with AXIS v.2.0.b
 (29-dec-00 aph) remove SVD-map from images menu; change Zoom; thumbnails submenus
 (04-jan-01 cgz) created menu button bar for most frequently accessed simple functions
			modified lineout options for reduced screen use, i.e., laptops
 (22-jan01 cgz) reduced space gap between row of pull down menus and buttons
 (05-feb-01 aph) extend images~average pixels_all; utilities~change mesh re-introduced
 (11-feb-01 aph) add read_bl5 menu items
 (13-feb-01 aph) add spectra~curve fit
 (21-feb-01 aph) add ALS XM-1 image read-in
 (17-apr-01 aph) update identifier to reflect changes
 (07-jun-01 aph) introduce ALS PEEM widget - not functional as of 26-jun-01
 (27-jun-01 aph) read_stxm4 nsls image read in
 (12-jul-01 aph) convert stxmIV for stack read-in
 (27-jul-01 aph) add CGO procedure for stack mapping
 (12-aug-01 aph) add widget for PEEM tif to netCDF conversion
 (29-aug-01 aph) add 5.3.2 stack read in
 (30-sep-01 aph) add Read~spectra~nsls~stxmIV
 (07-oct-01 aph) colorbar fills sub-wiget; rearrangement of panel (gamma to bottom; etc)
 (14-oct-01 aph) SPECTRA: add additional processing
 (28-oct-01 aph) add WRITE_SDF
 (26-nov-01 aph) re-order
 (19-dec-01 aph) version increment
 (28-dec-01 aph) add image~replace_line (to fix up early 5.3.2 errors); frontpanel
 (31-dec-01 aph) add utilities~Execute macro; add PNG write and read
 (16-feb-02 aph) add utilities~scale bar
 (30-mar-02 aph) move overplot command to main line menu
 (17-apr-02 aph) add Elmitecx readin
 (28-apr-02 aph) adapt Elmitec read-in to *.dat (binary format)
 (08-may-02 aph) introduce sphinx stack read-in (adapted ALS PEEM)
 (12-may-02 aph) modify display comand order; delete read~stxm532_early
 (16-jul-02 aph) VERSION J started ;  elmitec peem read-in
 (28-jul-02 aph) clean up log entries on aXis2000 start-up
 (06-aug-02 aph) add Andy Smith's tif_convert for ALS (&SRC) PEEM data
 (09-sep-02 aph) add ax_one_pt
 (30-oct-02 aph) add sphinx-spectra
 (15-feb-03 aph) add multi-column spectral read-in
 (12-mar-03 aph) version identifier set to 2.1m  for release
 (02-jun-03 aph) improve PEEM data conversion
 (18-jun-03 aph) update banner : stack_analyze & stack_fit improvements
 (20-sep-03 aph) add absolute value to spectral processing; multiply buffers
 (15-nov-03 aph) histogram
 (30-dec-03 aph) redfine version (force monotonic in fitting introduced)
 (14-feb-04 aph) add read_all for TOF
 (20-feb-04 aph) add stacks~convert~TOF-all
 (10-Apr-04 aph) add image~remove_zeros
 (02-may-04 aph) update to 2.1p
 (17-may-04 aph) add Lox read-in
 (09-jun-04 aph) update version to 2.1q
 (28-aug-04 aph) update version to 2.1p
 (14-sep-04 aph) add image~average~whole~non-zero function
 (17-0ct-04 aph) add stack_add; change STXM_5.3.2 to ALS_STXM
 (28-Oct-04 aph) change order of stack analysis widgets
 (20-nov-04 aph) generalize binning of images, files
 (21-jun-05 aph) update version
 (03-feb-05 aph) add REGRESS based curve fits
 (20-feb-05 aph) fixed Ax_regress plotting; ALS_STXM map; re-order stacks menu
 (21-mar-05 aph) add utilities~write axis ascii
 (25-mar-05 aph) revise dialog to remove unused buttons
 (28-may-05 aph) revise for correction to PEM_load.pro etc
 (14-Jun-05 aph) fixed non-monotonic (I hope!); improve tif_convert; fix oplot 1-point sections of non-monotonic spectra
 (17-Jun-05 aph) various updates (ALS_STXM, map, 1-image with regions; etc)
 (20-jul-05 aph) update version (stack analyze color problem fixed
 (08-aug-05 aph) add write~litho; remove Sphinx_nc
 (18-sep-05 aph) add reset-color, display~RGB image
 (18-oct-05 aph) add read_lox
 (03-nov-05 aph) add read_xyt and procedure to mask patterns for integration
 (13-nov-05 aph) update tag line
 (14-dec-05 aph) add stacks~tomography~convert
 (28-jan-06 aph) add read~images~roi
 (04-Feb-06 aph) update version identified and some menu labels
 (09-feb-06 aph) read PEEM2 AOIs added
 (16-feb-06 aph) update colors; layout; fix slider (removed /drag)
 (23-feb-06 aph) add access to slicer3; re-arrange read~image to simplify
 (05-mar-06 aph) fix img_warp
 (22-mar-06 aph) fix channel selection in Lox read-inn; normalize to 400 mA (STXM-sdf)
 (15-Apr-06 aph) add convert to BE
 (21-apr-06 aph) improve stack_analyze (auto zoom, roi)
 (26-apr-06 aph) read jpg images (1); convert sequence of jpg images
 (01-may-06 gaj) add convert NCB to MRC
 (04-may-06 aph) polarization fit to polarization signals and stacks
 (31-may-06 aph) remove /scroll on initial definition of base; reformat right side a bit
 (10-jun-06 aph) add routine to convert set of SDF images into a stack; JSO adaptation of stack_analyse
 (12-jun-06 aph) add images~roi~lox
 (12-jun-06 gaj) add stacks~convert format~mrc to ncb
 (21-jul-06 jso) added spectra~convert_to_OD1
 (01-Aug-06 gaj) add stacks~convert format~ncb to mpg for making movies
 (13-aug-06 aph) integrate GAJ and JSO changes
 (22-sep-06 aph) re-arrange stack~convert menu; fix line_fit  (B. Watts bug finder)
                 incorporate Remy Coulombe's region analysis for PEEM
 (06-oct-06 aph) Remy's region, stack_analyze & axis_dialog update
 (12-Nov-06 aph) add stacks~append, generate_mask~manual
 (04-Dec-06 aph) use scroll bar only for windows operating systems
 (20-Jan-07 aph) add read-in for ALS PEEM3 format images, spectra and stacks
 (11-mar-07 aph) update version
 (01-jun-07 aph) add link to PCA_GUI, update version
 (14-jul-07 aph) add stacks~tomography~axb
 (13-Sep-07 aph) update version
 (10-Dec-07 aph) add bin Lox stacks
 (29-Dec-07 aph) add  stack~ax_rgb_widget; stack~transmission
 (01-Feb-08 aph) convert_to_OD fixed and menu changed
 (21-Mar-08 aph) update version
 (20-Apr-08 aph) update version
 (04-Jun-08 aph) update version; change XAS spectrum to multi-col
 (15-Jun-08 aph) update version
 (17-sep-08 aph) add in CJJ stack_analyze
 (11-oct-08 aph) add read Bessy stxm images
 (26-Dec-08 aph) start Read~stacks menu item; add read_ftir (IR maps from Nicolet / soleil)
 (12-Jan-09 aph) add stack~differentiate menu item
 (01-Feb-09 aph) update date of package
 (07-Mar-09 aph) update package
 (03-Aug-09 aph) update package; alphabetize some menus
 (17-Aug-09 aph) update package
 (17-Dec-09 aph) add read in for Twinmic data
 (28-Dec-09 aph) add spectra~fix rollover
 (22-Jan-10 aph) add read-in of XRF stacks from STXM_control
 (16-feb-10 aph) emsa ascii image read-in; MCA (Amptek) read-in; DM data cube read-in
                 inca (SEM EDX maps) read-in
 (21-Feb-10 aph) move Twinmic conversion to stacks_xrf
 (26-feb-10 aph) add aXis binary (*.ncb) to ascii spectra (*.cts)
 (15-mar-10 aph) update date; improvements for CLS XRF (XGLabs), spectra_bin corrected
 (27-mar-10 aph) update version
 (21-apr-10 aph) add read in & process of stack-of-stacks
 (12-Jun-10 aph) add read_ascii_img - 2d text image
 (21-Jun-10 aph) add XRF-map readin for APS and CLS XRF systems
 (24-Jul-10 aph) re-activate Rstack_analyze; new version; add READ~STACKS~XRF~XGLabs~HDF5
 (03-Oct-10 aph) fix read-XRF-stack problems for 1-energy read-in; update version
 (03-Feb-11 aph) image~threshold menu changed; add stack~mesh; new version
 (09-Feb-11 aph) new version (to correct ax_mesh & other errors)
 (22-apr-11 aph) add remove lines (for 5321 errors)
 (07-May-11 aph) change defaults on print; remember choices
 (17-May-11 aph) update version identifier
 (31-Jul-11 aph) update version; add read~spectra~alignment
 (29-Oct-11 aph) add read Bessy_TXM (images, stacks)
 (22-nov-11 aph) add Images~Modify X,Y axes
 (24-Nov-11 aph) update version identifier
 (29-Nov-11 aph) change tag for stacks~aXis (stack list)
 (14-Dec-11 aph) new version; change some command names
 (03-Feb-12 aph) update version identifier
 (15-Jul-12 aph) update version; clip numerical
 (02-Sep-12 aph) update version
 (26-Nov-12 aph) add stack rotation command
 (02 Dec-12 aph) add read in for ptychography data
 (15-Jan-13 aph) update version
 (11-Mar-13 aph) add Saga-LS peem stack read_in ; update version
 (28-Apr-13 aph) add Xradia txrm read-in (request of Shanghai STXM)
 (09-May-13 aph)  new version
 (28-Jul-13 aph) add read-in of NSRRC SPEM images
 (31-Aug-13 aph) add read-in of NSRRC PEEM stacks; add Write~graphics to parallel Read~graphics
 (14-Nov-13 aph) add stacks~tomography~make tomo list; activate stack
 (21-Dec-13 aph) change date
 (26-Feb-14 aph) get write_tif working
 (21-Apr-14 aph) change version
 (02-May-14 aph) tif_to_ncb introduced (for Sam Kalirai; TXM@SSRL)
 (12-May-14 aph) add line-by-line stack Io conversion; change stack_analyse to stack process
 (30-Jun-14 aph) change version
 (20-Jul-14 aph) change display to remove tics & axis labels for 2d data (change xz_profile size)
 (25-Oct-14 aph) increase space for X,Y,x and pixel values for Win-7 (digits lost)
 (29-Oct-14 aph) change version
 (01-Dec-14 aph) change version
 (15-Jan-15 aph) change version (ax_displat_ptycho; fix img_warp, stacks~bin~energy)
 (01 Apr-15 aph) add alba-txm read-in; change version
 (02-Jul-15 aph) change version
 (13-Jul-15 aph) add Nexus read=in (SLS, Bessy-2, Diamond STXM format)
 (02-Aug-15 aph) new version - first aph-supported unix/MacOS & Windows

(See c:\axis2000\axis_dialog.pro)


AXIS_INI

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AXIS_INI

LAST CHANGED: ----------------------------------- 24 Jul 2015 (aph)

PURPOSE:
	This function reads and manages writing a file 
	which has default values for various aXis2000 parameters 

CATEGORY:
	AXIS: utility

CALLING SEQUENCE:
	test = AXIS_INI(file=file, out=out, set = set)

CALLED FROM AXIS:
 at start up and Quit

INPUTS: none

KEYWORDS:
	FILE - initialization file name
	/OUT - write initialization file
	/SET - interactive setting of default values

OUTPUTS:
	axis.ini (or user defined file name)

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

PROCEDURE:
 looks up  default values from AXIS.INI or a user-defined file
 if no file, establish defaults
 on exit from AXIS writes out default values to AXIS.INI or a user-specified file

MODIFICATION HISTORY:
 (28-jun-98 aph) first version
 (12-dec-98 aph) introduce font switching for widget (to adapt IDL 4, IDL 5)
 (13-dec-98 aph) add /set option
 (29-dec-98 aph) use AXIS_OPTIONS to establish defaults (IDL 5.2)
 (03-Jan-99 aph) set default WIN font to Arial*14; switch on 5.2 NOT 5
 (11-May-99 aph) establish axis_ini_save subroutine;
				  allowed 'Printer' to be full command line, not just language
 (24-may-99 aph) extend to include HELP file command
 (16-nov-99 aph) 'loc' -> 'location' to see if this is why it is not preserved
 (02-jan-00 aph) AXIS standard documentation
 (31-jan-00 aph) add  net browser command
 (27-feb-00 aph) add groupID to get_text
 (07-apr-00 aph) modify to force saving to codepath area by passing on file to axis_ini_save
 (30-nov-00 cgz) added statements to ensure that no leading or trailing spaces are
				included in parameters once read in from *.ini file
 (05-dec-00 cgz) reversed order of AXIS_INI and AXIS_INI_SAVE
 (09-dec-00 cgz) added conversion of float(strtrim(gr_scale,2))
 (23-jan-01 cgz) added dialog to axis_ini_save, also cleaned up logical path
 (31-jan-01 aph) change prompt
 (22-apr-01 aph) fix crash when load using axis.ini from separate directory - drop axis_options
 (07-oct-01 aph) re-activate axis_options
 (28-oct-04 aph) allow for rescue if user pushes 'cancel' on 'exit'
 (08-nov-04 aph) fix problem that axis2000 does NOT use saved last_file / path information
            problem was LPath not DefPath was saved, but previously it worked; probably was change in axis_ini_save
 (24-jan-05 aph) replace test for read-in which failed in IDL5.2
 (11-Jan-10 aph) removed the  axis_ini_save code to its own pro file (isolated axis_ini.pro)
 (19-Nov-11 aph) automatically save to default axis.ini file location, but ask if cannot find it
 (21-Jul-14 aph) save last file name, not just last path
 (30-Nov-14 aph) ensure last filename saved (was not working from July 2014 change)
 (24-Jul-15 aph) write axis_win.ini or axis_unix.ini depending on the operating system ( !version.os_family )

(See c:\axis2000\axis_ini.pro)


AXIS_INI_SAVE

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AXIS_INI_SAVE

LAST CHANGED: ----------------------------------- 02 Aug 2015 (aph)

PURPOSE:
	This function  writes paramaters defining how aXis2000 opeates to a file
 'axis.ini' in the CodePath folder

CATEGORY:
	AXIS: utility (captive

CALLING SEQUENCE:
;   test = AXIS_INI_SAVE (filename = filname)

CALLED FROM AXIS:
  at  Quit

INPUTS: none

KEYWORDS:
	FILENAME - initialization file name (optional)

OUTPUTS:
	on Windows OS  axis_win.ini  (or user defined file name)
 on Unix    OS  axis_unix.ini (or user defined file name)

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

PROCEDURE:
 on exit from AXIS writes out default values

MODIFICATION HISTORY:
 (28-jun-98 aph) first version
 (12-dec-98 aph) introduce font switching for widget (to adapt IDL 4, IDL 5)
 (13-dec-98 aph) add /set option
 (29-dec-98 aph) use AXIS_OPTIONS to establish defaults (IDL 5.2)
 (03-Jan-99 aph) set default WIN font to Arial*14; switch on 5.2 NOT 5
 (11-May-99 aph) establish axis_ini_save subroutine;
				  allowed 'Printer' to be full command line, not just language
 (24-may-99 aph) extend to include HELP file command
 (16-nov-99 aph) 'loc' -> 'location' to see if this is why it is not preserved
 (02-jan-00 aph) AXIS standard documentation
 (31-jan-00 aph) add  net browser command
 (27-feb-00 aph) add groupID to get_text
 (07-apr-00 aph) modify to force saving to codepath area by passing on file to axis_ini_save
 (30-nov-00 cgz) added statements to ensure that no leading or trailing spaces are
				included in parameters once read in from *.ini file
 (05-dec-00 cgz) reversed order of AXIS_INI and AXIS_INI_SAVE
 (09-dec-00 cgz) added conversion of float(strtrim(gr_scale,2))
 (23-jan-01 cgz) added dialog to axis_ini_save, also cleaned up logical path
 (31-jan-01 aph) change prompt
 (22-apr-01 aph) fix crash when load using axis.ini from separate directory - drop axis_options
 (07-oct-01 aph) re-activate axis_options
 (28-oct-04 aph) allow for rescue if user pushes 'cancel' on 'exit'
 (08-nov-04 aph) fix problem that axis2000 does NOT use saved last_file / path information
            problem was LPath not DefPath was saved, but previously it worked; probably was change in axis_ini_save
 (24-jan-05 aph) replace test for read-in which failed in IDL5.2
 (11-Jan-10 aph) put this code into a separate axis_ini_save.pro file (isolated from from axis_ini.pro)
 (19-Nov-11 aph) automatically save to default file & location, but ask if cannot find it
 (18-Aug-12 aph) get to work on both Mac and Win versions
 (21-Jul-14 aph) save last file name as well as path
 (30-Nov-14 aph) make print both folder (DefPath) and last filename (lfile) ==> REMOVED 2-Aug-15 (did not work right)
 (24-Jul-15 aph) change to write different files for Windows and Unix
 (02-Aug-15 aph) sort out why Zimba (zstack_analyze) does not write path

(See c:\axis2000\axis_ini_save.pro)


AXIS_LOG

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		AXIS_LOG

LAST CHANGED: ----------------------------------- 	22-Jul-10

 PURPOSE:
	This procedure displays messages in the aXis2000 log buffer, the IDL log area
 and (when implemented!!) the saved log file for a session

 CATEGORY:
	utility.

 CALLING SEQUENCE:
	AXIS_LOG, TEXT, CLEAR = clear, CLOSE = close, OPEN = open

 INPUTS:
   TEXT   text string to display

 KEYWORDS:
	CLEAR	clear the aXis2000 log buffer (DEFAULT is to append)
	CLOSE	close current session log file
	OPEN	open a session log file (close any existing open log)

 OUTPUTS:
	Display in Uprompt Widget_Text box
	print to IDL log and (optionally) a log file

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

 SIDE EFFECTS: none

 RESTRICTIONS:
	Log file not yet implemented

 MODIFICATION HISTORY:
 (14-sep-04 aph) first created
 (16-jun-05 aph) ensure works outside axis2k
 (13-Nov-05 aph) force log_last_line to be scalar
 (05-jun-06 aph) .... and force log_last_line(0) when used (IDL5.2)
 (22-Jul-10 aph) fix error when called without starting aXis2000 
    and thus not having Uprompt (Widget_ID for the log text box) defined (IDL7.1)

(See c:\axis2000\axis_log.pro)


AXIS_OPTIONS_EVENTCB

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AXIS_OPTIONS_EVENTCB

LAST CHANGED: ----------------------------------- 11-Jan-10

PURPOSE:
	This set of procedures are the event processing for the AXIS_OPTIONS widget.

CATEGORY:
	AXIS: utility

ROUTINES
 AXIS_Opts_Update - loads current default values into AXIS_OPTIONS widget
 BUT_Update, Event - takes info from the AXIS_OPTIONS widget
                     and writes the ini file
	BUT_Cancel	- cancel
	BUT_WIN		BUT_X		BUT_OpSys_Other	TXT_Set_Op_Sys - op. system
	BUT_PS	BUT_PCL		BUT_Print_Other		TXT_Set_Print_device - printer
	BUT_Mac	BUT_ALS	BUT_NSLS	BUT_Location_Other	TXT_Set_Location - location
	BUT_Size_050	BUT_Size_075	BUT_Size_100	BUT_Size_125
	BUT_Size_150	- size of AXIS
	Zero_buts	- sets exclusive buttons to zero on starting widget
	Load_def_Win	- loads default parameters for Windows systems
	Load_Def_X		- loads default parameters for unix systems
	BUT_INI_Browse	BUT_SOURCE_Browse	BUT_DATA_Browse	BUT_Print_Browse
	browse for file names
	axis_options_eventcb - auto loading stub

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

PROCEDURE:
 	works with AXIS_OPTIONS.PRO Widget to establish AXIS defaults

MODIFICATION HISTORY:
 Generated on:	12/28/98 21:13.49
 (aph 29-Dec-98) first written using new IDL 5.2 GUIBuilder (aph^2)
 (aph 03-Jan-99) set Windows default font to Arial*14
 (aph 24-May-99) revise to display/modify Pr_command (replace print_file)
 (16-nov-99 aph) change 'loc' to 'location' (for place specific features)
 (03-jan-00 aph) AXIS standard documentation
 (31-jan-00 aph) add Web browser command; re-arrange
 (30-dec-00 aph) merged with axis_options to make run with Zimba compile-on-fly
 (22-apr-01 aph) attemt to get working - no go !!
 (07-oct-01 aph) got working in aXis2000; only turns on (from axis.ini) in Windows
 (aph 11-Jan-10) changed axis_ini_save call from procedure to a function (ITT support bug fix)

(See c:\axis2000\axis_options.pro)


AXIS_PEEM_UPDATE

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AXIS_PEEM_UPDATE

LAST CHANGED: ----------------------------------- 11-Jan-10

PURPOSE:
	This set of procedures are the event processing for the AXIS_PEEM peem processing widget.

CATEGORY:
	AXIS: utility

ROUTINES
 AXIS_Opts_Update - loads current default values into AXIS_OPTIONS widget
 BUT_Update, Event - takes info from the AXIS_OPTIONS widget
                     and writes the ini file
	BUT_Cancel	- cancel
	BUT_WIN		BUT_X		BUT_OpSys_Other	TXT_Set_Op_Sys - op. system
	BUT_PS	BUT_PCL		BUT_Print_Other		TXT_Set_Print_device - printer
	BUT_Mac	BUT_ALS	BUT_NSLS	BUT_Location_Other	TXT_Set_Location - location
	BUT_Size_050	BUT_Size_075	BUT_Size_100	BUT_Size_125
	BUT_Size_150	- size of AXIS
	Zero_buts	- sets exclusive buttons to zero on starting widget
	Load_def_Win	- loads default parameters for Windows systems
	Load_Def_X		- loads default parameters for unix systems
	BUT_INI_Browse	BUT_SOURCE_Browse	BUT_DATA_Browse	BUT_Print_Browse
	browse for file names
	axis_options_eventcb - auto loading stub

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

PROCEDURE:
 	works with AXIS_OPTIONS.PRO Widget to establish AXIS defaults

 RESTRICTIONS
 does not work !!! - from cgz changes to axis Nov00 to Jan01

MODIFICATION HISTORY:
 (aph 03-jun-01) first written - adapted from axis_options
 (aph 11-Jan-10) changed axis_ini_save call from procedure to a function (ITT support bug fix)
                 removed all routines except AXIS_PEEM_update and

(See c:\axis2000\axis_peem_update.pro)


AXIS_READ_IMAGE

[Previous Routine] [Next Routine] [List of Routines]
NAME: 
	AXIS_READ_IMAGE 
 
LAST CHANGED: ----------------------------------- 03-jan-00 
 
  This function reads image files from formats defined 
 by the filename extension into the standard AXIS 2d data structure. 
 If a file name is not supplied or if the file cannot be found 
 the user is asked to identify the file of interest. 
 The extension of the file is set as the default extension 
 for future image reading. 
 
 CATEGORY: 
	AXIS: utility 
 
CALLED FROM AXIS: 
	used in some procedures (SVD ..) 
 
 CALLING SEQUENCE: 
	Result = AXIS_READ_IMAGE( [file=file, /axis] ) 
 
 INPUTS: none 
 
 KEYWORD PARAMETERS: 
	FILE:	name of file to be read (including path) 
	AXIS:	flag to indentify if called from AXIS 
 
 OUTPUTS: 
  This function returns a 2d AXIS data structure 
   s = {t:'2d', x:x, y:y, d:d, xl:x_label, yl: y_label, dl: data_label} 
 
 COMMON BLOCKS: 
   @AXIS_COM - set of common blocks for AXIS 
   @BSIF_COM - common block for netCDF 
 
 PROCEDURE: 
 	This function is a front end for a number of routines used to read in 
   the various data formats that AXIS supports. 
	FORMAT         PROCEDURE	EXTENSION 
 --------------------------------------- 
	AXIS			AXB_LOAD	*.axb 
	ALS-STXM		READ_ALS	*.im% 
	NSLS-old		READ_BNL	*.nc 
	NSLS-cryo		READ_CRYO	*.sxm 
	ALS-PEEM		READ_PEEM	*.tif 
 
 Although not implemented (as of 3-Jan-00) the idea is 
 to develop auto file identification and read-in capability. 
 
 EXAMPLE: 
 	a = axis_read_image(file='f:\stxm\9909\914\90914100.im1') 
 
 MODIFICATION HISTORY: 
 (17-Oct-99 aph) first version 
 (03-jan-00 aph) AXIS standard documentation 

(See c:\axis2000\axis_read_image.pro)


AXIS_START.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME: 
	AXIS_START.PRO 
 
LAST CHANGED: ----------------------------------- 20-May-00 
 
PURPOSE: 
	This set of procedures is a widget to guide IDL start-up 
 
CATEGORY: 
	STAND ALONE: utility 
 
CALLING SEQUENCE: 
	AXIS_START 
 
ROUTINES 
	AXIS_START_BASE_event, event 
	AXIS_START_BASE, GROUP_LEADER=wGroup, _EXTRA=_VWBExtra_ 
	AXIS_start, GROUP_LEADER=wGroup, _EXTRA=_VWBExtra_ 
 
INPUTS: none 
 
KEYWORDS: none 
 
COMMON BLOCKS: none 
 
MODIFICATION HISTORY: 
 Generated on:	09/26/99 11:48.55 
 (5-nov-99 aph) larger zimba button 
 (20-may-00 aph) AXIS standard documentation 

(See c:\axis2000\axis_start.pro)


AXIS_WEB

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AXIS_WEB

LAST CHANGED: ----------------------------------- 21-Feb-10

PURPOSE:
	This procedure executes a net browser command to access
 synchrotron or other sites via the web.
 The browser command will be system / computer specific and is
 contained in the axis.ini initialization file

CATEGORY:
	AXIS: utility (captive)

CALLING SEQUENCE:
	AXIS_WEB, event_X, event_Y

CALLED FROM AXIS:
	executed while the earth logo visible only

INPUTS:
	EVENT_X - from Xmanager, X-value of pixel clicked
	EVENT_Y - from Xmanager, Y-value of pixel clicked

KEYWORDS:
	SITE - code for web site to go to (to use from "utilities/XRM sites")

OUTPUTS:
	A new window with the web info is generated.

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

SIDE EFFECTS:
	A window is created/destroyed.

PROCEDURE:
	uses IDL spawn command. The form of the Net command MUST be one
 that will operate from an MS-DOS window in win-95. Thus 8.3 file names and
 no embedded blanks in paths.


MODIFICATION HISTORY:
 (31-jan-00 aph) first created; adapted to variable size
 (22-aug-00 aph) add link to aXis2000 home base
 (22-aug-01 aph) update axis2000 home base
 (25-Feb-08 aph) update web links
 (21-feb-10 aph) add Elettra, SSRL, update all links and test

(See c:\axis2000\axis_web.pro)


AX_ANGLE_STACK

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		AX_ANGLE_STACK

LAST CHANGED: ----------------------------------- 10-Nov-13 (aph)

 PURPOSE:
	This function processes a set of folders containing multi-images stacks
 for generating an angle stack of a single image or image difference (map)
 used for tomography data read-in. It can aslo combine all images at all angles into a single stack

 CATEGORY:
	Input / output utilty; aXis2000 or stand alone

 CALLING SEQUENCE:
	Result = AX_GEN_STACK(GROUP=GROUP, CHANNEL=CHANNEL, MAP=MAP, IMAGE_NUM=IMAGE_NUM)

 INPUTS: none
  [asks for *.lst is a file giving path then a set of {folder name, angle}]

 KEYWORDS
	CHANNEL			number of data channel (default = 1)
	GROUP 			ID of calling program
	IMAGE_NUMBER	number of *.xim image to use (requested if not supplied)
	MAP				if set, use 2 different images to generate angle stack of a 2-E map
	REGION			region of data
   STACK           combine all images into a single stack where E(i)= 1000*angle + image#
        e.g.  angle = 2.5 (rounded to nearest 0.1)   with 3 images(0,1,2) have E = 2500.0, 2501.0, 2502.0

 OUTPUTS: binary format (*.ncb) stack written

 COMMON:
	AXIS_com
	BSIF_com
	stack_process_com
   VOLUME_DATA

 USAGE:

 format of list file for tomography applications is
 path
 name1, angle1
 name2, angle2
 . . . .
 where name1  is the name of the FOLDER containing the stack measured at angle 1


 MODIFICATION HISTORY:
 (09-Jun-06 gaj) first version for use in axis and stand alone (for tomography)
 (10-jun-06 aph) linked into aXis2000
 (30-jul-09 aph) changed analcom to stack_process_com (update to stack_process)
 (16-Feb-10 aph) added @ to stack_process.com inclde !!
 (01-Jun-11 aph) add image_num  parameter to select a specific image; get working !!
 (31-Jul-11 aph) generalize to get maps from 2-energies
                 change function name from ax_gen_stack to ax_angle_stack
 (10-Nov-13 aph) generate full stack of all images

(See c:\axis2000\ax_angle_stack.pro)


AX_BIN

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_BIN

LAST CHANGED: ----------------------------------- 13-Jan-15

PURPOSE:
	This procedure bins one or more image files in various formats
 BIN times (2 implies (2x2) pixels merged to 1 pixel ETC
	If NetCDF image files (*.nc) it reads one or a sequence of files
 If the energy keyword is set, the data is binned in energy rather than spatial dimensions
 The smoothed image is written into b______.nc
 where _____ is all but first letter of name suplied

CATEGORY:
	AXIS: stack analysis

CALLING SEQUENCE:
	AX_BIN, list [, bin=bin, one=one, energy=energy, stack=stack, lox = lox ]

CALLED FROM AXIS:
	->Stacks->bin.{current image, NSLS.{1,file}, stack (*.ncb,lox)}

INPUTS:
	LIST = file containing list of *.nc files (typically a *.sl stack list)

KEYWORDS:
	BIN =  number of (#x#) pixels (or energies)  to average
 ENERGY - if set, bins stack data in energy rather than spatial dimension
	ONE     - if set, read in only a single file (use pickfile dialog if needed)
	LOX		- lox stack data set
 STACK   - process a *.ncb binary stack file

OUTPUTS:
	b_____.nc binned file written in default subdirectory
   stack____s.ncb

COMMON BLOCKS:
	AXIS_COM	standard set of common blocks
	BSIF_COM	NetCDF common block
	STACK_PROCESS_COM
	VOLUME_DATA

MODIFICATION HISTORY:
 (aph 12-jan-99) first written - adapted from ax_rd_im, bin
 (aph 17-May-99) corrected to resize on x as well as y
 (31-dec-99 aph) AXIS standard documentation
 (09-jan-00 aph) fixed up output filename to remove ___nc.nc
 (20-nov-04 aph) add bin of stacks; activate read one *.nc file
 (10-dec-07 aph) add lox stack binning
 (23-Jul-10 aph) add energy binning
 (13-Jan-15 aph) correct code errors in energy binning

(See c:\axis2000\ax_bin.pro)


AX_BINF

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_BINF

LAST CHANGED: ----------------------------------- 29-Oct-11

PURPOSE:
	This function bins an image provided as a aXis2000 2d structure

CATEGORY:
	AXIS: data analysis; stand alone

CALLING SEQUENCE:
	RESULT = AX_BINF(image, bin=bin)

CALLED FROM AXIS:
	-> used in read_bessy_txm.pro (large CCD images)

INPUTS:
	image = aXis2000 2d structure

KEYWORDS:
	AXIS	= flag to identify called from AXIS
	BIN =  number of (#x#) pixels (or energies)  to average
	SILENT 	flag, if set, do not print tracking comments

OUTPUTS:
	returns the binned image and modifed x, y scales as a replacement structure

COMMON BLOCKS:
	AXIS_COM	standard set of common blocks
	BSIF_COM	NetCDF common block

MODIFICATION HISTORY:
 (29-Oct-11 aph) first evolved from ax_bin procedure

(See c:\axis2000\ax_binf.pro)


AX_CGO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_CGO

LAST CHANGED: ----------------------------------- 308-Jul-09

PURPOSE:
	This procedure generates component maps by using
 pixel-by-pixel conjugate gradient optimization curve fitting. It handles
 an arbitary number of images fit to up to 8 components.
 Except for individual image by image read in mode, AX_CGO
 assumes all image files have similar SIZE.
 AX_CGO ignores (x,y) scales (no interpolation)

CATEGORY:
	STAND ALONE: image, stack analysis

CALLING SEQUENCE:
	AX_CGO [,  axis=axis, comp_images = comp_images, coeff = coeff, $
         help=help, images = images, stack = stack, verbose = verbose]

CALLED FROM AXIS:
	->Stacks->maps ->CGO curve fit

INPUTS:
	All inputs are through keywords. User is prompted for missing data.

KEYWORDS:
	AXIS - if on, then called from AXIS widget
	COEFF = fit parameter file with names of spectral files
	COMP_IMAGES = file with names of files to store component images (*.axb)
	HELP - set to print how-to-use statement
	IMAGES = file with list of images to be analysed
   STACK = name of a binary format stack (*.ncb)
	VERBOSE  - print additional documentation of SVD procedure

OUTPUTS:
	Component maps, residuals etc are output to disk.

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks
	stack_process_com
	COMMON volume_data, image_stack
	bsif_com

PROCEDURE:
	The images are first read in - either as a binary stack (if stack keyword set)
 or from the list of images, or from pickfile dialog.
 The absorption coefficents for each component at the energies of the images
 are then read in, either through interpolation of a reference spectrum
 (read in via pickfile dialog), or from a file of absorption coefficients
 in a  standard format (see example below, written by AX_CGO); or by manual input.
 The CGO_OPTIMIZE curve fit procedure is then applied on a pixel-by-pixel basis.
 Component maps are generated. written to files, and displayed either in
 IDL windows (if run stand alone) or in AXIS buffers.

 EXAMPLE:
 Absorption coefficient data file format (version as of Jul-01)
 # components
  (line per energy; E, sig-1  sig-2  sig-3   sig-4)
  (labels for the components)
 -----------------------
      4.00000
      281.824  0.000687768  0.000191430  0.000572100  0.000390513
      282.199  0.000678105  0.000192197  0.000618820  0.000361705
      282.574  0.000753450  0.000189890  0.000628327  0.000574156
      282.949  0.000803872  0.000187579  0.000724339  0.000398248
 ....
  mtx
  san
  pipa
  fg

MODIFICATION HISTORY:
 (27-jul-01 aph) first developed from ax_svd
 (06-oct-01 aph) add xl to temp plots to allow re-use
 (14-may-03 aph) modify paramter files to store names only
 (28-may-03 aph) force '.par' extension (pickfile, filter= & /write); comp_names
 (04-jun-03 aph) use ax_par_save & ax_par_load
 (30-dec-03 aph) add ax_sort_mono to force stack E-scale and reference spectral scales to be monotonic
 (20-jan-04 aph) use dialog_message to control residual stack writing
				  ensure E-value (0.0) added to component maps
 (21-jan-05 aph) increase default convergence to 1e-10
 (01-feb-05 aph) fix ax_sort_mono to use structure (ricochet change from lox change)
 (17-Sep-08 aph) replace analcom with stack_process_com
 (30-jul-09 aph) add stack name to component map label
                 truncate short name for component maps at the first space
				  changed spectral plotting to stack_fit approach - keeps original labels

(See c:\axis2000\ax_cgo.pro)


AX_CIMAGE.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		AX_CIMAGE.PRO

LAST CHANGED: ----------------------------------- 	12-Sep-07 (aph)

 PURPOSE:
	This procedure cleans up images by removing very low and very high values.
 These appear in some CCD camera outputs due to dead or easily saturated pixels

 CATEGORY:
	Image processing

 CALLING SEQUENCE:
 	RESULT = AX_CIMAGE(IMG_ARR)

 INPUTS:
	IMG_ARR  - 2-d array (integer, double or real)

 KEYWORDS: none

 OUTPUTS:
	Modified Image

 COMMON BLOCKS: none

 SIDE EFFECTS: none

 RESTRICTIONS: does not work if low contrast, Error trapped if flat image

 PROCEDURE:
	This procedure calculates a histogram and determine two levels (Top and Bottom)
 such that 2 rows worth of pixels are above and two rows worth of
 pixels are below these levels. The image is then clipped between Top and Bottom

 EXAMPLE:
	a=RD_PEEM()		; read in test ALS PEEM2 file (pass_test_data\ALS_PEEM2_full_0609_#020.tif)
	splot2d, a		; display to show out-of-limits aspects of image
	q=AX_CIMAGE(a)	; process - works for structures and images
	splot2d, q		; display to show correction of out-of-limits aspects

 MODIFICATION HISTORY:
 (22-Jan-07 as) Andreas Scholl provided routine as a solution to problem of arbitary removal
         of first 5 columns (causes dimensional problems); NB his code is object oriented IDL5.5;
		  translated back to IDL4.2 compatible code
 (12-Sep-07 aph) incorporated into aXis2000; AXIS standard header added

(See c:\axis2000\ax_cimage.pro)


AX_CLEAR

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_CLEAR

LAST CHANGED: ----------------------------------- 22-Jul-14 (aph)

 PURPOSE:
	This procedure clears one or more AXIS buffers.
 It is also used to display the AXIS logo on startup or an all-clear call

CATEGORY:
	AXIS: utility

CALLING SEQUENCE:
	AX_CLEAR [, all=all, select=select, current = current, spin=spin]

CALLED FROM AXIS:
	->Utilities->Clear->{current,selected,all}

INPUTS: none

KEYWORDS:
	ALL - clear all buffers and display logo
	SELECT - clear user-selected buffers
	CURRENT - clear current buffer only
	SPIN - use rotating logo (actually triggered from AxSpin flag in axis_com)

OUTPUTS: none

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

MODIFICATION HISTORY:
 (19-sep-99 aph) isolated from aaa_axis to use elsewhere (img_aln)
 (26-sep-99 aph) fix logic to execute only 1 of the 3 choices
 (28-sep-99 aph) make clear,/all work correctly
 (30-oct-99 aph) set background to white
 (16-nov-99 aph) introduce WIDGET_CONTROL, CLEAR_events to dump mouse clicks
 (31-dec-99 aph) AXIS standard documentation
 (29-jan-00 aph) rotating logo
 (20-feb-00 aph) correct color for logo if >256 colors
 (05-dec-00 cgz) added in platform context for logo directory
 (19-dec-00 cgz) modified ax_black_color_index to ax_plot_bkgd_color_index
 (29-dec-00 aph) get to work properly with zoom~thumbnails
 (20-aug-01 aph) add group call to mbuf for modal action
 (22-aug-01 aph) rescue rotating logo
 (31-dec-01 aph) delete buffer 0 if all_clear; introduce ax_clear_oneworld, ax_clear_allworld
 (14-may-02 aph) change to png
 (08-jul-02 aph) switch depending on IDL version
 (21-feb-10 aph) remove 'help, tmp'; use logo_R,_G,_B to set colors (problem of white)
 (21-Jun-10 aph)  ad ax_color, /no_load call at end to re-establish default color table
 (16-Jun-14 aph) recover if logo_file cannot be  found (e.g. if the CodePath is wrong)
 (22-Jul-14 aph) return if called without aXis2000 running

(See c:\axis2000\ax_clear.pro)


AX_COLOR

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
	AX_COLOR

LAST CHANGED: -----------------------------------16-feb-06

PURPOSE:
	Establish color table and color_index variables for AXIS

CATEGORY:
	AXIS: utility

CALLING SEQUENCE:
	AX_COLOR

INPUTS: none

KEYWORDS:
	SHOW - set to show 16 x 16 grid of color table
   NOLOAD - do not load last user (R,B,G) defined color table (for first time through)

OUTPUTS: none

COMMON BLOCKS:
	axis_color_common	:
	ax_top_color_index, ax_black_color_index, ax_white_color_index, $
	ax_blue_color_index, ax_red_color_index, ax_green_color_index, $
	ax_cyan_color_index, ax_magenta_color_index, ax_yellow_color_index, $
	ax_lime_color_index, ax_gold_color_index, ax_rose_color_index, ax_yelgrn_color_index, $
	ax_purple_color_index, ax_orange_color_index, ax_sky_color_index, ax_beige_color_index

MODIFICATION HISTORY:
 (xx-jun-99 cgz) supplied routine (zimba_color.pro is similar)
 (24-jun-99 aph) converted from zstack_color; set 255=white; 0 = black; 241 = beige
 (29-jun-99 aph) make axis_color_common independent of other commons
 ( 1-jul-99 aph) move hard colors low; add keywourd 'noload'
 ( 8-sep-99 aph) re-activate show keyword
 (31-dec-99 aph) AXIS standard documentation
 (20-feb-00 aph) removed decomposed=0
 (07-apr-00 cgz) restored decomposed=0
			changed color index names to be generic
			changed assignment of ax_black_color_index and ax_white_color_index
			added test for the number of colors and subsequent allocation of the number of colors
 (15-dec-00 cgz) modified no_load operation
 (16-feb-06 aph) change yellow (old-7) to light blue (old-13)

(See c:\axis2000\ax_color.pro)


AX_COLORBAR

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_COLORBAR

LAST CHANGED: ----------------------------------- 02-Aug-15

PURPOSE:
	This procedure displays a vertical color bar according to current gamma
 The low and high limits are displayed in AXIS separately.

CATEGORY:
	AXIS: utility

CALLING SEQUENCE:
 	AX_COLORBAR [, destroy ]

CALLED FROM AXIS:
	(from PlotBuf)

INPUTS: none

KEYWORDS:
	DESTROY - remove the colorbar (if not displaying an image)

OUTPUTS: none

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

PROCEDURE:
	Uses IDL colorbar procedure but adapted to AXIS widget
 by positioning the bar in a draw window set up by AXIS

MODIFICATION HISTORY:
 (12-nov-99 aph) first verion adapted from examples in Fanning's colorbar_define.pro
 (31-dec-99 aph) AXIS standard documentation
 (07-apr-00 cgz) Added ncolors option to call of colorbar.
				This gives the correct presentation of the gray-scale color bar
 (30-dec-00 aph) aborted attemt to add limits; shift to abut image
 (07-oct-01 aph) modify to fill sub-wdget; axis2000 modified to add Z-limits to bar
 (13-Oct-05 aph) trap out cases where limits are equal and make them slightly different
 (11-dec-11 aph) handle cases where the data is all zero
 (02-Aug-15 aph) change colorbar to colorbar_dwf to avoid confusion with post8.0 COLORBAR routine

(See c:\axis2000\ax_colorbar.pro)


AX_CONV

[Previous Routine] [Next Routine] [List of Routines]
NAME: 
	AX_CONV 
 
LAST CHANGED: ----------------------------------- 31-dec-99 
 
PURPOSE: 
	This function convert one or a sequence of ALS image files 
 to netCDF image file format. Optional binning for smoothing. 
 
CATEGORY: 
	AXIS: stack analysis 
 
CALLING SEQUENCE: 
 for functions: 
	Result = AX_CONV() 
 
CALLED FROM AXIS: 
	->Stacks->convert format->ALS to netCDF->many 

INPUTS: none 
 
KEYWORDS: none 
 
OUTPUTS: 
	*.sla (input list); {filename.nc}, *.sl file written to disk 
	result = 1 is returned regardless of action 
 
COMMON BLOCKS: 
	@AXIS_COM	standard set of common blocks 
 
PROCEDURE: 
	generates an input list file and bin parameter for ALS2NCDF 
 
EXAMPLE: 
	Please provide a simple example here. An example from the PICKFILE 
	documentation is shown below. Please try to include examples that 
       do not rely on variables or data files that are not defined in 
       the example code. Your example should execute properly if typed 
       in at the IDL command line with no other preparation. 
 
	Create a PICKFILE widget that lets users select only files with 
	the extensions 'pro' and 'dat'.  Use the 'Select File to Read' title 
	and store the name of the selected file in the variable F.  Enter: 
 
		F = PICKFILE(/READ, FILTER = ['pro', 'dat']) 
 
MODIFICATION HISTORY: 
(03-dec-98 aph) extracted from axis_c 
( 7-jan-99 aph) added, bad_ID to widget_controls to allow stand-alone use 
( 8-jun-99 aph) modify get_num call to identify group 
( 7-jul-99 aph) FREE_LUN not just close 
(31-dec-99 aph) AXIS standard documentation 

(See c:\axis2000\ax_conv.pro)


AX_CONV_TOF-ALL

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_CONV_TOF-ALL

LAST CHANGED: ----------------------------------- 30-jul-09

PURPOSE:
	This function convert a sequence of ALL correlated time-of-flight files
 to  axis binary file format. Optional binning for smoothing.

CATEGORY:
	AXIS: stack analysis

CALLING SEQUENCE:
 for functions:
	Result = AX_CONV_ALL(AXIS_ON=AXIS_ON)

CALLED FROM AXIS:
	->Stacks->convert format->TOF-ALL

INPUTS: none

KEYWORDS:
 AXIS_ON   if set, called from aXis2000

OUTPUTS:
	*.ncb

COMMON BLOCKS:
	AXIS_COM	standard set of common blocks
   stack_process_com     stack_process common
	BSIF_COM	common for netCDF format data
 	VOLUME_DATA  image_stack 3-d array

PROCEDURE:

EXAMPLE:

MODIFICATION HISTORY:
 (14-feb-04 aph) adapted from AX_CONV
 (21-feb-04 aph) working in aXis2000; optional Io normalization; save PIPICO(1)
 (30-jul-09 aph) changed analcom to stack_process_com (NB STILL need to convert stack_analyze_tof !!)

(See c:\axis2000\ax_conv_all.pro)


AX_COPY

[Previous Routine] [Next Routine] [List of Routines]
NAME: 
	AX_COPY 
 
LAST CHANGED: ----------------------------------- 31-dec-99 
 
PURPOSE: 
	This procedure completes the copy of structure data from CurBuf to 
 NewBuf using Thumbs to identify NewBuf. The output buffer is identiifed 
 by left-clicking on one of the thumbnail images or the buffer label. 
 
CATEGORY: 
	AXIS: utility 
 
CALLING SEQUENCE: 
	AX_COPY 
 
CALLED FROM AXIS: 
	->Copy then (AXIS_EVENT processing) 

INPUTS: none 
 
KEYWORDS: none 
 
OUTPUTS: 
	Data structure is copied from CurBufto NewBuf 
 
COMMON BLOCKS: 
	@AXIS_COM	standard set of common blocks 
 
PROCEDURE: 
	A flag is set from the COPY command. When the user 
 next clicks on one of the thumbnails or labels this defined NewBuf 
 
MODIFICATION HISTORY: 
 (28-sep-99 aph) isolated from axis_c 
 (30-oct-99 aph) removed label change 
 (31-dec-99 aph) AXIS standard documentation 

(See c:\axis2000\ax_copy.pro)


AX_CURVFIT

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_CURVFIT

LAST CHANGED: ----------------------------------- 31-Dec-12

PURPOSE:
	This procedure executes the CG_Optimize procedure (Billy Loo @2000)
 to fit a spectrum to a set of reference spectra.
 AX_CURVFIT will run stand alone (prompting user for AXIS format files) or from AXIS.

CATEGORY:
	STAND ALONE: spectral analysis

CALLING SEQUENCE:
	AX_CURVFIT[SPC, axis=axis, help = help, coeff = coeff, set_start = set_start, pos_only=pos_only ]

CALLED FROM AXIS:
	->{Spectra}->Curve fFit

INPUTS:
	SPC		spectrum to be fit in axis 1d structure form

KEYWORDS:
 AXIS 		called from AXIS widget
 COEFF	filename with spectral information
 HELP		print help text
 SET_START	allow users to set starting values
 POS_ONLY	force only positive coefficients
 LIMITS	[min, max] 2-vector defining lower and upper limits

OUTPUTS: 	No explicit outputs.

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

PROCEDURE:
	The reference spectra are read in and the coefficient matrix generated.
 CG_OPTIMIZE is then called to get the mixing coefficients

MODIFICATION HISTORY:
 (13-feb-01 aph) first version
 (27-mar-01 aph) changed title of file input dialog
 (26-jul-01 aph) neatened code ; get pos_only working; explicitly include A, B in call
 (04-jun-03 aph) adapt for reading ref spectra names etc from ax_par_load & save to ax_par_save
 (30-dec-03 aph) force monotonic spectral data (source of NaN fits !!)
 (20-oct-04 aph) set defaults to 
 (03-feb-05 aph) add auto-plot of all fit at end
 (19-feb-05 aph) correct display at end
 (22-jun=05 aph) correct syntax for axis_log calls
 (13-dec-12 aph) display the header of the data with log

ro ax_CurvFit, spc, axis=axis, help=help, coeff = coeff, set_start=set_start, pos_only=pos_only

axis_com

F keyword_set(help) THEN BEGIN
   print,'AX_CurvFit'
   print,'Executes CG_Optimize procedure of Billy Loo to fit a spectrum'
   print, 'Uses AXIS format spectra files (*.txt) as input/output'
   print, ' KEYWORDS: '
   print, '	AXIS   = if on, then called from AXIS widget'
 	print, '	HELP   = print this how-to-use statement'
 	print, '	SET_START = allow user to define starting parameters'
 	print, '	POS_ONLY = force fit coefficients to be positive'
 	print, '    LIMITS = define bounds for fit coefficients'
 	print, '    SWAP = if on, make too low values upper and vice-versa'
   return
NDIF

 assume AXIS is running (therefore may have called ax_curvfit)
 either when AXIS keyword is supplied or if any widget active
f  keyword_set(axis) then axis_on = 1 else axis_on = widget_info(/active)
rint, ' '
rint, ' Curve fit analysis by CG_Optimize'
rint, ' -------------------------------------------'

(See c:\axis2000\ax_curvfit.pro)


AX_DELTAMIN

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		AX_DELTAMIN

LAST CHANGED: ----------------------------------- 	01-Jun-08

 PURPOSE:
	This function returns the smallest spacing in a 1-d array

 CATEGORY:
	stand alon utility

 CALLING SEQUENCE:
	Result = AX_DELTAMIN(X)

 OUTPUTS: minimum spacing

 COMMON BLOCKS: none

 MODIFICATION HISTORY:
 (01-jun-08 aph) first written

(See c:\axis2000\ax_deltamin.pro)


AX_DISPLAY_PTYCHO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		AX_DISPLAY_PTYCHO

LAST CHANGED: ----------------------------------- 	27 Jul 2015

 PURPOSE:
	This procedure computes and displays the bright field image from a set
 of ptychography images recorded using a Princeton X-ray camera on BVL 11.0.2
 it generates & corrects for camera background  and then displays
 individual ptycho images on a linear or logarithmic scale
 while diplaying a marker on the bright field image.

 CATEGORY:
	stand alone.

 CALLING SEQUENCE:
	AX_DISPLAY_PTYCHO(axis_on=axis_on)

 INPUTS: none

 KEYWORDS:
	axis_on	if set, called from aXis (so know to use aXis_ID in parent calls)

 INTERNAL ROUTINES
  FUNCTION AX_CONVERT_UINT_REAL, IMAGE
			 - convert unsigned 16-bit integers to signed reals
  FUNCTION AX_PTYCHO_SELECT
 selct the long or short dwell time images for 11.0.2 ptycho measurements

 OUTPUTS:
	No explicit outputs.   A widget is created
 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks
	ptycho_com - parameters specific to DISPLAY_PTYCHO
	AX_SELECT_COM  - parameters for using the
            'generate mask' widget - the r_mask parameter is used to report the mask

 SIDE EFFECTS:
	A GUI is created/destroyed.

 MODIFICATION HISTORY:
 (15-Jan-15 aph) first version
 (27-Jul-15 aph) change display_ptycho_com to ptycho_com (variables with 2 '_' only read 1st 2 of 3 parts of name

(See c:\axis2000\ax_display_ptycho.pro)


AX_DISPLAY_PTYCHO_COM

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_DISPLAY_PTYCHO_COM

LAST CHANGED: ----------------------------------- 15-Jan-15

 PURPOSE:
	This FILE contains the COMMON block, DISPLAY_PTYCHO_COM

 CATEGORY:
	AXIS: DISPLAY_PTYCHO_COM common block

 CALLING SEQUENCE:
	@DISPLAY_PTYCHO_COM

 INPUTS: none

 KEYWORDS: none

 OUTPUTS: none

 DETAILS: - variables in the common block:
	display_ptycho_par - labels for events

 MODOFICATIONS

 (15-Jan-2015 aph) started

(See c:\axis2000\ax_display_ptycho_com.pro)


AX_FILE_LOAD

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_FILE_LOAD

LAST CHANGED: ----------------------------------- 25-Nov-12

PURPOSE:
	This set of procedures is a widget to select columns of a multi-column ascii file
 to read in as a (x,y) 1-d data set. The widget uses SPC_LOAD to execute the read-in

CATEGORY:
  AXIS: utility

 AX_SPC_LOAD_EVENT ROUTINES:

 TEXT_SPC_LOAD_FNAME		modify filename; when changed, execute BUT_SPC_LOAD_FNAME_BROWSE to get parameters
 BUT_SPC_LOAD_FNAME_BROWSE browse for new filename; if found, load new parameters
 BUT_SPC_LOAD_DISPLAY_HDR  show all file
 BUT_SPC_LOAD_OK			proceed with loading multi-column file into AXIS
 BUT_SPC_LOAD_CANCEL		abort read in

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks (inludes mcf_com)

MODIFICATION HISTORY:
 (14-feb-03 aph) first version
 (26-oct-04 aph) save last file name; merge mcf_com with axis_com
 (16-jun-05 aph) correct indexing for rows to skip
 (25-Nov-12 aph) implement automatic OD generation (2 buffers); READ_ALL for MC files

(See c:\axis2000\ax_file_load.pro)


AX_FIX_ROLLOVER

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_FIX_ROLLOVER

LAST CHANGED: ----------------------------------- 04-jan-15

PURPOSE:
	This function modifies one or a sequence of *.nc image files
 to replace all values below 0 with (that value + 65,535.)
 This repairs a roll-over issue in conversion of some image files
 typically, those which are read as unsigned integers rather than signed ones

CATEGORY:
	AXIS: image analysis

CALLING SEQUENCE:
 for functions:
	Result = AX_FIX_ROLLOVER()

CALLED FROM AXIS:
	->Images->Fix rollover

INPUTS: none

KEYWORDS:
	ONE		array to which fix_rollover will be applied

OUTPUTS:
	repaired files are written to disk.

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

MODIFICATION HISTORY:
 (04-Jul-00 aph) first version
 (04-Jan-15 aph) add keyword, one, an option to process 1 file

(See c:\axis2000\ax_fix_rollover.pro)


AX_GEN_STACK

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		AX_GEN_STACK

LAST CHANGED: ----------------------------------- 01-Jun-11 (aph)

 PURPOSE:
	This function processes a set of folders containing multi-images stacks for tomography read-in

 CATEGORY:
	Input / output utilty; stand alone

 CALLING SEQUENCE:
	Result = AX_GEN_STACK(GROUP=GROUP, CHANNEL=CHANNEL, IMAGE_NUM=IMAGE_NUM)

 INPUTS: none  [*.lst is a file giving path then a set of {name, angle}]

 KEYWORDS
	GROUP 	ID of calling program
	CHANNEL	number of data channel (default = 1)

 OUTPUTS: binary format (*.ncb) stack written

 COMMON:
	AXIS_com
	BSIF_com
	stack_process_com
   VOLUME_DATA

 USAGE:

 format of list file for tomography applications is
 path
 name1, angle1
 name2, angle2
 . . . .

 MODIFICATION HISTORY:
 (09-Jun-06 gaj) first version for use in axis and stand alone (for tomography)
 (10-jun-06 aph) linked into aXis2000
 (30-jul-09 aph) changed analcom to stack_process_com (update to stack_process)
 (16-Feb-10 aph) added @ to stack_process.com inclde !!
 (01-Jun-11 aph) add image_num  parameter to select a specific image; get working !!

(See c:\axis2000\ax_gen_stack.pro)


AX_HISTOGRAM

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		AX_HISTOGRAM

LAST CHANGED: ----------------------------------- 	08-Dec-11

 PURPOSE:
	This function generates the histogram of an image

 CATEGORY:
	Utility

 CALLING SEQUENCE:
	Result = AX_HISTOGRAM(IMAGE, N_BINS=N_BINS)

 INPUTS:
	IMAGE	2-d array

 KEYWORDS:
	N_BINS	number of bins

 COMMON BLOCKS:
    none

 MODIFICATION HISTORY:
 (27-Dec-07 aph) isolated from axis_c and AXIS standard header added
 (29-Dec-07 aph) array sizing error corrected (check: test\data\17seps.ncb, 3-fit)
 (08-Dec-11 aph) remove second 'hist' label

(See c:\axis2000\ax_histogram.pro)


AX_IMAGE_ADD

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_IMAGE_ADD

LAST CHANGED:-------------------------- 13-oct-05

PURPOSE
  This procedure adds the currently displayed image
  to a user-selected second image with a user-selected scale factor.
  A negative scale factor subtracts the second image from the first.
  The common (x,y) region is interpolated to the mesh of
  the more finely sampled image.

CATEGORY:
	AXIS: image analysis

CALLING SEQUENCE:
 	ax_img_add

INPUT: none (uses AXIS_COM common blocks for input/output)

KEYWORDS: none

OUTPUT:
	(Image in buffer_9) = (1st_image) + (scale_factor)*(2nd_image)

COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

MODIFICATION HISTORY:
 (28-dec-99 aph) isolated from AXIS_C
 (31-dec-99 aph) AXIS standard documentation
 (23-feb-00 aph) add groupID to buffer call (avoid modal error)
 (14-Oct-05 aph) fix sum/ratio error from McNeil

(See c:\axis2000\ax_image_add.pro)


AX_IMAGE_APPEND

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_IMAGE_APPEND

LAST CHANGED:-------------------------- 10-Dec-11

PURPOSE
  This procedure appends the currently displayed image
  to a user-selected second image with averaging in the common region.
  The final image is interpolated to the mesh of the more finely sampled
   image, unless this will result in an array with any dimension > 3000

CATEGORY:
	AXIS: image analysis

CALLING SEQUENCE:
 	ax_image_append

INPUT: none (uses AXIS_COM common blocks for input/output)

KEYWORDS: none

OUTPUT:
	(Image in buffer 0) = (finer pixel image) appended to (coarser pixel image)

COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

MODIFICATION HISTORY:
 (29-jun-00 aph) first version
 (03-feb-11 aph) ensure energy is defined on output; default to energy of first image
 (11-Dec-11 aph) make more reliable by changing algorithm & introducing meshing to same pixel size

(See c:\axis2000\ax_image_append.pro)


AX_IMG_AVG

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_IMG_AVG

LAST CHANGED: ----------------------------------- 29-Oct-14

 PURPOSE:
	This procedure computes the mean and standard deviation
   of all pixels in a user-selected region.

 CATEGORY:
	AXIS: image analysis

 CALLING SEQUENCE:
	AX_IMG_AVG [, /NOZEROS]

CALLED FROM AXIS:
	->Images->Average by region->{all pixels, no zeros}

 INPUTS:
	All input parameters are passed as keywords or through AXIS_COM

 KEYWORDS:
	NOZEROS - if set, report average of only non-zero pizels in selected region
	WHOLE	- if set, average all pixels in the image

 OUTPUTS:
	Results are printed to log window and the AXIS com window.

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

 PROCEDURE:
	Uses DefROI widget for felxible region of interest definition.

 EXAMPLE:
	only executable from AXIS

 MODIFICATION HISTORY:
 (31-dec-99 aph) isolated from AXIS_C and merged with /nozeros (corected !)
                 AXIS standard documentation
 (03-feb-01 aph) add keyword WHOLE to report average of full image
 (14-sep-04 aph) extend format field for axis log; extend to whole without zeros
                  extend variable size to accomodate large images; append to log
 (08-mar-05 aph) incrase precision
 (24-mar-05 aph) correct error for evlauating images bigger than pixel mapped display
 (30-nov-11 aph) improve speed & add an hourglass symbol
 (29-Oct-14 aph) fix error for region, ignore zeros

(See c:\axis2000\ax_img_avg.pro)


AX_IMG_DEL

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_IMG_DEL

LAST CHANGED: ----------------------------------- 15-Dec-11

 PURPOSE:
	This procedure replaces all pixels in a user-selected region
 by user-selected value (default is the meanof the whole image)
 If image is larger than the main window size or less than 1/2 of the main  window size
 the image is resized prior to the delete operation and then rescaled back to the oriignal size

 CATEGORY:
	AXIS: image analysis

 CALLING SEQUENCE:
	AX_IMG_DEL

CALLED FROM AXIS:
	->Images->Delete region

 INPUTS:
	All input parameters are passed as keywords or through AXIS_COM

 KEYWORDS: none

 OUTPUTS:
	Modified image placed in buffer 0.

 COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

 PROCEDURE:
	Uses DefROI widget for felxible region of interest definition
  If image is larger than the MainWid size (360*gr_scale) then a temporary image is generated
   f rediced size using congrid  NOT rebin in order to handle non integer zooms
  For congrid, the cubic=-0.5 option is used for greater accuarcy (see IDL HELP for congrid)

 RESTRICTIONS:
	only executable from AXIS

 MODIFICATION HISTORY:
 (31-dec-99 aph) first written
 (03-Feb-11 aph) reduce size of large images prior to delete operation & re-scale after deletion
         content was there but incorrect !
 (15-dec-11 aph) fix method for small and mid-sized images

(See c:\axis2000\ax_img_del.pro)


AX_IMG_LINE

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_IMG_line

LAST CHANGED: ----------------------------------- 20-Jan-05

 PURPOSE:
	This procedure replaces all pixels in a user-selected line
 with those of another user-selected line.

 CATEGORY:
	AXIS: image analysis

 CALLING SEQUENCE:
	AX_IMG_line

CALLED FROM AXIS:
	->Images->Delete region, after user clicks on a line

 INPUTS:
	All input parameters are passed as keywords or through AXIS_COM

 KEYWORDS: none

 OUTPUTS:
	Modified image placed in buffer 0.

 COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

; RESTRICTIONS:
	only executable from AXIS

 MODIFICATION HISTORY:
 (29-dec-01 aph) first written
 (20-Jan-05 aph) add ability to define the y-index of line to be changed

(See c:\axis2000\ax_img_line.pro)


AX_IMSCL

[Previous Routine] [Next Routine] [List of Routines]
NAME: 
	AX_IMSCL 
 
LAST CHANGED: ----------------------------------- 31-dec-99 
 
PURPOSE: 
	This function maps the intensity values of an image 
 to a reduced byte_scale: (0 is set to top_color_index, not 255) 
 
CATEGORY: 
	AXIS: utility 
 
CALLING SEQUENCE: 
	Result = ax_imscl(G_data) 
 
CALLED FROM AXIS: 
	->Stacks->bin NSLS->{1,file} 

INPUTS: 
	G_data - 2d image array 
 
KEYWORDS: none 
 
OUTPUTS: 
	Result, the re-scaled data array 
 
COMMON BLOCKS: 
	@AXIS_COM	standard set of common blocks 
 
PROCEDURE: 
	If needed, modify ax_color.pro to set ax_top_color_index 
 and the number/values of reserved colors 
 
MODIFICATION HISTORY: 
 (25-jun-99 aph) first version; from zstack_spectra.pro 
 (01-jul-99 aph) adapt for hard colors low 
 (31-dec-99 aph) AXIS standard documentation 

(See c:\axis2000\ax_imscl.pro)


AX_INTERP

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_INTERP

LAST CHANGED: ----------------------------------- 04-Aug-07

PURPOSE:
	This function changes meshes of 1-d (spectra) or
 2-d (images) AXIS data buffers, based on user input
 used to force image or spectra to a particular spacing

CATEGORY:
	AXIS: image and spectral processing

CALLING SEQUENCE:
	RESULT = AX_INTERP( tmp, mesh=mesh )

CALLED FROM AXIS:
	(utilities~change mesh) TMP -  spectrum or image

KEYWORDS:
	MESH 	[x-pixels, y-pixels]

 OUTPUT
	RESULT is the input data converted to modified mesh

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

MODIFICATION HISTORY:
 (01-nov-00 aph) first version
 (31-dec-01 aph) add MESH keyword for auto operation
 (02-feb-05 aph) unknown update
 (04-aug-07 aph) corrected for distortion (see 70804-utilities-mesh-bug)

(See c:\axis2000\ax_interp.pro)


AX_LOAD_LOGO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_LOAD_LOGO

LAST CHANGED: ----------------------------------- 14-Jun-05

PURPOSE:
	This procedure loads the image files used to display
 the rotating globe aXis2000 logo

CATEGORY:
	AXIS:  utility. Can be run stand alone for testing

CALLING SEQUENCE:
	AX_LOAD_LOGO, axis = axis, step = step

CALLED FROM AXIS:
	from ax_clear (used both at start-up and if all buffers cleared)

INPUTS: none

KEYWORDS:
	AXIS - if set, indicates ax_load_logo was called from AXIS
   STEP - loop step variable. If step=2 every second logo file is used

OUTPUTS:
	details of the logo are transferred to other programs via common

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

SIDE EFFECTS:
	A set of 36 pixmaps - 18 Mb - is created. This can be a memory issue.

PROCEDURE:

MODIFICATION HISTORY:
 (01-feb-00 aph) first version
 (20-feb-00 aph) merge read and pixmap
 (22-feb-00 aph) AXIS standard documentation
 (22-aug-01 aph) add tag in AXIS log window
 (12-may-02 aph) convert from tif (unsupported past IDL5.3) to png.
 (09-jul-02 aph) use rotate, not reverse for 5.5
 (03-jun-04 aph) change 'reverse (..., 3) to reverse(..., 2) for  IDL 6.0
 (14-jun-05 aph) add switch to get spin logo correct in IDL 4.2
 (20-May-13 bw)  make logo path platform independent

(See c:\axis2000\ax_load_logo.pro)


AX_LOX

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_LOX

LAST CHANGED: ----------------------------------- 31-Jul-09

PURPOSE:
	This set of procedures is a widget to read in files
 in the LOX format (*.lox) developed for CaPeRS PEEM.
 The header information uses XML syntax conventions.
 The widget uses read_lox to perform the file input.

CATEGORY:
	AXIS: utility

 AX_LOX_EVENT ROUTINES:
 TEXT_LOX_FNAME		modify filename; when changed, execute BUT_LOX_FNAME_BROWSE to get parameters
 BUT_LOX_FNAME_BROWSE 	browse for new filename; if found, load new parameters
 BUT_LOX_DISPLAY_HDR   show parameters
 BUT_LOX_OK			proceed with loading LOX file into AXIS
 BUT_LOX_CANCEL		abort read in
 WID_DLIST_CHANNEL		drop list used to display and select the data channel
 WID_DLIST_REGION		drop list to display and select region

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks
	@LOX_COM 	structure with header info

MODIFICATION HISTORY:
 (16-Oct-05 aph) first generated by adapting AX_SDF
 (13-nov-05 aph) stacks working, improve aspects
 (18-mar-06 aph) data channel selection fixed; all widget drop lists were coded wrong
 (31-Jul-09 aph) added additional parameters to the widget - ScanType, Ring Current, i-ring norm
				  desensitize inactive buttons

(See c:\axis2000\ax_lox.pro)


AX_MACRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		AX_MACRO

LAST CHANGED: ----------------------------------- 21-Jul-14

 PURPOSE:
	This sequence of commands is a MACRO
 which is inserted into aXis2000 at the command Utilities~execute Macro
 whenever program is restarted OR axis_c is compiled

 CATEGORY:
	user modifiable command sequence

 CALLING SEQUENCE:
  Utilities~execute Macro - captive to axis2000

 INPUTS: none (incorporate in commands)

 KEYWORDS: none (incorporate in commands)

 OUTPUTS:

 COMMON BLOCKS: none

 SIDE EFFECTS: none

 RESTRICTIONS:
 **********************************************************
	COMMANDS KNOWN TO BE EXECUTABLE AS A MACRO - see those files for details
	ax_rotate - rotate and mesh images
	ax_zoom_cut	- numerically truncate and re-mesh images

 MODIFICATION HISTORY:
 (31-dec-01 aph) first introduced into aXis2000
 (02-mar-04 aph) modified header
 (21-Jul-14 aph) corrected header

(See c:\axis2000\ax_macro.pro)


AX_MAKE_XYZ

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_MAKE_XYZ

LAST CHANGED: ----------------------------------- 16-Mar-11 (aph)

PURPOSE:
	This function reads in an AXIS stack and writes it as a
 set of (x,y,z) triplet data which can be imported
 into various 3D visualization programs (SigmaPlot, Origin )

CATEGORY:
	STAND ALONE: utility

CALLING SEQUENCE:
	Result = AXB_make_XYZ([ NOF=nof, error=err, file=file, _extra=e])

CALLED FROM AXIS:
	STAND ALONE:

INPUTS: none. All input parameters are passed as keywords.

KEYWORDS:
	FILE	file name
	SILENT - do not display feedback on progress
	_EXTRA 	- passed on parameters

OUTPUTS:
	RESULT = AXIS 1d or 2d structure

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks
   @bsif_com   common for NSLS NetCDF format
   @stack_process_com
   volume_data  stack data


MODIFICATION HISTORY:

 (15-Mar-11 aph) first version

(See c:\axis2000\ax_make_xyz.pro)


AX_MESH

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_MESH

LAST CHANGED: ----------------------------------- 09-Feb-11

PURPOSE:
	This function meshes two 1-d (spectra) or 2-d (images) AXIS data buffers
 to a common (x) or (x,y) scale

CATEGORY:
	AXIS: image and spectral processing

CALLING SEQUENCE:
	Result = AX_MESH( tmp1, tmp2, nd, first=first )

CALLED FROM AXIS:
	(ax_image_add, image_multiply, spectral_add)

	TMP1 - first spectrum or image
	TMP2 - second spectrum or image
	ND   - 1 = spectra; 2 = images
   FIRST - if set, use mesh of the first file (spectra only)

KEYWORDS: none

 OUTPUT
	Result = 1 signifies successful completion
	TMP1 and TMP2 are returned converted to common scales

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

MODIFICATION HISTORY:
 ( 3-Dec-98 aph) first generated
 (11-Jan-99 aph) removed print lines
 (04-jul-99 aph) correct for images
 (28-dec-99 aph) correct for images (after extracting ax_image_add from axis_c)
 (31-dec-99 aph) spectral meshing ; AXIS standard documentation
 (09-jun-04 aph) include energy in output structures
 (21-apr-05 aph) add option to force mech to the first file (spectra only)
 (03-feb-11 aph) output axis format image files have a defined energy (default, the original one)
 (09-feb-11 aph) stop E-define applied to spectra

(See c:\axis2000\ax_mesh.pro)


AX_NAME

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_NAME

LAST CHANGED: ----------------------------------- 20-May-13 (bw)

PURPOSE:
	This function parses an arbitrary text string as
 a filename and returns independently the path, main_name, & extension
 The path ends with the separator appropriate to the current operating system.
 The separator of the main_name & extension is not returned.

CATEGORY:
	STAND ALONE: utility

CALLING SEQUENCE:
	Result = ax_name(FILENAME)

CALLED FROM AXIS:
	(MANY PLACES)

KEYWORDS: none

INPUT: string with filename

OUTPUTS:
	RESULT - 3-element array:
 result(0) = path    result(1) = main_name    result(2) = extension

COMMON BLOCKS: none

EXAMPLE:
 Create a name and parse it
	name = 'c:\axis\axis_dev\test-code\circle.axb'
	t = ax_name(name)
	print, t(0), '   ', t(1), '   ', t(2)
   	c:\axis\axis_dev\test-code\   circle   axb

 MODIFICATION HISTORY:
 (25-jun-99 aph) first developed
 (13-aug-06 jso) ensure compatible with 532 - string aray element 0 specified
 (11-Oct-08 aph) adapt to work with main names containing '.'s - assume extension
                 is all parts of string from back to first '.' (NB may not work with IDL 5.1)
 (30-Dec-08 aph) modified to work with IDL 5.2
 (20-May-13 bw)  removed forcing lower case in file paths and names for platform compatability

(See c:\axis2000\ax_name.pro)


AX_NC2GIF

[Previous Routine] [Next Routine] [List of Routines]
NAME: 
	AX_NC2GIF 
 
LAST CHANGED: ----------------------------------- 31-dec-99 
 
 PURPOSE: 
	This procedure converts one or a series of NetCDF image files 
 into gif format. Written for use with ENVI principle component procedures. 
 
 CATEGORY: 
	AXIS: image analysis 
 
 CALLING SEQUENCE: 
	AX_NC2GIF 
 
 INPUTS: 
	FILE - a NetCDF image file (*.nc) to be converted to gif (*.gif) 
 
 KEYWORDS: none 
 
 OUTPUTS: 
  FILE.gif - image written as a GIF byte-scaled image file 
 
 COMMON BLOCKS: 
   @AXIS_COM - set of common blocks for AXIS 
   @BSIF_COM - common block for netCDF 
 
 SIDE EFFECTS: 
	many ! 
 
 RESTRICTIONS: 
	caveat emptor 
 
 PROCEDURE: 
 
 RESTRICTIONS: 
	ax_nc2gif assumes that filename has a sequence number is cols.6-8 
 This works with  X1A  (ddMMMxxx.nc) and ALS2NCDF (YMMDDxxx.nc) filenames 
 
 MODIFICATION HISTORY: 
 (31-dec-99 aph) isolated from AXIS_C; standard documentation 

(See c:\axis2000\ax_nc2gif.pro)


AX_NEXUS

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_NEXUS

LAST CHANGED: ----------------------------------- 13-Jul-15

PURPOSE:
	This set of procedures is a widget to read in files
 in the HDF5 NeXus file format developed for STXM
 The widget uses read_nexus to perform the file input.

CATEGORY:
	AXIS: utility

 AX_NEXUS_EVENT ROUTINES:
 TEXT_NEXUS_FNAME		modify filename; when changed, execute BUT_NEXUS_FNAME_BROWSE to get parameters
 BUT_NEXUS_FNAME_BROWSE 	browse for new filename; if found, load new parameters
 BUT_NEXUS_STACK_IMAGE    proceed to read single image from stack
 BUT_NEXUS_OK			proceed with loading NEXUS file into AXIS
 BUT_NEXUS_CANCEL		abort read in
 BUT_NEXUS_NORMALIZE toggle flag to enable normalising data to ring current
 BUT_NEXUS_XY_CORRECT toggle flag to enable correcting per-pixel positions
 WID_DLIST_CHANNEL		drop list used to display and select the data channel
 BASE_NEXUS_UPDATE   update widgets
 WID_DLIST_REGION    drop list to display and select region
 WID_DLIST_IMAGE     drop list to display and select image

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks
	@NEXUS_COM 	structure with header info

MODIFICATION HISTORY:
 (27-Apr-15 bw)  First version written using ax_sdf.pro as a template
 (13-Jul-15 aph) integrated into 02-July-15 version of aXis2000

(See c:\axis2000\ax_nexus.pro)


AX_ONE_PT

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_ONE_PT

LAST CHANGED: ----------------------------------- 9-sep-02

PURPOSE:
	This procedure allows the user to delete or add a single point in a spectrum
 or to change a point in an image

CATEGORY:
	AXIS: spectrum analysis (captive to aXis2000)

CALLING SEQUENCE:
	AX_ONE_PT

CALLED FROM AXIS:
	Spectra->Modify one point
	Images->Modify one point

INPUTS: none

KEYWORDS: none

OUTPUTS:
	modified spectrum or image is placed in buffer 0.

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

MODIFICATION HISTORY:
 (09-sep02 aph) first version; adapted from zx_xycal.pro

(See c:\axis2000\ax_one_pt.pro)


AX_ORDER

[Previous Routine] [Next Routine] [List of Routines]
NAME: 
	AX_ORDER 
 
LAST CHANGED: ----------------------------------- 14-nov-00 
 
PURPOSE: 
	This function forces image data in a structure 
 to adopt increasing (x,y) values 
 
CATEGORY: 
	STAND ALONE: utility 
 
CALLING SEQUENCE: 
	Result = AX_ORDER(structure) 
 
CALLED FROM AXIS: 
	PlotBuf 

INPUTS: 
	s_in - AXIS 2d structure 
 
KEYWORDS: none 
 
OUTPUTS: 
	Result = AXIS 2d structure with x, y values increasing 
 
COMMON BLOCKS: 
	@AXIS_COM	standard set of common blocks 
 
PROCEDURE: 
	Image data is also reversed to preserve image position information. 
 
MODIFICATION HISTORY: 
 ( 6-jul-99 aph) first developed to get correct lineouts 
 (31-dec-99 aph) AXIS standard documentation 
 (14-nov-00 cgz) Replaced calls to GET_RANGE function with ecplicit MIN and MAX calls

(See c:\axis2000\ax_order.pro)


AX_PARTICLES

[Previous Routine] [Next Routine] [List of Routines]
NAME: 
	AX_PARTICLES 
 
LAST CHANGED: ----------------------------------- 19-dec-00 
 
PURPOSE: 
	This FUNCTION derives particle sizes from masked images 
  A histogram of the particles sizes is generated. 
 
CATEGORY: 
	STAND ALONE: image processing 
 
CALLING SEQUENCE: 
	Result = AX_PARTICLES( [ ]) 
 
CALLED FROM AXIS: 
	->Images->Particle analyze 
 
ROUTINES 
	add_part(i,j) - function that adds (i,j) pixel to list 
	ax_p_adj(i,j) - function that checks 4-adjacent pixels to see if they are 1 
 
INPUTS: 
	INPUT - POSITIONAL INPUTS only (not keywords) 
	All input parameters are passed as keywords. 
 
KEYWORDS: 
      SIMAGE =  image in AXIS structure format 
                (if not included; user is prompted for an AXIS format image) 
      FILE  =  name of file to read (AXIS binary (*.axb)) 
      AXIS_ON = flag indicating AX_PARTICLES is being run from AXIS 
 
OUTPUT: 
      array indicating size of all particles 
 
OPTIONAL OUTPUT 
     when run stand alone, ; 
          the image is plotted with particles indicated 
          a histogram of the particles sizes is plotted 
 
COMMON BLOCKS: 
	@AXIS_COM	standard set of common blocks 
  ax_part, image, particles, nx, ny, p, np, p_now, npix 
               - common for ax_particles only 
 
PROCEDURE: 
	This function is meant to apply to MASKED data (use Generate_mask 
 to convert image to (1/0) map based on user-selected threshold. 
 AX_PARTICLES then loops through all pixels. When it finds a 1 
 it searches all 4 adjacent pixels (N,S,E,W), marking those alos 1, until 
 a local search no longer finds 1's. The number of pixels defines 
 the size of that particle 
 It returns an ARRAY p(np) listing the size (in pixels) of each particle. 
 The array for currently analysed particle is p_now(npix,2) 
 where npix is the number of pixels in particle np 
       np is the number of particles 
       2nd index of p_now: 0 = x, 1 = y index co-ordinate in image 
 
MODIFICATION HISTORY: 
 (04-oct-99 aph) first developed 
 (31-dec-99 aph) AXIS standard documentation 
 (16-jan-00 aph) add lower, upper bound and display 
 (09-dec-00 cgz) modified names of color indices (blue and green)
 (19-dec-00 cgz) substituted ax_white_color_index with ax_plot_axes_color_index

(See c:\axis2000\ax_particles.pro)


AX_PAR_LOAD

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_PAR_LOAD

LAST CHANGED: ----------------------------------- 04-jun-03

PURPOSE:
	This function reads path and file names of reference spectra used in
 stack  (ax_svd, stack_fit, cgo_fit), line (line_fit) and spectra ( ax_curvefit) fitting procedures

CATEGORY:
	STAND ALONE: utility

CALLING SEQUENCE:
	PARS = AX_PAR_LOAD (par_file)

CALLED FROM AXIS:
	stacks~maps~(ax_svd, stack_fit, cgo_fit); linescans~line fit; spectra~curve fit

INPUTS:
	PAR_FILE - name of parameter file

KEYWORDS: none

OUTPUTS:
	PARS = structure (n = number of ref. spectra; names = names; files = filenames)
          or 0 if there is an error in reading par file or locating files

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

PROCEDURE:
	Path is determined from par file. If files not foud, check if DefPath works, then ask user

MODIFICATION HISTORY:
 (04-jun-03) first developed from duplicates in stack fitting routines

(See c:\axis2000\ax_par_load.pro)


AX_PAR_SAVE

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_PAR_SAVE

LAST CHANGED: ----------------------------------- 04-jun-03

PURPOSE:
	This procedure writes path, and file names of reference spectra used in
 stack  (ax_svd, stack_fit, cgo_fit), line (line_fit) and spectra ( ax_curvefit) fitting procedures

CATEGORY:
	STAND ALONE: utility

CALLING SEQUENCE:
	AX_PAR_SAVE,par_file, ncomp, comp_names, comp_files

CALLED FROM AXIS:
	stacks~maps~(ax_svd, stack_fit, cgo_fit); linescans~line fit; spectra~curve fit

INPUTS:
	PAR_FILE	parameter file name
	NCOMP	number of components
	COMP_NAMES - (ncomp) 1-d array of fit names
	COMP_FILES - (ncomp) 1-d array of files

KEYWORDS: none

OUTPUTS:
	none

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

PROCEDURE:
	Path is determined from comp_names

MODIFICATION HISTORY:
 (04-jun-03) first developed from duplicates in stack fitting routines

(See c:\axis2000\ax_par_save.pro)


AX_PC

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_PC

LAST CHANGED: ----------------------------------- 17-sep-08

PURPOSE:
	This procedure executes the PCOMP principle component analysis
 on an arbitary number of images for arbitrary number of components

CATEGORY:
	STAND ALONE: image analysis

CALLING SEQUENCE:
	AX_PC [,stack = ncb_file, standardize = standardize, axis=1]

CALLED FROM AXIS:
	->Stacks->Principle Components

 INPUTS:
	all inputs are either from files identified by keywords or by a pickfile dialog

 KEYWORD PARAMETERS:
	AXIS = if on, then called from AXIS widget
	HELP = print how-to-use statement
	IMAGES = file with list of images to be analysed
   STACK = name of a binary format stack (*.ncb)
	STANDARDIZE = standardize input (mean of zero and variance of one).

 OUTPUTS:
	all outputs are either to files via dialog or to AXIS buffers

 COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks
	stack_process_com
	COMMON volume_data, image_stack
	bsif_com

PROCEDURE:
  This procedure uses the IDL code (PCOMP.SAV - nb no source provided)
  to compute the eigenvalues (strengths) and eigenvectors (principle components)
  from a set of spectromicroscopy images

MODIFICATION HISTORY:
 (28-oct-99 aph) first written (adapted ax_svd to use stack read_in)
 (31-dec-99 aph) AXIS standard documentation
 (27-feb-00 aph) add groupID to get_text
 (14-may-00 aph) make cancel abort first time
 (17-Sep-08 aph) replace analcom with stack_process_com

(See c:\axis2000\ax_pc.pro)


AX_PEEM_COM.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_PEEM_COM.PRO

LAST CHANGED: ----------------------------------- 20-Jan-07

PURPOSE:
	This INCLUDE file contains COMMON blocks for AX-PEEM-READ widget.

CATEGORY:
	AXIS: utility

CALLING SEQUENCE: @ax_peem_com

 COMMON BLOCKS
	-------- COMMON PEEM -------------------
	axis_on			if set, axis2000 running
	dark_path		dark file path
	gain_path		gain file dath
	peem_aoi		Area of Interest file
	peem_aoi_dark	if set, apply AOI to dark file
	peem_aoi_gain	if set, apply AOI to gain file
	peem_bin		binning (nXn) reduced to 1 pixel (default = 1)
	peem_bits12		if set, all data files are 12-bit (ALS PEEM-2 camera default)
	peem_col12		gives number of columns to drop for 12-bit readin (to avoid header noise)
	peem_dark		dark data file
   peem_dark_avg	if set, average multiple dark files
   peem_dark_last	number of final dark of a sum of dark files
	peem_dwell		exposure time (sec)
   peem_E			energy (eV)
	peem_first		first/single data file
	peem_gain		gain data file
	peem_ID			Widget ID
	peem_last		last data file
	peem_median		if set, 3-point median smooth
	peem_multi		if set, then multiple file conversion to net_CDF
   peem_ncb        if set, write directly to ncb file (no *.nc)
	peem_process	string defining action
				('no correct', dark correct', 'gain correct', dark and gain correct')
	peem_region		if set, select a subregion, in real space parameters
	peem_scale		size of pixel (um)
	peem_sphinx     flag that data format is sphinx
   peem_3			flag that data format is ALS peem3 (jan07)
	peem_struct		output of the ax_peem_read function (structure or a flag)
	region 			4-vector defining xmin, xmax, ymin, ymax of region
	source_path		source path

 NAMES AND MEANING OF COMMON VARIABLES
 *************************************************************************
 ***********         AX_PEEM_READ PARAMETERS            ******************
 *************************************************************************


MODIFICATION HISTORY:

(See c:\axis2000\ax_peem_com.pro)


AX_PEEM_READ

[Previous Routine] [Next Routine] [List of Routines]
NAME:
 AX_PEEM_READ

LAST CHANGED: ----------------------------------- 30-Jul-09 (aph)

 PURPOSE:
	This file contains the codes for a WIDGET used to define parameters
 and read in one or a sequence of PEEM data files from various PEEMs
 12-bit or 16-bit ALS PEEM2 format, ALS PEEM3 format (ALS PEEM3 read with separate widget)
 and 16-bit SPHINX (SRC, Labview generated) files are read.

 CATEGORY:
	Image input (stand alone, axis2000)

 CALLING SEQUENCE:
 for procedures:
	Result = AX_READ_PEEM()

 INPUTS: none - widget defines inputs for RD_PEEM

 KEYWORDS
 SPHINX - adapt to Sphinx format data (16-bit tif; dat multicolumn energy)
 AXIS - called from axis
 MULTI - multiple files (image sequence)
 COL12 - 12-bit data (old ALS camera)
 PEEM3 - data format for ALS PEEM3
 GROUP_LEADER - group leader variable
  _EXTRA - extra parameters

 CONTENTS
	BUT_Cancel		cancel job; kill widget
	BUT_Read_data	execute job (parameters from AX_PEEM_COM set in widget)
	BUT_no_correct	set no_correction
	BUT_subtract_dark set subtract_dark
	BUT_gain  		set gain_correction
	BUT_dark_gain	set dark & gain correction
	BUT_median		switch for mediam smooth
	BUT_bits12		switch for 12-bit / 16-bit

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks
   stack_process_com     stack_process common
	BSIF_COM	common for netCDF format data
 	AX_PEEM_COM	default path and filename information specific to PEEM
	-------- COMMON PEEM -------------------
	axis_on			if set, axis2000 running
	dark_path		dark file path
	gain_path		gain file dath
	peem_aoi		Area of Interest file
	peem_aoi_dark	if set, apply AOI to dark file
	peem_aoi_gain	if set, apply AOI to gain file
	peem_bin		binning (nXn) reduced to 1 pixel (default = 1)
	peem_bits12		if set, all data files are 12-bit (ALS PEEM-2 camera default)
	peem_col12		gives number of columns to drop for 12-bit readin (to avoid header noise)
	peem_dark		dark data file
   peem_dark_avg	if set, average multiple dark files
   peem_dark_last	number of final dark of a sum of dark files
	peem_dwell		exposure time (sec)
   peem_E			energy (eV)
	peem_first		first/single data file
	peem_gain		gain data file
	peem_ID			Widget ID
	peem_last		last data file
	peem_median		if set, 3-point median smooth
	peem_multi		if set, then multiple file conversion to net_CDF
   peem_ncb        if set, write directly to ncb file (no *.nc)
	peem_process	string defining action
				('no correct', dark correct', 'gain correct', dark and gain correct')
	peem_region		if set, select a subregion, in real space parameters
	peem_scale		size of pixel (um)
	peem_sphinx     flag that data format is sphinx
   peem_3			flag that data format is ALS peem3 (jan07)
	peem_struct		flag indicating success (1) or failure (0) of conversion
	region 			4-vector defining xmin, xmax, ymin, ymax of region
	source_path		source path

 SIDE EFFECTS:
	A widget is created/destroyed. If run standalone, result is plotted.

 MODIFICATION HISTORY:
 (05-jun-01 aph) first version; AXIS standard header added
 (31-jun-01 aph) enabled, non-functional
 (12-aug-01 aph) got working in Aug 1-12 period
 (08-may-01 aph) adapt to convert Elmitec PEEM (sphinx); through *.nc and directly to NCB
 (16-jul-02 aph) adapt to 8-bit tif file name convention (Sphinx)
 (05-oct-02 aph) auto-sort energies
 (02-nov-02 aph) increase file numbering scheme for sphinx data to full 5-digit format
 (17-feb-03 aph) fixed problem of extension in filename parsing
 (18-mar-03 aph) correction for file numbering error introcuded by ALS change into sphinx !
 (02-may-04 aph) change header
 (20-nov-04 aph) fix problem of not working in VM mode
 (13-aug-05 aph) fix not working in IDL6.1 (SGU bug report Aug-05: PEEM_ID not valid for tmp files)
 (22-feb-06 aph) fix not working - problem was that single images are not sent back to aXis2000 !!
 (20-jan-07 aph) adapt for ALS PEEM3 images (but eventually used a separate widget based on Scholl routines)
 (12-Sep-07 aph) clean up; adapt for use of ax_cimage to remove extrema to remove columns (NB NOT changed for stacks)
 (30-jul-09 aph) changed analcom to stack_process_com (update to stack_process)
                 added on_error,2 to all routines

(See c:\axis2000\ax_peem_read.pro)


AX_POL_FIT

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		AX_POL_FIT

LAST CHANGED: ----------------------------------- 	19-Apr-08

 PURPOSE:
	This function fits a curve of I(angle) to the expression for
 photoexcitation polarization dependence:
        I = constant + amplitude(Angle-AngleRef)
 using CURVEFIT (IDL non-linear least squares fit)
 Equal weighting of all data points is used

 CATEGORY:
 Data analysis; called from axis2000 spectra~curefit~ax_pol_fit
 Used as part of fit to polarization maps

 CALLING SEQUENCE:
	Result = AX_POL_FIT(CURV, MAX_ITER=MAX_ITER, PARAM=PARAM, SIGMA=SIGMA, TOL=TOL)

 INPUTS:
  CURV:   (angle, intensity) 2-d array

 KEYWORDS:
 MAX_ITER:	if defined, the maximum number of iterations (default = 20)
 SIGMA: 	if defined, returns the standard definition
 SILENT:	if set, do not report results in axis or IDL log
 STATUS	if set, returns the status of the fit
			    (0 = successful; 1 = divergent, 2 = non-convergent)
 PARAM;	if defined, gives & returns the (constant, amplitude, angle_reference) values
 TOL:    	if defined, the tolerance (default = 1e-8)

 OUTPUTS:
  the fit function

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

 SIDE EFFECTS: none

 EXAMPLE: see IDL help file for example this was modelled from

 MODIFICATION HISTORY:
 (04-May-06 aph) first derived
 (25-Jan-07 aph) set default tolerance to 1e-6, max iter to 500
 (19-Feb-07 aph) change sign in fit function
 (19-Apr-08 aph) added /noderivative ot make ref angle fit better (from Martin Obst 25-Mar-08)

(See c:\axis2000\ax_pol_fit.pro)


AX_POL_MAP

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	  AX_POL_MAP

LAST CHANGED: ----------------------------------- 18-sep-08

PURPOSE:
	This procedure fits a stack of angle dependent images
 to I(angle)=constant + amplitude*cos^2(angle-angle_Ref)
 with provision to force the reference angle within unser-set limits

CATEGORY:
	AXIS:  polarization stack analysis (operates stand-alone as well)

CALLING SEQUENCE:
 for procedures:
	AX_POL_MAP(/AXIS,/verbose)

CALLED FROM AXIS:
	->Stacks->maps~polarization fit

INPUTS:
	All input parameters are obtained through user dialogs.

KEYWORDS:
	AXIS - if set, indicates called from AXIS
	VERBOSE - if set, displays results as generated line-by-line (SLOW!)

ROUTINES
	AX_POL_FIT - main routine

OUTPUTS:
	If run from AXIS, the results are placed in AXIS buffers
 buffer 4 = contant
 buffer 5 = amplitude
 buffer 6 = reference angle
 buffer 7 - Standard deviation of the constant
 buffer 8 - Standard deviation of the amplitude
 buffer 9 - Standard deviation of the ref. angle

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks
	@stack_process_com
	Volume_data - STACK
 	@BSIF_COM - nc data

PROCEDURE:
	Uses ax_pol_fit applied to the curve at each pixel

MODIFICATION HISTORY:
 ***********
 (04-May-06 aph) first developed from stack_fit.pro
 (19-Feb-07 aph) make tolerance a parameter; report no-change parameters
 (18-mar-07 aph) add limits to ref_angle
 (17-Sep-08 aph) replace analcom with stack_process_com

(See c:\axis2000\ax_pol_map.pro)


AX_PROF_RAD

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_PROF_RAD

LAST CHANGED: ----------------------------------- 12-sep02

PURPOSE:
 This procedure generates radial profiles from images.

CATEGORY:
	AXIS: image analysis

CALLING SEQUENCE:
	AX_PROF_RAD [, axis = axis]

CALLED FROM AXIS:
	->Images->Profiles->Radial

 INPUTS:
	Uses data in currently displayed buffer

 KEYWORDS
	AXIS - if set, indicates called from AXIS

 OUTPUT
 (1) average diameter profile spectrum (put into user selected buffer)
 (2) linearized diametric profile image (put into user selected buffer)
 further analysis of the radial profile can be done using the linescan routines

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

 RESTRICTIONS
 Must be called from AXIS

PROCEDURE:
	The user identifies a diameter across the structure
 of interest, and selects the sampling mode: Linear (1) or Circular (2).
 The routine samples the image as requested
 and generates the avarage diametric profile as well as an angular map (0-180o)
 Optional symmetrization and alignment routines are included.

MODIFICATION HISTORY:
 (26-dec-99 aph) first isolated from AXIS_C (written Dec-99)
 (31-dec-99 aph) AXIS standard documentation
 (23-feb-00 aph) add groupID to call to buffer
 (19-dec-00 cgz) substituted ax_white_color_index with ax_plot_axes_color_index
 (12-sep-02 aph) use correct groupID for buffer !

(See c:\axis2000\ax_prof_rad.pro)


AX_RD_IM

[Previous Routine] [Next Routine] [List of Routines]
NAME: 
	AX_RD_IM 
 
LAST CHANGED: ----------------------------------- 01-jan-00 
 
PURPOSE: 
	This procedure reads ALS BL7 image files (*.im*) and 
 converts all files of same main name to a a single NetCDF format file. 
 used by AXIS to process ALS *.im* to *.nc files for use in stack_analyze 
 designed to process one file at a time 
 e.g. {90123001.im0, 90123001.im1} -> 90123001.nc 
 
CATEGORY: 
	AXIS: stack analysis 
 
CALLING SEQUENCE: 
	AX_RD_IM [, fileheader, bin=bin, img=img, help = help] 
 
CALLED FROM AXIS: 
	->Stacks->bin NSLS->{1,file} 

INPUTS: 
	FILEHEADER - file with list of filenames 
 
KEYWORDS: 
	BIN - smooth the image by binnning (e.g. bin =2 -> 2x2 -> 1 pixel) 
 	IMG - sets filter to '*.img' for old-style ALS filenames 
	HELP - prints a help message 
 
OUTPUTS: 
	No explicit outputs.   A new window is created if necessary 
 
COMMON BLOCKS: 
	@AXIS_COM	standard set of common blocks 
 
PROCEDURE: 
	The filenames in FILEHEADER are read 
 Each file is read in using explicit open, readf, close commands 
 and therefore is dependent on knowing the explicit structure 
 of the ALS BL7.0 data files. Asssumes post Dec-97 filestructure. 
 
MODIFICATION HISTORY: 
 (Jacobsen, Jan-98) reads ALS data and structures it as a netCDF file (nsls) 
 (aph 23-Feb-98) added other parameters (SD = scan data) and binning 
 (aph 5-mar-98) set-up as an axis-specific routine to avoid conflict with CJ 
 (aph 16-Aug-98) removed processing of *.lst files written by STXM.vi 
 (aph 7-jan-99) trouble-shooting readin (Common name wrong !) 
 (01-jan-00 aph) AXIS standard documentation 

(See c:\axis2000\ax_rd_im.pro)


AX_READ_ROI

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		AX_READ_ROI

LAST CHANGED: ----------------------------------- 	30-Jul-09 (aph)

 PURPOSE:
	This function reads a roi from different formats and saves it as a 0/1 mask-image

 CATEGORY:
	Image display.

 CALLING SEQUENCE:

 for functions:
	Result = AX_READ_ROI(file-file, filter=filter, roi_type=roi_type, template=template)

 INPUTS:
	All input parameters are passed as keywords.

 KEYWORDS:
	FILE:  name of file ; if not supplied, program requests it
 	FILTER:   extension
	ROI_TYPE: type of region of interest (stack, peem2, lox)
   TEMPLATE:   AXB image defining the x, y scales and pixel numbers (*.axb)

 OUTPUTS:
	internal axis format structure is generated

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks
 	bsif_com
	stack_process_com
	volume_data

 RESTRICTIONS:
	only reads the I_roi portion; format supports storage of both Io_roi and I_roi

 MODIFICATION HISTORY:
 (28-jan-06 aph) first version; STACK ROI read-in taken from stack_analyze
 (09-Feb-06 aph) extend to PEEM2 AOI files
 (12-jun-06 aph) extend to Lox ROI files
 (29-Dec-08 aph) add title to guide user when need ot get template image from disk
 (30-jul-09 aph) changed analcom to stack_process_com (update to stack_process)

(See c:\axis2000\ax_read_roi.pro)


AX_READ_TXRM

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		AX_READ_TXRM

LAST CHANGED: ----------------------------------- 	09-may-2013

 PURPOSE:
	This function uses an external call to a Java routine to read
  Xradia *.txrm images, stored in Microsoft Structured Storage (COM) format
 use SSViewer [http://www.mitec.cz/ssv.html]  to see the content of *.TXRM files

 CATEGORY:
	Image  read in

 CALLING SEQUENCE:
	Result = AX_READ_TXRM(, [FILE=FILE, NOF=NOF, SILENT=SILENT])

 INPUTS: none

 KEYWORDS:
	FILE	filename (with path)
	GROUP  defines the group_ID
   NOF	    if set, do not specify *.txrm as the extension
	NO_NORM  if set, do NOT normalize to the per-pixel time
	SELECT  if set, allow user to select specfic image within a file
   SILENT	if set, do not provide printed comments

 OUTPUTS:
	image is returned as a aXis2000 IDL structure

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks
	BSIF_COM	image parameters
	STACK_PROCESS_COM	stack parameters

 SIDE EFFECTS: none

 RESTRICTIONS:

 PROCEDURE:
 The Java class txmreader creates a java list of java objects,
 one for each image stored in the txrm file. For SSRF there are 3 images stored in each *.tcrm file
 this reader only reads the first one

 EXAMPLE:

 MODIFICATION HISTORY:
 (30-Apr-13 aph) first version; AXIS standard header added
 (09-may-13 aph) extend to read the mesh and pixel-time maps

(See c:\axis2000\ax_read_txrm.pro)


AX_READ_TXRM_STXM

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		AX_READ_TXRM_STXM

LAST CHANGED: ----------------------------------- 	30-Apr-2013

 PURPOSE:
	This function uses an external call to a Java routine to read a sequence of
  Xradia *.txrm images, stored in Microsoft Structured Storage (COM) format
 use SSViewer [http://www.mitec.cz/ssv.html]  to see the content of TXRM files

 CATEGORY:
	Image  read in. Stand alone, and called in aXis2000 at read~stacks~txrm

 CALLING SEQUENCE:
	Result = AX_READ_TXRM(, [FILE=FILE, NOF=NOF, SILENT=SILENT])

 INPUTS: none

 KEYWORDS:
	FILE	filename (with path)
   NOF	    if set, do not specify *.txrm as the extension
   SILENT	if set, do not provide printed comments

 OUTPUTS:
	stack is written to disk

 COMMON BLOCKS:
	AXIS_COM		standard set of common blocks
 	BSIF_COM		standard stack parameters (from nsls1)
	STACK_PROCESS_COM	stack parameters
	VOLUME_DATA 	image_stack

 SIDE EFFECTS: none

 RESTRICTIONS: none known

 PROCEDURE:
 The Java class txmreader creates a java list of java objects,
 from which the transmission image and selected parameters are extracted
 This is done for each image in a list (stack) which are then assembled into a single 3D array
  and stored in the aXis2000 *.ncb binary file, with an associated *.dat file, which has associated parameters

 EXAMPLE:

 MODIFICATION HISTORY:
 (30-Apr-13 aph) first version; AXIS standard header added

(See c:\axis2000\ax_read_txrm_stack.pro)


AX_READ_XAS

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_READ_XAS

LAST CHANGED: ----------------------------------- 11-Aug-12

PURPOSE:
	This function reads in data from an ascii XAS format file (annotated spectral format)
 and places the result into an AXIS 1d structure.

CATEGORY:
	AXIS: utility

CALLING SEQUENCE:
	Result = ax_read_xas(file = file, nof = nof)

CALLED FROM AXIS:
	->Read->NSLS->XAS

INPUTS:
	INPUT - POSITIONAL INPUTS only (not keywords)
	All input parameters are passed as keywords.

KEYWORDS:
	FILE = filename. If not supplied the user is prompted.
   NOF = no filter (default is *.xas)

OUTPUTS:
	The result is placed in buffer 0.

 PROCEDURE:
   Uses X1A routine READ_XAS.PRO to read data, then packages as an AXIS 1d structure.

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

MODIFICATION HISTORY:
 (22-feb-00 aph) AXIS standard documentation
 (11-Aug-12 aph) add filename as the label

(See c:\axis2000\ax_read_xas.pro)


AX_REGRESS_SPECTRA

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_regress_spectra

LAST CHANGED: ----------------------------------- 31-Dec-12

PURPOSE:
	This procedure uses linear regression to fit a spectrum to a set of reference spectra.
 AX_REGRESS_spectra will run stand alone (prompting user for AXIS format files) or from AXIS.

CATEGORY:
	STAND ALONE: spectral analysis

CALLING SEQUENCE:
	AX_REGRESS_SPECTRA[SPC, axis=axis, help = help]

CALLED FROM AXIS:
	->{Spectra}->Curve Fit~linear regression

INPUTS:
	SPC		spectrum to be fit in axis 1d structure form

KEYWORDS:
 AXIS 		called from AXIS widget
 COEFF		filename with spectral information
 HELP		print help text

OUTPUTS: 	No ecoefflicit outputs.

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

PROCEDURE:
	The reference spectra are read in and the coefficient matrix generated.
 REGRESS is then called to get the fittin coefficients
 qauality of fit is evaluated by Ftest, Mcorrelation and chi-square
 for F-test - larger numbers are better
 for Mcorrelation - numbers closer to +1.0 are better; values close ot 0 are bad
 for chi-square - smaller numbers are better

MODIFICATION HISTORY:
 (03-feb-05 aph) first version - adapted from ax_curvfit (20-oct-04 version)
 (19-feb-05 aph) correct final display
 (22-jun-05 aph) fix display of results (axis_log); switch to avoid 'regress' in IDL5.2
 (17-Jan-12 aph) add Mcorrelation evaluator of statistical precision
 (31-Dec-12 aph) add header to log to track data

(See c:\axis2000\ax_regress_spectra.pro)


AX_RGB

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_RGB

LAST CHANGED: ----------------------------------- 24-Apr-13 (aph)

 PURPOSE:
	This procedure allows user to select 3 images from existing buffers
 and generates an RGB composite image, with optional storage.

CATEGORY:
	AXIS: utility

CALLING SEQUENCE:
	AX_RGB [, NO_SAVE=NO_SAVE]

CALLED FROM AXIS:
	->Utilities->RGB composite

INPUTS: none

KEYWORDS:
	NO_SAVE  - do not ask for file name

OUTPUTS: RGB image in MainImg and (optional) tif file on disk

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

MODIFICATION HISTORY:
 (18-sep-05 aph) first written; generated from images~RGB composite in axis_c
 (18-Mar-13 aph) add scale bar
 (24-Apr-13 aph)  remove scale_bar - inaccurate

(See c:\axis2000\ax_rgb.pro)


AX_RGB_COM

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_RGB_COM

LAST CHANGED: ----------------------------------- 02-feb-11

 PURPOSE:
	This FILE contains the COMMON block, AX_RGB_COM

 CATEGORY:
	AXIS: AX_RGB_COM common block

 CALLING SEQUENCE:
	@AX_RGB_COM (to include in the stack_analyse routines)

 INPUTS: none

 KEYWORDS: none

 OUTPUTS: none

 MODIFICATION HISTORY:
 (28-dec-07 aph) first version
 (02-feb-11 aph) add uppervalue_flag

(See c:\axis2000\ax_rgb_com.pro)


AX_RGB_MAP

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		AX_RGB_MAP

LAST CHANGED: ----------------------------------- 	02-Feb-11

 PURPOSE:
	This set of procedures is a widget which generates R_G-B composite maps
  It allows mage selection and adjustment of min/max scales for each color.
 future options anticipated:
    - a color circle and separate R, G, B color scales (optionally selected)

 CATEGORY:
	aXis2000 capitve. Image display.

 CALLING SEQUENCE:
	AX_RGB_MAP

 INPUTS: default set of buffers are R=4, G=5, B=6

 KEYWORDS: none

 OUTPUTS:
 (optional)  a TIF image of the RGB composite map can be stored

 AX_RGB_MAP_EVENT ROUTINES:

 NUM_FORMAT		standard number format for limits
 MAKERGB			generate composite image
 LIST_RGB_RED		select buffer for RED
 LIST_RGB_GREEN	select buffer for GREEN
 LIST_RGB_BLUE		select buffer for BLUE
 BUT_RGB_CIRCLE	on/off color circle display
 BUT_RGB_SCALES	on/off R, G, B scales
 SLIDER_R			adjust red min / max value
 SLIDER_G			adjust green max value
 SLIDER_B			adjust blue max value
 TEXT_RGB_RMAX		adjust red max value
 TEXT_RGB_GMAX		adjust green max value
 TEXT_RGB_BMAX		adjust blue max value
 TEXT_RGB_RMIN		adjust red min value
 TEXT_RGB_GMIN		adjust green min value
 TEXT_RGB_BMIN		adjust blue min value
 ABSOLUTE_SCALE	set all colors to global limits
 RGB_RESCALE		set each color to limits of its data
 UPPERVALUE        set pixels above upper limit to black
 BUT_RGB_CANCEL	cancel
 BUT_RGB_SAVE		save composite map

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks
	AX_RGB_COM  parameters specifc to ax_rgb_map

 SIDE EFFECTS:
	A window is created/destroyed.

 RESTRICTIONS:
	Any known ?

 MODIFICATION HISTORY:
 (16-Jun-03 aph) first verasion started
 (10-Mar-06 aph) widget structure generated from AX_RGB_WIDGET.PRC
 (29-Dec-07 aph) coded
 (02-feb-11 aph) cnvert all pixels ABOVE upper limit to black

(See c:\axis2000\ax_rgb_map.pro)


AX_RGB_WIDGET

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		AX_RGB_WIDGET

LAST CHANGED: ----------------------------------- 	20-apr-08

 PURPOSE:
	This set of procedures is a widget which generates R_G-B
 composite maps with full control on source, limits etc
 uses CW_slider - a complex slider with 2-levels of control taken from web (Thomas Döring, June 2007)

 CATEGORY:
	Image display - captive to aXis2000

 CALLING SEQUENCE:
 for procedures:
	AX_RGB_WIDGET

 INPUTS: default set of buffers are R=4, G=5, B=6 if not previously selected

 KEYWORDS: none

 OUTPUTS:
		RGB image saved as a tif file

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks
	AX_RGB_COM  common block  for AX_RGB_WIDGET

 SIDE EFFECTS:
	A window is created/destroyed.

 RESTRICTIONS:

 MODIFICATION HISTORY:
 (10-Mar-06 aph) widget structure first generated
 (26-Dec-07 aph) coded
 (20-apr-08 aph) clean up description

(See c:\axis2000\ax_rgb_widget.pro)


AX_ROTATE

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_ROTATE

LAST CHANGED: ----------------------------------- 02-jan-02

PURPOSE:
	This procedure rotates 2-d data (images) about a user defined point.
 It depends on geting data from AXIS2000 data buffers

CATEGORY:
	AXIS: image processing

CALLING SEQUENCE:
	AX_ROTATE, TMP, ANGLE=ANGLE, CENTRE=CENTRE, PIXELSIZE=PIXELSIZE, MINVAL=MINVAL

CALLED FROM AXIS:
	(images~rotate)

 INPUT:
 TMP -  image

KEYWORDS:
 ANGLE		rotation angle
 CENTRE	[x,y] - centre for rotation in data units
 PIXELSIZE	size of pixels to mesh to (in microns)
 MAXDIST	maximum distance from centre to a corner (sets size of output image)
 MINVAL	if = 1 then set outside regions to minimum in image

 OUTPUT
	rotated 2-d structure is placed in buffer 0

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

MODIFICATION HISTORY:
 (15-nov-01 aph) isolated from axis2000
 (25-nov-01 aph) make added region have the average color of the image
 (31-dec-01 aph) introduce keywords to allow operation without user input
			give option for minimum or average color for extending image
			change from function to procedure; add max_distance keyword
 (02-jan-02 aph) remove pivot keyword in call to ROT

(See c:\axis2000\ax_rotate.pro)


AX_SDF

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_SDF

LAST CHANGED: ----------------------------------- 02-Jul-15

PURPOSE:
	This set of procedures is a widget to read in files
 in the ascii self defining format (SDF) developed initally for ALS BL 5.3.2 STXM
 The widget uses read_sdf and parse_sdf to perform the file input.

CATEGORY:
	AXIS: utility

 AX_SDF_EVENT ROUTINES:
 TEXT_SDF_FNAME		modify filename; when changed, execute BUT_SDF_FNAME_BROWSE to get parameters
 BUT_SDF_FNAME_BROWSE 	browse for new filename; if found, load new parameters
 BUT_SDF_DISPLAY_HDR   show parameters
 BUT_SDF_OK			proceed with loading SDF file into AXIS
 BUT_SDF_CANCEL		abort read in
 WID_DLIST_CHANNEL		drop list used to display and select the data channel
 WID_DLIST_REGION		drop list to display and select region

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks
	@SDF_COM 	structure with header info

MODIFICATION HISTORY:
 (25-feb-01 aph) first written using IDL 5.2 GUIBuilder
 (27-jun-01 aph) add groupID for better feedback on reads
 (29-jul-01 aph) add regions selector to the panel; introduced sdf_com; reverted to pickfile2
 (19-aug-01 aph) adapt to regions change & change in structure names; define regions & channels
 (04-nov-01 aph) add sdf_lastfile to sdf_com to save last name
 (09-nov-01 aph) activate all_regions read-in for spectra and images
 (26-nov-01 aph) complete use of name label as a way to select file
 				  add specific image read-in for stacks - incomplete !!
 (31-dec-01 aph) make defaut width of display parameters = 132
 (17-feb-02 aph) 'motor scan'; single images from sequences
 (11-dec-02 aph) VLM images read-in
 (17-oct-04 aph) separate PATH box; reload last file info  if possible
 (28-oct-04 aph) ensure works if SDF_Path or SDF_lastfile are not defined (at startup)
 (19-feb-05 aph) stack-map, single image read in added
 (12-mar-05 aph) make single image read-in work with IDL5.2
 (17-Jun-05 aph) channels and regions working for map and 1-image read-in
 (13-Nov-05 aph) got rid of last call involving 'group=SDF_ID'
 (22-Mar-06 aph) add Normalize indicator on panel
 (11-mar-07 aph) add normalization control to panel (sets norm_flag)
 (18-May-07 aph) correct read-in of 1-image for multi-channel data (B. Watts)
 (01-Feb-09 aph) add xy_correct option
 (19-Feb-10 aph) correct number of channels in print tag
 (20-Jul-10 aph) replace TEXT_SDF_(CHANNEL, REGION, IMAGE)
                 with WID_DLIST_(CHANNEL, REGION, IMAGE) (routine name error)
 (20-May-13 bw)  Make string value of the "Image #" selection box longer than zero characters to fix GTK bug
 (19-Dec-13 aph) only display sdf_lastfile if it is a string
 (13-Jan-14 aph) make selector pick last file as default
 (30-Jun-14 aph) make sure that the file refered to in the ax_sdf widget actually exists
                 in the Apr-14 edition, BROWSE  crashed if there was not a valid path & filename
 (23-Jul-14 aph) put normalization value on widget; adapt to IDL 8.3
                 start with last file loaded to gui IF ax_sdf used last
 (02-Jul-15 aph) add option to view ring normalization signal; re-arrange widget
                 change SDF_silent (=1, no traceback) from this widget

(See c:\axis2000\ax_sdf.pro)


AX_SELECT

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		AX_SELECT

LAST CHANGED: ----------------------------------- 	02-Jan-15

 PURPOSE:
	This set of procedures is a widget which allows user to select
  a range of the data to make a 0/1 BIT MASK which can be used as
  a region of interest (ROI) selector in stack_analyze

 CATEGORY:
	aXis2000 capitve. Image manipulation

 CALLING SEQUENCE:
	AX_SELECT

 INPUTS: default set of buffers are R=4, G=5, B=6

 KEYWORDS:
	GROUP_LEADER 	calling widget
	no_axis 		if set, do not execute aXis2000 specific lines (eg display in aXis2000)

 OUTPUTS:
 a ROI file suitable to be used in stack_analyze is written

 AX_SELECT_EVENT ROUTINES:

 NUM_FORMAT			standard number format for limits
 MAKE_Threshold_Image 	generate image with threshold overlay
 SLIDER_R				adjust  min / max value
 TEXT_select_max		adjust max value
 TEXT_select_min		adjust min value
 BUT_select_CANCEL		cancel
 BUT_select_SAVE_MASK  save mask
 BUT_select_SAVE_ROI	save ROI file

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks
	AX_SELECT_COM  parameters specifc to ax_select

 SIDE EFFECTS:
	A window is created/destroyed.

 RESTRICTIONS:
	Any known ?

 MODIFICATION HISTORY:
 (29-Dec-07 aph) first version adapted from AX_RGB_MAP
 (29-Jan-11 aph) add separate saving of ROI_file and the mask image
         allow arbitary buffer to store mask images
 (02-Jan-15 aph) allow use of ax_select outside of aXis2000, with no_axis parameter

(See c:\axis2000\ax_select.pro)


AX_SELECT_COM

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_SELECT_COM

LAST CHANGED: ----------------------------------- 27-Jul-15

 PURPOSE:
	This FILE contains the COMMON block, AX_SELECT_COM

 CATEGORY:
	AXIS: AX_SELECT_COM common block

 CALLING SEQUENCE:
	@AX_SELECT_COM (to include in the stack_analyse routines)

 INPUTS: none

 KEYWORDS: none

 OUTPUTS: none

 MODIFICATION HISTORY:
 (29-dec-07 aph) first version
 (29-Jan-11 aph) add mask_flag to indicate that a mask was written
 (02-Jan-14 aph) add axis_on parameter
 (29-Mar-15 aph) deleted extra blank line - Eclipse IDL 8.3 does not like them
 (27-Jul-15 aph) added last  - needed for IDL 8.3 windows

(See c:\axis2000\ax_select_com.pro)


AX_SEP

[Previous Routine] [Next Routine] [List of Routines]
NAME: 
	AX_SEP 
 
LAST CHANGED: ----------------------------------- 01-jan-00 
 
PURPOSE: 
 	This function returns the valid directories separator 
 for the operating system (system dependent) 
 
CATEGORY: 
	STAND ALONE: utility 
 
CALLING SEQUENCE: 
	Result = AX_SEP() 
 
INPUTS: none 
 
KEYWORDS: none 
 
OUTPUTS: 
	RESULT = 1-ascii character which is the system separator 
	Windows = '\', Unix = '/'  Macintosh = ':' 
 
MODIFICATION HISTORY: 
 (14-Oct-99 aph) first written 
 (01-jan-00 aph) AXIS standard documentation 

(See c:\axis2000\ax_sep.pro)


AX_SHIFT_ALL

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_SHIFT_ALL

LAST CHANGED: ----------------------------------- 7-dec-01

 PURPOSE:
	This procedure uses ax_shift_image to
 rotate and shift a set of images identified by a stack_list file.
 The rotation and shift parameters are read from a file.
 Developed as part fo the 3d chemical mapping suite.

 CATEGORY:
	stand alone ; AXIS: stack analysis

 CALLING SEQUENCE:
 ax_shift_all, sl = sl, aln=aln

 INPUTS: none

  FORMAT of *.rsl angle shift file
  path								c:\stxm532\01-11\X1-3d\rotate-iwata\
  name, angle, xshift, yshift		x1-1r.nc, 0,   18.5000,  -32.5000
 ..... for each file

 KEYWORDS:
	SL  - stack list and lignment parameters (angle, x-shift, y-shift)

 OUTPUTS:
	sl file with names of transformed images - default name is same name with
  't_' prefix appended

 COMMON BLOCKS:
   none

; MODIFICATION HISTORY:
 (04-dec-01 aph) first written
 (07-dec-01 aph) add global offsets

(See c:\axis2000\ax_shift_all.pro)


AX_SHIFT_IMAGES

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_SHIFT_IMAGES

LAST CHANGED: ----------------------------------- 5-dec-01

 PURPOSE:
	This function rotates and shifts a single image by the
 values contained in user-supplied variables, or from user dialog.

 CATEGORY:
	stand alone ; AXIS: stack analysis

 CALLING SEQUENCE:
 ax_shift_images, angle=angle, xshift=xshift,yshift=yshift

 INPUTS:
	IMAGE  - reference image
	ANGLE   - rotation angle (clock-wise)
	XSHIFT 	- value of x-shift (in fractional pixels)
	YSHIFT  - value of y-shift (in fractional pixels)

 KEYWORDS: none

 OUTPUTS:
	shifted image

 COMMON BLOCKS:
   bsif_common

 MODIFICATION HISTORY:
 (04-dec-01 aph) adapted from zstack_align

(See c:\axis2000\ax_shift_image.pro)


AX_SLICER3

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		AX_SLICER3

LAST CHANGED: ----------------------------------- 	17-Sep-08

 PURPOSE:
	This procedure reads a stack in *.ncb format into slicer3

 CATEGORY:
	3d image display.

 CALLING SEQUENCE:
	AX_SLICER3

 INPUTS: none

 KEYWORDS:  none

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks
  stack_process_com
	volume_data  - image stack

 MODIFICATION HISTORY:
 (21-feb-06 aph) AXIS standard header added
 (17-Sep-08 aph) replace analcom with stack_process_com

(See c:\axis2000\ax_slicer3.pro)


AX_SORT_MONO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_SORT_MONO

LAST CHANGED: ----------------------------------- 14-Mar-10

PURPOSE:
	This function sorts (x,y) data sets in ascending values of x
   and replaces cases of 2 identical X-values with slightly differing values
   to force monotonic property required for the INTERPOL function

CATEGORY:
	STAND ALONE: spectral analysis

CALLING SEQUENCE:
	AX_SORT_MONO[D]

CALLED FROM AXIS:
	->{Spectra}->Curve Fit

INPUTS:
	D		axis2000 format 1-d structure  (OLD: X, Y-values in a 2-d array)

KEYWORDS:
	AXIS	if flag is set the input is a structure; otherwise a 2-d array **** NOT ACTIVE ***

OUTPUTS: returns array with x-values organized monotonically; no change to y-values

COMMON BLOCKS: none

PROCEDURE:

MODIFICATION HISTORY:
 (30-dec-03 aph) first version
 (30-Jan-05 aph) remove 2-d array code
 (12-jun-05 aph) modified equal value correction to avoid generating a non-monotonic file !
 (07-mar-10 aph) sort out 'conflcting data structure tag 'y'
 (14-mar-10 aph) return axis paramater

(See c:\axis2000\ax_sort_mono.pro)


AX_SORT_NAMES

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		AX_SORT_NAMES

LAST CHANGED: ----------------------------------- 	07-mar-09

 PURPOSE:
	This function sorta a list of filenames by sequence number
 using filename conventions used in NSLS, ALS-PEEM, ALS-STXM, Sphinx, and Lox

 CATEGORY:
	utility

 CALLING SEQUENCE:
	Result = AX_SORT_NAMES(filename_list, [numbers=numbers])

 INPUTS:
 	filename_list = array of strings

 KEYWORDS:
	NUMBERS - if selected, returns an integer array of file numbers rather than sorted names

 OUTPUTS: ordered array

 COMMON BLOCKS:  none

 MODIFICATION HISTORY:
 (23-may-04 aph) first version; adapted from tif_convert
 (07-mar-09 aph) desensitize to alpha characters in filenames (from addition of 'A' at CLS)

(See c:\axis2000\ax_sort_names.pro)


AX_SPEC_DELETE

[Previous Routine] [Next Routine] [List of Routines]
NAME: 
	AX_SPEC_DELETE 
 
LAST CHANGED: ----------------------------------- 19-jun-00 
 
PURPOSE: 
	This procedure deletes all data points in a spectrum between user selected 
 x-axis limits. 
 
CATEGORY: 
	AXIS: spectra analysis 
 
CALLING SEQUENCE: 
 for procedures: 
	AX_SPEC_DELETE 
 
CALLED FROM AXIS: 
	->Spectra->Delete 

INPUTS: none 
 
KEYWORDS: none 
 
OUTPUTS: 
	Spectrum with deleted data is placed in Buffer 0. 
 
COMMON BLOCKS: 
	@AXIS_COM	standard set of common blocks 
 
PROCEDURE: 
	Cursors used to define two limits. All data points 
 betwen limits are deleted. Spectrum is replotted without changing 
 scales in case user has a zoomed scale for more precise deletion. 
 
MODIFICATION HISTORY: 
 (31-dec-99 aph) isolated from AXIS_C; AXIS standard documentation 

(See c:\axis2000\ax_spec_delete.pro)


AX_STRMID

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		AX_STRMID

LAST CHANGED: ----------------------------------- 	21-Feb-10

 PURPOSE:
	This function returns the parts of  string between 2 user defined strings

 CATEGORY:
	Utility

 CALLING SEQUENCE:
	Result = AX_STRMID(STRALL, STR1, STR2)

 INPUTS:
 	STRALL	string to be parsed
	STR1	start collecting at 1 character after STR1
	STR2	stop collecting at 1 character before STR2

 KEYWORDS: NONE

 OUTPUTS:
	returns middle part of a string defined by other strings

 COMMON BLOCKS:
	NONE

 MODIFICATION HISTORY:
 (21-Feb-10 aph) AXIS standard header added

(See c:\axis2000\ax_strmid.pro)


AX_STXM4NC

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_STXM4NC

LAST CHANGED: ----------------------------------- 18-Jul-01

 PURPOSE:
	This procedure converts one or a series of NSLS STXM 4 image files
 into netCDF format and, if multiple files, writes a stack_list (*.sl) file
 with names of converted files

 CATEGORY:
	AXIS: image analysis ; runs standalone

 CALLING SEQUENCE:
	AX_STXM4NC, file

 INPUTS:
	FILE - an NSLS STXM 4 image file (*.sm) to be converted to netCDF format (*.nc)

 KEYWORD PARAMETERS:
	LIST - name of file with list of image files (*.lst)
   OUTLIST - name of a file to write list of netCDF files (*.sl)
	ONE - convert only a single file

 OUTPUTS:
  FILE.NC - image written to a netCDF format binary file

 COMMON BLOCKS:
   @AXIS_COM - set of common blocks for AXIS
   @BSIF_COM - common block for netCDF

 SIDE EFFECTS:
	many !

 RESTRICTIONS:
	caveat emptor

 PROCEDURE:
	AX_STXM4NC assumes that ax_rd_im has put the image and associated information
 into BSIF_COMMON variables:
	image_data (the array which holds the image - possibly several
	planes deep for I, IO, CLOCK)

 MODIFICATION HISTORY:
 (18-Jul-01 aph) derived from  als2ncdf using readSTXM4

(See c:\axis2000\ax_stxm4nc.pro)


AX_SVD

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_SVD

LAST CHANGED: ----------------------------------- 23-Apr-11

PURPOSE:
	This procedure executes the SVD procedure to generate component maps
 from an arbitary number of images for an arbitrary number of components.
 Will run stand alone (prompting user for AXIS format files) or from AXIS.

CATEGORY:
	STAND ALONE: image, stack analysis

CALLING SEQUENCE:
	AX_SVD[,  axis=axis,  coeff = coeff, comp_images = comp_images, $
         help=help, images = images, stack = stack, verbose = verbose]

CALLED FROM AXIS:
	Stacks->SVD

INPUTS:
	All inputs are through keywords. User is prompted for missing data.

KEYWORDS:
	/AXIS - if on, then called from AXIS widget
	COEFF = fit parameter file with names of spectral files
	COMP_IMAGES = list of component images (*.axb)
	/HELP - set to print how-to-use statement
	IMAGES = file with list of images to be analysed
   STACK = name of a binary format stack (*.ncb)
	/VERBOSE  - print additional documentation of SVD procedure

OUTPUTS:
	No explicit outputs.   A new window is created if necessary

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks
	stack_process_com
	COMMON volume_data, image_stack
	bsif_com

PROCEDURE:
	The images are first read in - either as a binary stack (if stack keyword set)
 or from the list of images, or from pickfile dialog.
 The absorption coefficents for each component at the energies of the images
 are then read in, either through interpolation of a reference spectrum
 (read in via pickfile dialog), or from a standard absorption coefficient file
 (see example below) or by manual input.
 The SVD procedure is then applied.
 Component maps are generated. written to files, and displayed either in
 IDL windows (if run stand alone) or in AXIS buffers.

EXAMPLE:
 example of file to provide list of images (same as stack_list files)

	f:\stxm\9909\10-13\			; path to images
	a1013_01.axb
	a1013_02.axb
	a1013_03.axb
	a1013_04.axb
	a1013_05.axb
	a1013_06.axb
	a1013_07.axb
	a1013_08.axb
	a1013_09.axb

 example of file to provide mass absorption coefficents
	2900  155000     8200  76700
	3400   29900   139600  52000
   DVB
   EGDMA
	SF-normalized values		; ignores ANY text after ncomp lines and labels
	species	281 285	 288.3	305	; each with n_image entries (abs. coeff. for that species)
	DVB   (divinylbenzene)  EGDMA (acrylate)

MODIFICATION HISTORY:
	Developed by ANDY WINESETT, NCSU , 1998, 1999
	Modified from SGU's version by GEM 7/15/99 to do 3 image SAP stacks
	updated 7/16/99, GEM to save data files in XRD format
	updated March 5, 1999 (SGU)
 (29-jul-99 aph) generalised to a dialog
 (10-aug-99 aph) installed in AXIS; use reform to remove need to reload maps
 (17-aug-99 aph) auto-truncate to match size of all images NB does NOT use (x,y) scales
 (14-oct-99 aph) auto-extract intensity coeff from files if coeff set
 (17-oct-99 aph) further improvements to file handling stuff; allow use of any file format
 (23-oct-99 aph) plot coefficents for feedback to user
 (27-oct-99 aph) correct error in (x,y) scales of images
 (01-jan-00 aph) AXIS standard documentation
 (27-feb-00 aph) add groupID to get_text
 (11-apr-00 aph) add residual and chi square evaluation
 (22-aug-00 aph) force interpolation
 (19-oct-00 aph) increase to 8 components max
 (28-jul-01 aph) neaten up while developing AX_CGO; ensure stand-alone operation
 (12-aug-01 aph) correct error from 28-jul-01 change
 (07-oct-01 aph) add xl to temporary files to allow use later
 (13-dec-01 aph) fix error on component map name definition
 (29-dec-01 aph) add E to 2d structure
 (26-jan-02 aph) set correct path for par file
 (13-May-03 aph) convert coeff file to list of reference spectra files
 (04-jun-03 aph) force '.par' extension (pickfile, filter= & /write); fix comp_names for no blanks
 (04-jun-03 aph) use ax_par_load and ax_par_save
 (30-dec-03 aph) add ax_sort_mono to force stack E-scale and reference spectral scales to be monotonic
 (20-jan-04 aph) use dialog_message to control residual stack writing
				  ensure E-value (0.0) added to component maps
 (01-apr-04 aph) fix ERROR in writing component maps (duplicate E)
 (12-dec-04 aph) reformat component spectra to allow other uses
 (01-feb-05 aph) fix ax_sort_mono to use structure (ricochet change from lox change)
 (17-Sep-08 aph) replace analcom with stack_process_com
 (30-Jul-09 aph) add stack name to component map; remove 'clip at limits' option
                 truncate short name for component maps at the first space
				  changed spectral plotting to stack_fit approach - keeps original labels
 (28-dec-09 aph) extend to up to 16 spectra (needed for XRF fitting)
 (23-Apr-11 aph) optional selection of limits of component maps

(See c:\axis2000\ax_svd.pro)


AX_SVD_SPECTRA

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_SVD_spectra

LAST CHANGED: ----------------------------------- 03-feb-05

PURPOSE:
	This procedure uses SVD to fit a spectrum to a set of reference spectra.
 AX_SVD_spectra will run stand alone (prompting user for AXIS format files) or from AXIS.

CATEGORY:
	STAND ALONE: spectral analysis

CALLING SEQUENCE:
	AX_SVD_spectra[SPC, axis=axis, help = help, coeff = coeff, set_start = set_start, pos_only=pos_only ]

CALLED FROM AXIS:
	->{Spectra}->Curve Fit~SVD_spectra

INPUTS:
	SPC		spectrum to be fit in axis 1d structure form

KEYWORDS:
 AXIS 		called from AXIS widget
 COEFF		filename with spectral information
 HELP		print help text
 SET_START	allow users to set starting values
 POS_ONLY	force only positive coefficients
 LIMITS	[min, max] 2-vector defining lower and upper limits

OUTPUTS: 	No explicit outputs.

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

PROCEDURE:
	The reference spectra are read in and the coefficient matrix generated.
 SVD is then called to get the fittin coefficients

MODIFICATION HISTORY:
 (03-feb-04 aph) first version - adapted from ax_curvfit (20-oct-04 version )

(See c:\axis2000\ax_svd_spectra.pro)


AX_SWITCH

[Previous Routine] [Next Routine] [List of Routines]
NAME: 
	AX_SWITCH 
 
LAST CHANGED: ----------------------------------- 01-jan-00 
 
PURPOSE: 
	This procedure switches the active buffer using the thumbnails 
 or the buffer labels. It also processes flags for other uses for the 
 thumbnail switches, such as copying buffers. 
 
CATEGORY: 
	AXIS:  utility 
 
CALLING SEQUENCE: 
 for procedures: 
	AX_SWITCH, BufNum 
 
CALLED FROM AXIS: 
	->on mouse click on a thumbnail 

INPUTS: 
	BUFNUM - number of buffer selected by left mouse click. 
	other control parameters transferred via common 
 
KEYWORDS: none 
 
OUTPUTS: none 
 
COMMON BLOCKS: 
	@AXIS_COM	standard set of common blocks 
 
 PROCEDURE: 
 switches among buffers & processes flags 
 meaning of variables 
	NewBuf - (axis_common) new buffer number 
 	CurBuf - (axis_common) current buffer number 
	select_flag - identifies that thumbnail 'button push' is being 
                 used to select buffer for a function other than plotting 
 NB - this code always resets select_flag regardless of action 
	copy_flag = identifies action as a copy from CurBuf to NewBuf 
 
MODIFICATION HISTORY: 
 (30-oct-99 aph) first written to use new thumbnails as switches 
 (01-jan-00 aph) AXIS standard documentation 

(See c:\axis2000\ax_switch.pro)


AX_TOMO_READ

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		AX_TOMO_READ

LAST CHANGED: -----------------------------------  30-Oct-11 (aph)

 PURPOSE:
	This function processes a set of folders of files containing multi-images stacks for tomography read-in

 CATEGORY:
	Input / output utilty; stand alone

 CALLING SEQUENCE:
	Result = AX_TOMO_READ(FILE=FILE, ONE_IMAGE=ONE_IMAGE, MAP=MAP, STACK=STACK, AXB=AXB, GROUP=GROUP)

 INPUTS: none

 KEYWORDS
	CHANNEL		data channel to read
 	FILE		list of folders to process
	ONE_IMAGE  	read in one image at each angle
	MAP        	read in map (diff of OD of 2 images) at each angle
	STACK		read in stack of stacks (not yet implemented)
   TIF			read in set of tif files (from SVD) (ABORTED 14-Jul-07 due to no color)
	AXB			read in set of axb files (from SVD)

 OUTPUTS:
	folder with selected files

 COMMON:
	AXIS
	BSIF
	STACK_PROCESS_COM
   VOLUME_DATA

 MODIFICATION HISTORY:
 (15-dec-05 aph) first version fur use  in axis and stand alone (for tomography)
 (17-may-06 gaj) added /no_interpolate keyword to call of read_sdf() to aviod rounding error of number of pixels
 (10-jul-06 gaj) fixed some bugs with Stack~Tomography~map
 (14-jul-07 aph) read set of '*.axb' files (component maps) and convert to *.ncb angle sequence
 (30-Jul-09 aph) replace analcom with stack_process_com
 (30-Oct-11 aph) try to solve why it does not run in VM version (no change to this code)

(See c:\axis2000\ax_tomo_read.pro)


AX_WAIT

[Previous Routine] [Next Routine] [List of Routines]
NAME: 
	AX_WAIT 
 
LAST CHANGED: ----------------------------------- 01-jan-00 
 
PURPOSE: 
	This procedure turns on or off the widget_event hourglass 
 widget_event(hourglass=0)  does not seem to work !! 
 
CATEGORY: 
	STAND ALONE: utility 
 
CALLING SEQUENCE: 
	AX_WAIT, OFF = off 

INPUTS: none 
 
KEYWORDS: 
	OFF - turn off if 1, turn on if 0 
 
MODIFICATION HISTORY: 
 (19-sep-99 aph) first written to avoid persistent hourglass 
 (01-jan-00 aph) AXIS standard documentation 

(See c:\axis2000\ax_wait.pro)


AX_WRITE_XAS

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	 AX_WRITE_XAS

LAST CHANGED: ----------------------------------- 04-jun-08

PURPOSE:
	This procedure writes a 1d data structure (spectrum) as a
 nsls X1A *.xas format, annotated ascii file.
 The user is prompted for header information and can choose from
 nsls or gas-phase-database format for entries

CATEGORY:
	AXIS: utility

CALLING SEQUENCE:
	 AX_WRITE_XAS, tmp, file = file, nof = nof

CALLED FROM AXIS:
	->WRite->XAS

INPUTS:
	TMP - AXIS 1d-structure

KEYWORDS:
	FILE 	filename. If not supplied the user is prompted for the filename.
	NOF		no filter (default filter is *.xas)
	MULTI	write multiple spectra with user selectable point spacing

OUTPUTS:
	An XAS-format file is written.

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

MODIFICATION HISTORY:
 (31-jan-00 aph) first written to allow use of axis data as Io for Zimba stack_analyze.
 (27-feb-00 aph) AXIS standard documentation; groupID for get_text
 (04-Jun-08 aph) incorporate multi-spectral write (what is displayed)

(See c:\axis2000\ax_write_xas.pro)


AX_XRF_CONVERT

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_XRF_CONVERT

LAST CHANGED: ----------------------------------- 14-Dec-09

 PURPOSE:
	This function converts  a series of XRF fluorescence spectra written by XGLabs software
 into 1-channel fields with truncation to a user specified upper energy and optional binning
 it also generates the sum of all the XRF spectra and generates a stack of the data

 CATEGORY:
	utiltiy

 CALLING SEQUENCE:
	AX_XRF_CONVERT

 INPUTS:

 KEYWORDS:
	GROUP		group leader (Axis_ID if called from aXis2000 and axis)
	MULTI_DET 	multiple detector signals in one file
	SILENT  	if set, no feedback
	EXTRA 		passed on parameters

 OUTPUTS:
 set of 1-column ascii files suitable to read into PYMCA
 sum of all all XRF spectra

 COMMON BLOCKS:
   @AXIS_COM - set of common blocks for AXIS
	Volume_data - stack
   @BSIF_COM - common block for netCDF

 SIDE EFFECTS:

 RESTRICTIONS:
 assumes all XGLabs file names involve cycling the last 3 spaces before '.' as the sequence number

 PROCEDURE:

 RESTRICTIONS:

 MODIFICATION HISTORY:
 (14-dec-09 aph) dirsat written as tool for Twinmic staff & users
               to get around problems that XGLabs software optionally writes only non-zero channels

(See c:\axis2000\ax_xrf_convert.pro)


AX_XYCAL

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_XYCAL

LAST CHANGED: ----------------------------------- 22-Mar-15 (aph)

PURPOSE:
	This procedure calibrate the XY-values of currently displayed image.

CATEGORY:
	AXIS: image analysis

CALLING SEQUENCE:
	AX_XYCAL, ONE=one

CALLED FROM AXIS:
	Images->CalibrateXY->{1 point, 2 points}

INPUTS: none

KEYWORDS:
	ONE - use only 1-point to calibrate (shift)
 The default is a 2-point calibration (stretch-shift)

OUTPUTS:
	recalibrated image is placed in buffer 0.

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

MODIFICATION HISTORY:
 ( 4-Jun-98 aph) added 1-point version
 (14-jun-98 aph) axis_com
 (30-Dec-98 aph) format Uprompt
 ( 8-jun-99 aph) add group to get_num call; FIXED major error for 2-point calib !
 (20-oct-99 aph) add meshing and truncating to make same as image alignment procedure
 (01-jan-00 aph) set (xmin, xmax, ymin, ymax to limits); AXIS standard documentation
 (07-nov-00 aph) add tmp.E to preserve Energy of images
 (28-oct-01 aph) add check for tmp.E, set to zero if not found
 (29-Nov-11 aph)  add zoom box for more precise placement
                 - NOT COMPLETED  - need cursor on zoom & right color
 (22-May-15 aph) use real not integer pixle size (in nm)

(See c:\axis2000\ax_xycal.pro)


AX_XYDIS

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_XYDIS

LAST CHANGED: ----------------------------------- 11-Dec-11

PURPOSE:
	This procedure modifies (x) and/or (y) pixel size based on
 user-defined ultiplicative factors (only the ratio of pixel sizes changes
 NB - use Images~Modify X,Y axes to change the x, or y scales independently
    - use Images~Set X,Y scale to isomporhically set the x,y scale
    - use Images~Calibrate to calibrate the x,y scale (1-point = shift; 2-point = shift, stretch)

CATEGORY:
	AXIS: image utility

CALLING SEQUENCE:
	AX_XYDIS

CALLED FROM AXIS:
	Images->Distort XY scale

INPUTS: none

KEYWORDS: none

OUTPUTS:
	modified image is written to buffer 0

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

MODIFICATION HISTORY:
 (fall-97 aph) - first wrote for Mephisto data
 (14-jun-98 aph) add axis_com
 (08-jun-99 aph) add group call to get_num
 (14-dec-99 aph) get correct (x,y) values
 (25-dec-99 aph) interpolate to square pixels
 (01-jan-00 aph) AXIS standard documentation
 (11-dec-11 aph) modify to work properly
    (prior to 10-dec-11 this routine only worked if xfactor=1.0 and yfactor < 1.0)

(See c:\axis2000\ax_xydis.pro)


AX_XYSCL

[Previous Routine] [Next Routine] [List of Routines]
NAME: 
	AX_XYSCL 
 
LAST CHANGED: ----------------------------------- 01-jan-00 
 
PURPOSE: 
	This procedure sets the (x,y) scales of images 
 
CATEGORY: 
	AXIS: utility 
 
CALLING SEQUENCE: 
	AX_XYSCL 
 
CALLED FROM AXIS: 
	Images->Set XY scale 

INPUTS: none 
 
KEYWORDS: none 
 
OUTPUTS: none 
 
COMMON BLOCKS: 
	@AXIS_COM	standard set of common blocks 
 
MODIFICATION HISTORY: 
 (xx-sep-97 aph) first wrote for Mephisto data 
 (14-jun-98 aph) axis_com 
 (08-jun-99 aph) add group keyword to get_num; fixed error ! 
 (01-jan-00 aph) AXIS standard documentation 

(See c:\axis2000\ax_xyscl.pro)


AX_XY_CORRECT

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_XY_CORRECT

LAST CHANGED: ----------------------------------- 16-Feb-10 (aph)

PURPOSE:
	This function replaces (x,y) values of an image with
  x,y values measured interferometrically.

CATEGORY:
	AXIS: utility

CALLING SEQUENCE:
	Result = AX_XY_CORRECT(FILE=FILE)

CALLED FROM AXIS:
	->Images->XY-CORRECT

INPUTS: none

KEYWORDS:
	FILE - if supplied, name of sdf format image file (must have Image, and Xpos, Ypos channels)
	SILENT - do not display tracking messages

OUTPUTS:
	corrected image is displayed

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

MODIFICATION HISTORY:
 (01-Feb-09 aph) first version
 (10-feb-10 aph) "-" not allowed in function names (changed;IDL 7.x error)

(See c:\axis2000\ax_xy_correct.pro)


AX_ZOOM_CURSOR

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_ZOOM_CURSOR

LAST CHANGED: ----------------------------------- 21-aug-01

PURPOSE:
	This procedure zooms a sub region of the current image displayed
 by using a marquee (Box cursor) to select the zoom region.
 The zoomed region is extracted from the original data and
 placed as a new AXIS structure in buffer 0.

CATEGORY:
	AXIS: image analysis

CALLING SEQUENCE:
	AX_ZOOM_CURSOR

CALLED FROM AXIS:
	Zoom->Images->cursor - cut

INPUT: none

KEYWORDS: none

OUTPUTS:
	Region cut from image is placed as a new AXIS 2d structure in buffer 0.

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

PROCEDURE:
 	Uses BX_CURSOR to define a region to zoom
 nb - BX_CURSOR is derived from IDL's BOX_CURSOR
 but the left and middle buttons have been swapped
 to make it compatible with 2-button mice
 NB this routine is written to handle spectra as well, but currently not used.
 Spectra->Truncate performs the equivalent function for spectra.

MODIFICATION HISTORY:
 (28-dec-99 aph) isolated from AXIS_C
 (01-jan-00 aph) AXIS standard documentation
 (17-apr-01 aph) added E to output structure
 (21-aug-01 aph) ensured code compatible with 2d structures without E

(See c:\axis2000\ax_zoom_cursor.pro)


AX_ZOOM_CUT

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	AX_ZOOM_CUT

LAST CHANGED: ----------------------------------- 23-feb-06

PURPOSE:
	This procedure cuts out a region from an AXIS image
 based on numerical limits.

CATEGORY:
	AXIS: image analysis

CALLING SEQUENCE:
	AX_ZOOM_CUT, limits=limits

CALLED FROM AXIS:
	Zoom->Images->Numerical

INPUTS: none - acts on CurBuf

KEYWORDS:
	LIMITS  [xmin,xmax,ymin,ymax] in data units
	MESH	[x-pixels, y-pixels] - number of pixels
	NO_PLOT  if set, do not plot

OUTPUTS:
	Modified image placed in buffer 0.

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

MODIFICATION HISTORY:
 (15-nov-99 aph) isolated from axis_c
 (01-jan-00 aph) AXIS standard documentation
 (17-apr-01 aph) added E to output structure
 (29-dec-01 aph) changed to procedure; set up for macro operation
 (31-dec-01 aph) add keyword MESH = [number of x, y pixels] - to ensure equal size outputs
 (23-feb-06 aph) add no_plot keyword to allow use for zooming

(See c:\axis2000\ax_zoom_cut.pro)


AX_ZOOM_PAN

[Previous Routine] [Next Routine] [List of Routines]
NAME:
  AX_ZOOM_PAN

LAST CHANGED: ----------------------------------- 02-may-04

 PURPOSE:
	Display part of an image (or graphics) from the current window
	enlarged in another window.The cursor is used to mark the center of the zoom.

 CATEGORY:
	STAND ALONE: Image display.

 CALLING SEQUENCE:
	AX_ZOOM_PAN [, FACT = Fact, /INTERP, XSIZE = Xs, YSIZE = Ys, /CONTINUOUS, $
		/KEEP, ZOOM_WINDOW=Zoom_Win, /NEW_WINDOW ]

 INPUTS:
	All input parameters are passed as keywords.

 KEYWORDS:
	FACT:	Zoom factor.  This parameter must be an integer.  The default
		zoom factor is 4.
	INTERP:	Set this keyword to use bilinear interpolation, otherwise
		pixel replication is used.
	XSIZE:	The X size of the zoom window.  The default is 512.
	YSIZE:	The Y size of the zoom window.  The default is 512.
	CONTINUOUS:	Set this keyword to make the zoom window track the mouse
		without requiring the user to press the left mouse button.
		This feature only works well on fast computers.
	KEEP: Keep the zoom window after exiting the procedure.
	ZOOM_WINDOW:	When used with KEEP, returns the index of the zoom window.
		Otherwise, if KEEP is not set, then -1 is returned.
	NEW_WINDOW:	Normally, if ZOOM is called with /KEEP and then called again,
		it will use the same window to display the zoomed image.
		Calling ZOOM with /NEW_WINDOW forces it to create a new window
		for this purpose.

 OUTPUTS:
	No explicit outputs.   A new window is created if necessary. It
	is destroyed upon exit if KEEP is not specified.

 COMMON BLOCKS:
	common zoom_window, zoom_w
	axis_com

 SIDE EFFECTS:
	A window is created/destroyed.
	When ZOOM is reusing a zoom window from a previous call to ZOOM,/KEEP,
	then the XSIZE and YSIZE parameters are reset to the actual size of the
	window.

 RESTRICTIONS:
	ZOOM only works with color systems.

 PROCEDURE:
	Straightforward.

 MODIFICATION HISTORY:
	?
   William Thompson, March 1992, added common block ZOOM_WINDOW and KEEP keyword.
	William Thompson, 20 May 1993, added ZOOM_WINDOW and NEW_WINDOW keywords.
 (?         aph) adapted from IDL version to handle 2-button mice
 (30-Dec-98 aph) use Get_Num to change zoom factor
 (08-jun-99 aph) add group id to get_num
 (30-dec-99 aph) changed name from ax_zoom to ax_zoom_pan
 (02-jan-99 aph) AXIS standard documentation
 (13-oct-01 aph) add ax_color to make pan display color correctly
 (02-may-04 aph) change header

(See c:\axis2000\ax_zoom_pan.pro)


BLBL_UPD

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	BLBL_UPD

LAST CHANGED: ----------------------------------- 16-Feb-2010

PURPOSE:
 updates buffer labels in aXis2000

CATEGORY:
	AXIS:  utility (captive)

CALLING SEQUENCE:
	BLBL_UPD

CALLED FROM AXIS:
	whenever execute PlotBuf to display a new Buffer; clear; etc

ROUTINES
	BLBL_UPD  - update the labels (which displayed for multi, lable contents)

;INPUTS: none (via axis_com)

KEYWORDS: none

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

MODIFICATION HISTORY:
 (   MAR-98 APH) split from axis_c to shrink file
 (14-jun-98 aph) add axis_com
 (24-jun-99 aph) consistent color for image/spectra ; ADD zstack_color_common
 (26-jul-99 aph) if curBuf=0, only update labels
 (26-sep-99 aph) separated from THUMBS.PRO to have file name = run name
                adapted to 9 separate windows
 (31-jan-00 aph) AXIS standard documentation; re-ordered to avoid loss of utility routines
 (11-mar-00 aph) remove comment on @axis_com line
 (16-apr-00 aph) handle 3d images which have 3-channel (3-d) data structure
 (19-dec-00 cgz) substituted ax_white_color_index with ax_plot_axes_color_index
			substituted ax_black_color_index with ax_plot_bkgd_color_index
 (16-Feb-10 aph) separated from parent Thumllbls.pro file to follow IDL conventions

(See c:\axis2000\blbl_upd.pro)


BMP_TO_NCB[1]

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	BMP_TO_NCB

LAST CHANGED: ----------------------------------- 30-Jul-09 (aph)

 PURPOSE:
	This procedure converts a series of Windows *.bmp image files
 into a binary stack file. The BMP files are those listed in a '*.sl' file

 CATEGORY:
	AXIS: stack analysis

 CALLING SEQUENCE:
	RESULT = BMP_TO_NCB(group_leader=axis_ID)

 INPUTS:
	none

 KEYWORD PARAMETERS:
	GROUP_LEADER - identification of caller for modal control

 OUTPUTS:
  FILE.NCB - stack binary file

 COMMON BLOCKS:
   @AXIS_COM - set of common blocks for AXIS
	stack_process_com
	bsif_com
	volume_data

 SIDE EFFECTS:
	many !

 RESTRICTIONS:
	caveat emptor

 MODIFICATION HISTORY:
 (21-Feb-06 aph) first developed (adapted from stxm4_ncb)
 (26-apr-06 aph) clean up and add conversion tags
 (30-jul-09 aph) changed analcom to stack_process_com (update to stack_process)

(See c:\axis2000\bmp_to_ncb.pro)


BMP_TO_NCB[2]

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	BMP_TO_NCB

LAST CHANGED: ----------------------------------- 30-Jul-09

 PURPOSE:
	This procedure converts a series of JPEG (*.jpg) image files
 into a binary stack file. The BMP files are those listed in a '*.sl' file

 CATEGORY:
	AXIS: stack analysis

 CALLING SEQUENCE:
	RESULT = JPG_TO_NCB(group_leader=axis_ID)

 INPUTS:
	none

 KEYWORD PARAMETERS:
	GROUP_LEADER - identification of caller for modal control

 OUTPUTS:
  FILE.NCB - stack binary file

 COMMON BLOCKS:
   @AXIS_COM - set of common blocks for AXIS
	stack_process_com
	bsif_com
	volume_data

 RESTRICTIONS:
	caveat emptor

 MODIFICATION HISTORY:
 (26-Feb-06 aph) first developed (adapted from BMP_TO_NCB)
 (30-jul-09 aph) changed analcom to stack_process_com (update to stack_process)

(See c:\axis2000\jpg_to_ncb.pro)


BNL_LOAD

[Previous Routine] [Next Routine] [List of Routines]
NAME: 
	BNL_LOAD 
 
LAST CHANGED: ----------------------------------- 23-feb-00 
 
PURPOSE: 
	This function loads  spectral data from the nsls X1A 
 standard ASCII format file into AXIS 1d data structure 
 
CATEGORY: 
	AXIS: utility 
 
CALLING SEQUENCE: 
	Result = BNL_LOAD(NOF=nof, DEFPATH=DefPath) 
 
CALLED FROM AXIS: 
	->Read->NSLS->ascii 
 
INPUTS: 
	All input parameters are passed as keywords. 
 
KEYWORDS: 
	NOF - no filter 
   DEFPATH - default path (used in pickfile routine) 
 
OUTPUTS: 
	The result is placed in the Current Buffer. 
 
COMMON BLOCKS: none 
 
MODIFICATION HISTORY: 
 (aph 7-aug-97) broke out of spectral; type defined 
 (23-feb-00 aph) AXIS standard documentation 

(See c:\axis2000\bnl_load.pro)


BOX

[Previous Routine] [Next Routine] [List of Routines]
 NAME:	 
	BOX 
 PURPOSE: 
	Draws a rubber band box according to cursor motion, returns corners. 
 CATEGORY: 
	Who Knows -- Need a list of the valid responses 
 CALLING SEQUENCE: 
	BOX,xv,yv [,ratio=ratio,/device [,/data ] ] 
 INPUTS: 
	ratio	Ratio of the length of the box sides 
	/device	Specifies use of device coordinates 
	/data	Specifies use of data coordinates 
 OUTPUTS: 
	xv	2 point vector of x-coordinate for opposite box corners 
	yv	2 point vector of y-coordinate for opposite box corners 
 COMMON BLOCKS: 
	NONE 
 SIDE EFFECTS: 
	Makes user think SHE/HE is a terminator. 
 RESTRICTIONS: 
	Display must be able to support DEVICE,SET_GRAPH=6 
 PROCEDURE: 
	STRAIGHTFORWARD (seems to be the default value of this field). 
 MODIFICATION HISTORY: 
	Written Early 1991 by J. M. Zawodny, NASA LaRC 
		zawodny@arbd0.larc.nasa.gov 

(See c:\axis2000\box.pro)


BOX_CURSOR

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
	BOX_CURSOR

 PURPOSE:
	Emulate the operation of a variable-sized box cursor (also known as
	a "marquee" selector).

 CATEGORY:
	Interactive graphics.

 CALLING SEQUENCE:
	BOX_CURSOR, x0, y0, nx, ny [, INIT = init] [, FIXED_SIZE = fixed_size]

 INPUTS:
	No required input parameters.

 OPTIONAL INPUT PARAMETERS:
	x0, y0, nx, and ny give the initial location (x0, y0) and 
	size (nx, ny) of the box if the keyword INIT is set.  Otherwise, the 
	box is initially drawn in the center of the screen.

 KEYWORD PARAMETERS:
	INIT:  If this keyword is set, x0, y0, nx, and ny contain the initial
	parameters for the box.

	FIXED_SIZE:  If this keyword is set, nx and ny contain the initial
	size of the box.  This size may not be changed by the user.

	MESSAGE:  If this keyword is set, print a short message describing
	operation of the cursor.

 OUTPUTS:
	x0:  X value of lower left corner of box.
	y0:  Y value of lower left corner of box.
	nx:  width of box in pixels.
	ny:  height of box in pixels. 

	The box is also constrained to lie entirely within the window.

 COMMON BLOCKS:
	None.

 SIDE EFFECTS:
	A box is drawn in the currently active window.  It is erased
	on exit.

 RESTRICTIONS:
	Works only with window system drivers.

 PROCEDURE:
	The graphics function is set to 6 for eXclusive OR.  This
	allows the box to be drawn and erased without disturbing the
	contents of the window.

	Operation is as follows:
	Left mouse button:   Move the box by dragging.
	Middle mouse button: Resize the box by dragging.  The corner
		nearest the initial mouse position is moved.
	Right mouse button:  Exit this procedure, returning the 
			     current box parameters.

 MODIFICATION HISTORY:
	DMS, April, 1990.
	DMS, April, 1992.  Made dragging more intutitive.
	June, 1993 - Bill Thompson
			prevented the box from having a negative size.
       SJL, Nov, 1997.  Formatted, conform to IDL style guide.
                       Prevented crash from unitialized corner.
       RJF, Feb, 1998. Replaced !ERROR_STATE.CODE w/ !MOUSE.BUTTON and
			fixed some problems w/sizing when a corner might swap.

(See c:\axis2000\box_cursor.pro)


BSIF_COMMON.PRO

[Previous Routine] [Next Routine] [List of Routines]
 NAME: 
       BSIF_COMMON.PRO 
 
 LAST CHANGED ---------------------------  23-Feb-00 
 
 PURPOSE: 
 Defines the common block used in NSLS X1A imaging routines for images read 
 from BSIF files. Longname version of BSIF_COM.PRO 
 
   VERSION 
       BSIF file format version number - not currently used, allows for future 
       changes in file format. 
   FIRST_DATA_RECORD 
       First data record in file. This field is set by WRITE_BSIF and is not 
       needed by any IDL routines. 
   N_COLS, NROWS 
       The number of columns and rows in the image 
   N_DATA 
       The number of data values at each pixel 
   X_NORMAL 
       Non-zero (TRUE) if X scan direction is "normal" e.g. left-to-right. 
       This variable is not presently used by any IDL routines. 
   Y_NORMAL 
       Non-zero (TRUE) if Y scan direction is "normal" e.g. top-to-bottom. 
       This variable is not presently used by any IDL routines. 
   ROTATED 
       Non-zero (TRUE) image image is rotated, e.g. X and Y axes are switched. 
       This variable is not presently used by any IDL routines. 
   X_START, X_STOP 
       The position of the beginning and end of the X scan direction in user 
       units, such as mm. 
   Y_START, Y_STOP 
       The position of the beginning and end of the Y scan direction in user 
       units, such as mm. 
   X_DIST(N_COLS) 
       Array with calibrated X axis positions. 
   Y_DIST(N_ROWS) 
       Array with calibrated Y axis positions. 
   DATA_TYPE 
       The data type of image_data as stored in the file. 
   COMPRESSION_TYPE 
       Data compression type. Currently supported values are 
           0 = No compression 
           1 = ??? 
           2 = ??? 
   DATA_MIN(N_DATA), DATA_MAX(N_DATA) 
       The minimum and maximum values of the data in the array. These values 
       are not guaranteed to be correct. 
   IMAGE_TITLE 
       The title of the image - a character string 
   X_TITLE 
       The title of the X axis of the image, i.e. "Distance in mm" 
   Y_TITLE 
       The title of the Y axis of the image, i.e. "Distance in mm" 
   DATA_TITLE(N_DATA) 
       The titles of the data values at each pixel. 
   USER_BUFFER 
       A user defined array. Stored in IDL as a byte array. May have internal 
       structure which is user defined. 
   IMAGE_DATA(COLS, ROWS, N_DATA) 
       The image data array. The data type of the array is determined by the 
       data type definined in the BSIF file. It can be BYTE, INTEGER, LONG or 
       FLOAT. 

(See c:\axis2000\bsif_common.pro)


BUFFER

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	BUFFER

LAST CHANGED: ----------------------------------- 15-Jan-13

PURPOSE:
	This function selectsan AXIS buffer for use in various processing steps.

CATEGORY:
	AXIS: utility

CALLING SEQUENCE:
	Result = BUFFER(GROUP=Group, Prompt=Prompt)

CALLED FROM AXIS:
	many places

ROUTINES
	BUFFER_Event, Event - processes button pushes on Buffer widget

INPUTS:
	INPUT - POSITIONAL INPUTS only (not keywords)
	All input parameters are passed as keywords.

KEYWORDS:
	 GROUP = parent calling buffer (AXIS_ID from axis) - to allow modal
	 Prompt = prompt to inform user purpose of buffer selection

OUTPUTS:
	The number of the selected buffer is returned.
   If the user pushes cancel, the returned value is -1.

COMMON BLOCKS:
	B, Buf - number of selected buffer (to transfer between function & event processor)

SIDE EFFECTS:
	A widget is created/destroyed.

MODIFICATION HISTORY:
 (xx-yyy-07 aph) first written
 (20-dec-98 aph) correct pattern for IDL5.2; add 'Cancel'
 (11-jun-99 aph) extend prompt information
 (23-feb-00 aph) AXIS standard documentation
 (15-Jan-13 aph)  force this to display in middle of the call program

(See c:\axis2000\buffer.pro)


BX_CURSOR

[Previous Routine] [Next Routine] [List of Routines]
 NAME: 
	BX_CURSOR 
 
 LAST CHANGED: -------------------------- 23-feb-00 
 
 PURPOSE: 
	Emulate the operation of a variable-sized box cursor (also known as 
	a "marquee" selector). 
 (aph) (26-may-97) adapted to swap left and middle button functionality 
 
 CATEGORY: 
	Interactive graphics. 
 
 CALLING SEQUENCE: 
	BOX_CURSOR, x0, y0, nx, ny [, INIT = init] [, FIXED_SIZE = fixed_size] 
 
 INPUTS: 
	No required input parameters. 
 
 OPTIONAL INPUT PARAMETERS: 
	x0, y0, nx, and ny give the initial location (x0, y0) and 
	size (nx, ny) of the box if the keyword INIT is set.  Otherwise, the 
	box is initially drawn in the center of the screen. 
 
 KEYWORD PARAMETERS: 
	INIT:  If this keyword is set, x0, y0, nx, and ny contain the initial 
	parameters for the box. 
 
	FIXED_SIZE:  If this keyword is set, nx and ny contain the initial 
	size of the box.  This size may not be changed by the user. 
 
	MESSAGE:  If this keyword is set, print a short message describing 
	operation of the cursor. 
 
 OUTPUTS: 
	x0:  X value of lower left corner of box. 
	y0:  Y value of lower left corner of box. 
	nx:  width of box in pixels. 
	ny:  height of box in pixels. 
 
	The box is also constrained to lie entirely within the window. 
 
 COMMON BLOCKS: 
	None. 
 
 SIDE EFFECTS: 
	A box is drawn in the currently active window.  It is erased 
	on exit. 
 
 RESTRICTIONS: 
	Works only with window system drivers. 
 
 PROCEDURE: 
	The graphics function is set to 6 for eXclusive OR.  This 
	allows the box to be drawn and erased without disturbing the 
	contents of the window. 
 
	Operation is as follows: 
	Left   mouse button: Resize the box by dragging.  The corner 
		             nearest the initial mouse position is moved. 
	Middle mouse button: Move the box by dragging.  ! IF 3-button mouse !! 
	Right  mouse button: Exit this procedure, returning the 
			     current box parameters. 
 
 MODIFICATION HISTORY: 
	DMS, April, 1990. 
	DMS, April, 1992.  Made dragging more intutitive. 
	June, 1993 - Bill Thompson 
			prevented the box from having a negative size. 
	May, 1997  - Adam Hitchcock : swap left and middle button 
 (23-feb-00 aph) axis standard documentation 

(See c:\axis2000\bx_cursor.pro)


CAPERS-SCALE

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	CAPERS-SCALE

 last changed ----------------------------- 18-Sep-05 (aph)

 PURPOSE
   This function sets the full size of a CaPeRS image read from a Lox file
 based on values of the Field Lens and Projective 1 Lens currents

 CATEGORY:
	Image processing.

 CALLING SEQUENCE:
	Result = CAPERS-SCALE(P1, F1, HBIN=HBIN, VBIN=VBIN)

 INPUTS:
 P1 = Projective 1  lens current (mA)
 FL = Field Lens    lens current (mA)

 KEYWORDS:
  HBIN = integer binning in horizontal direction (on-camera)
  VBIN = integer binning in vertical   direction (on-camera)

 COMMON: none

 WARNINGS

 Note that different Elmitec microscopes have different lenses
 thus the lens current = pixel size look up table contained in the CAPERS_SCALE.PRO file
 may be have to be parameterized to correctly dal with Elmitec microscopes other than CaPeRS

 The {FoV, P1, FL} values and thus limits of the ranges for the preset image modes
 were taken from the values in the LEEM2000 program of CaPeRS in August 2005.

 If reduced portions of the camera output were used the image size must be appropriately adapted
 An alternative  would be to return the pixel size, not the full image size
 However, if there is binning done on-camera (most often the case) that information must be taken into account
 to get the correct pixel size; Since the camera binning parameters are stored in the Lox header
 this is possible to implement.

 If the image data is binned after read-in, the pixel size must be appropriately modified

 MODIFICATION HISTORY:
 (18-Sep-05 aph) first version

(See c:\axis2000\capers_scale.pro)


CATCH_ERROR

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		CATCH_ERROR

LAST CHANGED: ----------------------------------- 	11-Aug-09

 PURPOSE:
	This procedure prints erorr messages in aXis log.
 This provides a mechanism to identify errors in VM operation

 CATEGORY:
	Utility

 CALLING SEQUENCE:
  Establish error handler.
 When errors occur, the index of the
 error is returned in the variable Error_status:
   CATCH, Error_status

  ;This statement begins the error handler:
   IF Error_status NE 0 THEN CATCH_ERROR
  ;
 INPUTS: none

 OUTPUTS:
	Error message printed by axis_log

 PROCEDURE:
	details where needed

 MODIFICATION HISTORY:
 (01-Aug-09 aph) first prepared ; use as can the extend error messaging
              without regenerating the CATCH mechanism in the individual files

(See c:\axis2000\catch_error.pro)


CG_OPTIMIZE

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
       CG_OPTIMIZE

 LAST CHANGED: ------------------------------  28-jul-01 (aph)

 PURPOSE:
       This function finds the minimum of a user-specified objective
       function using the conjugate gradient algorithm (Polak-Ribiere
       variant). The objective function to be minimized must return a
       scalar-valued output given a vector-valued input. Also required
       is a function to calculate the gradient of the objective function.

 CATEGORY:
       Optimization

 CALLING SEQUENCE:
       x = CG_OPTIMIZE(xstart, Func, DFunc)

 INPUTS:
       xstart:    A starting guess for the solution vector x. A common
                  starting guess is the zero vector.

       Func:      A string containing the name of the objective function to
                  minimize. The objective function must take a vector-valued
                  input and return a scalar-valued output.

       DFunc:     A string containing the name of a function that calculates
                  the gradient of Func at a vector-valued input point. The
                  output of the function must be a vector of the same length
                  as the input vector.

 KEYWORD PARAMETERS:
       NUM_ITER:  The maximum number of iterations of the algorithm to run.
                  The default is 100.

       TOLERANCE: If set, iterates will be computed until the change in
                  the objective function is smaller than the tolerance,
                  or the maximum number of iterations is reached, whichever
                  comes first.

       OBJECTIVE: A variable to receive the value of the objective function
                  at each iteration. It will therefore be a vector of length
                  one plus the number of iterations performed.

       LINMIN:    A string containing the name of a function that performs
                  one dimensional minimization of an objective function along
                  a vector direction from a starting point. The function
                  must take the following arguments:
                    (start, dir, fmin, Func, DFunc, _EXTRA)
                  where start is the starting point (vector), dir is the
                  direction (vector), fmin is the value of the objective
                  function at the line minimum (scalar), Func, DFunc,
                  and _EXTRA are as described for CG_OPTIMIZE.
                  The 1-D minimization function must return a vector that
                  minimizes the objective function along the specified
                  direction.
                  If not specified, the default function CG_LINMIN is used.

		POS_ONLY:  If set, force all values to be optimized to be GT 0

		LIMITS:		[x-min, x-max] lower and upper bounds

		SWAP:		If set, replace low values with upper limit and vice-verso

       _EXTRA:    Keywords to Func and DFunc may be passed to those functions
                  through the CG_OPTIMIZE function. This is useful for
                  providing data to the objective and gradient functions.

 OUTPUTS:
       x:         The solution vector that minimizes Func.

 ROUTINES INCLUDED IN THIS MODULE:
       CG_LINMIN   The default line minimization routine.
       CG_OPTIMIZE The main function.

       and example functions: CGEX_FUNC, CGEX_DFUNC, CGEX_LINMIN

 WRITTEN BY:
       Billy W. Loo, Jr.
       Bioengineering Graduate Group, UCSF / UCB
       School of Medicine, UCD
       Lawrence Berkeley National Lab
       February, 2000

 MODIFICATION HISTORY:
 (29-dec-00 aph) add ALLPOS to force non-negative values (not working as parameter)
 (13-feb-01 aph) adapt for use in a curve-fit routine
 (27-jul-01 aph) get pos_only to work as an option; - executes but no convergence
              explicitly include A, B in all call functions
 (28-jul-01 aph) add upper / lower bound constraints and swap

(See c:\axis2000\cg_optimize.pro)


CHKFILEBLOCKS.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME: 
	CHKFILEBLOCKS.PRO 
 
LAST CHANGED: ----------------------------------- 11-nov-00 
 
PURPOSE: 
	CHKFILEBLOCKS - determines block structure of a text string 
 
CATEGORY: 
	STAND ALONE: utilities 
 
CALLING SEQUENCE: 
	Result = CHKFILEBLOCKS(FILNENAME) 
 
CALLED FROM AXIS: 
	many procedures 
 
ROUTINES 
	function CHKFILEBLOCKS, FNAME 
	looks in FILE (fname), counts the number of "blocks" of data, where 
 a block is a (r x c) block of numbers. If there are no blocks found, 
 returns a scalar 0, else returns a (b, 2)-dim array, where b is the 
 block index, (b,0) is the number of rows, (b,1) is the number of columns 
 and (b,2) is the starting row in the file (counting from 0) 
 
COMMON BLOCKS: none 
 

(See c:\axis2000\chkfileblocks.pro)


CIMAGE.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		CIMAGE.PRO

LAST CHANGED: ----------------------------------- 	12-Sep-07 (aph)

 PURPOSE:
	This procedure cleans up images by removing very low and very high values.

 CATEGORY:
	Image processing

 CALLING SEQUENCE:
 for procedures:
	CIMAGE;;ResetImageRange

 INPUTS: none

 KEYWORDS: none

 OUTPUTS:
	Image is modified (??)

 COMMON BLOCKS: none

 SIDE EFFECTS: none

 RESTRICTIONS: does not work if low contrast, Error trapped if flat image

 PROCEDURE:
	This procedure calculates a histogram and determine two levels (Top and Bottom)
 such that 2 rows worth of pixels are above and two rows worth of
 pixels are below these levels. The image is then scaled between Top and Bottom
 instead of using Minimum and Maximum.

 EXAMPLE:


 MODIFICATION HISTORY:
 (22-Jan-07 as) Andreas Scholl provided routine as a solution to problem of arbitary removal
         of first 5 columns (causes dimensional problems)
 (12-Sep-07 aph) incorporated; AXIS standard header added

(See c:\axis2000\cimage.pro)


CINDEX[1]

[Previous Routine] [Next Routine] [List of Routines]
 NAME: 
       CIndex 
 
 PURPOSE: 
       This is a program for viewing the current colors in the 
       colortable with their index numbers overlayed on each color. 
       On 24-bit systems you must click the cursor in the graphics window 
       to see the colors in the current color table. 
 
 AUTHOR: 
       FANNING SOFTWARE CONSULTING 
       David Fanning, Ph.D. 
       2642 Bradbury Court 
       Fort Collins, CO 80521 USA 
       Phone: 970-221-0438 
       E-mail: davidf@dfanning.com 
       Coyote's Guide to IDL Programming: http://www.dfanning.com 
 
 CATEGORY: Graphics 
 
 CALLING SEQUENCE:  CIndex 
 
 INPUTS:   None. 
 
 Optional Inputs:   None 
 
 OUTPUTS:  None 
 
 OPTIONAL OUTPUTS:  None 
 
 KEYWORD Parameters:   None 
 
 COMMON BLOCKS:  None 
 
 SIDE EFFECTS:   None 
 
 RESTRICTIONS:   Reqires XCOLORS from the Coyote Library: 
 
                     http://www.dfanning.com/programs/xcolors.pro 
 
 PROCEDURE: 
 
  Draws a 31x25 set of small rectangles in 256 different colors. 
  Writes the color index number on top of each rectangle. 
 
 MODIFICATION HISTORY:  David Fanning, RSI, May 1995 
 
  Widgetized and made it work in 24-bit color. Colors are 
     updated by clicking in window. 22 Oct 98. DWF 
 
  Replace POLYFILL with TV command to avoid underflow error in 
     Z-buffer. 8 March 99. DWF 

(See c:\axis2000\ax_show_cindex.pro)


CINDEX[2]

[Previous Routine] [Next Routine] [List of Routines]
 NAME: 
       CIndex 
 
 PURPOSE: 
       This is a program for viewing the current colors in the 
       colortable with their index numbers overlayed on each color. 
       On 24-bit systems you must click the cursor in the graphics window 
       to see the colors in the current color table. 
 
 AUTHOR: 
       FANNING SOFTWARE CONSULTING 
       David Fanning, Ph.D. 
       2642 Bradbury Court 
       Fort Collins, CO 80521 USA 
       Phone: 970-221-0438 
       E-mail: davidf@dfanning.com 
       Coyote's Guide to IDL Programming: http://www.dfanning.com 
 
 CATEGORY: Graphics 
 
 CALLING SEQUENCE:  CIndex 
 
 INPUTS:   None. 
 
 Optional Inputs:   None 
 
 OUTPUTS:  None 
 
 OPTIONAL OUTPUTS:  None 
 
 KEYWORD Parameters:   None 
 
 COMMON BLOCKS:  None 
 
 SIDE EFFECTS:   None 
 
 RESTRICTIONS:   Reqires XCOLORS from the Coyote Library: 
 
                     http://www.dfanning.com/programs/xcolors.pro 
 
 PROCEDURE: 
 
  Draws a 31x25 set of small rectangles in 256 different colors. 
  Writes the color index number on top of each rectangle. 
 
 MODIFICATION HISTORY:  David Fanning, RSI, May 1995 
 
  Widgetized and made it work in 24-bit color. Colors are 
     updated by clicking in window. 22 Oct 98. DWF 
 
  Replace POLYFILL with TV command to avoid underflow error in 
     Z-buffer. 8 March 99. DWF 

(See c:\axis2000\cindex.pro)


CLEAN

[Previous Routine] [Next Routine] [List of Routines]
NAME: 
	CLEAN 
 
LAST CHANGED: ----------------------------------- 23-feb-00 
 
PURPOSE: 
	This procedure performs a 2d fourier transform of an image. 
  The user then selects a sub-region of the 2dFT which is zeroed. 
 The rest of the array is thenn reverse transformed back into image space. 
 Apropriate selection of sub-region provides a powerful means 
 to remove periodic noise (e.g. from beam motion) from image data. 
 
CATEGORY: 
	STAND ALONE: image processing 
 
CALLING SEQUENCE: 
	CLEAN, array 
 
CALLED FROM AXIS: 
	->Filter->clean(FT) 
 
INPUTS: 
	ARRAY - 2d array 
 
KEYWORDS: 
	HELP - if set, gives instructions 
 
OUTPUTS: 
	The result is placed in the input array 
 
COMMON BLOCKS: 
	@AXIS_COM	standard set of common blocks 
   @BSIF_COM   common for BSIF data structures 
   @IMG_COM    common for NSLS images 
 
RESTRICTIONS: 
	Warning : 
	Not assuming responsibility for misuse, or abuse of the image data. 
	Picking too many peaks may damage the data. 
 
PROCEDURE: 
 ORIGINAL (X1A code) 
 	Cleans up beam noise by picking noise peaks in the FFT with the mouse. 
 	When done picking points, click the mouse off the edge of the FFT.  The 
 	routine then puts up the cleaned FFT and writes the STXM file. 
 NOW 
	user can only click twice, which defines a box. The contents of this box are removed. 
 
MODIFICATION HISTORY: 
 (09-mar-92 spw) first version 
 (xx-feb-93 cjj) improved 
 (12-jan-99 aph) incorporated into AXIS 
 (23-feb-00 aph) AXIS standard documentation 

(See c:\axis2000\clean.pro)


CLIP

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	CLIP

LAST CHANGED: ----------------------------------- 04-Aug-12

PURPOSE:
	This function selects a subset of intensities of an image.

CATEGORY:
	STAND ALONE: image processing

CALLING SEQUENCE:
	Result = CLIP(tmp)

CALLED FROM AXIS:
	->Images->Clip

INPUTS:
	TMP - an AXIS 2d structure (image)

KEYWORDS:
	SAVE_HIST  - if set, write out histogram

OUTPUTS:
	The result is an AXIS 2d structure with modified intensities.

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

SIDE EFFECTS: none

PROCEDURE:
	A histogram of the intensities of an image are displayed as a spectrum on
 MainImg (if in AXIS) or on the current or a generated window.
 Two cursor clicks then identify lower and upper bounds of interest.
 Lower intensities are set to the lower bound.
 Higher intensities are set to the upper bound.
 This is an alternate to DEGLITCH. DEGLITCH works nicely for localized,
 single pixel 'glitches' but CLLP is better for extended artefacts


EXAMPLE:
 Create a sample nxn image, display, clip, and redisplay
	n = 100 & t = findgen(n) & d = dist(n)
	a = {t:'2d', x:t, y:t, xl:'x', yl:'y', d: d, dl:'test'}
	splot2d, a   ; display input
	b = CLIP(a)	 ; clip
	splot2d, b

MODIFICATION HISTORY:
 (31-dec-99 aph) isolated from AXIS_C as a stand-alone
				  AXIS standard documentation
 (09-jan-00 aph) fixed up error from histogram with big images (out of virtual memory)
 (19-dec-00 cgz) substituted ax_white_color_index with ax_plot_axes_color_index
			substituted ax_black_color_index with ax_plot_bkgd_color_index
 (08-may-01 aph) tried to fix problem with flakey clipping - NOT FIXED !!
		output of histogram somehow seems to get mis-identified as a structure
		suspect variable confusion in histogram.pro, but this is not an open file
		REPLACING FLOAT with a LONG seems to have fixed this - values in array is the issue
 (30-sep-01 aph) removed 'LONG' - this does not seem to do anything useful
 (13-mar-02 aph) add save_hist keyword
 (10-apr-02 aph) replace IDL clip ruotine with where command
 (02-may-02 aph) adopt RSI suggestion to make clip work reliably
 (10-apr-04 aph) add annotation to header
 (20-oct-04 aph) simplify tag
 (15-Jul-12 aph) add numerical clipping approach; replace NaN values with minimum
 (04-Aig-12 aph) save values of clip limits in common (aparam/xlock(1), ylock(1) )

(See c:\axis2000\clip.pro)


COLORBAR_DWF

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
   COLORBAR_DWF

 LAST CHANGED:   02-Aug-2015 (aph)

 PURPOSE:
       The purpose of this routine is to add a color bar to the current
       graphics window.

 CATEGORY:
       Graphics, Widgets.

 CALLING SEQUENCE:
       COLORBAR

 INPUTS:
       None.

 KEYWORD PARAMETERS:

       BOTTOM:   The lowest color index of the colors to be loaded in
                 the bar.

       CHARSIZE: The character size of the color bar annotations. Default is 1.0.

       COLOR:    The color index of the bar outline and characters. Default
                 is !P.Color..

       DIVISIONS: The number of divisions to divide the bar into. There will
                 be (divisions + 1) annotations. The default is 6.

       FONT:     Sets the font of the annotation. Hershey: -1, Hardware:0, True-Type: 1.

       FORMAT:   The format of the bar annotations. Default is '(I5)'.

       MAX:      The maximum data value for the bar annotation. Default is
                 NCOLORS.

       MIN:      The minimum data value for the bar annotation. Default is 0.

       MINOR:    The number of minor tick divisions. Default is 2.

       NCOLORS:  This is the number of colors in the color bar.

       POSITION: A four-element array of normalized coordinates in the same
                 form as the POSITION keyword on a plot. Default is
                 [0.88, 0.15, 0.95, 0.95] for a vertical bar and
                 [0.15, 0.88, 0.95, 0.95] for a horizontal bar.
;
       RANGE:    A two-element vector of the form [min, max]. Provides an
                 alternative way of setting the MIN and MAX keywords.

       RIGHT:    This puts the labels on the right-hand side of a vertical
                 color bar. It applies only to vertical color bars.

       TITLE:    This is title for the color bar. The default is to have
                 no title.

       TOP:      This puts the labels on top of the bar rather than under it.
                 The keyword only applies if a horizontal color bar is rendered.

       VERTICAL: Setting this keyword give a vertical color bar. The default
                 is a horizontal color bar.

 COMMON BLOCKS:
       None.

 SIDE EFFECTS:
       Color bar is drawn in the current graphics window.

 RESTRICTIONS:
       The number of colors available on the display device (not the
       PostScript device) is used unless the NCOLORS keyword is used.

 EXAMPLE:
       To display a horizontal color bar above a contour plot, type:

       LOADCT, 5, NCOLORS=100
       CONTOUR, DIST(31,41), POSITION=[0.15, 0.15, 0.95, 0.75], $
          C_COLORS=INDGEN(25)*4, NLEVELS=25
       COLORBAR, NCOLORS=100, POSITION=[0.15, 0.85, 0.95, 0.90]

 MODIFICATION HISTORY:
       Written by: David Fanning, 10 JUNE 96.
       10/27/96: Added the ability to send output to PostScript. DWF
       11/4/96: Substantially rewritten to go to screen or PostScript
           file without having to know much about the PostScript device
           or even what the current graphics device is. DWF
       1/27/97: Added the RIGHT and TOP keywords. Also modified the
            way the TITLE keyword works. DWF
       7/15/97: Fixed a problem some machines have with plots that have
            no valid data range in them. DWF
       12/5/98: Fixed a problem in how the colorbar image is created that
            seemed to tickle a bug in some versions of IDL. DWF.
       1/12/99: Fixed a problem caused by RSI fixing a bug in IDL 5.2. Sigh... DWF.
       3/30/99: Modified a few of the defaults. DWF.
       3/30/99: Used NORMAL rather than DEVICE coords for positioning bar. DWF.
       3/30/99: Added the RANGE keyword. DWF.
       3/30/99: Added FONT keyword. DWF
       5/6/99: Many modifications to defaults. DWF.
       5/6/99: Removed PSCOLOR keyword. DWF.
       5/6/99: Improved error handling on position coordinates. DWF.
       5/6/99. Added MINOR keyword. DWF.
       5/6/99: Set Device, Decomposed=0 if necessary. DWF.
 (02-APH-15 aph) changed name from colorbar to colorbar_dwf to avoid conflict
                with post IDL8.0 routine, COLORBAR which works differently

(See c:\axis2000\colorbar_dwf.pro)


COPY_BYTES.PRO

[Previous Routine] [Next Routine] [List of Routines]
 NAME: 
       COPY_BYTES.PRO 
 PURPOSE: 
       Copies bytes between a source and destination regardless of whether or 
       not they have the same structure. It can be useful for copying, for 
       instance between a byte array and a structure. It must be used 
       with care. 
 CALLING SEQUENCE: 
       COPY_BYTES, n_bytes, source, destination 
 INPUTS: 
   N_BYTES 
       The number of bytes to copy. 
   SOURCE 
       The location to copy from. 
 OUTPUTS: 
   DESTINATION 
       The location to copy to. 
 RESTRICTIONS: 
       This routine does not do any error checking. The user must ensure that 
       SOURCE and DESTINATION can each hold N_BYTES. 
       Under UNIX the use must have write permission in the current default 
       directory. 
 PROCEDURE: 
       Under VMS uses Run-Time Library routine LIB$MOVC3. 
       Under UNIX opens a file, write out the source, reads back into 
       destination. 
 MODIFICATION HISTORY: 
       Created Nov. 1991 by Mark Rivers 

(See c:\axis2000\copy_bytes.pro)


CRYO_TO_STXM

[Previous Routine] [Next Routine] [List of Routines]
NAME:
			CRYO_TO_STXM

LAST CHANGED: ----------------------------------- 31-Jul-11

PURPOSE:
	This procedure converts one or more files in cryo-stxm format (*.sxm)
 to the old X1A STXM format (*.nc).

CATEGORY:
	STAND ALONE: file utility

CALLING SEQUENCE:
	CRYO_TO_STXM, find_file_string

CALLED FROM AXIS:
	->Read->Images->NSLS->cryo

ROUTINES
	if the file contains multiple PROs
 list these here, along with a brief description of their function

INPUTS:
	FINDFILE_STRING = list of files to convert, from findfile routine

KEYWORDS: none

OUTPUTS:
	The result is written to file with same main name and '.nc' extension

COMMON BLOCKS:
	@bsif_common - commons for old stxm format
	@sxm_common - part of sxm common
	@sxm_acommon - remainder of sxm common


MODIFICATION HISTORY:
 (xx-mmm-99 cjj) first written as part of sxm package
 (xx-sep-99 aph) adapted from X1A new SXM code to provide ability to read cryo files into AXIS
 (23-feb-00 aph) AXIS standard documentation
 (31-jul-11 aph) replace init_stxm_sd with init_sd

(See c:\axis2000\cryo_to_stxm.pro)


CW_RSLIDER

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	CW_RSLIDER

LAST CHANGED: ----------------------------------- 	25-Dec-07

 PURPOSE:
	This procedure and associated functions/procedures is a compound widget that generates a
 colored slider which defines a value range, with independent control
 of lower bound (left click & drag), upper bound (right click & drag)
 or position (left&right (or middle) click & drag)

 CATEGORY:
	Utility
   used in image~generate mask and stacks~RGB composite map

 CALLING SEQUENCE:
  Result = CW_RSLIDER, base, uvalue = uvalue, uname = uname, color = color, bg_color = bg_color,  $
    maximum = maximum, minimum = minimum, xsize = xsize, ysize =  ysize, $
    xoffset = xoffset, yoffset = yoffset, value = value, reverse = reverse, $
    vertical = vertical, event_pro = event_pro

 INPUTS:
 	BASE    ID of parent widget (compound widgets must be contained in another widget)

 KEYWORDS:
	uvalue
	uname
	color		color of slider as a 3-value byte array  e.g. [255,0,0] = red
 	bg_color 	color of backgound of slider as a 3-value byte array
	maximum 	maximum limit of slider (double)
	minimum 	minimum limit of slider (double)
	xsize		x-dimension in pixels
	ysize		y-dimension in pixels
	xoffset		x-offset relative to base
	yoffset		y-offset relative to base
	value		value of range of slider (2-value double array)
	reverse		reverse clicks for lower / upper or left / right limits
	vertical	orient slider vertically
	event_pro

 OUTPUTS:
	A slider is created in the base

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

 EXAMPLE:
   see TEST_CW_RSLIDER.PRO for illustration of how this is used

  RS_min = double(r_min - 0.05*(r_max-r_min))
  RS_max = double(r_max + 0.05*(r_max-r_min))
  Rvalue = [double(r_min), double(r_max)]
  RS_base = WIDGET_BASE(RBG_BASE, UNAME='WID_BASE_R', TITLE="Red", XPAD = 5, YPAD = 5, $
           XOFFSET=40, YOFFSET=40, SCR_YSIZE=200,SCR_XSIZE=70)
  sliderR = CW_RSLIDER(RS_BASE, UNAME='SLIDER_R', color=[255,0,0], /vertical, $
            XSIZE=20, YSIZE = 180, MINIMUM=RS_min, MAXIMUM=RS_max, VALUE=Rvalue )

 MODIFICATION HISTORY:
 (27-Dec-07 aph) AXIS standard header added
 (28-Dec-07 aph^2) min/max adjustment added

(See c:\axis2000\cw_rslider.pro)


DEGLITCH

[Previous Routine] [Next Routine] [List of Routines]
NAME: 
	DEGLITCH 
 
LAST CHANGED: ----------------------------------- 19-dec-00 
 
PURPOSE: 
	This function replaces out-of-bound values with 
 a local 3-point average. Bounds are user selected by cursor. 
 
CATEGORY: 
	STAND ALONE: image processing 
 
CALLING SEQUENCE: 
	Result = DEGLITCH(tmp) 
 
CALLED FROM AXIS: 
	->Images->Deglitch 

INPUTS: 
	A - an array (treated as 1-d vector, even if an image) 
 
KEYWORDS: 
	none 
 
OUTPUTS: 
	The result is an array with modified intensities. 
 
COMMON BLOCKS: 
	@AXIS_COM	standard set of common blocks 
 
SIDE EFFECTS: 
	A window is created if there is no window currently displayed. 
 
PROCEDURE: 
	The intensities of an image are displayed as a spectrum on 
 MainImg (if in AXIS) or on the current or a generated window. 
 Two cursor clicks then identify lower and upper bounds of interest. 
 Values outside the range are replaced by local averages 
 This is an alternate to CLIP. It works nicely for localized, 
 single pixel 'glitches' but CLLP is better for extended artefacts 
 
EXAMPLE: 
 Create a sample nxn image, display, clip, and redisplay 
	n = 100 &  d = dist(n) & d(n/2)=5*d(n/2) 
	tvscl, d   ; display input 
	b = DEGLITCH(d)	 ; deglitch 
	tvscl, b 
 
MODIFICATION HISTORY: 
 (31-dec-99 aph) isolated from AXIS_C as a stand-alone 
				  AXIS standard documentation 
 (19-dec-00 cgz) substituted ax_white_color_index with ax_plot_axes_color_index
			substituted ax_black_color_index with ax_plot_bkgd_color_index

(See c:\axis2000\deglitch.pro)


DESPIKE.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
   DESPIKE.PRO

LAST CHANGED: -----------------------------------  18-Jul-10

 PURPOSE:
 This function replace these higher-than-threshold pixels with the
 average of their neighbors

 CATEGORY:
 Image processing - called in zstack_analyze

 CALLING SEQUENCE:
 Result = DESPIKE(image, [median_percent=median_percent,$
                leefilt_percent=leefilt_percent,help=help])

 INPUTS:
 Image   2-d array
 
 KEYWORDS:
 median_percent   sets median_percent threshold
 leefilt_percent sets leefilt_percent threshold (default =  50%)
 help            prints help file

 OUTPUTS:
 Returns despiked image
 
 COMMON BLOCKS: none

 MODIFICATION HISTORY:
 (28-Nov-03 cjj) last modified (file extracted from IDL-X1.ZIP of 26-Feb-2009)
 (20-Jul-10 aph) AXIS standard header added

(See c:\axis2000\despike.pro)


DINDEX

[Previous Routine] [Next Routine] [List of Routines]
NAME: 
	DINDEX 
 
LAST CHANGED: ----------------------------------- 25-feb-00 
 
PURPOSE: 
	This function gets the index of the data point in a 2-d data structure (image) 
 which is closest to the cursor (x,y) values 
 It assumes the 2-d data structure has (x,y,d) components 
 
CATEGORY: 
	AXIS: utility 
 
CALLING SEQUENCE: 
	Result = DIndex(X,Y,tmp) 
 
CALLED FROM AXIS: 
  many paces 
 
INPUTS: 
	X - X cursor position in data units 
   Y - Y cursor position in data units 
   TMP  - the 1-d data structure 
 
KEYWORDS: none 
 
OUTPUTS: 
	IND - (i,j) index of data closest to cursor position 
 
COMMON BLOCKS: none 
 
MODIFICATION HISTORY: 
 (27-may-97 aph)  first written, in AXIS 
 (03-Mar-98 aph) segregated as separate file 
 (13-Apr-98 aph) treat (x,y) independently 
 (25-feb-00 aph) AXIS standard documentation 

(See c:\axis2000\dindex.pro)


DISP3COL

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	DISP3COL

LAST CHANGED: ----------------------------------- 24-Apr-13

PURPOSE:
	This procedure generates a composite image from any 3 images using R,G,B mapping
 with user selectable absolute or relative scaling of the components.
 Interpolates to comon mesh prior to RGB generation

CATEGORY:
	AXIS: image analysis. Also executes stand-alone

CALLING SEQUENCE:
 for procedures:
	DISP3COL,im1, im2, im3, r=r, b=b, g=g, axis_on=axis_on, channel=channel

CALLED FROM AXIS:
	->Images->RGB image

INPUTS:
	All input parameters are passed as keywords.

KEYWORDS:
	IM1 - 2d array with first image
	IM2 - 2d array with second image
	IM3 - 2d array with third image
	R - red color table
	G - green color table
	B - blue color table
	axis_on - indicates called from AXIS
	channel - indicates number of channels in image (AXIScomposite uses 3)
   scalebar  - if on, plot a bar (does not work right - 23-Apr-2013)

OUTPUTS:
	The RGB-coded combination image is placed in buffer 0
 and saved as a tif file. Default format is 3-channel, byte pixels.

 RESTRICTIONS
  (a) Since write as byte pixels, can be losss of intensity scale resolution
 This is ARTIFICIAL since IDL can write integer or reals (AXIS images are reals)
  (b) Each image is INDEPENDENTLY byte scaled - relative intensities of
 the colors do NOT reflect relative intensities in the 3 component images

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

MODIFICATION HISTORY:
 ( 9-jun-99 aph) first developed from tv3d.pro (Eli's stereo projection code)
 (25-jun-99 aph) adapt to single (image, spectra) color table
 (25-feb-00 aph) AXIS standard documentation
 (16-apr-00 aph) get dimensions correct and set up to display correctly in AXIS
               remove intermediate writing of bytscl images -> no loss of resolution
 (30-nov-00 cgz) Replaced call of wdivide with explicit !p.multi statement
 (30-nov-00 cgz) Replaced call of nwin with explicit window statement
 (06-dec-00 aph) autoscale option added
 (02-may-04 aph) replace get_num with dialog_message (default is autoscale)
 (22-feb-06 aph) interpolate to same (x,y) pixels
 (19-Mar-13 aph) add scale bar
 (24-Apr-13 aph) remove scale bar - not accurate in distance; color problems

(See c:\axis2000\disp3col.pro)


DISTANCE

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		DISTANCE

LAST CHANGED: ----------------------------------- 21-Jul-14

 PURPOSE:
	This function computes the distance between two points in Cartesian space

 CATEGORY:
	math utility

 CALLING SEQUENCE:
	Result = DISTANCE(pt1, pt2)

 INPUTS:
	PT1 	[x1,y1]
	PT2		[x2,y2]

 KEYWORDS: none

 OUTPUTS: returns SQRT(|x1-x2|^2 + |y1-y2|^2)

 COMMON BLOCKS: none


 MODIFICATION HISTORY:
 (08-may-01 aph) first wrote; AXIS standard header added
 (21-Jul-14 aph) corrected header

(See c:\axis2000\distance.pro)


EDGEGAUSS

[Previous Routine] [Next Routine] [List of Routines]
NAME: 
	EDGEGAUSS 
 
LAST CHANGED: ----------------------------------- 25-feb-00 
 
PURPOSE: 
	This procedure uses gaussian smoothing to edge enhance images 
 as part of the stack_align procedure 
 
CATEGORY: 
	STAND ALONE: image processing 
 
CALLING SEQUENCE: 
 for procedures: 
	EDGEGAUSS, image_array, sigma, dc_value, $ 
    zero_edge=zero_edge, help=help 
 
CALLED FROM AXIS: 
	Stack_align 
 
INPUTS: 
	IMAGE_ARRAY - image 
	SIGMA - width of Gaussian smooth 
	DC_VALUE - offset to be removed prior to smoothing 
 
KEYWORDS: 
	ZERO_EDGE - if set, force edges of image to zero 
	HELP - print information message 
 
OUTPUTS: 
	The edge-sharpened image is returned as image_array 
 
COMMON BLOCKS: none 
 
PROCEDURE: 
 Revised June 30, 1998 to let one zero out the trace along the 
 gaussian border.  If you set /zero_edge, the DC value from 
 1 sigma to 2 sigma from the border is calculated and subtracted 
 from the image, and it is also returned to you 
 
MODIFICATION HISTORY: 
 (30-Jun-98 cjj) add zero_edge keyword 
 (25-feb-00 aph) AXIS standard documentation 

(See c:\axis2000\edgegauss.pro)


EXTRAPOLATEAA.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		EXTRAPOLATEAA.PRO

LAST CHANGED: ----------------------------------- 	19-Jul-10

 PURPOSE:
	This function projected spectra into whatever
 energy scale is requested by the X-SpecSim sub-program

 CATEGORY:
	Utility; part of XSpecSim, spectral simulator package

 CALLING SEQUENCE:
	Result = EXTRAPOLATEAA(EN)

 INPUTS: none
	EN	= array of energies

 KEYWORDS: none

 OUTPUTS: none

COMMON BLOCKS:
	@XSpecSim_Com		X-SpecSim common block


 MODIFICATION HISTORY:
 (28-feb-07 jso) first version
 (18-Jul-10 aph) AXIS standard header added; XSpecSim_com added

(See c:\axis2000\extrapolateaa.pro)


FILE2STRING

[Previous Routine] [Next Routine] [List of Routines]
 NAME: 
       FILE2STRING 
 
 PURPOSE: 
       This function reads the contents of a text file into a string array, 
       one line per element. 
 
 CATEGORY: 
       Input / Output 
 
 CALLING SEQUENCE: 
       Out_string = FILE2STRING(Filename, Count) 
 
 INPUTS: 
       Filename:     The name of the text file from which to read string data. 
 
 KEYWORD PARAMETERS: 
       COMMENT_CHAR: A string containing a single character used to 
                     identify comments. If a line in the text file  
                     starts with the comment character, it is not read. 
 
 OUTPUTS: 
       Out_string:   The string array containing the lines of the text file. 
 
       Count:        A named variable to receive the number of lines read. 
 
 WRITTEN BY: 
       Billy W. Loo, Jr. 
       Bioengineering Graduate Group, UCSF / UCB 
       School of Medicine, UCD 
       Lawrence Berkeley National Lab 
       May, 1997 

(See c:\axis2000\file2string.pro)


FILENAME_IN_CAPITALS[1]

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		FILENAME_IN_CAPITALS

LAST CHANGED: ----------------------------------- 	27 Jul 2015

 PURPOSE:
	This procedure

 CATEGORY:
	Image display.

 CALLING SEQUENCE:
 for procedures:
	ZOOM [, FACT = Fact, /INTERP, XSIZE = Xs, YSIZE = Ys, /CONTINUOUS, $
		/KEEP, ZOOM_WINDOW=Zoom_Win, /NEW_WINDOW ]
 for functions:
	Result = GET_NUM(Prompt = prompt, Value = value)

 INPUTS:
 This section is for POSITIONAL INPUTS only (not keywords)
	All input parameters are passed as keywords.

 KEYWORDS:
	KEY1:

 OUTPUTS:
	No explicit outputs.   A new window is created if necessary

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

 SIDE EFFECTS:
	A window is created/destroyed.

 RESTRICTIONS:
	Any known ?

 PROCEDURE:
	details where needed

 EXAMPLE:
	Please provide a simple example here. An example from the PICKFILE
	documentation is shown below. Please try to include examples that
       do not rely on variables or data files that are not defined in
       the example code. Your example should execute properly if typed
       in at the IDL command line with no other preparation.

	Create a PICKFILE widget that lets users select only files with
	the extensions 'pro' and 'dat'.  Use the 'Select File to Read' title
	and store the name of the selected file in the variable F.  Enter:

		F = PICKFILE(/READ, FILTER = ['pro', 'dat'])

 MODIFICATION HISTORY:
 (23-Mar-15 aph) AXIS standard header added

(See c:\axis2000\ax_header_template.pro)


FILENAME_IN_CAPITALS[2]

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		FILENAME_IN_CAPITALS

LAST CHANGED: ----------------------------------- 	22 Jul 2014

 PURPOSE:
	This procedure rites out an image in netCDFformat
 It assumes that you have put the image and associated information
 into BSIF_COMMON variables:
   image_data (the array which holds the image - possible several
		planes deep for I, IO, CLOCK)
   x_normal, y_normal, rotated, x_title, y_title
 ;
 CATEGORY:
	Data I/O

 CALLING SEQUENCE:
   write_ncdf, file, help=help
	ZOOM [, FACT = Fact, /INTERP, XSIZE = Xs, YSIZE = Ys, /CONTINUOUS, $

 INPUTS:
 	FILE	name of output file

 KEYWORDS:
	HELP	display a help string

 OUTPUTS:
	*.nc file written

 COMMON BLOCKS:
	BSIF.COM	standard set of common blocks for nc files

 MODIFICATION HISTORY:
 (01-Jun-93 cjj) ; Based on Mark Rivers stuff
 (22-Jul-14 aph) AXIS standard header added

(See c:\axis2000\write_ncdf.pro)


FILE_OVERWRITE

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
      FILE_OVERWRITE

 LAST CHANGED ---------------------------- 23-Jul-13

 PURPOSE:
      widget to warn user if file over writing is occurring
   and allow the user to change, overwrite, or set a flag to ignore further over-write warnings.
	'0 = change name, 1 = overwrite, 2 = overwrite all'

 CATEGORY:
       Input/Output.

 CALLING SEQUENCE:
	Result = FILE_OVERWRITE(PROMPT = 'prompt', VAL = VAL, GROUP = AxisID)

 INPUTS: none

 KEYWORDS:
   	PROMPT = prompt to user
       VAL = current (default) value (0 = no overwrite, 1 = overwrite)
		GROUP = Widget_Id of group leader (must be set to force modal)

 OUTPUTS:
       The function returns a value which is either
		the existing value (user hits )
		or the first number in the string the user types

 ROUTINES
	OWRITE_EVENT, event - event processing procedure
	FILE_OVERWRITE - function

 COMMON BLOCKS:
       Owrite_com, text

 DESCRIPTION:
       This routine handles a user prompt when a file is found to exist.
 If the top level group ID is supplied, the function widget is
 put into modal mode (the dialog box stays on top until user completes input
 and disables other functions of AXIS)

 MODIFICATION HISTORY:
 (31-dec-99 aph) first written
 (27-feb-00 aph) documented
 (23-Jul-13 aph) change flag to an integer; try to remove duplicate overwriting request
                 when called from read_NSRRC_spem.

(See c:\axis2000\file_overwrite.pro)


GENEXTRAP.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
  GENEXTRAP.PRO

LAST CHANGED: ----------------------------------- 21-Jul-06

 PURPOSE:
	For XSpecSim - extrapolates a spectrum from known points to unkown points

 CATEGORY:
	spectral processing; XSpecSim utility

 CALLING SEQUENCE:
	RESULT = GENEXTRAP (EN=EN, SPECDATA=SPECDATA)

 INPUTS: none

 KEYWORDS:
 	SpecData	2d array of energy and spectral data from OD of sample
	En			1d Array of new energy scale

 OUTPUTS: 	none

 COMMON BLOCKS: none

 RESTRICTIONS: none

 MODIFICATION HISTORY:
 (21-Jul-06 jso) first version
 (19-Jul-10 aph) AXIS standard header added; "data" variable changed to SpecData

(See c:\axis2000\genextrap.pro)


GEN_AA_STRING

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		gen_AA_String


LAST CHANGED: ----------------------------------- 	21-Jul-14

 PURPOSE:
	This function genertes and saves to a file a text string
 derived from  a file containing code letters and numbers
 to be used in conjunction with XSpecSIm to simulate protein spectra

 CATEGORY:
	utility (not in aXis2000)

 CALLING SEQUENCE:
	Result = gen_AA_String(file = file)

 INPUTS:
 This section is for POSITIONAL INPUTS only (not keywords)
	All input parameters are passed as keywords.

 KEYWORDS:
	FILE	filename (if not included user is allowed to browse)

 OUTPUTS:
	user is prompted for name of a text file to be written

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

 SIDE EFFECTS: none

 MODIFICATION HISTORY:
 (02-Nov-07 aph) first version
 (03-Nov-10 aph) corrected @axis-com  to @axis_com
 (03-Feb-11 aph) corrected copyright date
 (21-Jul-14 aph) corrected header

(See c:\axis2000\gen_aa_string.pro)


GEN_E

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		GEN_E

LAST CHANGED: ----------------------------------- 	11-Mar-2013

 PURPOSE:
	This function generates a list of energies from start and step
 parameters (Originally developed for read-in of E associated with PEEM stacks from Saga LS)
 assumes the start energies are in INCREASING energy magnitude without repeats or non-monotonic

 CATEGORY:
	Utility

 CALLING SEQUENCE:
	Result = GEN_E(file=file)

 INPUTS:none

 KEYWORDS:
 	FILE	if given, the name of the file with the {start, step} list

 OUTPUTS: 1-d array of real numbers is returned

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

 MODIFICATION HISTORY:
 (11-Mar-13 aph) first version

(See c:\axis2000\gen_e.pro)


GEN_READ

[Previous Routine] [Next Routine] [List of Routines]
NAME: 
	GEN_READ 
 
LAST CHANGED: ----------------------------------- 15-nov-00
 
PURPOSE: 
	This function reads general ALS BL7 XPS labview format files into a data structure 
   uses pickfile2() to select input file if fname not specifed 
 
CATEGORY: 
	STAND ALONE: utility (als) 
 
CALLING SEQUENCE: 
	Result = GEN_READ(FNAME, /options) 
 
CALLED FROM AXIS: 
	->Read->Spectra->ALS SPEM 
 
INPUTS: 
	FNAME - filename (optional; if not provided, uses pickfile2) 
 
KEYWORDS: 
	INFO - print information about routine 
	QUIET - no logging comments 
	PATH - path for data file 
	PLOT - plot data 
	DEBUG - turn on debugging code 
	NOREFORM - do not reform the output data array 
   TIME=timestr - returns 'Aq. End' date and time string from line 7 
 
OUTPUTS: 
	The result is a data structure specific to ALS BL 7 XPD and SPEM 
 electrn spectroscopy data. (recorded with 16-channel PHI analyser) 
	 answer={fname:fname, summary:summ, phiDescr:phiDesc, $ 
     IndNames:indnam, IndVars:indv, $ 
     SingleNames:singnam, singleData:singDat, $ 
     NormNames:normnam, norm1Dim:norm1D,  RgnInfo:rgninfo, $ 
     x:-1.*xData, y:yData, yn:ynData} 
 
COMMON BLOCKS: 
	@AXIS_COM	standard set of common blocks 
 
RESTRICTIONS: 
	** doesn't read multiple  (non-VF files properly) 
 
MODIFICATION HISTORY: 
 (xx-mmm-95  er)  created 
 (03-dec-95  jd)  added REFORM(xdata,ydata,yndata) in gen_read 
 (xx-aug-96  jd)  fixed up bugs in reading MgKa data 
                  still problems with multiple spectral ranges 
 (xx-dec-96  er)  fixed reading of multiple spectral region files(?) 
 (13-feb-97  jd)  added recognition of Quadrupole scan; returns -1 
 (16-feb-97  er)  added keyword NOREFORM 
 					added recognition of snapshots (have shorter rgninfo) 
 (07-apr-98  er) fixed a bug with multiple regions. 
 (31-JAN-99  er)  changed max line length 32K --> 64K 
 (27-feb-00 aph) AXIS standard documentation 
 (15-nov-00 cgz) Replaced call of NCOLS function by explicit (SIZE(var))(1)

(See c:\axis2000\gen_read.pro)


GET_NUM

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	GET_NUM

LAST CHANGED: ----------------------------------- 22-nov-11

PURPOSE:
	This procedure is a widget that displays the current value
 of a parameter (if defined) and then allows user to input a replacement value
 A  (enter) will retain the same value

CATEGORY:
	AXIS: utility (can run stand alone)

CALLING SEQUENCE:
	Result = GET_NUM(Prompt = prompt, Val = value, Title = Title, group = Axis_ID))

CALLED FROM AXIS:
  many places

ROUTINES
	NUM_EVENT, Event - event processing
	GET_NUM - widget

INPUTS: none

KEYWORDS:
   VAL = current (default) value
   PROMPT = prompt to user
	TITLE = title for widget
	GROUP = Widget_Id of group leader (must be set to force modal; Axis_ID is name for axis_c)

OUTPUTS:
       The function returns a FLOAT value which is either :
		the existing value (user hits )
		or the first number in the string the user types

COMMON BLOCKS:
       TXTCOM (internal to get_num)

SIDE EFFECTS:
	A window is created/destroyed.

 DESCRIPTION:
       This routine allows user to provide  a numerical value
		If the top level group ID is supplied, the function widget is
		put into modal mode (stays on top until user completes input; disables other functions of AXIS)

 EXAMPLES:
       new_value = get_num(prompt='New value',val=current_value, group = axis_id)

 DEVELOPMENT NOTES:
		should autosense if AXIS is the caller to avoid having to
		explicitly provide the group ID

 MODIFICATION HISTORY:
 (20-jun-97 aph) first written
 (05-jun-98 aph) made function return a scalar NOT A 1-element array.
 (07-jun-99 aph) add separate prompt display; use IDL 5.2 modal convention; proper docs
 (27-feb-00 aph) AXIS standard documentation
 (09-sep-02 aph) format displayed number
 (01-Jun-08 aph) fix up documentation to be correct on 'val' and 'Axis_ID'
 (22-Nov-11 aph) add optional TITLE keyword; display '0' if the value is 0

(See c:\axis2000\get_num.pro)


GET_PATH.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME: 
	GET_PATH.PRO 
 
LAST CHANGED: ----------------------------------- 20-May-00 
 
PURPOSE: 
	This function find the location of 'FILE1' 
 It is used in filename list processing to get around fact that 
 files are frequently moved and thus have different paths 
 The valid path to 'file1' is returned (with correct separator for the host computer) 
 or '' (empty string) if this cannot be found 
 
CATEGORY: 
	AXIS:  utility (operates stand alone) 
 
CALLING SEQUENCE: 
	Result = GET_PATH(file1, list=list) 
 
CALLED FROM AXIS: 
	various places 
 
ROUTINES 
	if the file contains multiple PROs 
 list these here, along with a brief description of their function 
 
INPUTS: 
	INPUT - POSITIONAL INPUTS only (not keywords) 
	All input parameters are passed as keywords. 
 
KEYWORDS: 
	LIST = name of file containing list of file names 
 
OUTPUTS: 
 Path to file1 is returned 
 
COMMON BLOCKS: 
	@AXIS_COM	standard set of common blocks 
 
PROCEDURE: 
 If the path associated with 'file1' is not correct, various 
 plausible locations are checked (defPath, the current default path in AXIS) 
 and the user is requested to locate the file by using pickfile dialog 
 if the file is not found through 3 search strategies, an empty string is returned 
 
MODIFICATION HISTORY: 
 (15-jun-99 aph) first version 
 (18-jul-99 aph) rewrote to be more flixible 
 (20-May-00 aph) AXIS standard documentation 

(See c:\axis2000\get_path.pro)


GET_TEXT

[Previous Routine] [Next Routine] [List of Routines]
NAME: 
	GET_TEXT 
 
LAST CHANGED: ----------------------------------- 27-feb-00 
 
PURPOSE: 
	This function is a pop-up widget that 
 allows user to input one string of text 
 
CATEGORY: 
	AXIS: utility (operates as stand alone) 
 
CALLING SEQUENCE: 
	Result = GET_TEXT(Prompt = prompt, Value = value, group = AxisID) 
 
CALLED FROM AXIS: 
	many routines 
 
ROUTINES 
	TEXT_EVENT, event - event processing procedure 
	GET_TEXT - the widget code 
 
INPUTS: none 
 
KEYWORDS: 
	PROMPT - title at top of widget 
	VAL - default value of the text string 
	group - group ID of caller 
 
OUTPUTS: 
	The string is returned and the widget destroyd. 

COMMON BLOCKS: 
	TXTCOM, txt 
 
MODIFICATION HISTORY: 
 (19-Jun-97 aph) created 
 (05-jul-98 aph) made it return string not string array ! 
 (13-dec-98 aph) make it work with IDL 5.2; VALUE needed to be defined(!) 
 (20-dec-98 aph) allow scrolling; append; customize for IDL5.1 (Array-2); IDL4.0(array-1) 
 (08-jan-99 aph) error when txt returns only 1 entry 
 (27-feb-00 aph) AXIS standard documentation; remove modal call to xmanager 

(See c:\axis2000\get_text.pro)


H5_READ_PTYCHO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		H5_READ_PTYCHO

LAST CHANGED: ----------------------------------- 	02-Dec-12

 PURPOSE:
	This function reads content of *.pt  pytography results file
 using the IDL H5_browser

 CATEGORY:
	data read-in; operates stand alone or in aXi2000

 CALLING SEQUENCE:
	Result = H5_REA_PTYCHO(file=file,  energy = energy, dwell = dwell, pix_size = pix_size)

 INPUTS: keyword only

 KEYWORDS:
	FILE	name of file
	ENERGY 	energy of image
	DWELL	dwell time of measurement
	PIX_SIZE	pixel size of ptycograph

 OUTPUTS:
	Returns an aXis format image (for the extracted STXM file)

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

 MODIFICATION HISTORY:
 (28-nov-12 aph) first version as a script
 (02-Dec-12 aph) AXIS standard header added

(See c:\axis2000\h5_read_ptycho.pro)


IMG_ALIGN

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	IMG_ALIGN

LAST CHANGED: ----------------------------------- 03-Aug-09

PURPOSE:
	This procedure aligns one image to the spatial scale of the first file
 processed which acts as the reference for all subsequent files.
 The alignment can be a shift (1-point) or stretch-shift (2-point).

CATEGORY:
	AXIS: image analysis (AXIS - captive)

CALLING SEQUENCE:
	IMG_ALIGN, one_pt=one_pt

CALLED FROM AXIS:
	->Stacks->align->{shift, stretch-shift}

INPUTS:
	INPUT - via common - file list

KEYWORDS:
	ONE_PT	if set, only align at 1-point, not 2

OUTPUTS:
	Aligned, clipped and (optionally) binned file is written as
	s____.nc (1-point)  or a_____.nc (2-point)

COMMON BLOCKS:
	@AXIS_COM	axis standard set of common blocks
	@BSIF_COM	nsls common

 PROCEDURE
 manual alignment of images
 has ability to linearly distort image to account for sample stretching !!
 if one_pt is set, then only shifts selected point to reference value
 otherwise asks user for 2 fiducials and stretch-shifts each file to MATCH first file
 generates align-shift files in buffers 5,8 (X) &  6,9 (Y), 4 (stretch)
 cuts user-selected region;
 meshes to user-defined pixelation with optimum binning
 stores processed data in netCDF format for use in STACK_ANALYZE
 saves file name to generate list for stack_analyze

 WARNINGS:
		only prompts user for transformation paramaters on FIRST pass

       CLEAR buffers (4,5,6),8,9 to reset image alignment

MODIFICATION HISTORY:
 ( 5-Mar-98 aph) first version - worked
 (xx-apr-98 aph) changed something - did not correctly cut data - broken to 6-jun-98
 ( 6-jun-98 aph) replaced direct call to wrstx_ax with sav_nsls
 (14-jun-98 aph) axis_com
 (18-sep-98 aph) cosmetics - checking possible error
 ( 8-jun-99 aph) add group to get_num calls
 (23-aug-99 aph) fixing up 'freeze' when called from axis 1.7
				 - CURSOR not supposed to be used !!
 (19-sep-99 aph)  complete debugging freeze-up problem
			a) 'first' used in aaa_axis changed to 'firstimg' -> correct image display
            b) turn-off hourglass (turned on by PlotBuf) - by a kluge
 (15-apr-00 aph) AXIS standard documentation
 (20-apr-00 aph) debug to see why does not work at fine scale
 (03-Aug-09 aph) write out files if use stretch-shift with different tag - axis_c gave wrong WritePath !

(See c:\axis2000\img_algn.pro)


IMG_ASAV

[Previous Routine] [Next Routine] [List of Routines]
NAME: 
	IMG_ASAV 
 
LAST CHANGED: ----------------------------------- 15-apr-00 
 
PURPOSE: 
	This procedure saves shift and stretch parameters in user-defined 
 files at the end of IMAG_ALIGN 
 
CATEGORY: 
	AXIS: utility 
 
CALLING SEQUENCE: 
	IMG_ASAV, one_pt=one_pt 
 
CALLED FROM AXIS: 
	->Stacks->image align -> {shift, stretch-shift} 
 
ROUTINES 
	if the file contains multiple PROs 
 list these here, along with a brief description of their function 
 
INPUTS: via common 
 
KEYWORDS: 
	one-pt - defines shift only 
 
OUTPUTS: 
 files for shifts (2 or 4); stretch factors are writen to disk 
 Filenames (*.sl) and SHIFT data (*.al) files 
 Buffer Contents	filename 
	5		X1		*.aX1 
	6		Y1      *.aY1 
 	8		X2      *.aX2 
	9 		Y2      *.aY2 
	4 		stretch factor (regenerate independent (X,Y) from files/buffers 
 
COMMON BLOCKS: 
	@AXIS_COM	standard set of common blocks 
 
MODIFICATION HISTORY: 
 ( 7-jun-98 aph) extracted from "Image_Process.Image alignment.save shifts" 
 (14-jun-98 aph) axis_com 
 ( 7-jul-99 aph) FREE_LUN as well as close ! 
 (15-apr-00 aph) AXIS standard documentation 

(See c:\axis2000\img_asav.pro)


IMG_COM.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME: 
	IMG_COM.PRO 
 
LAST CHANGED: ----------------------------------- 15-apr-00 
 
PURPOSE: 
	This defines the common block which is used for SPEM image display. 
 
CATEGORY: 
	AXIS: utility 
 
CALLING SEQUENCE:  include file 
 
CALLED FROM AXIS: 
	->images->SPEM 
 
MODIFICATION HISTORY: 
 (15-apr-00 aph) AXIS standard documentation 

(See c:\axis2000\img_com.pro)


IMG_LOAD

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	IMG_LOAD

LAST CHANGED: ----------------------------------- 21-Feb-10

PURPOSE:
	This function reads in an image from (*.tif, *.bmp, *.gif) format files
 and returns it as a '2d' or '3d' type axis structure
 Also reads in Elmitec exported tif files

CATEGORY:
	AXIS: image utility (runs stand alone)

CALLING SEQUENCE:
	Result = img_load(NOF=nof, error=err, values = values, silent=silent,  $
   	TIF=tif, BMP=bmp, GIF=gif, elmitec=elmitec, lox=lox, _extra=e)

CALLED FROM AXIS:
	->Image->Other->{*.tif, *.bmp, *.gif, *.jpg, *.png}

INPUTS:
	All input parameters are passed as keywords.

KEYWORDS:
	NOF	- no filter
   FILE - file name (no prompt unless that file is not found)
	VALUES - if set, store as 2d-structure to allow axis display & mainpulation of data values
			otherwise, store as 3d-structure; if VALUES GT 1 then use Red channel if 3-channel
	TIF  - TIF read-in
	GIF - GIF read-in
   JPG - JPG read-in (JPEG)
	BMP - BMP read-in
	PNG - PNG read-in
	ELMITEC - file is in UView2002 format
	LOX   - file is in Lox format
   SILENT  - do not print (axis_log) the details

OUTPUTS: none

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

MODIFICATION HISTORY:
 (20-feb-98 aph) first written
 (14-jun-98 aph) axis_com
 (20-jan-99 aph) convert to data!
 (11-jun-99 aph) make tif-read get and set RBG tables; remove reversal
 (25-jun-99 aph) use ax_names to generate fileshort
 (31-jan-00 aph) attempt to get RBG working
 (15-apr-00 aph) AXIS standard documentation
 (16-apr-00 aph) store 3-channel images properly - revise {3d} structure
 (31-dec-01 aph) PNG format added - evetually converge to this one for > IDL 5.1 compatibility
 (17-apr-02 aph) adapt for Elmitec read-in
 (29-apr-02 aph) revise to adapt for axis_c setting of E, size
 (05-may-02 aph) adapt for Sphinx 16-bit tif format
 (14-may-02 aph) reverse PNG
 (16-jul-02 aph) fix up Elmitec PEEM read in - scale too large since used unsigned keyword
 (23-may-04 aph) add lox read-in
 (29-Oct-05 aph) add keyword SILENT
 (22-feb-06 aph) add tmp.E (energy) to output; fix  /values for tif, png
 (25-apr-06 aph) add jpg read-in; add provision to use 1-channel for values
 (07-jan-07 aph) flip Lox Tif images vertically
 (01-Aug-09 aph) use fileshort in axis_log; improve png reading
 (21-Feb-10 aph) improve png reading - flip vertically

(See c:\axis2000\img_load.pro)


IMG_WARP

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	IMG_WARP

LAST CHANGED: ----------------------------------- 11-Jan-15

PURPOSE:
	This procedure warps an image to another image to get a common (x,y) scale
 by matching a set of fiducial points identifed
 by a cursor position selected by the user on first image

CATEGORY:
	AXIS:  image analysis

CALLING SEQUENCE:
 for procedures:
	IMG_WARP

CALLED FROM AXIS:
	->Images->waep

INPUTS: none (uses axis buffers which must be pre-loaded)

KEYWORDS: none

OUTPUTS:
	The result is written to buffer 0

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

RESTRICTIONS:
	Occasionally does not work properly for unknown reasons

PROCEDURE:
	the images are first expanded to full axis window size [11-Jan-14 aph - removed ]
 to improve position accuracy - note the routines used are limited to integer pixel
 uses Poly_warp and poly_2d routines to match the two images
 the expanded image is then congridded back to its original dimensions

MODIFICATION HISTORY:
 (08-jun-99 aph) extracted from aaa_axis - not functioning
                add group ID to get_num call
 (24-feb-00 aph) add group ID to buffer call; pixels only
 (26-apr-00 aph) develop pixel-based CUT same; large -> small version
 (20-may-00 aph) AXIS standard documentation
 (26-Aug-05 aph) add write out of the w*.sl file (screwed up!)
 (05-Mar-06 aph) correct to write first file and save list as *.sl not *.nc !!
 (16-dec-11 aph) force plotting to be done on MainImg (in a test, it spawned a new graphics window)
 (15-Jan-15 aph) modify to allow warp-alignment of 2 images or from a list (this was never completed in 2011)

(See c:\axis2000\img_warp.pro)


INIT_SD.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		INIT_SD.PRO

LAST CHANGED: ----------------------------------- 	31-Jul-11

 PURPOSE:
	This procedure sets up the entries of the SD structure
 which contains all the parameters used by the NSLS1 X1A STXM (old data formats - *.nc)

 CATEGORY:
	Utility

 CALLING SEQUENCE:
 for procedures:
	INIT_SD, SD

 INPUTS: none

 KEYWORDS: none

 OUTPUTS:  SD strcuture

 COMMON BLOCKS: none

 MODIFICATION HISTORY:
 (18-may-97 aph)  adapted from init_sd (nsls)
 (31-Jul-11 aph) AXIS standard header added

(See c:\axis2000\init_sd.pro)


INTERP.PRO[1]

[Previous Routine] [Next Routine] [List of Routines]
NAME: 
	INTERP.PRO 
 
LAST CHANGED: ----------------------------------- 15-nov-00
 
PURPOSE: 
	Interpolates values
	may be obsolete and might be eliminated
 
CATEGORY: 
	STAND ALONE: utilities 
 
CALLING SEQUENCE: 
	Result = INTERP(Xi,XX,YY,MISSING=MI) 
 
CALLED FROM AXIS: 
	many procedures 
 
ROUTINES 
	function INTERP, Xi, XX, YY, MISSING=MI
	interpolates values
 
COMMON BLOCKS: none 
 
MODIFICATION HISTORY: 
 (08-nov-00 cgz) AXIS standard documentation 
 (08-nov-00 cgz) migrated from MATH.PRO
 (15-nov-00 cgz) Replaced call of NCOLS function by explicit (SIZE(var))(1)

(See c:\axis2000\interp.pro)


INTERP.PRO[2]

[Previous Routine] [Next Routine] [List of Routines]
NAME: 
	INTERP.PRO 
 
LAST CHANGED: ----------------------------------- 08-nov-00 
 
PURPOSE: 
	Interpolates values
	may be obsolete and might be eliminated
 
CATEGORY: 
	STAND ALONE: utilities 
 
CALLING SEQUENCE: 
	Result = INTERSPLINE(Yin,FIXEDY=FY) 
 
CALLED FROM AXIS: 
	many procedures 
 
ROUTINES 
	function INTERSPLINE, Yin, FIXEDY=FY
	pops up an interactive window; user uses cursor to define a spline smooth function
	returns a spline-fitted array of the same length as yin
	if fixedy is set, then y-values of spline are constrained to lie on the data.
 
COMMON BLOCKS: none 
 
MODIFICATION HISTORY: 
 (08-nov-00 cgz) AXIS standard documentation 
 (08-nov-00 cgz) migrated from MATH.PRO

(See c:\axis2000\interspline.pro)


IRMAP_LOAD

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		IRMAP_LOAD

LAST CHANGED: ----------------------------------- 21-Jul-14 (aph)

 PURPOSE:
   This prodecure reads an FTIR map from a set of csv files
  consisting of IR spectra at an array of points
  The data are converted to an aXis binary stack (*.ncb)

 CATEGORY:
	utility; stand-alone or used through aXis2000

 CALLING SEQUENCE:
IRMAP_LOAD, file=file, filter=filter, xcol=xcol, ycol=ycol, $
         multi=multi, skip=skip, int_factor=int_factor, typ=typ, NOF=nof, _extra=e

 INPUTS: only by keyword

 KEYWORDS:
 FILE		filename (*.map - array dimensions)
 FILTER  	filter extension (*.map)
 XCOL		number of x-axis (if multi-column)
 YCOL		number of y-axis (if multi-column)
 SKIP		number of header lines to skip  (if multi-column)
 MULTI		returns number of columns -1 = number of spectra
 NOF		no filter (*.*)
 _EXTRA	pass through keywords

 OUTPUTS:
	Result is  a stack (x,y,wavenumber)

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

 MODIFICATION HISTORY:
 (18-dec-08 aph) first version  - data sent by Paul Dumas (Soleil)
 (21-Jul-14 aph) corrected header

(See c:\axis2000\irmap_load.pro)


ISNUMBER.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	ISNUMBER.PRO

LAST CHANGED: ----------------------------------- 11-Aug-09

PURPOSE:
	This  function checks if a string is numerical

CATEGORY:
	STAND ALONE: utilities

CALLING SEQUENCE:
	Result = ISNUMBER(string)

CALLED FROM AXIS:
	many procedures

ROUTINES
	ISNUMBER	returns 1 if string is numerical; 0 i not

COMMON BLOCKS: none

(See c:\axis2000\isnumber.pro)


JOIN_STRING

[Previous Routine] [Next Routine] [List of Routines]
 NAME: 
       JOIN_STRING 
 
 PURPOSE: 
       This function joins the elements of a string array into a 
       scalar string array, with the original elements separated by 
       a user specified delimiter. 
 
 CATEGORY: 
       String processing. 
 
 CALLING SEQUENCE: 
       Result = JOIN_STRING(Input) 
 
 INPUTS: 
       Input:     The string array to be joined. 
 
 KEYWORD PARAMETERS: 
       DELIMITER: A string containing the delimiter between words. 
                  The default delimiter is a single space. 
 
       HEADER:    A string containing characters to precede the first 
                  element. The default is no header. 
 
       FOOTER:    A string containing characters to follow the last  
                  element. The default is no footer. 
 
 OUTPUTS: 
       Returns the scalar string variable containing the joined result. 
 
 EXAMPLE: 
       If the input string is: 
         input = ['Hello', 'world'] 
 
       then the command sequence: 
         result = JOIN_STRING(input, DELIMITER=', ') 
 
       produces the result: 
         IDL> print, result 
         Hello, world 
 
       Note that the delimiter in this case includes a space. 
 
 WRITTEN BY: 
       Billy W. Loo, Jr. 
       Bioengineering Graduate Group, UCSF / UCB 
       School of Medicine, UCD 
       Lawrence Berkeley National Lab 
       December, 1996 

(See c:\axis2000\join_string.pro)


LENGTH.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		LENGTH.PRO

LAST CHANGED: -----------------------------------  09-Mar-07

 PURPOSE:
	This  function Returns the length of a vector (or array) based on the assumption
 that the largest index represents the length

 CATEGORY:
	utility, part of XSpecSim


 CALLING SEQUENCE:
	Result = LENGTH(VEC)

 INPUTS:
	VEC = VECTOR

 KEYWORDS: none

 OUTPUTS: none

 COMMON BLOCKS: none

 MODIFICATION HISTORY:
 (07-jul-06 jso) last version supplied
 (09-mar-07 aph) AXIS standard header added, name changed

(See c:\axis2000\length.pro)


LINE_FIT

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
		  LINE_FIT

 LAST CHANGED: --------------------------------  30-Jul-09

 This procedure selects inputs, fits spectrum at each point along a line spectral scan
 to sum of models.  Uses COMMON blocks to store and transfer data. Maximum 5 components !

 KEYWORDS
	AXIS - if set, indicates called from AXIS
	COEFF - name of file listing sources of reference spectra
	VERBOSE - if set, additional information usppplied

 COMMON
 	AXIS_COM - AXIS
	stack_process_com
 	BSIF_COM - nc data

MODIFICATION HISTORY:
 (23-Dec-99 aph) first developed from stack_fit
 (27-feb-00 aph) add groupID to get_text
 (30-nov-00 cgz) Replaced call of nwin with explicit window statement
 (04-Jun-03 aph) adapt to use ax_par_save & ax_par_load
 (22-sep-06 aph) fix output to display constant & chi-square properly
                 remove groom (left over from kneedler); use axis_log;
 (30-jul-09 aph) changed analcom to stack_process_com (update to stack_process)

(See c:\axis2000\line_fit.pro)


LITHO_READ

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	LITHO_READ

LAST CHANGED: ----------------------------------- 22-feb-06

PURPOSE:
	This function reads a template (*.xyt)  image
 ( a set of (x,y,t) triplets ) for possible modification

CATEGORY:
	STAND ALONE: utility
   called from aXis2000 as read~other~axis_xyt

CALLING SEQUENCE:
	Result = LITHO_READ(tmp [, NOF=nof, file=file])

CALLED FROM AXIS:
	Read->Images->AXIS

INPUTS:
	 ascii file with multi-column data

KEYWORDS:
	FILE     - filename to write
   GROUP    - group of parent (axis_ID from axis)
	VERBOSE  - print feedback on progress for trouble shooting

OUTPUTS:
	RESULT = TMP - axis format structure

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

;MODIFICATION HISTORY:
 (03-Nov-05 aph) developed from litho_save
 (22-feb-06 aph) fix array dimension erorr that prevented read of some xyt files (required kluge)

(See c:\axis2000\litho_read.pro)


LITHO_SAVE

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	LITHO_SAVE

LAST CHANGED: ----------------------------------- 22-Feb-06

PURPOSE:
	This function writes an image as a set of (x,y,t) triplets
 for all non-zero pixels for use as input to STXM_control
 for lthography

CATEGORY:
	STAND ALONE: utility
   called from aXis2000 as write~litho

CALLING SEQUENCE:
	Result = LITHO_SAVE(tmp [, NOF=nof, file=file])

CALLED FROM AXIS:
	Read->Images->AXIS

INPUTS:
	TMP - AXIS 2d structure

KEYWORDS:
	FILE - filename to write

OUTPUTS:
	RESULT = filename (a blank string if the user cancels)

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

;MODIFICATION HISTORY:
 (04-aug-05 aph) developed from axb_save
 (18-aug-05 aph) add row, column indicators and overall size flag
 (03-Nov-05 aph) add header to indicate Xrange, Yrange and step size
 (22-feb-06 aph) increased number of digits saved for step

(See c:\axis2000\litho_save.pro)


LN_ADD

[Previous Routine] [Next Routine] [List of Routines]
NAME:
  LN_ADD

LAST CHANGED: ----------------------------------- 20-Jun-10

 PURPOSE:
	This procedure adds contents of lines to generate:
  SPECTRA from line scans - sum horizontally (default) or
  Intensity profiles over a range of E  - add vertical by setting VERTICAL keyword

 CATEGORY:
	Image & linescan processing; captive to AXIS

 CALLING SEQUENCE:
	 LN_ADD  [, VERTICAL=vertical]

 INPUTS: none

 KEYWORDS:
	VERTICAL	add vertical lines

 OUTPUTS:
	summed lines displayed in buffer 9

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

 SIDE EFFECTS: none known

 MODIFICATION HISTORY:
 (01-jan-99 aph) segregated from aaa-axis; merged horizontal & vertical
 (01-mar-00 aph) add groupID to buffer, get_text
 (10-may-01 aph) standard header; save limits
 (02-may-04 aph) modify header
 (13-may-04 aph) use Dialog_message
 (20-Jun-10 aph) get right values of x-axis limits for y-line sums; NB problem was not here !!

(See c:\axis2000\ln_add.pro)


LN_ALIGN

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	LN_ALIGN

LAST CHANGED: ----------------------------------- 02-may-04

PURPOSE:
	This file tilts a linescan by a user defined line, to correct drift.

 PRO LN_align, curve=curve

CATEGORY:
	AXIS: data analysis

CALLING SEQUENCE:
	Linescan~align

INPUTS:   none

KEYWORDS:
	CURVE - multi-section curve

OUTPUTS:
	returns structure with modified linescan

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

(See c:\axis2000\ln_align.pro)


LN_LOAD

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		LN_LOAD

LAST CHANGED: ----------------------------------- 	21-Jul-14

 PURPOSE:
	This function loads a Beamline 7 STXM Line scan array
 from a text file (*,xa*, *,dat) and maps line-scan to (y)
 Energy-scan to (x)

 CATEGORY:
	data read-in. stand-alone, or from axis.
 READ~ALS_STXM7.0.1 linescan

 CALLING SEQUENCE:
	Result = LN_LOAD(file, FILTER=fltr, plot=pl, _extra=e)

 INPUTS:
 FILE	name of file

 KEYWORDS:
	FILTER - extensiob
	PLOT - if set, plot data

 OUTPUTS:
	No explicit outputs.   A new window is created if necessary

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

 MODIFICATION HISTORY:
 (14-may-98 aph) first developed for line scan mode
 (14-jun-98 aph) axis_com
 (07-aug-98 aph) indicate extension
 (18-jan-99 aph) CHANGE name to ln_load (to group with other LS functions)
                 include dwell on X-axis label
 (25-jun-99 aph) use ax_name to parse file name
 ( 7-jul-99 aph) FREE_LUN as well as close !
 (15-nov-00 cgz) Replaced call of NCOLS function by explicit (SIZE(var))(1)
 (15-nov-00 cgz) Replaced call of NROWS function by explicit (SIZE(var))(2)
 (13-jun-01 aph) add E to the structure generated
 (31 oct-01 aph) work around for wrong 'npts' in new linescan format
 (12-may-02 aph) AXIS standard header added
 (21-Jul-14 aph) corrected header

(See c:\axis2000\ln_load.pro)


LN_LOCAT.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		LN_LOCAT.PRO

LAST CHANGED: ----------------------------------- 	07-Jan-07

 PURPOSE:
	This procedure reads co-rodinates of a linescan and places them on the image currently
 displayed. If the current buffer is not an image or does not contain the
 location of the line, the user is prompted to read an image.
 Default linescan format is SDF (ALS/CLS/SLS); optional for old STXM701; need to develop for NSLS

 CATEGORY:
	Image display in aXis2000  Linescans~locate line

 CALLING SEQUENCE:
 for procedures:
	LN_LOCAT [, STXM701=STXM701 ]

 INPUTS:
	All input parameters are passed as keywords or acquired by prompts.

 KEYWORDS:
	STXM701	original code for pre2000 files from ALS STXM7.0.1

 OUTPUTS:
	No explicit outputs.

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

 SIDE EFFECTS: none

 RESTRICTIONS:

 KNOWN ERRORS:
 If start from an empty buffer there are errors as AXIS tries to replot an empty buffer

 MODIFICATION HISTORY:
 (01-jan-99 aph) segregated from aaa-axis
 (10-feb-99 aph) fixed code error !
 (07-Jan-07 aph) AXIS standard header added; adapted to SDF files

(See c:\axis2000\ln_locat.pro)


LN_NORM.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		LN_NORM.PRO

LAST CHANGED: ----------------------------------- 	03-Feb-12

 PURPOSE:
	This procedure  normalizes each line of a linescan or image
  to a H or V subset  or to Io from an aXis buffer (if neither Horiontal or Vertical keywords were selected)

 CATEGORY:
	Linescan processing

 CALLING SEQUENCE:
	LN_NORM, HORIZONTAL = HORIZONTAL, VERTICAL = VERTICAL

 INPUTS:
	All input parameters are passed as keywords.

 KEYWORDS:
	HORIZONTAL - if set, normalize image horizontally from user selected buffer
	VERTICAL   -  if set, normalize image vertically from user selected bufferif set
  in each case, the line to mormalize is usually obtained by linescan~add (horizontal, or vertical)

 OUTPUTS: modified image in buffer 9

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

 SIDE EFFECTS: NONE

 MODIFICATION HISTORY:
 (19-jun-98 aph) isolated from AXIS_C to make space
 (01-jan-99 aph) renamed to be consistent with other ln_xx files
 (11-jan-99 aph) allow normalization along vertical axes
 (23-feb-00 aph) added groupID to buffer call
 (21-mar-00 aph) correct axis_ID for buffer call !
 (04-dec-00 aph) add horizontal option
 (03-feb-11 aph) correct header format; use axis_log
 (10-dec-11 aph) add energy to 2d-normalization; make horizontal normalize preserve intensity
 (29-Jan-12 aph) Correct 10-dec-11 change to limitonly to line-horizontal, NOT normalize to Io !!
 (03-Feb-12 aph) added question re mean normalization of V, H lines

(See c:\axis2000\ln_norm.pro)


LN_SUBSP

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		LN_SUBSP


LAST CHANGED: ----------------------------------- 21-Jul-14 (aph)

 PURPOSE:
	This procedure subtracts a reference spectrum (chosen from an AXIS buffer)
 from the linescan displayed in the current buffer

 CATEGORY: data conversion - AXIS captive
 called from AXIS~LINESCANS~subtract reference

 CALLING SEQUENCE:
	LNSUBSP

 INPUTS:none

 KEYWORDS: none

 OUTPUTS: none

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

 MODIFICATION HISTORY:
 (01-jan-99 aph) segregated from aaa-axis
 (23-feb-00 aph) add groupID to buffer
 (29-dec-00 aph) fix error in name of groupID !!
	        add standard header; remove line-by-line display
 (21-Jul-14 aph) corrected header

(See c:\axis2000\ln_subsp.pro)


LOADSPEM

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		LOADSPEM

LAST CHANGED: ----------------------------------- 	01-Aug-09

 PURPOSE:
	This procedure reads a file in XPD Labview format
  written by early versions (pre-2000) of the ALS BL 7.0 SPEM

 CATEGORY:
	Image display.

 CALLING SEQUENCE:
	Result = LOADSPEM(fname, PK=pknum, NORM=normnum, AVG=avgnum, $
                  PLOT=pl, GLITCH=ngli, SDEV=nsdev, QUIET=quiet)

 INPUTS:
 FNAME - filename

 KEYWORDS:
	PK
	NORM
	AVG
	PLOT	 - display (splot2d) image (first image if multiple)
	GLITCH	 - run manual glitch threshold window
	SDEV=n   - run auto glitch filter for data outside n std deviations
	QUIET

 OUTPUTS:
	No explicit outputs.   A new plot window is created if necessary

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

 SIDE EFFECTS:
	A window is created if plot is selected.

 MODIFICATION HISTORY:
 (07-May-99 jdd) version taken over from Jonathan Denlinger
 (15nov00 cgz) Replaced call of DIMEN function by explicit (SIZE(var))(index+1)
 (15nov00 cgz) Migrated to RD_SPEM.PRO since it was only called from with RD_SPEM.PRO
			LOADSPEM.PRO is now obsolete and can be eliminated
 (30-nov-00 cgz) Replaced call of nwin with explicit window statement
 (01-Aug-09 aph) AXIS standard header added
 (11-Jan-10 aph) commented out all lines calling GLITCH - can not find in package
                 most likely in one of Eli rotenbergs' combined utility files

(See c:\axis2000\loadspem.pro)


LOAD_NEX

[Previous Routine] [Next Routine] [List of Routines]
NAME:
 		LOAD_NEX

LAST CHANGED: ----------------------------------- 	13-may-02

 PURPOSE:
	This function loads nexafs spectra recorded by ALS SPEM

 CATEGORY:
	read-in utility. Stand-alone

 CALLING SEQUENCE:
	Result = load_nex (file, NOFILTER=nof, _extra=e)

 INPUTS:
 FILE - name of file (*.spc)

 KEYWORDS:
	NOFILTER

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

 MODIFICATION HISTORY:
 (12-may-99 aph) first written
 (8-jun-99 aph) add conditional group ID to get_num call; widget_info
 (29-dec-00 aph) filter set to '*.spc'
 (12-may-02 aph) AXIS standard header added

(See c:\axis2000\load_nex.pro)


LOAD_SSV

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	LOAD_SSV

LAST CHANGED: ----------------------------------- 14-Dec-09 (aph)

PURPOSE:
	This function reads in Twinmic format image or spectra from
 the  *.ssv file written by Twinmic for images (transmission, phase, dark, XRF-maps, etc)

CATEGORY:
	STAND ALONE: read in utility

CALLING SEQUENCE:
	Result = LOAD_SSV([file=file, NOF=nof, group=group,TYPE=TYPE, $
                  VERBOSE=VERBOSE, SILENT=SILENT, PARAM=PARAM, _extra=e])

CALLED FROM AXIS:
	Read->Images->Twinmic

INPUTS: none. All input parameters are passed as keywords.

KEYWORDS:
	FILE 	filename to read
	NOF 	no filter (default filter = '*.axb')
	GROUP	group leader (Axis_ID if called from aXis2000 and axis)
	SILENT  if set, do not display feedback on progress
	PARAM	if set, ask user for parameters of Twinmic image
	TYPE	type of image (sum, X_mom, Y_mom) selected automatically
	VERBOSE print log information about processing
	EXTRA 	passed on parameters

OUTPUTS:
	RESULT = AXIS 1d or 2d structure

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks
	@BSIF_COM   for NSLSL *.nc

MODIFICATION HISTORY:
 (14-Dec-09 aph) adapted from AXB_LOAD

(See c:\axis2000\load_ssv.pro)


LOOK

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
       LOOK

 PURPOSE:
       This procedure displays an image and relevant statistics on it.

 CATEGORY:
       Image display

 CALLING SEQUENCE:
       LOOK, Image [, Output, Rev_ind]

 INPUTS:
       Image:      The image to be displayed. If input is not 2-D, then
                   it is not displayed, but its histogram is plotted.

 KEYWORD PARAMETERS:
       HISTOGRAM:  If set, the histogram of image intensities is plotted.

                   If the image is an integer type (BYTE, INT, or LONG) then
                   this keyword may be set to the bin size.
                   Default is 1 for BYTE, 128 for INT, and 256 for LONG.

                   If the image is a floating point type (FLOAT or DOUBLE),
                   then this keyword may be set to the number of
                   desired bins in the histogram. Default is 256 bins.

       NOPLOT:     If set, histogram is computed if specified, but not
                   plotted.
                   Ignored if no output variable for histogram is specified.

       NODISPLAY:  If set, display statistics without displaying image.

       NOSTATS:    If set, display image without displaying statistics.

       NOSCALE:    If set, image is displayed with scaling from zero to the
                   maximum value. Also, the histogram is plotted from zero
                   to maximum value.
                   Default is to scale from minimum to maximum value of image.

       FIT_SCREEN: If set to 1, large images are shrunk to fit the screen
                   size, if necessary.

                   If set to 2, images are forced to fit the screen size by
                   shrinking or expanding by the required amount.
                   The aspect ratio is not changed - i.e., the same zoom
                   factor is used for both x and y dimensions.

                   If set to 3, images are forced to conform to the screen
                   shape by shrinking, expanding, or modifying the aspect
                   ratio.

                   The zoom factor used is saved in the ZOOM keyword
                   parameter.

                   Ignored if NODISPLAY is set.

       ZOOM:       The zoom factor to apply when displaying the image.
                   It may have one or two elements. If there is only one
                   element, the same zoom factor is applied to the x and y
                   dimensions. Otherwise, the two elements specify the
                   x and y zoom factors.

                   Alternatively, a variable to receive the zoom factor used
                   when fitting the image to the screen.

                   NOTE: In both cases, the ZOOM keyword parameter is
                   overwritten by the actual zoom factor(s) used, which can
                   be different from the supplied parameter due to roundoff.
                   This can result in conversion of a one element zoom
                   factor into a two element zoom factor.

                   NOTE: Zoom factor < 1 shrinks image.
                         Zoom factor > 1 expands image.

       SCROLL:     If set, and if the displayed image size is larger than
                   75% of the screen size, a scrollable window is used to
                   display the image.
                   Alternatively, this keyword can be set explicitly to the
                   image size as a fraction of the screen size (floating
                   point value between 0.0-1.0) above which scrollbars
                   will be used.

                   NOTE: This keyword is ignored if a desired window index
                         is specified using the WINDOW keyword below.
                         It is also ignored if the FIT keyword is set.

       WINDOW:     The window number in which to display the image.
                   The default is window 0.
                   If an undefined named variable is supplied to this keyword,
                   it will receive the window index of  the window created
                   by the LOOK procedure.

       HWINDOW:    The window number in which to plot the histogram.
                   The default is window 1. If Hwindow is the same as Window,
                   the histogram is displayed in the next higher window
                   number.

 OPTIONAL OUTPUTS:
       Output:     A variable to receive a FLOAT version of the image scaled
                   into the range of 0 to 255. Any applied zoom factor will
                   be reflected in the output.

                   Alternatively, a variable to receive the histogram, if
                   the HISTOGRAM keyword is set.
                   output[*,0] contains the intensities at the bin midpoints.
                   output[*,1] contains the frequency at each intensity.

       Rev_ind:    If the HISTOGRAM keyword is set, a variable to receive
                   the reverse indices array from the histogram operation.
                   See the documentation for HISTOGRAM for details.

 ROUTINES USED BY THIS MODULE:
       CONGRID, STDEV     (IDL User Library)

       XWINDOW SUITE      (Bill Loo's IDL Routines)

 COMMON BLOCKS:
       LOOK_COMMON

 ORIGINALLY WRITTEN BY:
       Werner Meyer-Ilse
       Center for X-Ray Optics
       Lawrence Berkeley National Lab

 REWRITTEN BY:
       Billy W. Loo, Jr.
       Bioengineering Graduate Group, UCSF / UCB
       School of Medicine, UCD
       Lawrence Berkeley National Lab
       September, 1996

(See c:\axis2000\look.pro)


LOX_COM.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		LOX_COM.PRO

LAST CHANGED: ----------------------------------- 	18-mar-06

 PURPOSE:
	This file is the common block for the AX_LOX read-in widget

 CATEGORY: utility

 CALLING SEQUENCE:  not applicable

 INPUTS: none

 KEYWORDS: n

 MODIFICATION HISTORY:
 (16-oct-05 aph) adapted from SDF_COM.PRO

(See c:\axis2000\lox_com.pro)


MAKE_SQUARE

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	MAKE_SQUARE

LAST CHANGED: ----------------------------------- 10-dec-11

 PURPOSE:
	This procedure replaces rectangular images with a square image
 extended with gray space

 CATEGORY:
	Image display.

 CALLING SEQUENCE:
 for procedures:
	MAKE_SQUARE, S

 INPUTS:
 	S		AXIS structure data (only operates on t='2d', images

 KEYWORDS: none

 OUTPUTS: square matrix is returned as the entry structure

 COMMON BLOCKS: none

 MODIFICATION HISTORY:
 (xxDec-99 aph) ~time introduced
 (30-dec-00 aph) Xrng and Yrng set up
				AXIS standard header added
 (05-mar-01 aph) trying to debug bad read in of some ALS 7.0 linescans (error not found)
 (12-may-02 aph) fix up header name format.
 (10-dec-11 aph) track down an out-of-range index error if there is only 1 x or y value

(See c:\axis2000\make_square.pro)


MAKE_TOMO_LIST

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		MAKE_TOMO_LIST

LAST CHANGED: ----------------------------------- 	14-Nov-2013

 PURPOSE:
	This procedure generate a list of folder names of stacks recorded at specific angles
 the file is needed for ther manipulations of the data.

 CATEGORY:
	stand alone Utility
    called from aXis2000 by stack~tomography~make_tomo_list.

 CALLING SEQUENCE:
	Make_tomo_list [FILE=FILE, FOLDER_NAME=folder_name,ANGLE=angle ]

 INPUTS:
   None

 KEYWORDS:
   FILE - name of file to write out
	FOLDER_NAME - tomo file folder name
   ANGLE - all the angles for tomo file

 OUTPUTS:
	Tomo list as a *.lst file is written to disk

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

 EXAMPLE:
	Generate a list with path as first line then a set of lines
 with each line as following:
		folder_name(),angle()

 MODIFICATION HISTORY:
 (06-Nov-13 jw) first generation
 (14-Nov-13 jw) output and write data to file

(See c:\axis2000\make_tomo_list.pro)


MATH.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME: 
	MATH.PRO 
 
LAST CHANGED: ----------------------------------- 15-nov-00 
 
PURPOSE: 
	This is a set of array functions 
	DIMEN		- determines dimension of array
	NCOLS		- determines number of columns in array
	NROWS		- determines number of rows in array
 
CATEGORY: 
	STAND ALONE: utilities 
 
CALLING SEQUENCE: 
	Result = DIMEN(ARRAY) 
	Result = NCOLS(ARRAY) 
	Result = NROWS(ARRAY) 
 
CALLED FROM AXIS: 
	many procedures 
 
ROUTINES 
	function DIMEN, ARRAY 
	returns the size of the nth (starting from 0) dimension of ARRAY
 
	function NCOLS, ARRAY 
 	returns the number of columns of ARRAY 
 
	function NROWS, ARRAY 
	returns the number of rows of ARRAY
 
COMMON BLOCKS: none 
 
MODIFICATION HISTORY: 
 (08-nov-00 cgz) AXIS standard documentation 
 (08-nov-00 cgz) created MATH procedure, 
			to be used to compile other functions when called from AXIS startup
 (08-nov-00 cgz) migrated INTERP and INTERSPLINE to separate files as functions
 (08-nov-00 cgz) eliminated MEAN function, superceded by IDL primitive MEAN
		can probably eliminate some of these small functions
		why have dimen, ncols, nrows when these can be handled by IDL primitive
 (15-nov-00 cgz) replaced calls of DIMEN, NCOLS, and NROWS in all other AXIS functiosn and procedures
		DIMEN : LOADSPEM, PARSEBYTES, RD_SPEM
		NCOLS : GEN_READ, INTERP, LN_LOAD, MISC, PLOT2D, READ_A_N, READ_ALS, 
				READ_NUMBERS, SPLOT2D, SPLOT3D, SPLOTA
		NROWS : LN_LOAD, PLOT2D, READ_A_N, READ_ALS
		MATH.PRO is now obsolete and can be eliminated

(See c:\axis2000\math.pro)


MBUF.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		MBUF.PRO

LAST CHANGED: ----------------------------------- 21-Jul-14

 PURPOSE:
	This function is a widget that allows selection of multiple buffers

 CATEGORY:
	utility captive to axis2000

 CALLING SEQUENCE:
	Result = MBUF(group = group, Val = val)

 INPUTS:
	All input parameters are passed as keywords.

 KEYWORDS:
	GROUP	identity of parent group that called mbuf (axis_id)
	val 	array of buffers for default selection

 OUTPUTS:
  returns array with numbers of selected buffers

 COMMON BLOCKS:
	COMMON Buffer, BGROUP16, MBufs, cncl

 SIDE EFFECTS:
	A widget is created/destroyed.

 MODIFICATION HISTORY:
 (13-dec-98 aph) correct layout; all, cancel added
 (20-aug-01 aph) removed modal call at xmanager
 (31-dec-01 aph) when select 'all' it includes buffer 0
 (15-Jan-13 aph) force Mbuf to track aXis2000 widget
 (21-Jul-14 aph) corrected header

(See c:\axis2000\mbuf.pro)


MCF_COM.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
   MCF_COM.PRO

LAST CHANGED: -----------------------------------  27 Jul 2015

 PURPOSE:
 This file is the common block for AX_FILE_LOAD read-in widget 

 CATEGORY:
 utiliy - inserted into other code

 MODIFICATION HISTORY:
 (13-feb-03 aph)
 (27-Jul-15 aph) AXIS standard header added; added ( at end

(See c:\axis2000\mcf_com.pro)


MISC.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		MISC.PRO

LAST CHANGED: ----------------------------------- 	321 Jul 2014

 PURPOSE:
	This is a set of utility programs
 originally written by Eli Rotenberg & Jonathan Denlinger

 CATEGORY: utility, stand alone

 CALLING SEQUENCE:
	RESULT = [NAME](options)
  fct asc( char )		-- convert char to ascii code
  fct chr( ascii)		-- convert ascii code to character
  fct num2str(num,format)	-- simpler syntax than built-in STRING fct
  fct int2str, num, DIGITS=digits
     -- integer(s) to string with optional padded zeros
        if num is an array output adds brackets and commas ([#,...])
  fct str2arr, str, delimit [, LEN=len, /INT]
	-- extract an array of values from a string
  fct ZM, image, mag		-- zoom image size, magnification can be noninteger
  fct RANGEN, npts, min, max [,option] -- returns preinitialized 1D floating array
	option: INCR=increment (recalculates npts; max is then to nearest increment)
  fct GET_LIMITS, arr		-- returns [start, end] vector of 1D array
  fct GET_RANGE, arr		-- returns [min, max] vector any dimen array
  fct INDEX, arr, val,  --returns index of 1D array closest to the given value(s)
	 	/MODE selects alternate method, /TIM - prints execution time

 INPUTS:
		routine specific

 COMMON BLOCKS: none

 MODIFICATION HISTORY:

  9/21/95 jdd  added INCR option to RANGEN
  2/13/96 jdd  added STR2ARR
  (14-nov-00 cgz)
  NOTE : Nothing other than CHR, NUM2STR, and GET_RANGE is used in AXIS.
		The calls to these routines can be more efficient by using explicit calls of IDL primitives
		CHR has been replaced in PARSEBYTES.PRO and READSTRINGBIG.PRO
		NUM2STR has been replaced in WINDOWS.PRO
		GET_RANGE has been replaced in AX_ORDER.PRO and PLOT2D.PRO
		MISC.PRO is now obsolete and can be eliminated
 (15-nov-00 cgz) Replaced call of NCOLS function by explicit (SIZE(var))(1)
 (15-nov-00 cgz)	ASC not called anywhere within AXIS
				CHR called within PARSEBYTES and READSTRINGBIG - replaced 14nov00
				NUM2STR called within WINDOW - replaced 14nov00
				INT2STR not called anywhere within AXIS
				STR@ARR not called anywhere within AXIS
				ZM called from within the retired STRUCTURE
				RANGEN called from within the retired STRUCTURE and the retired MISC
				GET_LIMITS called from within the retired MISC
				GET_RANGE called from within AX_ORDER - replaced 14nov00
									PLOT2D - replaced 14nov00
									and the retired MISC
				INDEX not called anywhere within AXIS
 (22-Jul-14 aph) AXIS standard header added
		num2str is called from win2tif

(See c:\axis2000\misc.pro)


NCB_TO_MPG

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		NCB_TO_MPG

 LAST CHANGED: -------------------------------- 21-Jul-14

 PURPOSE:
	This procedure converts a ncb stack into a MPEG movie

 CATEGORY:
	stack processing

 CALLING SEQUENCE:
	NCB_TO_MPG, FILE

 INPUTS:
 	FILE	name of the output file

 KEYWORDS: none

 OUTPUTS:
	*.mpg file

 COMMON BLOCKS:
 AXIS_COM	standard set of common blocks
 stack_process_com
 BSIF_COM
 volume_data

 SIDE EFFECTS:

 RESTRICTIONS: none

 MODIFICATION HISTORY:
 (14-Jun-06 gaj) first version
 (01-Aug-06 gaj) finished first working version
 (02-Aug-06 gaj) fixed the scaling to avoid colors in the movies
 (30-jul-09 aph) changed analcom to stack_process_com (update to stack_process)
 (21-Jul-14 aph) corrected header

(See c:\axis2000\ncb_to_mpg.pro)


NCDF2ALS

[Previous Routine] [Next Routine] [List of Routines]
NAME: 
	NCDF2ALS 
 
LAST CHANGED: ----------------------------------- 20-May-00 
 
 PURPOSE: 
	This procedure converts one or a series of NSLS image files (*.nc) 
 into ALS ascii format (*.img) with a user definable scale factor 
 
 CATEGORY: 
	AXIS: image analysis 
 
 CALLING SEQUENCE: 
	NCDF2ALS, file 
 
 INPUTS: 
	FILE - netCDF format (*.nc) to be converted to ALS ascii format 
 
 KEYWORD PARAMETERS: 
	LIST 	- name of file with list of image files (*.sl) 
   OUTLIST - name of a file to write list of netCDF files (*.lst) 
	ONE 	- convert only a single file 
	SCALE 	- scale factor (nb ALS format is integer) 
 
 OUTPUTS: 
  FILE.img - image written to a ALS ascii format binary file (*.img, *.dat) 
 
 COMMON BLOCKS: 
   @AXIS_COM - set of common blocks for AXIS 
   @BSIF_COM - common block for netCDF 
 
 RESTRICTIONS: 
	caveat emptor 
 
 PROCEDURE: 
	NCDF2ALS uses READ_BNL to put the image and associated information 
 into BSIF_COMMON variables: 
	image_data (the array which holds the image - possibly several 
	planes deep for I, IO, CLOCK) 
	then uses SAV_ALS to write the ALS data files 
 
 MODIFICATION HISTORY: 
 (20-may-00 aph) adapted from als3ncdf 

(See c:\axis2000\ncdf2als.pro)


NEXUS_COM.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		NEXUS_COM.PRO

LAST CHANGED: ----------------------------------- 	27-Apr-15

 PURPOSE:
	This file contains the common block for the widget which reads NeXus files

 CATEGORY:
	utility

 MODIFICATION HISTORY:
 (27-Apr-15 bw ) First version written using sdf_com.pro as a template
 (13-Jul-15 aph) integrated into aXis2000 02-July-15 version

(See c:\axis2000\nexus_com.pro)


NSRRC_PEEM_COM.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		NSRRC_PEEM_COM.PRO

LAST CHANGED: ----------------------------------- 	27-Aug-2013 (aph)

 PURPOSE:
	This file is the common block for the READ_NSRRC_SPEM_GUI read-in widget

 CATEGORY: utility

 CALLING SEQUENCE:  not applicable

 INPUTS: none

 MODIFICATION HISTORY:
 (27-Aug-13 aph) adapted from NSRRCC_SPEM_COM.PRO

(See c:\axis2000\nsrrc_peem_com.pro)


NSRRC_SPEM_COM.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		NSRRC_SPEM_COM.PRO

LAST CHANGED: ----------------------------------- 	27-Aug-2013 (aph)

 PURPOSE:
	This file is the common block for the READ_NSRRC_SPEM_GUI read-in widget

 CATEGORY: utility

 CALLING SEQUENCE:  not applicable

 INPUTS: none

 KEYWORDS: none

 MODIFICATION HISTORY:
 (22-Jul-13 aph) adapted from AX_LOX_COM.PRO
 (27-Aug-13 aph) corrected source info

(See c:\axis2000\nsrrc_spem_com.pro)


PARSECOMPOSITION.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		PARSECOMPOSITION.PRO

LAST CHANGED: ----------------------------------- 	19-Jul-10

 PURPOSE:
	This function string containing chemical composition data
 and returns number of H,C,N,O,S,P  (NB there is a similar function in SF)

 CATEGORY:
	Utility; part of XSpecSim, spectral simulator package

 CALLING SEQUENCE:
	Result = PARSECOMPOSITION(strdat =strdat)

 INPUTS: none

 KEYWORDS:
	STRDAT 	String with composition in standard periodic table notation

 OUTPUTS: none

COMMON BLOCKS:
	@XSpecSim_Com		X-SpecSim common block


 MODIFICATION HISTORY:
 (28-feb-07 jso) first version
 (18-Jul-10 aph) AXIS standard header added; XSpecSim_com added

(See c:\axis2000\parsecomposition.pro)


PARSESTRING.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	PARSESTRING.PRO

LAST CHANGED: ----------------------------------- 23-Jul-14

PURPOSE:
	This function splits text string into constituent numbers

CATEGORY:
	STAND ALONE: utilities

CALLING SEQUENCE:
	Result = PARSESTRING(string)

CALLED FROM AXIS:
	many procedures

ROUTINES
	PARSESTRING	 splits text string into constituent numbers

 METHOD
 given s string, which is a tab, comma or space delimited list of #s,
 parsestring returns an array of numbers.
 if no numbers are found, or other error, returns 0

 you can distinguish the error from "0.0" using the size function,
 since the error condition is a scalar, not a vector

COMMON BLOCKS: none

(See c:\axis2000\parsestring.pro)


PARSE_SDF

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		PARSE_SDF

LAST CHANGED: ----------------------------------- 09-Dec-05 (aph)

 PURPOSE:
	This function generates a structure from a string
 If the string contains multiple structures it only returns the first structure.
 It also trims the input string to all past the extracted structure.
 Where necessary, in partuclar inarrays which contain structures, named structures are used.

 CATEGORY:
	utility: string manipulation

 CONTENTS:
	MAKE_STAR	function to make named array from anonymous array
	PARSE_SDF	main routine

 CALLING SEQUENCE:
	Result = PARSE_SDF(dummy, struct=struct, verbose = verbose)

 INPUTS:
	DUMMY	a string containing structure contents
	EXAMPLES: '{ Name = "Time"; Unit = "sec";};'
			 '{ Name = "Energy"; Min = 285; Max = 322; Points = (3, 285, 286, 287);};'
			 '{ Name = "Time"; Unit = "sec";}; embed_str = {name = "new";int = 5;};};'

 KEYWORDS:
	STRUCT	pre-defined named structure to act as template
	VERBOSE	print a blow-by-blow descrition (you were warned !!)

 OUTPUTS: anonymous structure which may contain named structures
      (Tag_Name1 : Tag_Definition1,..., Tag_Namen : Tag_Definitionn}

 COMMON BLOCKS: sdformat

 PROCEDURE: The structure is first tested to ensure it starts with {
 It is then read by removing each tagname and using analysis of the following
 string parts to identify one of 7 possible structure components

				Identify by testing		Isolate	by 		Convert
 Component  	first char	(____;)		extracting		by using
  ---------   ----------------------  -------------   ---------
 STRUCTURE		{						whole string	parse_sdf			**
 Array			(						next ')'		type specific
 ----- after removing (##, ..... identify and convert all ___,
   of STRUCT	{						whole string	parse_sdf			**
   of String	"						sep_parts		none				**
   of Real/Integer			'.'			sep_parts		float				**

 String		"			'"'			to next ';'		none				**
 Real						'.'			to next ';'		float				**
 Integer					(all other)	to next ';'		fix					**
 ------------------------------------------------------------

 BUGS
 	Does not work to handle arrays of structures
 need to find how to make named structure from strings

 MODIFICATION HISTORY:
 (10-feb-01 aph) first version
 (11-feb-01 aph) change from bl5 to sdf (self-defined format); make_star
 (22-feb-01 aph) residual syntax pasring added - Booleans & arrays of structures of structures
 (17-aug-01 aph) tinkered but no mods getting Aug-01 dataformats read
 (12-may-02 aph) correct header name format
 (12-mar-03 aph) change '0','1','2' to 'a0'.. in named array structs
      "          and pt in kluge to replace 'END' tags, for IDL5.6 compatibility
 (09-dec-05 aph) tracking added for troubleshooting new SDF file structures

(See c:\axis2000\parse_sdf.pro)


PEM_LOAD

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		PEM_LOAD

LAST CHANGED: ----------------------------------- 28-May-05 (aph)

 PURPOSE:
	This function reads an ALS-PEEM 2 NEXAFS format file
 It assumes col(1) = Energy (eV)  and col(3) = signal

 CATEGORY: spectral input
 called from AXIS~READ~ALS-PEEM

 CALLING SEQUENCE:
	Result = PEM_LOAD(file=file, filter=filter, NOF=nof, print_source = print_source, $
             ring_normalize=ring_normalize,  _extra=e)

 INPUTS:
	All input parameters are passed as keywords.

 KEYWORDS:
	FILE:	filename
	FILTER:	optional user selectable filter (default = '*.'
	NOF:	no filter (*.*)
	PRINT_SOURCE:	if set to 1; print input file as it is read
   RING_NORMALIZE  divide by the ring current if it exists
	_EXTRA_E:	forward other parameters

 OUTPUTS: none

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

 COMMENTS:
	In Dec-04 found prob lems with 'apparent non-linearity' in ALS PEEM energy scales
   In May-05 realized there had been a file format change sometime in fall 2003
   which removed the header line from the *.dat files written by PEEM-2
   This meant the energy assigned to the image file was one higher (i.e. the n+1 energy
   was assigned to the n image). This, combined with use of non-linearly spaced energies,
   is the likely cause of the  'apparent non-linearity'.

 MODIFICATION HISTORY:
 ( 9-aug-97 aph) broke out of spectral; TYPE defined
 (21-jan-98 aph) added s.dn component to 1d structure to be axis-compatible
 (20-feb-98 aph) set-up to read 2-col only data
 ( 6-mar-98 aph) read *.txt - 2 column ascii files
 ( 7-jun-98 aph) corrected read *.txt ('un' case) to get all data points
 (10-jul-98 aph) retired "*.spc" nomenclature - use *.txt extension
 (13-May-99 aph) set up for multicolumn, skip header reading
 (15-May-99 aph) adapt spc_load to get ALS-PEEM 2 format files
 (25-jun-99 aph) use only fileshort
 ( 7-jul-99 aph) FREE_LUN as well as close
 (29-dec-00 aph) set filter to '*.' ; standard header; add file
 (14-jan-01 aph) set filter to '*.*' since '*.' EXCLUDES files of *. character !!
 (12-aug-01 aph) add title to pickfile dialog
 (12-may-02 aph) correct header name format
 (28-may-05 aph) adapt to 3 different ALS PEEM spectral file formats
                 add ring current normalization option

(See c:\axis2000\pem_load.pro)


PICKFILE2

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		PICKFILE2

LAST CHANGED: ----------------------------------- 	22 Jul 2010

 PURPOSE:
	This function is a dialog which allows user to select a filename.
   It is a wrapper over the old IDL PICKFILE dialog
    with last path, last file options and forcing extension

 CATEGORY:
	utility. stand alone

 CALLING SEQUENCE:
	Result = PICKFILE2 (LPATH=lp, TITLE=TITLE, $
                       WRITE=write, LFILE=lf, INFO=info, _extra=e)

 INPUTS: none

 KEYWORDS:
	FILTER - extension (*.hdr)
	INFO - print info on this routine
	LPATH - last path used
	LFILE - last file used
	TITLE - user supplied title for dialog
	WRITE - if set, when selecting a filename, checks & warns for existence

 OUTPUTS: none

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks
	common lastpath, lpath, lfile

 MODIFICATION HISTORY:
 (06-jul-98 aph) force DefPath to be LastPath from exit
 (04-jan-00 aph) add WRITE, AXIS keywords and build a wrap that warns user of overwriting
 (25-apr-00 aph) attempt to get lpath working properly; allow use outside of axis
 (19-apr-01 aph) add TITLE
 (14-may-02 aph) AXIS standard header added; force filter extension
 (22-nov-08 aph) use axis_log for warnings
 (20-Apr-10 aph) remove 'forcing extension' warning
 (22-Jul-10 aph) accomodate calls where defpath is not defined

(See c:\axis2000\pickfile2.pro)


PLOT2D

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	PLOT2D

LAST CHANGED: ----------------------------------- 23 July 2014

PURPOSE:
	This generates a 2d image plot with labels and user controllable limits.
 It is intermediate between splot2d and the IDL plot routine.

CATEGORY:
	AXIS: utility; also STAND ALONE: image processing

 CALLING SEQUENCE
  	PLOT2D, G_data, xx, yy, labels, /LOG, autosize=as, wsize=s, /NORESIZE, _extra=e

CALLED FROM AXIS:
	->via splot2d routine exclusively

INPUTS:
	G_data	(z) data to plot
	xx		(X) - values
	yy		(Y) - values
	labels  labels for x & y axes

KEYWORDS:
	LOG		- plot log(G-data)
	WSIZE	- specify IDL window size
	AUTOSIZE - uses dimensions to specify IDL window size
	NORESIZE - ue current window size

OUTPUTS: none

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

 PROCEDURE
 generalized 2D intensity plot with x and y axes
 assumes equal pixel unit increments to determine window aspect ratio

MODIFICATION HISTORY:
 2/13/95  er add keyword /NORESIZE to PLOT2D
 6/15/96  jdd move SPLOT stuff to separate procedure

 ----------- AXIS modifications -------
 (25-jun-99 aph) plot2d: allow co-existing image/spectra color tables (ax_imscl, ax_color)
 ( 6-jul-99 aph) plot2d: allow negative-going plots; try to avoid funny colored backgrounds
 ( 3-oct-99 aph) plot2d: removed explicit color, back statements !
 (15-apr-00 aph) AXIS standard documentation
 (14-nov-00 cgz) Replaced calls to GET_RANGE function with ecplicit MIN and MAX calls
 (15-nov-00 cgz) Replaced call of NCOLS function by explicit (SIZE(var))(1)
 (15-nov-00 cgz) Replaced call of NROWS function by explicit (SIZE(var))(2)
 (30-nov-00 cgz) Replaced call of nwin with explicit window statement
 (19-dec-00 cgz) substituted ax_white_color_index with ax_plot_axes_color_index
			substituted ax_black_color_index with ax_plot_bkgd_color_index
 (30-dec-00 aph) set XSTYLE=9, YSTYLE=9 for frame (1-sided axes)
				  set Xmargin=[8,0], Ymargin = [4,2]
 (22-mar-06 aph) try to increase size of labels; allow room for Y-axis label
 (23-jul-14 aph)  remove ticks & increase size of main window; adjust margins so side windows line up
                 which required changes to axis_Dialog, axis_c; implement Plot_Axes_Flag switch

(See c:\axis2000\plot2d.pro)


PLOT3D.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME: 
	PLOT3D.PRO 
 
LAST CHANGED: ----------------------------------- 15-apr-00 
 
PURPOSE: 
	This generates a shade_surface 3d plot of an image. 
 
CATEGORY: 
	STAND ALONE image processing 
 
ROUTINES: 
	PLOT3D, G_data, xx, yy, xylabels, AZ=zang, _extra=e 
			xylabels=['xlabel','ylabel'] 
 
CALLED FROM AXIS: 
	->via splot3d routine exclusively 
 
INPUTS: 
	G_data	(z) data to plot 
	xx		(X) - values 
	yy		(Y) - values 
	xylabels  labels 

KEYWORDS: 
	AZ			- Z-angle plot log(G-data) 
	CHARSIZE	- specify character size for labels 

OUTPUTS: generates a window if run stand-alone 
 
COMMON BLOCKS: 
	@AXIS_COM	standard set of common blocks 
 
MODIFICATION HISTORY: 
 12/2/95  jdd fixed labels in plot3d 
 6/15/96  jdd move SPLOT stuff to separate procedure 
 ----------- AXIS modifications ------- 
 (15-apr-00 aph) AXIS standard documentation 

(See c:\axis2000\plot3d.pro)


PLOTBUF

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		PLOTBUF

LAST CHANGED: -----------------------------------  24 Jul 2014

 PURPOSE:
	This procedure plots AXIS structure format data (1d, 2d, 3d, 4d)
 where 1d are y(x) - typically spectral or profile plots
		2d are z(x,y) - images
		3d are images without own (x,y) scales,
			typically standard format images (jpg etc) with own color scales
		4d are f(x,y,z) 3-d volume data (e.g. stacks) (not yet implemented)

 CATEGORY:
	Image display. AXIS captive

 CALLING SEQUENCE:
 	PLOTBUF, BufNum, Zvalues = Zvalues, same_scale=same_scale, _extra=e

 INPUTS:
	BUFNUM	Number of AXIS buffer to plot
           (0-9 are standard; 10 thumbnail composite)

 KEYWORDS:
	ZVALUES:	[zmin, zmax] to allow forcing Z-range
	SAME_SCALE:	switch if set, keeps same (x,y) scale as in prior plot
	_EXTRA:		other paramaters to pass to splot, splot2d etc
 	Note - many other plot paramaters are passed via axis_com variables

 OUTPUTS:
	plot on MainImg window in aXis2000

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

 MODIFICATION HISTORY:
 (07-aug-97 aph) - generates MainImg plot using SPLOT or SPLOT2D
				    updates buffer labels; updates thumbnails
 (28-dec-97 aph) - added '3d' type = tif, gif, etc image
 (12-apr-98 aph) - added '4d' type = (E,distance) plot (line scans)
 (19-jun-98 aph) - split out of AXIS_C for code space reasons
 (28-Dec-98 aph) - Zmin, Zmax for 2d plots
 (03-Jan-99 aph) - Zmin, Zmax for 1d plots
 (08-Jan-99 aph) - add 5% top/bottom margin for 1d plots
 (25-Jun-99 aph) - try for consistent image/spectra color table
 (29-jun-99 aph) - adapt 'FIRST_PLOT' to set user-selected colors;
                 - type = '3d' uses internal color tables
 (04-jul-99 aph) - search for color scale error on image -> spectra
 (06-jul-99 aph) - correct image plotting to preserve orientation of (x,y) scales (forced increasing)
 (08-jul-99 aph) - only redo thumbs if CurBuf NE 0; update labels though !
 (13-jul-99 aph) - thumb_plot reset for any use of PlotBuf; add same_scale keyword
 (26-jul-99 aph) - leave all decisions about updating Thumbs and Labels to ThumbLbs
 (12-aug-99 aph) - kluge fix 'relax to white background' problem
 (19-sep-99 aph) - change first to first_plot (common conflict); ax_wait
 (28-oct-99 aph) - update Zmin, Zmax on plot
 (16-nov-99 aph) - implement color bar, gamma for image Z-scales; X,Y controls
 (19-nov-99 aph) - do not clear axis communication box
 (31-jan-00 aph) - reactivate 3d as a simple 'transcribe' for images
 (16-apr-00 aph) - add TRUE=1 to corrctly display 3-channel images (3,x,y)
 (30-nov-00 cgz) Replaced call of wdivide with explicit !p.multi statement
 (19-dec-00 cgz) substituted ax_white_color_index with ax_plot_axes_color_index
			substituted ax_black_color_index with ax_plot_bkgd_color_index
			commented out !p.background statement
 (30-dec-00 aph) corrected placement of make_square to get line-outs right
				Zrange larger/smaller than data size implemented
				AXIS standard header added
 (06-oct-01 aph) sensitive for G_lbl
 (28-dec-01 aph) blank out pixel display when clearing from 2d display
 (17-feb-02 aph) add scale bar and size
 (29-apr-02 aph) nm bar if less than 1 um; not thick
 (12-may-02 aph) correct header name format
 (22-mar-06 aph) increase character size
 (22-dec-07 aph) remove date, time
 (15-jun-08 aph) ignore NaN and Infinities when setting plot ranges
 (21-Jul-14 aph) add X-label on same line as scale bar length (when change Plot to no axes)
 (24-Jul-14 aph) change scale bar to black when below image

(See c:\axis2000\plotbuf.pro)


PLOTSECT

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		PLOTSECT

LAST CHANGED: ----------------------------------- 	14-Jun-05

 PURPOSE:
	This procedure plots multisection (non-monotonic) spectra data using splot

 CATEGORY:
	Spectral display - captive to aXis2000

 CALLING SEQUENCE:
	PlotSect, BufNum, AUTOSCALE=auto, SPLIT=split, _extra=e

 INPUTS:
 	BufNum	Number (0-9) of aXis data buffer to display.

 KEYWORDS:
	AUTOSCALE	- if 1, then display with min/max range
	SPLIT		- if 1, separate the parts of the non-montonic data
                 into individual, +ve X-going sections in separate buffers
				- if 0, overlpot in one display buffer, but increment colors
			       to indicate non-monotonic

 OUTPUTS: none

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

 MODIFICATION HISTORY:
 (20-dec-97 aph) generates multisection MainImg plot using SPLOT
 (19-jun-98 aph) isolated from AXIS_C
 (26-sep-99 aph) updated with thumbnails separated
 (15-aug-04 aph) fix problem with processing files which do not have an Xlabel
                 standard header
 (14-Jun-05 aph) add correction (kluge!) to allow oplot with 1 point sections

(See c:\axis2000\plotsect.pro)


PRINCETON_HEADER_DEFINE

[Previous Routine] [Next Routine] [List of Routines]
+
NAME:
		PRINCETON_HEADER_DEFINE

LAST CHANGED: ----------------------------------- 	30-Aug-2013

 PURPOSE:
	This procedure sets up the structure of the header part of Princeton camera files
 unchanged aside from adding header, from version obrtained from Mark River's share site in Aug 2011

 CATEGORY:
	Utility (does not seem to be used by the read_princeton or write_princton routines though).

 CALLING SEQUENCE:
 	PRINCETON_HEADER_DEFINE

 INPUTS:none

 KEYWORDS: none

 OUTPUTS:
	Header for an output file is created

 COMMON BLOCKS: none

 MODIFICATION HISTORY:
 (30-Aug-13 aph) AXIS standard header added

(See c:\axis2000\princeton_header_define.pro)


PRINT.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		PRINT.PRO

LAST CHANGED: ----------------------------------- 	21 Jul 2014

 PURPOSE:
	These functions print. Probably not called anywhere in aXis2000

  pro PRA, /LS, /EPS, _extra=e
	OPEN POSTSCRIPT FILE FOR OUTPUT
	OPTIONS: /LS (landscape), /EPS (encapsulated postcript)
  pro PRB, 'printer', /NOPRINT
	CLOSE & PRINT to 'BL7LJ4' (default), 'hp9', etc.


 MODIFICATION HISTORY:
 (29nov00 cgz) Only PRa and PRb are used anywhere within AXIS
			PRa and PRb are called once from within WINDOW.PRO
			Migrated PRa and PRb to WINDOWS.PRO
 (22-Jul-14 aph) AXIS standard header added
			pra is called by win3lpr which is used in axis_c to print

(See c:\axis2000\print.pro)


PTYCHO_COM[1]

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	  PTYCHO_COM

LAST CHANGED: ----------------------------------- 27-Jul-15

 PURPOSE:
	This FILE contains the COMMON block, PTYCHO_COM

 CATEGORY:
	AXIS: PTYCHO_COM common block

 CALLING SEQUENCE:
	@ptycho_com

 INPUTS: none

 KEYWORDS: none

 OUTPUTS: none

 DETAILS: - variables in the common block:
	display_ptycho_par - labels for events

 MODIFICATIONS
 (02-Jan-15 aph) started
 (27-Jul-15 aph) corrected error - missing ", $ on 2nd line

(See c:\axis2000\display_ptycho_com.pro)


PTYCHO_COM[2]

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	ptycho_com

LAST CHANGED: ----------------------------------- 15-Jan-15

 PURPOSE:
	This FILE contains the COMMON block, ptycho_com

 CATEGORY:
	AXIS: ptycho_com common block

 CALLING SEQUENCE:
	@ptycho_com

 INPUTS: none

 KEYWORDS: none

 OUTPUTS: none

 DETAILS: - variables in the common block:
	display_ptycho_par - labels for events

 MODOFICATIONS

 (15-Jan-2015 aph) started

(See c:\axis2000\ptycho_com.pro)


PTYCHO_SELECT.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		PTYCHO_SELECT.PRO

LAST CHANGED: ----------------------------------- 	08-Dec-12

 PURPOSE:
	This widget allows user to select one of the items in an output file
 from a ptychographic analysis [Shapiro hdf5 files,(Dec-12 ]

 CATEGORY:
	file read-in

 CALLING SEQUENCE:
	Result = PTYCHO_SELECT()

 ROUTINES

 BUT_PSELECT_DROPLIST.
 WIDGET_KILL_REQUEST.
 BUT_PSELECT_CANCEL.
 BUT_PSELECT_OK.
 PSELECT_BASE_EVENT.

 INPUTS: none (transfer vis COMMON

 KEYWORDS: none

 OUTPUTS: returns selected item

 COMMON BLOCKS:
	ptycho_select_com
	AXIS_COM	standard set of common blocks

 SIDE EFFECTS:
	A GUI window is created/destroyed.

 MODIFICATION HISTORY:
 (06-Dec-12 aph) first version generated

(See c:\axis2000\ptycho_select.pro)


PTYCHO_SELECT_COM

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	PTYCHO_SELECT_COM

LAST CHANGED: ----------------------------------- 06-Dec-12

 PURPOSE:
	This FILE contains the COMMON block, PTYCHO_SELECT_COM

 CATEGORY:
	AXIS: PTYCHO_SELECT_COM common block

 CALLING SEQUENCE:
	@PTYCHO_SELECT_COM (to include in the Ptycho_Select routines)

 INPUTS: none

 KEYWORDS: none

 OUTPUTS: none

 MODIFICATION HISTORY:
 (05-Dec-12) first introduced

(See c:\axis2000\ptycho_select_com.pro)


RANDOMFILE.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		RANDOMFILE.PRO

LAST CHANGED: ----------------------------------- 	03-Feb-11

 PURPOSE:
	This  function returns a random file name which is unique

 CATEGORY:
	stand alone utility

 CALLING SEQUENCE:

	Result = RANDOMFILE()

 INPUTS: none

 KEYWORDS: none

 OUTPUTS: returns a unique file name

 COMMON BLOCKS:
	RANDOMFILE_COMMON

 MODIFICATION HISTORY:
 (01-Jan-93 cjj) first written
 (18-Jul-10 aph) AXIS standard header added

(See c:\axis2000\randomfile.pro)


RD_PEEM

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	RD_PEEM

 last changed ----------------------------- 21-Feb-10 (aph)

 PURPOSE
   This function reads in a PEEM-2 image file in either the as-recorded 12-bit
  or the converted 16-bit unsigned tif formats.
  Dependending on keywords, it then corrects for gain, background effects;
  applies median smoothing, and assigns the x,y scales and the photon energy
  The data is returned as an AXIS internal format 2d structure

 CATEGORY:
	Image processing.

 CALLING SEQUENCE:
	Result = RD_PEEM(file [, bits12 = bits12, col12 = col12, Energy = energy, AXIS = AXIS, $
         CCD_bgnd = CCD_bgnd, scale = scale, smth = smth, CCD_gain = CCD_gain, $
         aoi_box = aoi_box, aoi_data = aoi_data, aoi_gain=aoi_gain, aoi_dark=aoi_dark, $
		  region = region, sphinx=sphinx, NOFILTER=nof, _extra=e])

 INPUTS:
	FILE 	name of file to convert (user prompted if not supplied)

 KEYWORDS:
	AOI_box 	area of interest, defined by box, [x0, y0, x1, y1] acquired by PEEM-2
					used to extract sub-image from dark and white files
	AOI_DATA	if set, select AOI from input image
	AOI_GAIN	if set, select AOI from CCD-gain image
	AOI_DARK	if set, select AOI from dark image
	AXIS		if set, indicates called from AXIS2000 widget
	BITS12 		if set, this turns on the 12-bit read routine
   COL12		if set, defines number of columns to drop in 12-bit mode
	DWELL		exposure time for image in seconds
	ENERGY 		sets energy PEEM image was recorded at
	CCD_BGND 	CCD background image (2-d array) that is subtracted; must be same size as image
	GROUP		name of group leader calling RD_PEEM
	NOFILTER	if set, then pickfile dialog does not have filter set to '*.tif'
	REGION		a 4-number vector [x_start, x_stop, y_start, y_stop]
				defining the region of the image to be selected
				(if scale set, in real space units. Otherwise, in pixels)
	SCALE 		pixel size in microns
	SMTH 		if set, applies a 3-point median smooth
   SPHINX      if set, switched 16-bit TIF read to signed
	CCD_GAIN	CCD background image (2-d array) that is divided; must be same size as image
           	(gives response of CCD to uniform illumination)

 COMMON
	AXIS_COM general common blocks for AXIS

 WARNINGS
	1024x1024 images from CCD camera can be slow loading with older computers

 MODIFICATION HISTORY:
 (14-may-99 aph) first version
 (15-may-99 aph) save scale (pix_siz), region (cur, cll) values in common
 (08-jun-99 aph) add group to get_num call
 (25-jun-99 aph) report short gile name only
 (17-jul-99 aph) CCD_bgnd used
 (01-nov-99 ads) add nobits keyword & option for reading 12bit PEEM2 images
 (26-dec-99 aph) incorporated in AXIS 1.8c
 (23-oct-00 aph) 12-bit read in from arbitrary size - use Query_Tiff to obtain dimensions
                  dump first 5 columns
 (20-apr-01 aph) getting 1024x1024 12-bit files to read
 (06-jun-01 aph) AXIS standard header; apply full background and gain image correction
				  implement Area of Interest for gain, image and background
 (12-jul-01 aph) continuing development of improved PEEM read-in
 (31-jul-01 aph) handle bad file names properly; add axis keyword
 (04-aug-01 aph) add group keyword; remove intermediate plotting if group set
 (07-aug-01 aph) add dwell keyword and value to x-axs label if set
 (12-aug-01 aph) added keyword parameter to set 12-bit column drop; change GAIN correction to array
 (05-may-02 aph) add sphinx keyword to correct for signed format
 (12-may-02 aph) corrct name format in header.
 (16-jul-02 aph) read in 12-bit elmitec data stored in 16-bit TIF files correctly
 (23-may-04 aph) get keyword energy to be recognized and stop requesting a value
 (12-sep-07 aph) remove action of col12 function (drop first few columns); replace higher up with ax_cimage
                 use axis_log instead of print
 (21-Feb-10 aph) fix up group ID problem (reading ALS PEEM2 format files)

(See c:\axis2000\rd_peem.pro)


RD_SPEM.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	RD_SPEM.PRO

LAST CHANGED: ----------------------------------- 11-Jan-10

PURPOSE:
	This reads SPEM data from a XPD labview format data file

CATEGORY:
	STAND ALONE: utilities

CALLING SEQUENCE:
	Result = RD_SPEM(file, NOFILTER=nof, _extra=e )

INPUTS:
	FILE - SPEM data file

KEYWORD PARAMETERS:
	NOFILTER - use *.* as filter
	_EXTRA - pass on other call line parameters

 COMMON BLOCKS:
   @AXIS_COM - set of common blocks for AXIS

MODIFICATION HISTORY:
 (31-Jan-00 aph) add hourglass since slow
                 THIS is  a file picker warapped around LOADSPEM
 (15-nov-00 cgz) AXIS standard documentation
 (15-nov-00 cgz) migrated LOADSPEM.PRO function into RD_SPEM.PRO
				  since LOADSPEM is only called from within RD_SPEM.PRO
 (15-nov-00 cgz) Replaced call of DIMEN function by explicit (SIZE(var))(index+1) in LOADSPEM
 (30-nov-00 cgz) Replaced call of nwin with explicit window statement
 (11-Jan-10 aph) commented out all lines calling GLITCH - can not find in package
                 most likely in one of Eli rotenbergs' combined utility files
 (11-Jan-10 aph) isolated as a separate file from LOADSPEM.PRO

(See c:\axis2000\rd_spem.pro)


READSTRBIG

[Previous Routine] [Next Routine] [List of Routines]
NAME: 
	READSTRBIG 
 
LAST CHANGED: ----------------------------------- 14-nov-00 
 
PURPOSE: 
	This function reads all data up to the next end of line character 
 from an identified logical unit into a string of arbitrary size. 
 It is equivalent to readf,unit,s where s is a string 
 The function gets around 32K buffer limit to load lines up to 64K long 
 It also recognizes  multi-OP-system end of line characters 
 10 (unix), 1010 (?), 1013 (DOS), 13 (mac), 1313 (mac,text) 
 
CATEGORY: 
	STAND ALONE: utility (als) 
 
CALLING SEQUENCE: 
	Result = READSTRBIG(unit) 
 
CALLED FROM AXIS: 
	->ALS file read in routines 
 
INPUTS: 
	UNIT - logical unit to read 
 
KEYWORDS: 
	BYTE - read in treated as byte-coded characters 
 
OUTPUTS: 
	The result is a string. If not successfully read, a blank string is returned. 
 
COMMON BLOCKS: none 
 
MODIFICATION HISTORY: 
 (xx-mmm-96  er) created 
 (27-feb-00 aph) AXIS standard documentation 
 (14-nov-00 cgz) Replaced call of CHR function by explicit STRING(BYTE())

(See c:\axis2000\readstringbig.pro)


READWIN.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		READWIN.PRO

LAST CHANGED: ----------------------------------- 21-Jul-14

 PURPOSE:
	This function reads contents of WNUM graphics window
 into a bytscl array

 CATEGORY: graphics utility; standalone

 CALLING SEQUENCE:
	RESULT = READWIN, WNUM

 INPUTS:
 WNUM	number of window to read (optional; current window is default)
    wnum is specified either as number
    or as a 5-element array [num, x0, y0, xwid, ywid] for a subset of the window

 KEYWORDS: none

 OUTPUTS: none

 COMMON BLOCKS: none

 MODIFICATION HISTORY:
 (29-dec-00 aph) isolated from window.pro; AXIS standard header added
 (21-Jul-14 aph) corrected header

(See c:\axis2000\readwin.pro)


READ_AADATA.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		READ_AADATA.PRO

LAST CHANGED: ----------------------------------- 	19-Jul-10

 PURPOSE:
	This function reads the data from a file  containing
 an amino acid spectrum, name, and chemical composition

 CATEGORY:
	Utility; part of XSpecSim, spectral simulator package

 CALLING SEQUENCE:
	Result = read_AAData (file=file, filter=filter, letter=letter, engdat=engdat, comp=comp)

 INPUTS: none

 KEYWORDS:
	FILE	file name
	FILTER	extension filter
	LETTER	element of interest
	ENDGAT	UNDEFINED AND UNUSED
	COMP	composition in terhms of numbers of H,C,N,O,S,P

 OUTPUTS:

COMMON BLOCKS:
	XSpecSim_Com		X-SpecSim common block


 MODIFICATION HISTORY:
 (28-feb-07 jso) first version
 (18-Jul-10 aph) AXIS standard header added;
                 axis_com and XSpecSim_com added

(See c:\axis2000\read_aadata.pro)


READ_AA_HEADER.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		READ_AA_HEADER.PRO

LAST CHANGED: ----------------------------------- 	19-Jul-10

 PURPOSE:
	This function reads the header for a list of reference spectra datafiles

 CATEGORY:
	Utility; part of XSpecSim, spectral simulator package

 CALLING SEQUENCE:
	Result = READ_AA_HEADER(FILE=FILE)

 INPUTS: none

 KEYWORDS:
	FILE	file name

 OUTPUTS: none

COMMON BLOCKS:
	@XSpecSim_Com		X-SpecSim common block


 MODIFICATION HISTORY:
 (28-feb-07 jso) first version
 (18-Jul-10 aph) AXIS standard header added; XSpecSim_com added

(See c:\axis2000\read_aa_header.pro)


READ_ALL.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
			READ_ALL.PRO

LAST CHANGED: ----------------------------------- 22-Feb-06 (aph)

 PURPOSE:
   This function reads ion-ion correlation data from Time-of-Flight measurements
 performed and written by pTA program (C++, Neville)

 CATEGORY:
	utility; stand-alone or used through axis2000

 CALLING SEQUENCE:
 for functions:
	Result = ReadAll (file=file, pipico=pipico, axis_on=axis_on, silent=silent, energy=energy)

 INPUTS: none obligatory

 KEYWORDS:
 FILE		filename
 PIPICO  	plot PIPICO to check quality
 AXIS_ON   if set, called from aXis2000
 SILENT	d not prompt for parameters
 ENERGY	energy of all file

 OUTPUTS:
	Result is an aXis2000 format image of the PEPIPICO signal
 based on user-selected binning parameters

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

 MODIFICATION HISTORY:
 (14-feb-04 aph) first version
 (21-feb-04 aph) adapt for auto use in all-sequence conversion
 (22-feb-06 aph) correct to use long's for large data sets
 (21-Jul-14 aph) corrected header

(See c:\axis2000\read_all.pro)


READ_ALS

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		READ_ALS

LAST CHANGED: ----------------------------------- 	03-Feb-11

 PURPOSE:
	This function reads a Beamline 7 STXM image from a text file (*,im*, *,nrm)
 the image size, energy, dwell information is read from (*,dat)
 NB different formats were used for (*.dat) at various times

 CATEGORY:
	Image display.

 CALLING SEQUENCE:
	Result = READ_ALS, FILE,  PLOT=pl, DEGLITCH=dgl, FILTER=fltr, _extra=e

 INPUTS:
 	FILE		name of ALS BL 7 image file

 KEYWORDS:
	PLOT		plot
	DEGLITCH	remove glitch points
	FILTER		extension

 OUTPUTS: axis standard file

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks


 MODIFICATION HISTORY:
 (27-may-97 aph) adapted from READ_IMG.PRO (Stefano code  of Jan97)
 ( 7-Aug-97 aph) separate file  (aph 9-oct-97 control color locally)
 ( 9-dec-97 aph) (16-feb-98) - cosmetics
 ( 3-mar-98 aph) non-square data; read in photon energy, dwell - store in SD
 ( 6-jun-98 aph) add identifier to y label indicating ALS source
 (14-jun-98 aph) axis_com
 (28-jul-98 aph) dwell format
 (07-Aug-98 aph) extension in label
 ( 7-jul-99 aph) FREE_LUN as well as close !
 (26-mar-00 aph) extend energy format for > 1 keV
 (26-sep-00 aph) add E to 2d structure
 (15-nov-00 cgz) Replaced call of NCOLS function by explicit (SIZE(var))(1)
 (15-nov-00 cgz) Replaced call of NROWS function by explicit (SIZE(var))(2)
 (03-Feb-11 aph) AXIS standard header added

(See c:\axis2000\read_als.pro)


READ_APS_XRF_MAPS.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		READ_APS_XRF_MAPS.PRO

LAST CHANGED: ----------------------------------- 	21-Jun-2010

 PURPOSE:
	This function reads APS XRF maps from ascii files

 CATEGORY:
	captive to aXis2000 (only works properly in modal mode
	data read in from aXis200:  read~images~XRF~APS

 CALLING SEQUENCE:
	Result = READ_APS_XRF_IMG(file=file, filter=filter, map_num=map_num, normalize=normalize, $
                      group=group, store=store, silent=silent, verbose = verbose)

 KEYWORDS:
	FILE:  name of file (*.pgm)
	FILTER: extension (default is '*.pgm')
	GROUP: group_ID of parent
	NORMALIZE: if set, modify intensities to standard ring current (value of normalize parameter
	SILENT: if set, do not print tracking comments
	STORE: if set, write *.axb (aXis2000 format) binary file of image
	TYPE:   data source (currently set up for APS or CLS SGM)
	VERBOSE:  if set print all of the header

 OUTPUTS:
	returns one or more maps into aXis2000 buffers using xrm_map_selector widget

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

 MODIFICATION HISTORY:
 (21-Jun-10 aph) first version

(See c:\axis2000\read_aps_xrf_maps.pro)


READ_ASCII_IMG.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		READ_ASCII_IMG.PRO

LAST CHANGED: ----------------------------------- 	12-Jun-10

 PURPOSE:
	This function reads ascii (x,y) arrays into axis2000 format images

 CATEGORY:
	data read. can execute outside of aXis2000

 CALLING SEQUENCE:
	Result = READ_ASCII_IMG(file=file, filter=filter, normalize=normalize, $
                 store=store, silent=silent, group = group)

 INPUTS:

 KEYWORDS:
	FILE:  name of file
	FILTER: extension (default is '*.txt')
	GROUP:  grou_ID of parent if called from aXis2000
	NORMALIZE: if set, modify intensities to standard ring current (value of normalize parameter
	STORE: if set, write *.axb (aXis2000 format) binary file of image
	SILENT: if set, do not print tracking comments

 OUTPUTS:
	No explicit outputs.

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

 SIDE EFFECTS: none

 RESTRICTIONS: none

 PROCEDURE:
adapted from crate_nc.pro supplied by Jurgen Thieme


 MODIFICATION HISTORY:
 (12-Jun-10 aph) first version

(See c:\axis2000\read_ascii_img.pro)


READ_AXM.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		READ_AXM.PRO

LAST CHANGED: ----------------------------------- 	31-Jul-11

 PURPOSE:
	This function reads CJJ or Zimba format mapper files (alignment data)
 into two standard 1-d aXis spectral files

 CATEGORY:
	read in .

 CALLING SEQUENCE:
 for procedures:
	ZOOM [, FACT = Fact, /INTERP, XSIZE = Xs, YSIZE = Ys, /CONTINUOUS, $
		/KEEP, ZOOM_WINDOW=Zoom_Win, /NEW_WINDOW ]
 for functions:
	Result = READ_AXM(file=file)

 INPUTS: none

 KEYWORDS:
	FILE:	filename (if not supplied, routine prompts for one, default extension *.aln)

 OUTPUTS:
	S_X	- aXis 1-d structure with x values as index and y-values as the x-shift
	S_Y	- aXis 1-d structure with x values as index and y-values as the y-shift

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

 MODIFICATION HISTORY:
 (15-Jan-99 aph) first version of AXIS-wrapper for Jacobsen read_mapper routine
 (31-Jul-11 aph) AXIS standard header added

(See c:\axis2000\read_axm.pro)


READ_BESSY_STACK.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		READ_BESSY_STACK.PRO

LAST CHANGED: ----------------------------------- 	13-Jan-15

 PURPOSE:
	This function reads a sequence of images measured with Bessy STXM (Thieme)
 and converts the set to an  aXxis2000 *.ncb format

 CATEGORY:
	data read routine. can execute outside of aXis2000

 CALLING SEQUENCE:
	Result = READ_BESSY_STACK(directory=directory, filter=filter, normalize=normalize, silent=silent, txm=txm)

 INPUTS:

 KEYWORDS:
	AXIS:	if set to 1, indicates called from aXis
	DIRECTORY:  name of directory
	FILTER: extension (default for images is '*.pgm')
	NORMALIZE: if set, modify intensities to standard ring current (value of normalize parameter
	SILENT: if set, do not print tracking comments
	TXM:  if set, data is from the Bessy TXM

 OUTPUTS:
	No explicit outputs.

 COMMON BLOCKS:
 AXIS_COM	standard set of common blocks
 STACK_PROCESS_COM
 BSIF_COM
 volume_data, image_stack

 SIDE EFFECTS: none

 RESTRICTIONS: none

 PROCEDURE:

 MODIFICATION HISTORY:
 (13-Oct-08 aph) first version
 (22-Sep-11 aph) extend to read in Bessy TXM stacks
 (29-Oct-11 aph) complete development from 22-sep-11
 (13-Jan-15 aph) adapt to take larger data sets; fix normalization

(See c:\axis2000\read_bessy_stack.pro)


READ_BESSY_STXM.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		READ_BESSY_STXM.PRO

LAST CHANGED: ----------------------------------- 	11-Oct-08

 PURPOSE:
	This function reads a single image from Bessy STXM (Thieme) and applies
 positional and size information to the displayed image

 CATEGORY:
	data read. can execute outside of aXis2000

 CALLING SEQUENCE:
	Result = READ_BESSY_STXM(file=file, filter=filter, normalize=normalize, store=store, silent=silent)

 INPUTS:

 KEYWORDS:
	FILE:  name of file (*.pgm)
	FILTER: extension (default is '*.pgm')
	NORMALIZE: if set, modify intensities to standard ring current (value of normalize parameter
	STORE: if set, write *.axb (aXis2000 format) binary file of image
	SILENT: if set, do not print tracking comments

 OUTPUTS:
	No explicit outputs.

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

 SIDE EFFECTS: none

 RESTRICTIONS: none

 PROCEDURE:
adapted from crate_nc.pro supplied by Jurgen Thieme


 MODIFICATION HISTORY:
 (11-Oct-08 aph) first version

(See c:\axis2000\read_bessy_stxm.pro)


READ_BESSY_TXM.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		READ_BESSY_TXM.PRO

LAST CHANGED: ----------------------------------- 	21-Mar-14

 PURPOSE:
	This function reads a single image from Bessy TXM; applies
 positional and size information to the displayed image; optional binning and storage

 CATEGORY:
	data read. can execute outside of aXis2000

 CALLING SEQUENCE:
	Result = READ_BESSY_TXM(file=file, filter=filter, bin-bin. normalize=normalize, store=store, silent=silent)

 INPUTS:

 KEYWORDS:
	FILE:  name of file (*.pgm)
	BIN	:   if set, integer factor by which to bin the image
	FILTER: extension (default is '*.pgm')
	NORMALIZE: if set, modify intensities to standard ring current (value of normalize parameter
	STORE: if set, write *.axb (aXis2000 format) binary file of image
	SILENT: if set, do not print tracking comments

 OUTPUTS:
	No explicit outputs.

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

 SIDE EFFECTS: none

 RESTRICTIONS: none

 MODIFICATION HISTORY:
 (20-Sep-11 aph) first version adapted from read_bessy_stxm
 (29-Oct-11 aph) pick up the baton again; fix up error in binning by adding new bin routine
 (21-mar-14 aph) add princeton_header_define to set up structure

(See c:\axis2000\read_bessy_txm.pro)


READ_BESSY_XML.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		READ_BESSY_XML.PRO

LAST CHANGED: ----------------------------------- 	11-Oct-08

 PURPOSE:
	This function reads a text file witten in XML syntax
 which provides  undulator, beamline, microscope and image parameters for Bessy STXM

 CATEGORY:
	data read routine. can execute outside of aXis2000

 CALLING SEQUENCE:
	Result = READ_BESSY_XML(file=file, filter=filter, verbose=verbose)

 INPUTS:

 KEYWORDS:
	FILE:  name of file (*.pgm)
	FILTER: extension (default is '*.xml')
	VERBOSE:  if on, print parameters

 OUTPUTS:
	retuns an IDL named structure

 COMMON BLOCKS: none

 SIDE EFFECTS: none

 RESTRICTIONS: none

 PROCEDURE:
adapted from crate_nc.pro supplied


 MODIFICATION HISTORY:
 (11-Oct-08 aph) first version; derived from read_xml.pro by Jurgen Thieme

(See c:\axis2000\read_bessy_xml.pro)


READ_BL5.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		READ_BL5.pro

LAST CHANGED: ----------------------------------- 22-Jul-14

 PURPOSE:
	This function reads ALS B 5.3 STXM data from self-defining format ascii files.
 Images, stacks and linescans have *.hdr and a set of *.xim files
 for {energies.channels.regions}
 Spectra are a single *.xsp file containing header and multi-column spectra.

 CATEGORY:
	Input / output utilty

 CALLING SEQUENCE:
	Result = READ_BL5(file, nof=nof, filter=filter, groupID=groupID, header_only=header_only, _extra=e)

 INPUTS:
 	FILE	optional file name

 KEYWORDS:
	FILTER	   user defined filter
	GROUPID		group leader (Axis_ID if called from aXis2000 and axis)
	HEADER_ONLY print header contents only
	_EXTRA		other passed through parameters

 OUTPUTS:
	structure variable; either 1d (spectra) or 2d (image)

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks
	BL5FORMAT	reference number for naming muti-element arrays of structures

 MODIFICATION HISTORY:
 (10-feb-01 aph) first version
 (22-Jul-14) fixed header format

(See c:\axis2000\read_bl5.pro)


READ_BNL.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		READ_BNL.PRO

LAST CHANGED: ----------------------------------- 	31-Jul-11

 PURPOSE:
	This function reads the old (*.nc) format image files from NSLS1, X1A STXM
 which are in a type of netCDF binary format

 It puts the image and associated information into BSIF_COMMON variables:
   image_data (the image array - possibly several planes deep for I, IO, CLOCK)
   x_normal, y_normal, rotated, x_title, y_title,
   x_dist, and y_dist

 The STXM scan data is put into "sd"
 Based on Mark Rivers stuff; Chris Jacobsen, June 1993

 CATEGORY:
	Read in .

 CALLING SEQUENCE:
 for functions:
	Result = READ_BNL(file, header_only=header_only, _extra=e)

 INPUTS:
 	FILE:  name of file

 KEYWORDS:
	HEADER_ONLY:  only rewad in header

 OUTPUTS:

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks
	BSIF_COM	common block for netCDF files


 MODIFICATION HISTORY:
 (xx-jun-93 cjj)	original version
 ( 7 -aug-97 aph)  - added type='2d'
 (27-May-97 aph) - adapted from nsls version of READ_STXM
                    to put data into ALS-style STRUCTURE
 ( 8-Mar-98 aph) - add SD to recover and use photon energy; use AXIS common
 (18-apr-98 aph) - SGU reported bug re divide by timer FIXED
 ( 6-Jun-98 aph)  - made xl label identical to that in read_als()
 (14-jun-98 aph) - axis_com
 (19-jun-98 aph) - normalise to average time so counts ~ right
 (29-jun-98 aph) - correct problem with "skew,kurtosis not defined for var=0"
 (28-jul-98 aph) - dwell format
 (25-jun-99 aph) - use ax_name to parse filename
 (01-apr-00 aph) - extend size of E-display format
 (20-may-00 aph) - do not prompt for name if filename given
 (31-Jul-11 aph) AXIS standard header added

(See c:\axis2000\read_bnl.pro)


READ_BSP.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		READ_BSP.PRO

LAST CHANGED: ----------------------------------- 	31-Jul-11

 PURPOSE:
	This function reads in old versions of spectra from NSLS1, X1A STXM

 It puts the spectrum and associated information
 into BSIF_COMMON variables:
   image_data (the array which holds the image - possible several
   		planes deep for I, IO, CLOCK)
   x_normal, y_normal, rotated, x_title, y_title,
   x_dist, and y_dist

 The STXM scan data is put into "sd" BUT ONLY IF
 (??????????  INCOMPLETE COMMENT) - probably the 'SD' block was dropped for aXis2000
 I wonder if the lack of this has something to do with flakiness of the "*.nc" format processing (loos of E)
 (26-jul-11 aph)

 CATEGORY:
	data read in

 CALLING SEQUENCE:
 for functions:
	Result = READ_BSP(file, sd, header_only=header_only, DEFPATH=DefPath, _extra=e)

 INPUTS:
 	FILE	filename

 KEYWORDS:
	HEADER_ONLY	if set, reads header only

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks
	BSIF_COM	netCDF common

 MODIFICATION HISTORY:
 (18-Jun-97 aph)  Modified for SPECTRAL.PRO
 (14-jun-98 aph) bsif_com
 (28-jan-99 aph) add dwell info
 (25-jun-99 aph) fileshort only
 (31-Jul-11 aph) AXIS standard header added
   added axis_com  common block (was not in prior to 26-jul-11) - DEFPATH removed
   changed init_sd  to init_sd  - they are the same

(See c:\axis2000\read_bsp.pro)


READ_CLS_SGM_XRF.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		READ_CLS_SGM_XRF.PRO

LAST CHANGED: ----------------------------------- 	21-Jun-2010

 PURPOSE:
	This function reads CLS SGM XRF-excitation maps from ascii files

 CATEGORY:
	stand alone - . can execute outside of aXis2000
	data read in from aXis200 as read~XRF~(APS, CLS-SGM)

 CALLING SEQUENCE:
	Result = READ_CLS_SGM_XRF(file=file, filter=filter, map_num=map_num, normalize=normalize, $
                      group=group, store=store, silent=silent, verbose = verbose, $
                      type = type, XRF_max=XRF_max, XRF_bin = XRF_bin)

 KEYWORDS:
	FILE:  name of file (*.pgm)
	FILTER: extension (default is '*.pgm')
	GROUP: group_ID of parent
	NORMALIZE: if set, modify intensities to standard ring current (value of normalize parameter
	SILENT: if set, do not print tracking comments
	STORE: if set, write *.axb (aXis2000 format) binary file of image
	VERBOSE:  if set print all of the header
	XRF_bin:  factor to bin XRF spectra
	XRF_max:  upper energy of XRf spectrum to keep

 OUTPUTS:
	returns maps as a standard aXis2000 2d array with defined x, and y axes, etc

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

 MODIFICATION HISTORY:
 (21-Jun-10 aph) first version

(See c:\axis2000\read_cls_sgm_xrf.pro)


READ_CRYO

[Previous Routine] [Next Routine] [List of Routines]
 
 Copyright (c) 1999, Adam Hitchcock  All rights reserved. 
	Unauthorized reproduction prohibited. 
 
 NAME: 
	READ_CRYO 
 
 PURPOSE: 
	This function reads a cryo-STXM image file, converts it to NetCDF format, then reads that file into 
   the standard 2d structure used internally in AXIS (ALS format) 
 
 CATEGORY: 
	Data analysis / conversion: 
 
 CALLING SEQUENCE: 
 
	Result = READ_CRYO() 
 
 INPUTS: 
 
 KEYWORD PARAMETERS: 
	FILE:  provides filename and thus pickfile dialog not launched (/silent) 
 
 OUTPUTS: 
	RESULT is a 2d image in AXIS 2d data structure 
   s = {t:'2d', x:x, y:y, d:d, xl:x_label, yl: y_label, dl: data_label} 
 
 
 COMMON BLOCKS: 
	@axis_com 
 
 
 PROCEDURE: 
	uses cryo_to_stxm routine to convert to *.nc, then uses read_bnl routine to read into axis 
 
 EXAMPLE: 

	Can be used as stand-alone (in which case a structure is returned 
	 or as part of AXIS widget. 
 
		tmp = read_cryo() 
 
 MODIFICATION HISTORY: 
 (15-sep-99) Written by: Adam Hitchcock - based on Jacobsen cryo_to_stxm routine. 
 (18-sep-99 aph) auto-correct *.nc file for no NaN or inf data 
 (17-Oct-99 aph) improve header. change name to READ_CRYO (was rd_cryo) 

(See c:\axis2000\read_cryo.pro)


READ_CSV.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		READ_CSV.PRO

LAST CHANGED: ----------------------------------- 	31-Jul-11

 PURPOSE:
	This procedure reads comma separated variable format files (*.csv)
 as written by Excel; closely related to 'mapper' type files
 and places te result into a user defined array variable, 'items'

 CATEGORY:
	Read in

 CALLING SEQUENCE:
 for functions:
	Result = READ_CSV(filename, items, help=help, quiet=quiet, string=string)

 INPUTS:
 	FILENAME    the name of the mapper file to be read
	ITEMS		output of ITEMS that were in the file

 KEYWORDS:
	HELP		prints help instructions
	QUIET		do not print values as they are read-in
	ALL_STRING	if set, report all variables as strings

 OUTPUTS:
	items as 2D array.  You can also do x=items(0,*) and y=items(1,*)

 COMMON BLOCKS:none

 MODIFICATION HISTORY:
 (01-apr-99 cjj) work with 2d array
 (19-jul-00 cjj) Switch to using strsplit() to allow commas or spaces as delimiters
 (31-Jul-11 aph) AXIS standard header added;  string keyword replaced by all_string

(See c:\axis2000\read_csv.pro)


READ_ENERGIES.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		READ_ENERGIES.PRO

LAST CHANGED: ----------------------------------- 	19-Jul-10

 PURPOSE:
	This function reads a text file to extract an array of energies (in eV) and returns the array

 CATEGORY:
	Utility; part of XSpecSim , spectral simulator package

 CALLING SEQUENCE:
	Result = READ_ENERGIES(FILE=FILE, FILTER=FILTER)

 INPUTS: none

 KEYWORDS:
	FILE	file name
	FILTER	filter for extension

 OUTPUTS: none

COMMON BLOCKS:
	@XSpecSim_Com		X-SpecSim common block


 MODIFICATION HISTORY:
 (28-feb-07 jso) first version
 (18-Jul-10 aph) AXIS standard header added; XSpecSim_com added

(See c:\axis2000\read_energies.pro)


READ_FILEINFO_P3B

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		READ_FileInfo_P3B

LAST CHANGED: ----------------------------------- 	20-Jan-07

 PURPOSE:
	This procedure reads all the parameters from ALS PEEM3 data file

 CATEGORY:
	utility

 CALLING SEQUENCE:
	Result =  ReadFileInfo_P3B, FileName, PIXEL_TYPE = pixtype, $
                    IMAGE_DIMENSIONS = dims, IMAGE_NUMBER = nframes

 INPUTS:
	Filename	name of file (ext = '*.p3b')

 KEYWORDS:
	PIXEL_TYPE  IDL data type number (integer, float, long, etc)
	IMAGE_DIMENSIONS size of image (nx, ny)
	IMAGE_NUMBER 	number in a stack

 OUTPUTS: adds tags to data file

 COMMON BLOCKS: none


 MODIFICATION HISTORY:
 (20-Jan-07 aph) extracted from filetype_p3b.pro (20-jan-07 version of A. Scholl)

(See c:\axis2000\readfileinfo_p3b.pro)


READ_H5_PTYCHO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		READ_H5_PTYCHO

LAST CHANGED: ----------------------------------- 	15-Jan-2013

 PURPOSE:
	This function reads content of *.pt  pytography results file
 using the IDL H5_browser (post IDL 6.0)

 CATEGORY:
	data read-in; operates stand alone or in aXi2000

 CALLING SEQUENCE:
	Result = READ_H5_PTYCHO(file=file,  energy = energy, dwell = dwell, pix_size = pix_size)

 INPUTS: keyword only

 KEYWORDS:
	AXIS	indicates called from axis
	DWELL	dwell time of measurement
	ENERGY 	energy of image
	FILE	name of file
	PIX_SIZE	pixel size of ptycograph

 OUTPUTS:
	Returns an aXis format image (for the extracted STXM file)

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

 MODIFICATION HISTORY:
 (28-nov-12 aph) first version as a script for only STXM_image
 (04-Dec-12 aph) AXIS standard header added
 (08-Dec-12 aph) use ptycho_select to access all items
 (15-Jan-13 aph) neaten up

(See c:\axis2000\read_h5_ptycho.pro)


READ_H5_SSRF

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		READ_H5_SSRF

LAST CHANGED: ----------------------------------- 	14-Jan-13

 PURPOSE:
	This function reads content of *.pt  pytography results file
 using the IDL H5_browser (post IDL 6.0)

 CATEGORY:
	data read-in; operates stand alone or in aXi2000

 CALLING SEQUENCE:
	Result = READ_H5_PTYCHO(file=file,  energy = energy, dwell = dwell, pix_size = pix_size)

 INPUTS: keyword only

 KEYWORDS:
	AXIS	indicates called from axis
	DWELL	dwell time of measurement
	ENERGY 	energy of image
	FILE	name of file
	PIX_SIZE	pixel size of ptycograph

 OUTPUTS:
	Returns an aXis format image (for the extracted STXM file)

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

 MODIFICATION HISTORY:
 (14-Jan-13 aph) adapt READ_H5_PTYCHO to read SSRC (Shanghai) hd5 data

(See c:\axis2000\read_h5_ssrf.pro)


READ_IMG

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		READ_IMG

LAST CHANGED: ----------------------------------- 	30-Aug-2013

 PURPOSE:
	This function reads in early ALS PEEM data

 CATEGORY:
	read in early ALS PEEM data (PRISM - Brian Tonner's machine).

 CALLING SEQUENCE:
	Result = READ_IMG (file, HSIZE=hs)

 INPUTS:
 	FILE	name of file

 KEYWORDS:
	hsize		SIZE OF IMAGE

 COMMON BLOCKS: none

 MODIFICATION HISTORY:
Import Data Translation .IMG file format ( PRISM expt )
 (11-nov-00 cgz) migrated from IO.PRO
 (30-Aug-13 aph) AXIS standard header added

(See c:\axis2000\read_img.pro)


READ_LOX

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		READ_LOX

LAST CHANGED: ----------------------------------- 20-Jul-10 (aph)

 PURPOSE:
	This function reads Lox format data files used in CLS CaPeRS PEEM.
 Spectra, images, stacks and linescans have *.lox and a set of associated files
 Image and image sequences are 16-bit TIF format, and can have associated saved signals.
 Spectra are a *#.xsp file for each region (#) containing multi-column spectra.

 CATEGORY:
	Input / output utilty; stand alone or from axis2000

 CALLING SEQUENCE:
	Result = READ_LOX(file=file, filter=filter, channel = channel, region = region, verbose=verbose, $
             group=group, header_only=header_only, map=map, one_image, _extra=e)

 INPUTS:
 	FILE	optional file name

 KEYWORDS:
	FILE		name of file (if not given, use pickfile2 to obtain filename
	FILTER	   	user defined filter
	CHANNEL		preselected data channel
	MULTI		read all channels
	REGION		preselected region
	ALL_REGIONS read in all regions
	VERBOSE		print out details of parsing structure (testing)
	GROUP		group leader (Axis_ID if called from aXis2000 and axis)
	TYPE		 extract and return header contents only
	MAP			treat NEXAFS Image Scan as a set of 2 images to derive OD difference as a map
   ONE_IMAGE	if defined, index of image to be read
	_EXTRA		other passed through parameters

 OUTPUTS:
	structure variable; either 1d (spectra) or 2d (image, linescan) or 3d (stack, as *.ncb)

 COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks
	@BSIF_COM	stack common
	VOLUME_DATA	stack data set
	LOX_COM		common for LOX read in
	@stack_process_com	common for stack_process ()NB used to be analcom - ONLY CHANGED 29-Jul-09)

 MODIFICATION HISTORY:
 (16-Oct-05 aph)  first adapted from read_sdf (Aug-05 version)
        CAUTION  - previously a procedure with this name (READ_LOX) only read spectra
				  - that routine was re-named READ_LOX_SPECTRA
                 - calls from axis_c, tif_convert were changed - other uses may exist !!
 (29-Oct-05 aph) - adapt for stack read in (partial)
 (13-nov-05 aph) - finsih stack read in ; channels, spectrum
 (16-nov-05 aph) - accomodate binning
 (18-mar-06 aph) only print binning of camera in verbose mode; fix channel read in
 (05-jun-06 aph) error of IDL5.2 reading Lox files solved - line 122 - need to use t(0) (SCALAR) not t (ARRAY)
 (13-aug-06 jso) adapt to new format of Lox files
 (07-jan-07 aph) check if DarkImageSubtracted="True", if so, set lox.dark=0
 (15-jan-07 aph) correct stack read to give correct size
 (11-jun-08 aph) fix first image mis-match array dimension problem - KLUGE  on hbin, vbin !!!
 (31-Jul-09 aph) add stack_process_com to see if it solves, ' no eV error ' (since Jun-08)
                 add sorting data types by ScanType label ('XPS' or 'Energy'-> NEXAFS or SEEM (??) )
				  include Ring current normalization (switched)
 (03-Aug-09 aph) remove bail on read-error so a Lox structure is passed back
 (20-Jul-10 aph) get lox.energy to read correctly; dark current to subtract correctly 

(See c:\axis2000\read_lox.pro)


READ_LOX_SPECTRA

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		READ_LOX_SPECTRA

LAST CHANGED: ----------------------------------- 08-jan-07 (aph)

 PURPOSE:
	This function reada a Lox spectral file into an aXis 1-d structure
 or into a multi-column array

 CATEGORY: spectral input
 called from READ~spectra~Lox

 CALLING SEQUENCE:
	Result = READ_LOX_SPECTRA(file=file, filter=filter, NOF=nof,  multi = multi, $
            channel=channel, region = region, verbose = verbose, _extra=e)

 INPUTS:
	All input parameters are passed as keywords.

 KEYWORDS:
	FILE:			filename
	FILTER:			optional user selectable filter (default = '*.lox'
	NOF:			no filter (*.*)
	MULTI 			read all spectra in multi-column file
	VERBOSE:		if set to 1; print input file as it is read
	CHANNEL			read in specific channel of a multi-column file
	REGION			read-in from file associated with a specific region (now = PEEM-channel)
	SILENT			if set, no feedback in print or axis_log
	_EXTRA_E:		forward other parameters to any programs this one calls

 OUTPUTS: returns a structure containing spectrum, unless MULTI keyword is set

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

 MODIFICATION HISTORY:
 (17-may-04 aph) adapt from pem_load fle
 (01-jun-04 aph) adapt for stack files without 
 (30-jan-05 aph) add sorting to make compatible with reverse scanning
 (14-jun-05 aph) correct spectral read in to get correct number of points
 (16-jun-05 aph) add kluge to handle blank line in jun-05 lox_spectra format
 (16-oct-05 aph) CHANGED NAME (from Read_lox  to Read_lox_spectra)
             set up to do multi-column reading for regions
 (13-Nov-05 aph) read in mesh or specific region signal
 (18-mar-06 aph) activate channel parameter
 (12-jun-06 jso) corrected to be compatible with IDL5.2
 (07-aug-06 aph) merged with main code
 (08-jan-07 aph) define channel, when it is not defined by keyword

(See c:\axis2000\read_lox_spectra.pro)


READ_MAPPER

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		READ_MAPPER

LAST CHANGED: ----------------------------------- 	27-Jul-11

 PURPOSE:
	This procedure extracts the data from Mapper files (files written by CJJJ's stack alignmnent)
  and stores it in float arrays x and y

 CATEGORY:
	read in

 CALLING SEQUENCE:
	READ_MAPPER, filename, x, y, help=help, quiet=quiet

 INPUTS:
 	FILENAME	name of file

 KEYWORDS:
	HELP	list parameters
	QUIET	trun off print comments

 FUNCTIONS
	Read_mapper_firstnum	strips out all stuff before a comma

 MAPPER file format is  (this is output oz Zimba auto-align)

 ! X-Y Pixel shifts after alignment
 ! Full images used
 ! Aligned to preceding images
 ! Correlation maximum determined by 3-pt quadratic fit
 ! No edge enhancement
 ! Maximum allowed shift of 10 pixels
 ! Shift threshold of 0.01 pixels
 ! Edgegauss smoothing of 3 pixels
 ALIGN(-1,-1,0,0,10,0.01,3,0,0,0,0,-1
 PLOTIT(4
 532_110326020_a000.xim  278.00   0.80,0.0000,0.0000
 532_110326020_a001.xim  285.30   0.80,-0.1701,-1.0884
 532_110326020_a002.xim  292.40   0.80,-0.0824,-1.3861
 532_110326020_a003.xim  300.20   0.80,0.0361,-1.5492

 OUTPUTS:
		X  x-values
		Y  y-values (can be multi-dimensional)

 COMMON BLOCKS: none

 MODIFICATION HISTORY:
 (20-Nov-77 cjj)  rewritten from Rivers stuff
 (26-Jul-11 aph) AXIS standard header added

(See c:\axis2000\read_mapper.pro)


READ_MRC_FILE.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		READ_MRC_FILE.PRO

LAST CHANGED: ----------------------------------- 22-Jul-14 (aph)

 PURPOSE:
	This procedure reads a whole stack (3d (x,y,z) array) from a *.MRC binary file
   details of the mrc format can be found at:
	http://bio3d.colorado.edu/imod/doc/mrc_format.txt
	http://ami.scripps.edu/prtl_data/mrc_specification.htm

 CATEGORY:
	stack processing

 CALLING SEQUENCE:
	READ_MRC_FILE, FILE

 INPUTS:
 	FILE	name of the input file

 KEYWORDS: none

 OUTPUTS: none

 COMMON BLOCKS:
 AXIS_COM	standard set of common blocks
 STACK_PROCESS_COM
 BSIF_COM
 volume_data, image_stack

 SIDE EFFECTS:


 RESTRICTIONS: none

 MODIFICATION HISTORY:
 (12-Jun-06 gaj) first version based on WRITE_MRC_FILE and STACK_RB
 (13-Jun-06 gaj) corected some variable names and bugs
 (30-jul-09 aph) changed analcom to stack_process_com (update to stack_process)
 (22-Jul-14 aph) corrected header

(See c:\axis2000\read_mrc_file.pro)


READ_NEXUS

[Previous Routine] [Next Routine] [List of Routines]
NAME:
 READ_NEXUS

LAST CHANGED: ----------------------------------- 31-Jul-15

PURPOSE:
 This set of procedures is a widget to read in files
 in NXstxm, the HDF5 NeXus file format developed for STXM.
 The widget uses read_nexus to perform the file input.
 For more info on the NeXus file format, see www.nexusformat.org

 CATEGORY:
 Input / output utilty; stand alone or from ax_nexus / axis2000

 CALLING SEQUENCE:
 Result = READ_NEXUS(file,[ filter=filter, channel = channel, region = region, verbose=verbose, $
             group=group, header_only=header_only, no_display=no_display, no_Save=no_save, $
             one_image=one_image, _extra=e])

 INPUTS: none required

 KEYWORDS:
   FILE    optional file name
 FILTER     user defined filter
 CHANNEL   preselected data channel
 REGION    preselected region
 VERBOSE   print out details of parsing structure (testing)
 GROUP   group leader (Axis_ID if called from aXis2000 and axis)
 HEADER_ONLY extract and return header contents only
 NO_DISPLAY  if set, do not store or display in curbuf
   NO_SAVE   if set, do not save output
   SILENT    do not print any tracking information
   ONE_IMAGE if defined, index of image to be read (first image is number 1)
 _EXTRA    other passed through parameters

 OUTPUTS:
 structure variable; either 1d (spectra) or 2d (image, linescan) or 3d (stack, as *.ncb)

 COMMON BLOCKS:
 STACK_PROCESS_COM common for stack_process
 AXIS_COM  standard set of common blocks
 BSIF_COM  stack common
 VOLUME_DATA stack data set
 NEXUS_COM   common for NeXus read in


MODIFICATION HISTORY:
 (27-Apr-15 bw )  First version written using read_sdf.pro as a template
 (13-Jul-15 aph) first integration into axis2000 (02-July-15 version)
 (22-Jul-15 aph) add restriction to post-8.0 IDL versions
 (31-Jul-15 bw ) modified to use IDL6.3 routines; stack rread-in corrected

(See c:\axis2000\read_nexus.pro)


READ_NSRRC_PEEM.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	READ_NSRRC_PEEM.PRO

LAST CHANGED: ----------------------------------- 27-Aug-13

PURPOSE:
	This reads an NSRCC PEEM stack from an NSRRC data file (extension: *,pem)
 and returns it as an aXis2000 format stack binary file (*.cb)
 with options to bin

CATEGORY:
	STAND ALONE: utilities

CALLING SEQUENCE:
	Result = READ_NSRRC_PEEM(file, BIN=BIN, GROUP=GROUP, NOFILTER=nof, VERBOSE=VERBOSE, _extra=e )

INPUTS:
	FILE - NSRRC PEEM image or stack (multi-image) data file

KEYWORD PARAMETERS:
	FILE	 file name
	GROUP	 name of group calling this program
	NOFILTER - use *.* as filter
 	VERBOSE - if set, print additional documentation
	_EXTRA - pass on other call line parameters

 COMMON BLOCKS:
   AXIS_COM 			set of common blocks for AXIS
	BSIF_COMMON 		for output stack parameters
	NSRRC_SPEM_COM   	parameters specific to NSRRC SPEM read-in
	stack_process_com   for output stack parameters
	VOLUME_DATA			output stack

MODIFICATION HISTORY:
 (26-Aug-13 aph) first version (start from read_nsrrc_spem.pro (NSRRC SPEM)

(See c:\axis2000\read_nsrrc_peem.pro)


READ_NSRRC_SPEM.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	READ_NSRRC_SPEM.PRO

LAST CHANGED: ----------------------------------- 27-Jul-15

PURPOSE:
	This reads SPEM data from an NSRRC data file (extension: *,pic, *.ric)
 and returns it as an aXis2000 format structure

CATEGORY:
	STAND ALONE: utilities

CALLING SEQUENCE:
	Result = RD_SPEM(file, NOFILTER=nof, _extra=e )

INPUTS:
	FILE - SPEM data file

KEYWORD PARAMETERS:
	FILE	 file name
	GROUP	 name o fgroup calling this program
	NOFILTER - use *.* as filter
 	VERBOSE - if set, print additional documentation
	_EXTRA - pass on other call line parameters

 COMMON BLOCKS:
   AXIS_COM 			set of common blocks for AXIS
	BSIF_COMMON 		for output stack parameters
	NSRRC_SPEM_COM   	parameters specific to NSRRC SPEM read-in
	stack_process_com   for output stack parameters
	VOLUME_DATA			output stack

MODIFICATION HISTORY:
 (16-Jul-13 aph) first version (start from rd_spem.pro (ALS SPEM)
 (19-Jul-13 aph) write analyser data as a stack
 (22-Jul-13 aph) make work with read_nsrrc_spem_gui
 (28-Jul-13 aph) leave file name definition and checking for write_ncb
 (27-Jul-15 aph) change ( ) to [ ] for defined ranges

(See c:\axis2000\read_nsrrc_spem.pro)


READ_NSRRC_SPEM_GUI

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		READ_NSRRC_SPEM_GUI

LAST CHANGED: ----------------------------------- 	22-Jul-2013

 PURPOSE:
	This procedure is a widget to select an NSRRC SPEM data file
 It allows user to input relevant parameters. Output is the sample current
 image (returned as aXis2000 2d datafile) and
 the photoelectron 16-channel stack, which is stored on disk
 if extension is '*.ric'- stepper motor scan (r = rough)
 if extension is '*.pic' - piezo scan (p = piezo)

 CATEGORY:
	Data read-in

 CALLING SEQUENCE:
	RESULT = READ_NSRRC_SPEM_GUI()

 INPUTS: NONE

 KEYWORDS:
	FILE	initial path & file information
   SILENT

 OUTPUTS:
	No explicit outputs.   A new window is created if necessary

 COMMON BLOCKS:
	AXIS_COM		 standard set of common blocks
	NSRRC_SPEM_COM   parameters specific to NSRRC SPEM read-in

 MODIFICATION HISTORY:
 (22-Jul-13 aph) first version

(See c:\axis2000\read_nsrrc_spem_gui.pro)


READ_P3B

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		READ_P3B

LAST CHANGED: ----------------------------------- 	12-Sep-07

 PURPOSE:
	This function reads a ALS PEEM3 image
 (IDL windows binary with a structure defining microscope parameters)

 CATEGORY:
	utility

 CALLING SEQUENCE:
	Result =  Read_P3B, Filename, TAGS = tags, NTAGS = numtags

 INPUTS:
	Filename	name of file (ext = '*.p3b')

 KEYWORDS:
	TAGS	predefined structure which extracts from embeded parameter structure
	NTAGS	number of tags in predefined variable

 OUTPUTS:
	RESULT	2-d array with data, and TAGS structure, if requested

 COMMON BLOCKS: none


 MODIFICATION HISTORY:
 (20-Jan-07 aph) extracted from filetype_p3b.pro (20-jan-07 version of A. Scholl)
 (12-sep-07 aph) updated from late Jan-07 version sent by Andreas

(See c:\axis2000\read_p3b.pro)


READ_P3B_SPECTRUM

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		READ_P3B_SPECTRUM

LAST CHANGED: ----------------------------------- 	20-Jan-07

 PURPOSE:
	This function reads a ALS PEEM3 spectrum

 CATEGORY:
	utility

 CALLING SEQUENCE:
	Result =  Read_P3B_spectrum, file=file

 INPUTS: only by keyword

 KEYWORDS:
	File	name of file (ext = '*.dat')
	FLTR 	alternative data filter
	SILENT	do not give log details

 OUTPUTS:
	RESULT	1-d axis structure

 COMMON BLOCKS:
 @axis.com


 MODIFICATION HISTORY:
 (20-Jan-07 aph) first written

(See c:\axis2000\read_p3b_spectrum.pro)


READ_PEEM3

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	READ_PEEM3

LAST CHANGED: ----------------------------------- 07-Aug-08 (aph)

PURPOSE:
	This function reads in ALS PEEM3 format image and stores in
 an axis 2d structre

CATEGORY:
	STAND ALONE: utility

CALLING SEQUENCE:
	Result = READ_PEEM3([file=file, nof=nof,bin=bin, scale=scale, _extra=e])

CALLED FROM AXIS:
	Read->Images->AXIS (and in many analysis routines)

INPUTS: none. All input parameters are passed as keywords.

KEYWORDS:
	FILE 	- filename to read
	NOF   	- no nme filter
	BIN		- factor to bin by
	SCALE	- scale in nm/pixel prior to binning
	_EXTRA - passed on parameters

OUTPUTS:
	RESULT = AXIS 2d structure

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks


MODIFICATION HISTORY:
 (21-Jan-07 aph) first version
 (10-mar-07 sgu) modify for change in ring current key word (beamcurrent => ringcurrent)
 (12-mar-07 aph) generalize to either key word
 (12-sep-07 aph) allow stand alone operation; change to use Scholl faster approach (single read of image)
 (07-Aug-08 aph) remove ring current normalization if ring current less than 1 mA or absent

(See c:\axis2000\read_peem3.pro)


READ_PRINCETON

[Previous Routine] [Next Routine] [List of Routines]
 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
	SILENT:
		Flag, if set do not print feedback

 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
 (19-sep-11 aph) adapt for reading in Bessy TXM image sequences
 (29-Oct-11 aph) add silent keyword

(See c:\axis2000\read_princeton.pro)


READ_SDF

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		READ_SDF

LAST CHANGED: ----------------------------------- 12-jul-15

 PURPOSE:
	This function reads self-defining format ascii files written by "ALS 532"-class instruments
 using STXM_Control as their operating system (as of 30-Jul-09: ALS (3), CLS, SLS, Bessy, Stanford)
 Spectra, images, stacks and linescans have *.hdr and a set of *.xim files
 Images and stacks with non-square pixels are extended to have square pixels
 Image modes have separate file for each {energies.channels.regions}
 Spectra are a *#.xsp file for each region (#) containing multi-column spectra.
 Images, stacks are normalized to 400 mA ring current (N400)

 CATEGORY:
	Input / output utilty; stand alone or from ax_sdf / axis2000

 CALLING SEQUENCE:
	Result = READ_SDF(file,[ filter=filter, channel = channel, region = region, verbose=verbose, $
             group=group, header_only=header_only, no_display=no_display, no_Save=no_save, map=map, $
             no_interpolate=no_interpolate, one_image=one_image, _extra=e])

 INPUTS: none required

 KEYWORDS:
 	FILE		optional file name
	FILTER	   user defined filter
	CHANNEL		preselected data channel
	REGION		preselected region
	ALL_REGIONS read in all regions
	VERBOSE		print out details of parsing structure (testing)
	GROUP		group leader (Axis_ID if called from aXis2000 and axis)
	HEADER_ONLY extract and return header contents only
	IMAGE_NUM	2 number aray defining background and signal for maps (first image is 1)
	MAP			treat NEXAFS Image Scan as a set of 2 images to derive OD difference as a map
	NO_DISPLAY	if set, do not store or display in curbuf
	NO_INTERPOLATE  if set, do not convert rectangular to square pixels
   NO_SAVE  	if set, do not save output
   SILENT		do not print any tracking information
   ONE_IMAGE	if defined, index of image to be read (first image is number 1)
	_EXTRA		other passed through parameters

 OUTPUTS:
	structure variable; either 1d (spectra) or 2d (image, linescan) or 3d (stack, as *.ncb)

 COMMON BLOCKS:
	STACK_PROCESS_COM	common for stack_process
	AXIS_COM	standard set of common blocks
	BSIF_COM	stack common
	VOLUME_DATA	stack data set
	SDF_COM		common for SDF read in
	SDFORMAT	reference number for naming muti-element arrays of structures

 MODIFICATION HISTORY:
 (11-feb-01 aph) first version
 (23-feb-01 aph) arrays of structures implemented
 (25-feb-01 aph) option to return structure only implemented
 (27-jun-01 aph) adapt to read focus and OSA scans
 (12-jul-01 aph) enable read-in of spectral modified format
 (29-jul-01 aph) retired read_bl5 spectral read-in; new format with *.hdr is in place
               regions implemented for spectra
 (14-aug-01 aph) fixed errors found by Ivo in spectra & linescan read-in
 (17-aug-01 aph) adapt to REGIONS (kluge needed !)
 (22-aug-01 aph) stack readin (directly convert to *.ncb file)
 (09-nov-01 aph) activate all region read in for spectra
 (17-feb-02 aph) motor scan processing
 (28-feb-02 aph) ensure works for partial stacks
 (12-may-02 aph) correct header name format
 (28-may-02 aph) delete last column - set of zero's which may cause processing problems
 (11-dec-02 aph) adapt for VLM Image readin; (NB group_ID problem if run stand alone)
 (02-apr-03 aph) 'OSA focus scan' read-in
 (29-apr-03 aph) add tag  in log and axis windows to identify bad images
 (19-jun-04 aph) auto sort energies on readin of stack - NB PROBLEM with IDL sort function !!
 (22-aug-04 aph) replace 'GoTo' with  'ToGo' to avoid problem with IDL 6 throwing error on 'GoTo'
                 kluge solution to out-of-order sort
 (29-aug-04 aph) restricted sort correction to IDL 6 using !version.release check
        NB - array_equal not in pre-IDL6 ; sort still does not work correctly !
 (21-nov-04 aph) read Detector scans
 (20-feb-05 aph) add MAP function to read in a 2-image stack and take OD difference
                 add one_image finction to read one image from a stack
 (09-mar-05 aph) fix IDL 5.2 partial stack read-in problem
 (24-mar-05 aph) simplify label for 1-image read-in (filename indicates it)
 (17-jun-05 aph) channels and regions working for map and 1-image read; default region = 1
 (24-aug-05 aph) extend to 26 channels of data
 (25-aug-05 aph) add Pattern and Chart read-in
 (15-dec-05 aph) adapt to non-axis and non-interactive use (for tomography)
				  add definition of images for mapping; add keywords SILENT, NO_INTERPOLATE
				  correct error on interpolation to square pixels
 (22-Mar-06 aph) Images, stacks normalized to 400 mA ring current (N400); add chart scan read in
 (04-May-06 aph) normalize stacks image-by-image to the ring current
 (11-mar-07 aph) switch on panel to set flag to control ring current normalization
 (18-May-07 aph) correct read-in of 1-image for multi-channel data (B. Watts)
 (14-Jun-07 aph) systematically close_lun, free_lun (replaced 2 close,/all commands) to allow stack read and release
 (14-Jul-07 aph) allow transfer of stack to stack_analyze even if do not write raw stack
 (13-Oct-08 aph) convert from stack-analyze to stack_process
 (01-Feb-09 aph) add interpolation of images to recorded (x,y) values (TRIGRID and 2-pass (1d line-by-line)
 (31-Jul-09 aph) clean-up transfer from stack-analyze to stack_process
                 change sdf_normalize so it adapts to changes in norm_value
 (22-Jan-10 aph) remove print of group, axisID except when verbose is on
 (19-Feb-10 aph) add region name to label
 (16-Apr-10 aph) fix auto-read of channel & one-image for XRF stack read
 (17-Apr-10 aph) add no_display option
 (20-Apr-10 aph) fix no_display so it works
 (02-feb-11 aph) stacks with non-square pixels are converted (congrid) to square pixels
 (19-feb-11 aph) fix bad i-ring normalization in stxm_11 read-ins
 (01-Jun-11 aph) clean-up tracking
 (27-Jul-11 aph) remove old (commented out) use of read_bl5 (intermediate data format for STXM5322 in 2001)
 (31-jul-11 aph) converted map to use 1,2,3 (people) numbering instead of 0,1,2,3 (IDL)
                 so that the one_image and map image numbering protocols are the same
 (08-May-13 aph) adapt read-in to changes Russ Berg made in file format for XMCD scans
 (28-Aug-13 aph) provide default file name for stacks when read in
 (09-Nov-13 aph) sdf_lastfile, sdf_path defined in main routine; add keyword no_save
 (11-Nov-13 aph) ignore request to normalize to ring current if beam current not defined or below a threshold
 (21-Dec-13 aph) reversed change in what sdf_lastfile is - was main name; had changed to full (path, main * extension)
                which ended up having the read_sdf widget displaying full version in the name box
 (16-jun-14 aph) corrected error in Dec-13 version where sdf_lastfile was defined with the '.hdr' extension
 (21-Jul-14 aph) ensure stand alone operation works; variabilize the ring current normalization value
 (24-Oct-14 aph) modify map to deal with rectangular pixels
 (29-Nov-14 aph) introduce scan.type ='Ptycho Image Scan' images; add read_image_scan() function
 (02-Jul-15 aph) clean up feedback of ring current read-in - silent keyword replaced with
                 SDF_silent common variable
                 fix problem of slow read-in (pixel by pixel scaling !)
 (12-Jul-15 aph) corrected Pixel_Diff ==> Pix_diff (in sdf-com)

(See c:\axis2000\read_sdf.pro)


READ_STXM

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		READ_STXM

LAST CHANGED: ----------------------------------- 	28-Jul-11

 PURPOSE:
	This procedure reads in a STXM image from netCDF format (NSLS2 X1A old format)
 It puts the image and associated information
 into BSIF_COMMON variables:
   image_data (the array which holds the image - possible several
		        planes deep for I, IO, CLOCK)
   x_normal, y_normal, rotated, x_title, y_title,
   x_dist, and y_dist
 The STXM scan data is put into "sd"

 CATEGORY:
	Read in

 CALLING SEQUENCE:
 	READ_STXM, file, sd, khz,header_only=header_only, nocopybytes=nocopybytes,help=help

 INPUTS:
	FILE	filename
	SD		scan information
	KHZ		signal

 KEYWORDS:
	HEADER_ONLY
	NOCOPYBYTES
	HELP

 OUTPUTS: spectrum

 COMMON BLOCKS:
	BSIF_COM	standard set of netCDF common blocks

 MODIFICATION HISTORY:
 Based on Mark Rivers stuff; Chris Jacobsen, June 1993
 CHANGES
   Version 1.0 had the attribute "sd.operator", which in
     version 1.1 is called "operator".  Chris Jacobsen, August 27, 1993
   Version 1.2 was a change in writing - x_title and y_title were
     forced to be string arrays.  No change in reading. CJ, 02 Nov 93
   Version 1.3 added keyword /continue to message command so control
     is returned to the calling level.  Henry Chapman, 23 Jun 95.
   Changed copy_bytes to not be called if requested, and not to
     be called under Windows.  CJ, 4 Nov. 1997.
 (aph 12-jan-99) on_IOerror added to handle *.sl with extral line at end
 (aph 15-May-99) drop first line to remove glitches
 (aph 20-may-99) REMOVED last change since it gave errors if no existing image_data
 (09-sep-99 aph) change to get meaningful (x,y) scales in stacks (X_start, Y_start)
               but not implemented !!
 (28-Jul-11 aph) AXIS standard header added

(See c:\axis2000\read_stxm.pro)


READ_STXM4

[Previous Routine] [Next Routine] [List of Routines]

 NAME:
	READ_STXM4

 LAST CHANGED:                   30-Sep-01

 PURPOSE:
	This function reads a STXMIV image (spectrum) file into
   the standard 2d (1d) structure used internally in AXIS (ALS format)
	Spectra are distinguished from images by existence of only one row

 CATEGORY:
	Data analysis / conversion:

 CALLING SEQUENCE:

	Result = read_stxm4()

 INPUTS:

 KEYWORD PARAMETERS:
	FILE:  provides filename and thus pickfile dialog not launched (/silent)
 SILENT:  if set there is no logging of the conversion (for multifile processing)

 OUTPUTS:
	RESULT is EITHER:
  a 2d image in AXIS 2d data structure
   s = {t:'2d', x:x, y:y, e:energy; d:d, xl:x_label, yl: y_label, dl: data_label}
  OR a 1d spectrum in AXIS 1d data structure
   s = {t:'1d', x:x, d:d, dn:d, xl:x_label, yl: y_label, dl: data_label}

 COMMON BLOCKS:
	@axis_com
	@bsif_com

 MODIFICATION HISTORY:
 (29-jun-01 aph) develop to read new STXM IV ; modified from read_cryo
 (18-jul-01 aph) add storage of parameters in sd structure of bsif_com to properly transfer info
 (30-sep-01 aph) adapt to read NSLS STRXM-IV spectra; images in kHz

(See c:\axis2000\read_stxm4.pro)


READ_TAGS

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		READ_TAGS

LAST CHANGED: ----------------------------------- 	12-Sep-07

 PURPOSE:
	This function reads parameters from an embedded structure in the ALS PEEM3 data format

 CATEGORY:
	utility

 CALLING SEQUENCE:
	Result =  ReadTags, Unit, TAGS = Tags, NTAGS = numtags, MAXTAGS = maxtags

 INPUTS:
	Unit	open file unit number
	Tags	parameters with associated Tag names (IDL structure)
	NTags	number of tags
	MaxTags	maximum number of tags

 KEYWORDS: none

 OUTPUTS: adds tags to data file

 COMMON BLOCKS: none


 MODIFICATION HISTORY:
 (20-Jan-07 aph) extracted from filetype_p3b.pro (20-jan-07 version of A. Scholl)
 (12-sep-07 aph) update to version sent late Jan-07 (seemed the same)

(See c:\axis2000\readtags.pro)


READ_TXM_ALBA

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		READ_TXM_ALBA

LAST CHANGED: ----------------------------------- 	29 Mar 2015

 PURPOSE:
	This function reads an image or stack from an hdf format file

 CATEGORY:
	Data read-in. Stand alone or used in aXis2000

 CALLING SEQUENCE:
	Result = READ_TXM_ALBA(file=file, one=one)

 KEYWORDS:
	file	filename
	norm	ring current to which to normalize   (100 mA is initial ring current)
	one		if set, read only 1 image
   silent	if set, do not print tracing comments
	three	if set, use 3rd format established by Mistral (Mark Rosanes)

 OUTPUTS:
	axis format image if one image; *.(ncb,dat) if stack

 LIMITATIONS
	for large files, this code will not work on 32-bit architecture systems (XP)

 COMMON BLOCKS:
	axis
	stack_process_com
	volume_data
	bsif_com

 MODIFICATION HISTORY:
 (29-Mar-15 aph) first verion

(See c:\axis2000\read_txm_alba.pro)


READ_UVIEW

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	READ_UVIEW

LAST CHANGED: ----------------------------------- 01-Nov-05

PURPOSE:
	This function reads in an image from (*.dat) binary format
 of UVIEW2002 camera program from Elmitec PEEM-III
 Format is described in the UVIEW2002 manual
 returns image as an aXis2000 2d structure

CATEGORY:
	AXIS: image utility (also runs stand alone)

CALLING SEQUENCE:
	Result = READ_UVIEW(file = file, skip=skip, verbose=verbose)

CALLED FROM AXIS:
	->Image->Elmitec->{dat}

INPUTS:
	All input parameters are passed as keywords.

KEYWORDS:
 FILE  - name of file; if supplied, and exists, reads silently
 SKIP - do not read header; value of skip is image size (square)
 VERBOSE - if set, print all of file and image headers

OUTPUTS: none

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

 DETAILS
 Format of Uview binary mage files (*.dat)
 has 3 parts
  Fileheader  (104 bytes)
  Imageheader (48 bytes)
  Data (width x height x 2 bytes)

 struct UKFileHeader{		 size of(UKFileHeader):104
	20 char id[20];
	 2 short size;
	 2 short version;
	 2 short BitsPerPixel; (= 16 for Sensicam,  storage, not 12-bit acquisition)
    6  [not advetised 6-byte 'bye' for getting long to proper spot ]
        // 6 bytes inserted to get to next 8 byte boundary.
           LONGLONG seems to need to start at 8 byte boundary
  	 8 LONGLONG starttime;
	 2 short ImageWidth;
	 2 short ImageHeight;
	 2 short NrImages;
	 2 short spareShort;
	56 BYTE spare[56];
 };

 struct UKImageHeader   size of(UKImageHeader):48
  2	short size;
  2	short version;
  4    // 4 bytes inserted to get to next 8 byte boundary
  8	LONGLONG imagetime;
  4	long LEEMdata1_source;
  4	float LEEMdata1_data;
  2	short spin;
  2	short spareShort;
  4	float LEEMdata2_data;
 16	BYTE spare[16];
	};


 ISSUES
 conversion from 8 bytes to a long_long time
 imagetime =   80  34 169 121 151 231 193   1
 may be same as
 imagetime =   2041127504 (ulong)

 NEW FORMAT WITH UVIEW2002   version 1.3.10 (October 2005)
 Format of Uview binary mage files (*.dat)
 has 3 parts
  Fileheader  (104 bytes)
  Imageheader (48 bytes - if Version <5; 288 bytes if version >=5)
  Data (width x height x 2 bytes)




MODIFICATION HISTORY:
 (29-apr-02 aph) first written
 (03-may-02 aph)  get all of header using clues from Uwe
 (09-jun-04 aph) remove tag line in image time (under verbose); check that E is added
 (01-Nov-05 aph) adapt for new data format (1.3.10 - Oct-05); NB skip not working

(See c:\axis2000\read_uview.pro)


READ_XAS

[Previous Routine] [Next Routine] [List of Routines]
NAME: 
	READ_XAS 
 
LAST CHANGED: ----------------------------------- 26-sep-00 
 
PURPOSE: 
	This procedure reads a spectrum  from  'XAS' format into NetCDF format (nsls) 
 
CATEGORY: 
	STAND ALONE:  spectral processing 
 
CALLING SEQUENCE: 
 	read_xas,filename,ev,all_data,header,header_only=header_only,help=help 
 
CALLED FROM AXIS: 
	Read-spectrum-NSLS-XAS 
 
INPUTS: 
	filename 	name of file 
	ev			energy array returned to caller 
	all_data	intensity array over a number of channels returned to caller 
	header		header returned to caller 
 
KEYWORDS: 
   hader_only	= read header only 
	help		= help 
 
OUTPUTS: 
	none 
 
COMMON BLOCKS: 
	none 
 
MODIFICATION HISTORY: 
 file obtained from Jacobsen Feb-98; developed from Mancini / Hitchcock format 
 (26-sep-00 aph) AXIS standard documentation 

(See c:\axis2000\read_xas.pro)


READ_XAS_XRF_STACK

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	READ_XAS_XRF_STACK

LAST CHANGED: ----------------------------------- 01-Sep-12 (aph)

PURPOSE:
	This function reads in a set of XRF-stack files defined in a *.ssl names file
 = X-ray fluorescence spectra at each pixel of an image, over a set of additional control parameters
    such as incident X-ray energy (e.g. stacks of stacks written by STXM_control)

CATEGORY:
	STAND ALONE: read in utility; used in aXis2000

CALLING SEQUENCE:
	Result = READ_XAS_XRF_STACK([file=file, NOF=nof, verbose=verbose, group=group)

CALLED FROM AXIS:
	Read->Stacks~XAS_XRF

INPUTS: none. All input parameters are passed as keywords.

KEYWORDS:
	FILE 	filename to read
	NOF		no filter
	GROUP	group ID (aXis_ID)
	VERBOSE print log information about processing
	EXTRA 	passed on parameters

OUTPUTS:
	xas_xrf_stack - 4-D array (x,y,a,b)
     where a = fluorescence X-ray energy, b = additional control (e.g. incident photon energy) ,

COMMON BLOCKS: none

MODIFICATION HISTORY:
 (20-Feb-10 aph) first version, adapted from read_xrf_stack.pro
 (01-Sep-12 aph) fix error in group name; allow user to generate '*.ssl' file

(See c:\axis2000\read_xas_xrf_stack.pro)


READ_XRF_IMG

[Previous Routine] [Next Routine] [List of Routines]
NAME:
  READ_XRF_IMG

LAST CHANGED: -----------------------------------  13-Mar-11 (aph)

PURPOSE:
	This function reads in XRF images from Twinmic STXM; Inca (Oxford SDD) on Tescan SEM

CATEGORY:
	STAND ALONE: read in utility

CALLING SEQUENCE:
	Result = READ_XRF_IMG([file=file, NOF=nof, group=group,TYPE=TYPE, $
                  VERBOSE=VERBOSE, SILENT=SILENT, PARAM=PARAM, _extra=e])

CALLED FROM AXIS:
	Read~Images~XRF

INPUTS: none. All input parameters are passed as keywords.

KEYWORDS:
	FILE 	filename to read
	NOF 	no filter (default filter = '*.axb')
	GROUP	group leader (Axis_ID if called from aXis2000 and axis)
	SILENT  if set, do not display feedback on progress
	PARAM	if set, ask user for parameters of Twinmic image
	TYPE	type of image (sum, X_mom, Y_mom) selected automatically
	SCOPE	instrument generating data (twinmic, inca)
	VERBOSE print log information about processing
	EXTRA 	passed on parameters

OUTPUTS:
	RESULT = AXIS 1d or 2d structure

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks
	@BSIF_COM   for NSLSL *.nc

MODIFICATION HISTORY:
 (14-Dec-09 aph) adapted from AXB_LOAD
 (14-Feb-10 aph) extend to SEM Oxford INCA XRF images (*.tsv)
 (27-Mar-10 aph) add flip to inca images to make consistent with Tescan SEM images
        add trim and multi-file *.tsv read
 (25-May-10 aph) inca images read in - adapt to FIELD0001 versus FIELD001 names
 (10-mar-11 aph) auto find sub-images from INCA (*.tsv)
 (13-mar-11 aph) get multi-file read in going

(See c:\axis2000\read_xrf_img.pro)


READ_XRF_STACK

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	READ_XRF_STACK

LAST CHANGED: ----------------------------------- 01-Sep-12 (aph)

PURPOSE:
	This function reads in a single file containing X-ray fluorescence spectra
 at each pixel, written by STXM_control or by Oxford Inca (*.raw, *.rpl) files

CATEGORY:
	STAND ALONE: read in utility

CALLING SEQUENCE:
	Result = READ_XRF_STACK(file=file, NOF=nof, inca=inca, verbose=verbose, group=group, $
            no_write=no_write, silent=silent, energy = energy, one_image=one_image, extra = extra)

CALLED FROM AXIS:
	Read->Stacks

INPUTS: none. All input parameters are passed as keywords.

KEYWORDS:
	FILE 	filename to read
	NOF		no filter
	GROUP	group ID (aXis_ID)
	INCA	if set, read in inca format stacks (default is STXM_control)
	ENERGY	energy of incident excitation (eleectron or X-ray)
	one_image = index of the image from a stack that is requested to read to define E
	VERBOSE print log information about processing
	NO_WRITE  if set, do not write *.ncb (used to load image_stack when reading XAS-XRF 4d stack)
	SILENT	if set, do not display parameters
	EXTRA 	passed on parameters

OUTPUTS:
	RESULT = AXIS (*,dat, *,ncb) stack

COMMON BLOCKS: none

MODIFICATION HISTORY:
 (24-Jan-10 aph) first version
 (16-Feb-10 aph) add inca option
 (07-mar-10 aph) adapt to XRF map files written by STXM_Control from XGLabs data
 (17-apr-10 aph) desensitize to lower/upper case of structure label from read_ascii
                 make one_image read work for dimensions
 (20-apr-10 aph) add energy call parameter to pass photon energy
 (25-may-10 aph) fix no-rerad when size of xrf map does not match EI image
 (01-Aug-10 aph) add upper limit selection
 (02-Oct-10 aph) remove 'replace -ve' code;  added correction for missing last point
                 change read_Ascii method to give correct size of xrf_stack
 (10-dec-11 aph) add ax_wait hourglass for Oxford (Inca) stack read-in
 (01-Sep-12 aph) correct error on 'get_num'

(See c:\axis2000\read_xrf_stack.pro)


READ_XRF_STACK_HDF5

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	READ_XRF_STACK_HDF5

LAST CHANGED: ----------------------------------- 23-Mar-15 (aph)

PURPOSE:
	This function reads in a single file containing X-ray fluorescence spectra
 at each pixel, written by XGLabs software

CATEGORY:
	STAND ALONE: read in utility

CALLING SEQUENCE:
	Result = READ_XRF_STACK_HDF5 (file=file, NOF=nof, verbose=verbose, group=group, $
            no_write=no_write, spectr=spectr, silent=silent, energy = energy, one_image=one_image, extra = extra)

CALLED FROM AXIS:
	Read~Stacks~XRF~XGLabs~hdf5

INPUTS: none. All input parameters are passed as keywords.

KEYWORDS:
	FILE 	filename to read
	NOF		no filter
	GROUP	group ID (aXis_ID)
	ENERGY	energy of incident excitation (eleectron or X-ray)
	one_image = index of the image from a stack that is requested to read to define E
	VERBOSE print log information about processing
	NO_WRITE  if set, do not write *.ncb (used to load image_stack when reading XAS-XRF 4d stack)
	SILENT	if set, do not display parameters
	SPECT - if set, return sum of spectra as axis 1d structure
	EXTRA 	passed on parameters

OUTPUTS:
	AXIS (*,dat, *,ncb) stack; spectrum if SPECT keyword is set

COMMON BLOCKS: none

MODIFICATION HISTORY:
 (23-Jul-10 aph) first version - adapted from READ_XRF_STACK.PRO (25-May-10 version)
 (23-Mar-15 aph) corrected error when examing for another purpose

(See c:\axis2000\read_xrf_stack_hdf5.pro)


RED_A_N.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		RED_A_N.PRO

LAST CHANGED: ----------------------------------- 	30-Aug-2013

 PURPOSE:
	This function reads a Beamline 7 STXM image from a text file (*,img)
 	then reads corresponding *,nrm normalization file
	The first two lines contain image size (pixels) of (*,dat)

 CATEGORY:
	data read-in.

 CALLING SEQUENCE:
	result = READ_A_N, FILE, PLOT=pl, DEGLITCH=dgl, FILTER=fltr, _extra=e

 INPUTS:
 	FILE	name of file

 KEYWORDS:
	PLOT		if set, plot
	DEGLITCH	if set, deglitch
	FILTER		defines extension

 OUTPUTS:
	returns BL7 STXM image (1995-2000 version)

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

 MODIFICATION HISTORY:
 ;     adapted from READ_IMG.PRO (Stefano code  of Jan97)
    	Eventually - replace with JDD's integrated version
 ( 7-Aug-97 aph) separate file  (aph 9-oct-97 control color locally)
 (16-oct-97 aph)  double read
 ( 4-mar-98 aph) gets photon energy, dwell and stores in SD
 ( 7-jul-99 aph) FREE_LUN as well as close !
 (15-nov-00 cgz) Replaced call of NCOLS function by explicit (SIZE(var))(1)
 (15-nov-00 cgz) Replaced call of NROWS function by explicit (SIZE(var))(2)
 (30-Aug-13 aph) AXIS standard header added

(See c:\axis2000\read_a_n.pro)


REFRESH.PRO

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
		REFRESH.PRO

 LAST CHANGED: --------------------------------------- 28-Jul-11

 PURPOSE: This procedure refreshes plots of a sequence of buffers
 and updates the indicators of buffers overplotted

 CATEGORY:
	Image display, captive to aXis2000

 CALLING SEQUENCE:
 		REFRESH

 INPUTS:none

 KEYWORDS: none

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

 ------------ revision history -----------------
 (03-jan-99 aph) added Zmax, Zmin impact
 ( 9-jul-99 aph) separated from axis_c.pro; fixed major error so now preserves scales
 (28-sep-99 aph) adapted to non-monotonic data
 (30-oct-99 aph) enabled overplots with buffer 0 NOT first file (o = 0 turns off overplot !!)
 (16-nov-99 aph) split our ResetPlots
 (26-Dec-07 aph) remove time/date
 (28-Jul-11 aph) standard header added

(See c:\axis2000\refresh.pro)


REGION_ANALYZE

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		REGION_ANALYZE

LAST CHANGED: ----------------------------------- 	(13-apr-08) (from 03-Mar-08 (MJ)

 PURPOSE:
	This set of procedures is a widget which allows the use to group regions
 in an image set (stack) based on spectral response. It was developed for use
 with energy filtered PEEM stacks in whch the photoelectron spectrum defines the chemistry
 The user selects multiple (up to 10) spectral signals from a display of the average spectrum
 and the code identifies regions strong in each signal, and presents the reuslts to the user as a map

 CATEGORY:
	Image analysis - called from aXis2000, via Rstack_Analyse

 CALLING SEQUENCE:
 	REGION_ANALYZE

 INPUTS:
 all inputs are obtained via common form the parent code

 KEYWORDS: none

 OUTPUTS:

 CONTENTS:
	region_analyze_imgdisp 		stack image display
	region_analyze_result_disp	display resulting image (colorized)
	region_analyze_maximg		detects maximum position
	region_analyze_event		event processing codes
	region_analyze_sav_bin_test	math check
	region_analyze_def_reg		define regions (no code)
	region_analyze_remove_reg	remove last region
	region_analyze_reset_reg	remove all regions
	region_analyze_desensitive	desensitize non-useful buttons
	region_analyze_sensitive	sensitize buttons
	region_analyze_save			save the image of the identified regions


 COMMON BLOCKS:
	region_analyze_common
	axis_com
	bsif_com
	stack_process_com


 SIDE EFFECTS:
	A window is created/destroyed.

 RESTRICTIONS:
	Any known ?

 PROCEDURE:
	details where needed

 MODIFICATION HISTORY:
 (18-Aug-06 rec) code provided to APH for incorporation in axis2000
 (22-Sep-06 aph) AXIS standard header added; some docs added
 (03-Mar-08 MJ)  keyword /SCROLL in widget_base() needs X_SCROLL_SIZE
 (13-apr-08 aph) turn on pre-set window size (X_Scroll_size, Y_Scroll_size) only for non-Windows
 (30-jul-09 aph) changed analcom to stack_process_com (update to stack_process)

(See c:\axis2000\region_analyze.pro)


REGRESS2

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
        REGRESS2

 PURPOSE:
        Multiple linear regression fit.
        Fit the function:
        Y(i) = A(0)*X(0,i) + A(1)*X(1,i) + ... +
             A(Nterms-1)*X(Nterms-1,i)

 CATEGORY:
        G2 - Correlation and regression analysis.

 CALLING SEQUENCE:
        Result = REGRESS(X, Y, W [, YFIT, SIGMA, FTEST, R, RMUL, CHISQ])

 INPUTS:
        X:   array of independent variable data.  X must
             be dimensioned (Nterms, Npoints) where there are Nterms
             coefficients to be found (independent variables) and
             Npoints of samples.

        Y:   vector of dependent variable points, must have Npoints
             elements.

        W:   vector of weights for each equation, must be a Npoints
             elements vector.  For instrumental weighting
             w(i) = 1/standard_deviation(Y(i)), for statistical
             weighting w(i) = 1./Y(i).   For no weighting set w(i)=1,
             and also set the RELATIVE_WEIGHT keyword.

 OUTPUTS:
        Function result = coefficients = vector of
        Nterms elements.  Returned as a column vector.

 OPTIONAL OUTPUT PARAMETERS:
        Yfit:     array of calculated values of Y, Npoints elements.

        Sigma:    Vector of standard deviations for coefficients.

        Ftest:    value of F for test of fit.

        Rmul:     multiple linear correlation coefficient.

        R:        Vector of linear correlation coefficient.

        Chisq:    Reduced chi squared.

 KEYWORDS:
RELATIVE_WEIGHT: if this keyword is non-zero, the input weights
             (W vector) are assumed to be relative values, and not based
             on known uncertainties in the Y vector.    This is the case for
             no weighting W(*) = 1.

 PROCEDURE:
        Adapted from the program REGRES, Page 172, Bevington, Data Reduction
        and Error Analysis for the Physical Sciences, 1969.

 MODIFICATION HISTORY:
        Written, DMS, RSI, September, 1982.
        Added RELATIVE_WEIGHT keyword, W. Landsman, August 1991
        29-AUG-1994:   H.C. Wen - Used simpler, clearer algorithm to determine
                       fit coefficients. The constant term, A0 is now just one
                       of the X(iterms,*) vectors, enabling the algorithm to
                       now return the sigma associated with this constant term.
                       I also made a special provision for the case when
                       Nterm = 1; namely, "inverting" a 1x1 matrix, i.e. scalar.
        26-MAR-1996:   Added the DOUBLE and CHECK keywords to the call to DETERM.
        02-APR-1996:   Test matrix singularity using second argument in INVERT
                       instead of call to DETERM.

(See c:\axis2000\regress2.pro)


REMOVE_LINES.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	REMOVE_LINES.PRO

LAST CHANGED: ----------------------------------- 22-Apr-11

PURPOSE:
	This function identifies scan lines with values far from mean
 and replaces that line with either the average of adjacent 2 lines (if it is single)
 or the preceding line
 developed for image and stack cleanup in STXM5321 commissioning phase

CATEGORY:
	STAND ALONE: utilities

CALLING SEQUENCE:
	Result = REMOVE_LINES(2d_array,  silent=silent)

 INPUT
 2d array (t.d in aXis2000 structure)

 KEYWORDS
	silent			if set, do not display feedback

CALLED FROM AXIS:
	stack_analyze

COMMON BLOCKS:
 axis_com

MODIFICATION HISTORY:
 (22-Apr-11 aph) first version

(See c:\axis2000\remove_lines.pro)


REMOVE_ZEROS.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	REMOVE_ZEROS.PRO

LAST CHANGED: ----------------------------------- 18-Sep-07

PURPOSE:
	This function replaces all zeros in an image file
    with the adjacent non-zero data
   Optionally, it will remove up to 10 hot or cold spots
     hot spots are points at least 5 times larger than the mean
     cold spots are points less than 1/10th of the mean
        (CAUTION - many images have zero spaces)

CATEGORY:
	STAND ALONE: utilities

CALLING SEQUENCE:
	Result = REMOVE_ZEROS(2d_array,  silent=silent, remove_hot=remove_hot, remove_cold = remove_cold)

 KEYWORDS
	silent			if set, do not display feedback
	remove_hot 		if set, carry out hot spot removal
	remove_cold 	if set, carry out cold spot removal

CALLED FROM AXIS:
	stack_analyze

COMMON BLOCKS:
 axis_com

MODIFICATION HISTORY:
 (10-Apr-04 aph) first version
 (18-Sep-07 aph) hot and cold spot remover added

(See c:\axis2000\remove_zeros.pro)


RESETPLOTS.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		RESETPLOTS.PRO

LAST CHANGED: ----------------------------------- 	21 Jul 2014

 PURPOSE:
	This procedure resets the data in the temporary buffers

 CATEGORY:
	aXis2000 utility

 CALLING SEQUENCE:
 for procedures:
	RESETPLOTS

 INPUTS: none

 KEYWORDS: none

 OUTPUTS: none

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

 SIDE EFFECTS:
	A window is created/destroyed.

 MODIFICATION HISTORY:
 (16-nov-99) separate from refresh.pro; ax_color called
 (21-Jul-14 aph) AXIS standard header added

(See c:\axis2000\resetplots.pro)


SAVE_AA.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
   SAVE_AA.PRO

LAST CHANGED: -----------------------------------  18-Jul-10

PURPOSE:
 This function saves a spectrim generated by XSpecSim as a textfile

CATEGORY:
	Utility for XSpecSim widget

CALLED FROM XSpecSim

 CALLING SEQUENCE:
 Result = sav_AA, en=en, SpecData=SpecData, sequence=sequence, name=name, $ 
          fltr=fltr, file=file, Modified=Modified, Group = Group

 INPUTS:
 This section is for POSITIONAL INPUTS only (not keywords)
 All input parameters are passed as keywords.

 KEYWORDS:
 EN        energy values
 SpecData  intensity values
 Sequence  amino acid sequence
 Name      name of peptide or protein
 Fltr      filter for file extension
 File      name of file to write
 Group     name of group leader
 Modified  flag if modified with peptide bond correction

OUTPUTS:
	A text file with header and projected spectrum of Peptide of interest

COMMON BLOCKS:
	@XSpecSim_Com		XSpecSim common block

(See c:\axis2000\sav_aa.pro)


SAV_ALS

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		SAV_ALS

LAST CHANGED: ----------------------------------- 	21 Jul 2014

 PURPOSE:
	This function writes the image in the current aXis2000 buffer
 to a Beamline 7 STXM image file in ascii format (*,im*)
 image size, energy, dwell information are stored in (*.dat)
 NB different formats were used for (*.dat) at varous times
 this version matches the Apr-98 format

 CATEGORY:
	Data I/O

 CALLING SEQUENCE:
	Result = SAV_ALS(tmp, scale=scale, file=file, FILTER=fltr, _extra=e )

 INPUTS:
  TMP	aXis2000 structure (internal representation of 2D image)

 KEYWORDS:
	SCALE		scale factor to heep within 32-bit integer range
	FILE		name of file to write
	FILTER

 OUTPUTS:
	write 2 files (*.im*, *.dat) to disk

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

 MODIFICATION HISTORY:
 (13-jun-98 aph) first developed from sav_nsls & read_als; axis_com
 (29-dec-98 aph) added rescale for small dynamic range real data.
 ( 6-jan-99 aph) corrected row, col error !!
 (10-jan-99 aph) BadID check on Widget_control
 ( 7-jul-99 aph) FREE_LUN as well as close !
 (20-may-00 aph) write scale to DAT file; allow fixed scale via keyword
 (21-Jul-14 aph) AXIS standard header added

(See c:\axis2000\sav_als.pro)


SAV_HDF

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		SAV_HDF

LAST CHANGED: ----------------------------------- 	21-Feb-10

 PURPOSE:
	This procedure writes an aXis2000 structure (1d,2d, 3d or 4d)
  to an HDF scientific format file.

 CATEGORY:
	Image display.

 CALLING SEQUENCE:
 for procedures:
	SAV_HDF, tmp, fltr=fltr, file=file

 INPUTS:
	TMP		aXis2000 data structure

 KEYWORDS:
	FLTR -  name of  extension to filter file name choice
   FILE -  filename

 OUTPUTS:
	SDF file saved

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

 MODIFICATION HISTORY:
 (18-jun-98 aph) adapted from MakeHFDdata in idl40\examples\hdf_netcdf\hdf_rdwr.pro
 (21-Feb-10 aph) AXIS standard header added; name changed to satisfy batch compile

(See c:\axis2000\sav_hdf.pro)


SAV_HDFM

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		SAV_HDFM

LAST CHANGED: ----------------------------------- 	21 Jul 2014

 PURPOSE:
	This procedure writes series of NSLS files as HDF 2d
 scientific data format files
 used to transfer files from AXIS to ENVI

(See c:\axis2000\sav_hdfm.pro)


SAV_NSLS.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	SAV_NSLS.PRO

LAST CHANGED: ----------------------------------- 31-Jul-11

 PURPOSE:
 writes 2d-STRUCTURE and BSIF_COMMON info into NSLS netCDF format
 It places the Z-values of the image (in tmp structure)and associated information
 into the BSIF_COMMON variables:
   image_data (the array which holds the image - possibly several
		planes deep for I, IO, CLOCK)
   x_normal, y_normal, rotated, x_title, y_title

 CATEGORY:
	Stack analysis and stand alone.
 	Called from aXis2000 by images~nsls~old(*.nc)

 CALLING SEQUENCE:
   SAV_NSLS, TMP, FLTR=FLTR, FILE=FILE

 INPUTS
	TMP		axis format image

 KEYWORDS
	FLTR	name of filter
	FILE	name of file
	SILENT  flag to control entry to axis log

 COMMON BLOCKS
	axis_com	common for AXIS2000
	BSIF_COM	common for NetCDF files

 -------------------- REVISION HISTORY --------------------
 (xx-may-98 aph) first developed
 (14-jun-98 aph) axis_com, bsif_com
 (29-dec-98 aph) added rescale for small dynamic range real data.
 (11-jan-99 aph) remove multiple print messages; BadID
 (09-aug-99 aph) remove scaling as now save using float if needed
 (14-oct-99 aph) store correct energy as sd.wavelength
 (09-jan-00 aph) add hourglass for slow saves
 (15-dec-05 aph) tracking integer error; axis_log ; standard header
 (11-nov-06 aph) add silent keyword
 (31-Jul-11 aph) replace init_stxm_sd with init_sd; remove dead code

(See c:\axis2000\sav_nsls.pro)


SDF_COM.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		SDF_COM.PRO

LAST CHANGED: ----------------------------------- 	02 Jul 2015

 PURPOSE:
	This file contains the common block for the widget which reads SDF files

 CATEGORY:
	utility

 MODIFICATION HISTORY:
 (17-oct-04 aph) add sdf_path
 (11-mar-07 aph) add norm_string, AXIS standard header added
 (01-Feb-09 aph)  null change
 (21-Jul-14 aph) moved norm_value to axis_com\aselect to keep all norm related variables together
 (29-Nov-14 aph) no change
 (02-Jul-15 aph) add sdf_silent, pix_diff

(See c:\axis2000\sdf_com.pro)


SETGRAF.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		SETGRAF.PRO

LAST CHANGED: ----------------------------------- 	22 Jul 2014

 PURPOSE:
	This procedure switches between the 3Draw Windows in AXIS.PRO
 only allowed values are:  'MainImg'  'XZPlot'   'YZPlot'
 if keyword SET , the scaling parameters for Window, NAME are saved

 CATEGORY:
	aXis2000 utility

 CALLING SEQUENCE:
 	SetGraf, Name, SET=set

 INPUTS:
 NAME - name of one of the three draw windows in aXis2000
		'MainImg'  'XZPlot'   'YZPlot'  - WARNING - case sensitive!!

 KEYWORDS:
	SET		shift focus to the selected window & save old plot parameters for reset

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

 MODIFICATION HISTORY:
 (27-may-97 aph) first written
 (12-aug-99 aph) removed from aaa_axis  (axis_c)
 (26-sep-99 aph) removed Thumbnails when went to individual plots
 (21-Dec-00 aph) last change
 (22-Jul-14 aph) AXIS standard header added
          return if called without aXis2000 running

(See c:\axis2000\setgraf.pro)


SFCONVERT

[Previous Routine] [Next Routine] [List of Routines]
NAME:
  SFConvert

LAST CHANGED: ----------------------------------- 18-Jul-10

 PURPOSE:
	this function calculates the OD1 spectra of a compound based on SF and OD data

 CATEGORY:
	spectra Processing; stand alone operation

 CALLING SEQUENCE:
	SFConvert, SAMPLE, SFData

 INPUTS:
 	SAMPLE	2d array of energy and spectral data from OD of sample
	SFData 2D array of spectral data

 KEYWORDS: none

 OUTPUTS: 	none

 COMMON BLOCKS: none


 RESTRICTIONS: none

 MODIFICATION HISTORY:
 (21-Jul-06 jso) first version
 (18-Jul-10 aph) close off header

(See c:\axis2000\sfconvert.pro)


SF[1]

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
       SF

 LAST CHANGED: ------------------ aph ------------------------ 02-may-04

 PURPOSE:
       Function to calculate x-ray interaction properties of materials.

 CATEGORY:
       X-ray optics

 CALLING SEQUENCE:
       Result = SF(Compound [, Abscissa])

 INPUTS:
       Compound:    A scalar string containing the compound molecular formula.
                    The structure of the formula must be as follows:
                      Name1 Amount1 Name2 Amount2 ...
                    where Name1, Name2, etc. are the one or two letter
                    standard abbreviations for elements 1 to 92, and
                    Amount1, Amount2, etc. are the values describing the
                    stoichiometry. The spaces are optional. Each element may
                    appear only once in the formula.
                    NOTES: 1. Formula names ARE case-sensitive
                              (e.g., NI is NOT Ni).
                           2. If an amount is not specified, it is assumed
                              to be 1 (e.g., H2O is the same as H2 O1).

 OPTIONAL INPUTS:
       Abscissa:    A vector of photon energies or wavelengths at which the
                    result will be evaluated. The type and units of the
                    abscissae are specified by the keyword parameters. The
                    default is to assume the abscissae are photon energies
                    in electron volts.

 KEYWORD PARAMETERS:
       J:           If set, the abscissae, if supplied, are interpreted
                    as x-ray photon energies in Joules.

       keV:         If set, the abscissae, if supplied, are interpreted
                    as x-ray photon energies in kiloelectron volts.

       eV:          If set, the abscissae, if supplied, are interpreted
                    as x-ray photon energies in electron volts.

       m:           If set, the abscissae, if supplied, are interpreted
                    as x-ray wavelengths in meters.

       nm:          If set, the abscissae, if supplied, are interpreted
                    as x-ray wavelengths in nanometers.

       Angstrom:    If set, the abscissae, if supplied, are interpreted
                    as x-ray wavelengths in Angstroms.

       RESULT_TYPE: A string specifying what result to return. The following
                    are the possible choices:
                     "f1":      The compound f1 scattering factor for the
                                molecule.

                     "f2":      The compound f2 scattering factor for the
                                molecule.

                     "delta":   The real part of the complex refractive index.

                     "beta":    The imaginary part of the complex refractive
                                index.

                     "n":       The complex refractive index.

                     "mu":      The mass photoabsorption coefficient,
                                in cm^2/g. This is the default result type.

                     "mu_a":    The atomic photoabsorption coefficient,
                                in barns/atom.

                     "mu_l":    The linear photoabsorption coefficient,
                                in cm^-1.

                     "trans":   The transmissivity of the material.

                     "reflect": The specular reflectivity of unpolarized light
                                on an ideally smooth surface of the material.

       DENSITY:     The density of the material, in g/cm^3. This is needed
                    if the result type is "delta", "beta", "n", "mu_l",
                    "trans", or "reflect". Otherwise, a default density
                    of 1.0 g/cm^3 is used.

       THICKNESS:   The thickness of the material in micrometers. This is
                    needed if the result type is "trans". Otherwise, a
                    default thickness of 1.0 micron is used.

       ANGLE:       The angle of incidence in milliradians. This is needed
                    if the result type is "reflect". Otherwise, a default
                    angle of incidence of 10.0 mr is used.

       ENERGY:      A variable to receive the x-ray photon energies (in eV)
                    at which the result was evaluated.

       MW:          A variable to receive the molecular weight (in g/mol) of
                    the compound.

       SF_DIR:      A string containing the name of the directory containing
                    the SF data files.

 OUTPUTS:
       Result:      The result specified by the RESULT_TYPE keyword.

 COMMON BLOCKS:
       SF_COMMON

 SIDE EFFECTS:
       SF data is stored into common block variables each time data is read
       from the data files. This takes up memory to gain faster performance.
       The memory can be freed using the SF_DESTROY routine.

 ROUTINES CONTAINED IN THIS MODULE:
       SF_INIT           Procedure to initialize common block for module.
       SF_DESTROY        Procedure to delete common block variables.
       SF_GEN_EL_DATA    Procedure to generate data file for elements.
       SF_READ_DATA      Procedure to read SF data for single elements.
       SF_PARSE_COMPOUND Function to parse molecular formulas.
       SF                Main function to compute materials x-ray properties.

 ROUTINES CALLED BY THIS MODULE:
       IDL User Library routines:
         UNIQ, INTERPOL
       Bill Loo's IDL routines:
         STRING2FILE, FILE2STRING, STR_COLUMNS, WVLEN2EN, EN2WVLEN

 DATA FILES:
       This module requires the scattering factor data files compiled by
       B.L. Henke, E.M. Gullikson, and J.C. Davis, available by anonymous
       ftp at:
         ftp://www-cxro.lbl.gov/pub/sf/sf.tar.Z

       In addition, it requires a file containing the abbreviated element
       names and atomic weights. Such a file can be generated manually
       using the routine SF_GEN_EL_DATA. Just type "SF_GEN_EL_DATA" at the
       IDL prompt, and enter the requested information.

 REFERENCE:
       All formulas are published in:
         B.L. Henke, E.M. Gullikson, and J.C. Davis, "X-ray interactions:
         photoabsorption, scattering, transmission, and reflection at
         E=50-30,000 eV, Z=1-92," Atomic Data and Nuclear Data Tables,
         Vol. 54(2), pp. 181-342, July 1993.

 WRITTEN BY:
       Billy W. Loo, Jr.
       Bioengineering Graduate Group, UCB / UCSF
       School of Medicine, UCD
       Ernest Orlando Lawrence Berkeley National Lab
       August, 1996

 MODIFICATION HISTORY:

 $Log: sf.pro,v $
 Revision 1.4  1999/03/03 06:14:10  idl
 * Changed function names for more consistent naming.
 * Minor changes to documentation.

 Revision 1.3  1999/02/28 00:26:10  idl
 * Return scalar when result has only one element.

 Revision 1.2  1997/12/16 01:55:20  loo
 * Major revision of SF program module.

 (02-may-04 aph) standardize header

(See c:\axis2000\sf.pro)


SF[2]

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
       SF

 LAST CHANGED: ------------------ aph ------------------------ 24-dec-00

 PURPOSE:
       Function to calculate x-ray interaction properties of materials.

 CATEGORY:
       X-ray optics

 CALLING SEQUENCE:
       Result = SF(Compound [, Abscissa])

 INPUTS:
       Compound:    A scalar string containing the compound molecular formula.
                    The structure of the formula must be as follows:
                      Name1 Amount1 Name2 Amount2 ...
                    where Name1, Name2, etc. are the one or two letter
                    standard abbreviations for elements 1 to 92, and
                    Amount1, Amount2, etc. are the values describing the
                    stoichiometry. The spaces are optional. Each element may
                    appear only once in the formula.
                    NOTES: 1. Formula names ARE case-sensitive
                              (e.g., NI is NOT Ni).
                           2. If an amount is not specified, it is assumed
                              to be 1 (e.g., H2O is the same as H2 O1).

 OPTIONAL INPUTS:
       Abscissa:    A vector of photon energies or wavelengths at which the
                    result will be evaluated. The type and units of the
                    abscissae are specified by the keyword parameters. The
                    default is to assume the abscissae are photon energies
                    in electron volts.

 KEYWORD PARAMETERS:
       J:           If set, the abscissae, if supplied, are interpreted
                    as x-ray photon energies in Joules.

       keV:         If set, the abscissae, if supplied, are interpreted
                    as x-ray photon energies in kiloelectron volts.

       eV:          If set, the abscissae, if supplied, are interpreted
                    as x-ray photon energies in electron volts.

       m:           If set, the abscissae, if supplied, are interpreted
                    as x-ray wavelengths in meters.

       nm:          If set, the abscissae, if supplied, are interpreted
                    as x-ray wavelengths in nanometers.

       Angstrom:    If set, the abscissae, if supplied, are interpreted
                    as x-ray wavelengths in Angstroms.

       RESULT_TYPE: A string specifying what result to return. The following
                    are the possible choices:
                     "f1":      The compound f1 scattering factor for the
                                molecule.

                     "f2":      The compound f2 scattering factor for the
                                molecule.

                     "delta":   The real part of the complex refractive index.

                     "beta":    The imaginary part of the complex refractive
                                index.

                     "n":       The complex refractive index.

                     "mu":      The mass photoabsorption coefficient,
                                in cm^2/g. This is the default result type.

                     "mu_a":    The atomic photoabsorption coefficient,
                                in barns/atom.

                     "mu_l":    The linear photoabsorption coefficient,
                                in cm^-1.

                     "trans":   The transmissivity of the material.

                     "reflect": The specular reflectivity of unpolarized light
                                on an ideally smooth surface of the material.

       DENSITY:     The density of the material, in g/cm^3. This is needed
                    if the result type is "delta", "beta", "n", "mu_l",
                    "trans", or "reflect". Otherwise, a default density
                    of 1.0 g/cm^3 is used.

       THICKNESS:   The thickness of the material in micrometers. This is
                    needed if the result type is "trans". Otherwise, a
                    default thickness of 1.0 micron is used.

       ANGLE:       The angle of incidence in milliradians. This is needed
                    if the result type is "reflect". Otherwise, a default
                    angle of incidence of 10.0 mr is used.

       ENERGY:      A variable to receive the x-ray photon energies (in eV)
                    at which the result was evaluated.

       MW:          A variable to receive the molecular weight (in g/mol) of
                    the compound.

       SF_DIR:      A string containing the name of the directory containing
                    the SF data files.

 OUTPUTS:
       Result:      The result specified by the RESULT_TYPE keyword.

 COMMON BLOCKS:
       SF_COMMON

 SIDE EFFECTS:
       SF data is stored into common block variables each time data is read
       from the data files. This takes up memory to gain faster performance.
       The memory can be freed using the SF_DESTROY routine.

 ROUTINES CONTAINED IN THIS MODULE:
       SF_INIT           Procedure to initialize common block for module.
       SF_DESTROY        Procedure to delete common block variables.
       SF_GEN_EL_DATA    Procedure to generate data file for elements.
       SF_READ_DATA      Procedure to read SF data for single elements.
       SF_PARSE_COMPOUND Function to parse molecular formulas.
       SF                Main function to compute materials x-ray properties.

 ROUTINES CALLED BY THIS MODULE:
       IDL User Library routines:
         UNIQ, INTERPOL
       Bill Loo's IDL routines:
         STRING2FILE, FILE2STRING, STR_COLUMNS, WVLEN2EN, EN2WVLEN

 DATA FILES:
       This module requires the scattering factor data files compiled by
       B.L. Henke, E.M. Gullikson, and J.C. Davis, available by anonymous
       ftp at:
         ftp://www-cxro.lbl.gov/pub/sf/sf.tar.Z

       In addition, it requires a file containing the abbreviated element
       names and atomic weights. Such a file can be generated manually
       using the routine SF_GEN_EL_DATA. Just type "SF_GEN_EL_DATA" at the
       IDL prompt, and enter the requested information.

 REFERENCE:
       All formulas are published in:
         B.L. Henke, E.M. Gullikson, and J.C. Davis, "X-ray interactions:
         photoabsorption, scattering, transmission, and reflection at
         E=50-30,000 eV, Z=1-92," Atomic Data and Nuclear Data Tables,
         Vol. 54(2), pp. 181-342, July 1993.

 WRITTEN BY:
       Billy W. Loo, Jr.
       Bioengineering Graduate Group, UCB / UCSF
       School of Medicine, UCD
       Ernest Orlando Lawrence Berkeley National Lab
       August, 1996

(See c:\axis2000\sf_init.pro)


SM_IPAR.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		SM_IPAR.PRO

LAST CHANGED: ----------------------------------- 	21 Jul 2014

 PURPOSE:
	This procedure initializes the sm_par structure

 CATEGORY:
	data file formatting

 CALLING SEQUENCE:
 for procedures:
	sm_ipar,sm_par;

 INPUTS:
 	SM_PAR - parameters of SM format
;
 KEYWORDS: none

 COMMON BLOCKS: none;

 MODIFICATION HISTORY:
 (27-Jun-01 aph) first entry into aXis2000 (SM is from nsls hdf format I think)
 (21-Jul-14 aph) AXIS standard header added

(See c:\axis2000\sm_ipar.pro)


SPC_LOAD.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		SPC_LOAD.PRO

LAST CHANGED: ----------------------------------- 23-Jul-14 (aph)

 PURPOSE:
   This function reads a variety of ascii-format files
  spectra (and ascii images) from AXIS2000
  (x,y) single spectra data file; and multi-column
   smart read-in - uses first line to determine type

 CATEGORY:
	utility; stand-alone or used through axis2000

 CALLING SEQUENCE:
 for functions:a
	Result = spc_load (file=file, filter=filter, xcol=xcol, ycol=ycol, print = print, $
         multi=multi, skip=skip, int_factor=int_factor, title=title, typ=typ, NOF=nof, _extra=e)

 INPUTS: only by keyword

 KEYWORDS:
 FILE		filename
 FILTER  	filter extension
 TITLE		optional title on filename dialog
 XCOL		number of x-axis (if multi-column)
 YCOL		number of y-axis (if multi-column)
 SKIP		number of header lines to skip  (if multi-column)
 MULTI		returns number of columns -1 = number of spectra
 PRINT     if set, print
 TYP		type of file ('UN','MC', '1d', '2d') - use to select for multicolumn file
           AND also for type of data file ('mca' (Amptek), 'msa' (Oxford)
 NOF		no filter (*.*)
 _EXTRA	pass through keywords

 OUTPUTS:
	Result is the (e,d) 1-d spectral or I(x,y) 2-d image array

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

 MODIFICATION HISTORY:
 (08-may-02 aph) AXIS standard header added
 ( 9-aug-97 aph) broke out of spectral; TYPE defined
 (21-jan-98 aph) added s.dn component to 1d structure to be axis-compatible
 (20-feb-98 aph) set-up to read 2-col only data
 ( 6-mar-98 aph) read *.txt - 2 column ascii files
 ( 7-jun-98 aph) corrected read *.txt ('un' case) to get all data points
 (10-jul-98 aph) retired "*.spc" nomenclature - use *.txt extension
 (24-may-99 aph) accomodate non-AXIS files with multi-line headers
 ( 8-Jun-99 aph) remove tag line; adapt for group in get_num
 ( 9-jun-99 aph) fix up ascii image read in error
 (11-jun-99 aph) fix up widget_info error
 (25-jun-99 aph) strip path fromfile name
 ( 6-jul-99 aph) FREE_LUN as well as close !
 ( 9-sep-99 aph) silent read-in if filename is supplied
 (08-may-02 aph) explicit definition of columns in multicolumn; standard header
 (14-may-02 aph) reverse order spectra
 (30-Oct-02 aph) adapt for Sphinx spectra
 (12-Feb-03 aph) correct Sphinx.multi to handle single spectrum
 (13-Feb-03 aph) introduce TYP keyword to read in multi-column files  explicitly
 (15-aug-04 aph) explicitly define X-label for 1d data to get around problem
                 when reading non-monotonic data
 (21-mar-05 aph) add integer factor keyword to allow read-in of non-integer ascii images
 (16-Jun-05 aph) correct multi-column read-in - was missing last point ! - argh !! correction wrong
                 convert print to axis_log
 (15-feb-10 aph) read in EMSA/MSA spectral files (1-column); Amptek (*.mca), XGLabs (*.dta)
 (10-Apr-10 aph) deal with situation when Amptek *.mca file does not have calibration info
 (22-Nov-12 aph) implement multi-column, read all columns
 (25-Nov-12 aph) handle cases where file does not exist better
 (21-Jul-14 aph) corrected header
 (24-Jul-14 aph) desensitize to end of file not being a blank line

(See c:\axis2000\spc_load.pro)


SPC_SAVE

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	SPC_SAVE

LAST CHANGED: -----------------------------------  7-Mar-10

PURPOSE:
	This function saves 1-d (spectra) or 2-d (images) structures in AXIS ascii format.

CATEGORY:
	STAND ALONE: utility & called from aXis2000 write~axis  and utilities~write image ascii

CALLING SEQUENCE:
	Result =  SPC_SAVE(S, [file=file, int_factor=int_factor, nolb=nolbl, nof=nof])

CALLED FROM AXIS:
	Write->AXIS

INPUTS:
	S - AXIS 1d structure

KEYWORDS:
	FILE - filename (for silent writes)
	INT_FACTOR - integer factor used to scale float data to preserve precision still using integer storage (only used for images)
	SILENT - if set, no traceback
	NOF - no filter (default filter = '*.txt')
	NOLBL - if set, do not query for label

OUTPUTS:
	An ascii file is written to disk

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

MODIFICATION HISTORY:
 ( 7-mar-98 aph) save new label in axis
 (14-JUN-98 aph) axis_com
 (10-jul-98 aph) use *.txt as default name for ascii files
 ( 8-jul-99 aph) FREE_LUN as well as close
 (31-jul-99 aph) conditional use of handle to allow use outside axis
 (08-sep-99 aph) update buffer label
 (28-oct-99 aph) add file keyword for 'silent' writing
 (04-jan-00 aph) proper cancel; AXIs standard documentation
 (27-feb-00 aph) add groupID to get_text
 (11-apr-00 aph) fix error when writing 1d files with small or large values
 (04-jun-03 aph) add keyword to force label to current value
 (19-feb-05 aph) check for non-monotonic data and correct before saving
 (21-mar-05 aph) add int_factor keyword; confirm image write out works
 (14-Feb-06 aph) correct invalid number of points
         (removed "where", with identification of only non-zero values!)
 (30-apr-07 aph) add space between entires in 2-d write
 (13-apr-08 aph) add check for overwrite; warning and options as for saving image files (axb_save.pro)
 (22-nov-08 aph) remove duplication of overwrite check
 (03-Aug-09 aph) change to shortfile name on axis_log feedback
 (12-dec-09 aph) add silent keyword
 (07-Mar-10 aph) remove keyword axis in call for ax_sort_mono (line 109)

(See c:\axis2000\spc_save.pro)


SPECTRA.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		SPECTRA.PRO

LAST CHANGED: ----------------------------------- 	21 Jul 2014

 PURPOSE:
 This function extracts spectral data from LabView (SPEM ?)
  into a 1D structure {d:, dn:, x:, xl:, dl:}
  or into a 2D structure {d:, dn:, x:, y:, xl:, yl:, dl:, dnl:}
  normalization subfield (dn:) is created unless no I0 exists or
  /NORM option is invoked

 CATEGORY:
	data I/O

 CALLING SEQUENCE:
	Result = SPECTRA, struc[ , /INFO, /NORM, LABELS=[xlabel, ylabel'], _extra=e]

 INPUTS:
 This section is for POSITIONAL INPUTS only (not keywords)
	All input parameters are passed as keywords.

 KEYWORDS:
	INFO	use IDL help routine to display tags of the spec structure created
	NORM	normalization value
	LABELS	x, y labels (2-element array)
	_extra	other parameters passed on

 OUTPUTS:
	No explicit outputs.   A new window is created if necessary

 COMMON BLOCKS: none

 MODIFICATION HISTORY:
 (21-Dec-00 aph) from er, jdd Copyright (c) 1995, ALS SpectroMicroscopy Facility
 (21-Jul-14 aph) AXIS standard header added

(See c:\axis2000\spectra.pro)


SPLIT_STRING

[Previous Routine] [Next Routine] [List of Routines]
 NAME: 
       SPLIT_STRING 
 
 PURPOSE: 
       This function splits a string into its delimited components. 
 
 CATEGORY: 
       String processing. 
 
 CALLING SEQUENCE: 
       Result = SPLIT_STRING(Input) 
 
 INPUTS: 
       Input:     The string to be split. The string should consist of 
                  multiple words separated by a user specified delimiter. 
 
 KEYWORD PARAMETERS: 
       DELIMITER: A string containing the delimiter between words. 
                  The default delimiter is a single space. Also, if the 
                  default delimiter is used, multiple spaces are compressed 
                  to a single space before parsing. 
 
 OUTPUTS: 
       Returns each word of the input string as one element in the 
       output string array, Result. 
 
 EXAMPLE: 
       If the input string is: 
         input = 'Hello, world' 
 
       then the command sequence: 
         result = split_string(input, DELIMITER=', ') 
 
       produces the result: 
         IDL> print, result(0) 
         Hello 
         IDL> print, result(1) 
         world 
 
       Note that the delimiter in this case includes a space. 
 
 WRITTEN BY: 
       Billy W. Loo, Jr. 
       Bioengineering Graduate Group, UCSF / UCB 
       School of Medicine, UCD 
       Lawrence Berkeley National Lab 
       June, 1996 
 
 MODIFICATION HISTORY: 
 
 $Log: split_string.pro,v $ 
 Revision 1.2  1997/02/02 06:07:50  loo 
 * Corrected bug that occurs if delimiter is first character in string. 
 
 Revision 1.1  1996/06/09  07:56:00  loo 
 Initial revision 
 

(See c:\axis2000\split_string.pro)


SPLOT.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		SPLOT.PRO

LAST CHANGED: ----------------------------------- 	21 Jul 2014

 PURPOSE:
	This procedure plots a 1D spectral structure in an ID window

 CATEGORY:
	Image display.

 CALLING SEQUENCE:
 for procedures:
	splot, s, [O=oplot, DN=dn, WB=wb, CHARSIZE=csz, COLOR=clr, ZERO=zero,  _extra=e]

 INPUTS:
		s	1D structure

 KEYWORDS:
	O			overplot
	DN			normalization array (Io)
	WB			white on black
	CHARSIZE	characteri size
	COLOR		line color
	ZERO		autoscale y from 0
	 _extra		pass along PLOT options

 OUTPUTS:

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks
;
 MODIFICATION HISTORY:
 (19-Feb-96 jdd) initial creation
 (15-Jun-16 jdd) added generalized interpretation of structures
        in SPLOT, SPLOT2D, SPLOT3D
         separated splot stuff from graph.pro
 (29-06-96 aph) allow numerical limts on ranges
 (06-Dec-97 aph) remove print of ytitle
 (03-jan-99 aph) add back in YTitle (!!)
 (24-jun-99 aph) consistent image/spectra color tables
 (13-aug-99 aph) no change - just using debugs to track reform problem
 (14-nov-00 cgz) migrated from SPLOTA.PRO
 (22-Mar-06 aph) increase character size
 (21-Jul-14 aph) AXIS standard header added

(See c:\axis2000\splot.pro)


SPLOT2D.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		SPLOT2D.PRO

LAST CHANGED: ------------------------------ 	21 Jul 2014

 PURPOSE:
	This procedure plots a 2D data structure (image) in an IDL window

 CATEGORY:
	Image display. stand alone or inside aXis2000

 CALLING SEQUENCE:
	SPLOT2D, s, [ASPECT=asp,ZOOM=zoom, _extra=e]

 INPUTS:
  	 s	2D structure
    basic input data structure: s={d:, x:, y:}
     optional axis and title label fields include {xl:, yl:, dl:}

 KEYWORDS:
	ASPECT	rescale window vertical size to
            aspect ratio similar to the image dimensions
	ZOOM	allows user to define x,y ranges
   extra	pass along PLOT options

 REQUIREMENTS:  graph.pro MUST be compiled prior

 OUTPUTS:
	No explicit outputs.   A new window is created if necessary

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

 MODIFICATION HISTORY:
  (19-Feb-96 jdd) initial creation
  (15-Jun-96 jdd) added generalized interpretation of structures
        in SPLOT, SPLOT2D, SPLOT3D
        separated splot stuff from graph.pro
 (29-Jun-9 aph) allow numerical limts on ranges
 (06-Dec-97 aph) remove print of ytitle
 (03-jan-99 aph) add back in YTitle (!!)
 (24-jun-99 aph) consistent image/spectra color tables
 (13-aug-99 aph) no change - just using debugs to track reform problem
 (14-nov-00 cgz) migrated from SPLOTA.PRO
 (15-nov-00 cgz) Replaced call of NCOLS function by explicit (SIZE(var))(1)
 (30-nov-00 cgz) Replaced call of WSIZE function by explicit [!D.X_SIZE,!D.Y_SIZE]
 (30-nov-00 cgz) Replaced call of nwin with explicit window statement
 (21-Jul-14 aph) AXIS standard header added

(See c:\axis2000\splot2d.pro)


SPLOT3D

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		SPLOT3D

LAST CHANGED: ----------------------------------- 	21 Jul 2014

 PURPOSE:
	This procedure creates a  surface plot with axes

 CATEGORY:
	Image display splot3d, s, ASPECT=asp, ZOOM=zoom, _extra=e

 CALLING SEQUENCE:
	splot3d, s, [ ASPECT=asp, ZOOM=zoom, _extra=e]

  	 s	2D structure
    basic input data structure: s={d:, x:, y:}
     optional axis and title label fields include {xl:, yl:, dl:}

 KEYWORDS:
	ASPECT	rescale window vertical size to
            aspect ratio similar to the image dimensions
	ZOOM	allows user to define x,y ranges
   extra	pass along PLOT options

 OUTPUTS:none

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

 RESTRICTIONS:  graph.pro MUST be compiled prior

 MODIFICATION HISTORY:
 (19-Feb-96 jdd) initial creation
 (15-Jun-96 jdd) added generalized interpretation of structures
        in SPLOT, SPLOT2D, SPLOT3D
        separated splot stuff from graph.pro
 (29-Jun-06 aph) allow numerical limts on ranges
 (06-Dec-97 aph) remove print of ytitle
 (03-jan-99 aph) add back in YTitle (!!)
 (24-jun-99 aph) consistent image/spectra color tables
 (13-aug-99 aph) no change - just using debugs to track reform problem
 (14-nov-00 cgz) migrated from SPLOTA.PRO
 (15-nov-00 cgz) Replaced call of NCOLS function by explicit (SIZE(var))(1)
 (30-nov-00 cgz) Replaced call of WSIZE function by explicit [!D.X_SIZE,!D.Y_SIZE]
 (30-nov-00 cgz) Replaced call of nwin with explicit window statement
 (21-Jul-14 aph) AXIS standard header added

(See c:\axis2000\splot3d.pro)


SROTATE.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		SROTATE.PRO

LAST CHANGED: ----------------------------------- 	21 Jul 2014

 PURPOSE:
	This function rotates a 1D or 2D structure and the associated labels
 It return 1D or 2D structure: {d:, x:, dl:, xl:} or {d:, x:, y:, dl;, xl:, yl:}


 CATEGORY:
	Image processing

 CALLING SEQUENCE:
	Result = SROTATE(struc, [dir , /Trans, HFLIP=hflip, VFLIP=vflip)

 INPUTS:
 This section is for POSITIONAL INPUTS only (not keywords)
	All input parameters are passed as keywords.

 KEYWORDS:
	DIR	  direction # [0-7] as defined by ROTATE:
			  0 deg:	0  [ X, Y]		+ Transpose:   4  [ Y, X]
			 90 deg:  	1  [-Y, X]		+ Transpose:   5  [-X, Y]
			180 deg:  	2  [-X,-Y]		+ Transpose:   6  [-Y,-X]
			270 deg:  	3  [ Y,-X]		+ Transpose:   7  [ X,-Y]

	TRANS	transpose X & Y axes  (dir=4)
	Hflip 	horizontal flip  (dir=5)
	Vflip	vertical flip (dir=7), (dir=2, both Hflip & Vflip)

 COMMON BLOCKS: onne

 MODIFICATION HISTORY
 (21-Dec-00 jdd) taken over into aXis2000
 (21-Jul-14 aph) AXIS standard header added

(See c:\axis2000\srotate.pro)


STACK_ADD

[Previous Routine] [Next Routine] [List of Routines]
NAME:
  STACK_ADD

LAST CHANGED: ----------------------------------- 21-Aug-09

 PURPOSE:
	This procedure adds two stacks presumed to be on same E and spatial scales

 CATEGORY:
	stack processing; stand alone operation

 CALLING SEQUENCE:
	STACK_ADD, FILE

 INPUTS:
 	FILE	name of the output file

 KEYWORDS: none

 OUTPUTS: 	writes summed stack as *.ncb

 COMMON BLOCKS:
 AXIS_COM	standard set of common blocks
 stack_process_com
 BSIF_com
 volume_data, image_stack

 SIDE EFFECTS:

 RESTRICTIONS: none

 MODIFICATION HISTORY:
 (29-Aug-04 aph) first version
 (17-oct-04 aph) provide weighting coefficients
 (17-Sep-08 aph) replace analcom with stack_process_com
 (21-Aug-21 aph) check for different numbers of images (energies) ==> possible erros (esp. XMCD !)

(See c:\axis2000\stack_add.pro)


STACK_ALIGN

[Previous Routine] [Next Routine] [List of Routines]
NAME:
  STACK_ALIGN

LAST CHANGED: ----------------------------------- 11 Jan 10

 PURPOSE:
	This procedure aligns images of a stack

 CATEGORY:
	stack processing - part of axis2000 stack analyze package

 CALLING SEQUENCE:
	STACK_ALIGN, filename_ev_msec_list,shift_filename,zoom=zoom,realign=realign

 INPUTS:
 	filename_ev_msec_list 	array with details of filenames, energies, dwells
	shift_filename			name of file written with (x,y) pixel shifts (mapper format)
	zoom					display multiplier (integer only)
	realign					if 1, do alignment; if 0, read from file

 KEYWORDS: none

 OUTPUTS: 	*.aln file with list of (x,y) pixel shifts to align images

 COMMON BLOCKS:
 BSIF_com
 volume_data, image_stack
 pix_shift
 stack_process_align_common

 SIDE EFFECTS:
	A window is created/destroyed.

 RESTRICTIONS: none

 MODIFICATION HISTORY:
 (25-mar-98 cjj) to deal with 24 bit graphics
 (11-Jul-98 aph) to deal with changes to align.pro
 (12-dec-98 aph) remove all bsif_common
 (08-may-00 aph) add xpix_shift, ypix_shift to transfer size of grey area
 (17-Sep-08 aph) replace analcom with stack_process_com  (there were no occurrences)
                 standard header added
 (07-mar-09 aph) replace read_mapper with zstack_read_mapper to get around problem with zimba align files (line 423)
 (11-Jan-10 aph) replace @aligncom with @stack_process_align_com to get around conflict with CJJ's stack_analyze

(See c:\axis2000\stack_align.pro)


STACK_APPEND

[Previous Routine] [Next Routine] [List of Routines]
NAME:
  STACK_APPEND

LAST CHANGED: ----------------------------------- 26-Jan-10

 PURPOSE:
	This procedure appends two stacks if they have the same  pixel dimensions

 CATEGORY:
	stack processing; stand alone operation or from axis2000

 CALLING SEQUENCE:
	STACK_ADD, FILE

 INPUTS:
 	FILE	name of the output file

 KEYWORDS: none

 OUTPUTS: 	none

 COMMON BLOCKS:
 AXIS_COM	standard set of common blocks
 stack_process_com
 BSIF_com
 volume_data, image_stack

 RESTRICTIONS: none

 MODIFICATION HISTORY:
 (12-Nov-06 aph) first written; modified from stack_add
 (02-mar-08 aph) resolve filename dimension error
 (17-Sep-08 aph) replace analcom with stack_process_com
 (23-mar-09 aph) make work - problem with filename_ev_list array indices
 (27-jan-10 aph) try again - filename_ev_list problem fixed - now generated in stack_rb

(See c:\axis2000\stack_append.pro)


STACK_BUILDLIST

[Previous Routine] [Next Routine] [List of Routines]
NAME:
  STACK_BUILDLIST

LAST CHANGED: ----------------------------------- 17-Sep-08

 PURPOSE:
	This procedure construts a stack from individual *.nc images (old NSLS format)

 CATEGORY:
	stack processing;

 CALLING SEQUENCE:
	STACK_BUILDLIST

 INPUTS: FILENAME

 KEYWORDS: none

 OUTPUTS: 	none

 COMMON BLOCKS:
 BSIF_com
 volume_data, image_stack
 stack_bldlst_common

 SIDE EFFECTS:
	A window is created/destroyed.

 RESTRICTIONS: none

 MODIFICATION HISTORY:
 (17-Sep-08 aph) standard header added

(See c:\axis2000\stack_buildlist.pro)


STACK_DIFF

[Previous Routine] [Next Routine] [List of Routines]
NAME:
  STACK_DIFF

LAST CHANGED: ----------------------------------- 12-Jan-09

 PURPOSE:
	This procedure differentiates the spectrum at every pixel of a stack

 CATEGORY:
	stack processing; stand alone operation

 CALLING SEQUENCE:
	STACK_DIFF, FILE+FILE

 INPUTS: none required

 KEYWORDS:
 	FILE	name of the output file

 OUTPUTS: 	differentiated stack

 COMMON BLOCKS:
 AXIS_COM	standard set of common blocks
 stack_process_com
 BSIF_com
 volume_data, image_stack

 SIDE EFFECTS: none

 RESTRICTIONS: none

 MODIFICATION HISTORY:
 (12-Jan-09 aph) first version

(See c:\axis2000\stack_diff.pro)


STACK_FIT

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	  STACK_FIT

LAST CHANGED: ----------------------------------- 20-Jul-10

PURPOSE:
	This procedure selects inputs for fitting the spectrum at each pixel
 in a stack to sum of model spectra
 It uses COMMON blocks to store and transfer data

CATEGORY:
	AXIS:  stack analysis (operates stand-alone as well)

CALLING SEQUENCE:
 for procedures:
	STACK_FIT(/AXIS,/verbose)

CALLED FROM AXIS:
	->Stacks->stack_fit

INPUTS:
	All input parameters are obtained through user dialogs.

KEYWORDS:
	AXIS - if set, indicates called from AXIS
	VERBOSE - if set, displays results as generated line-by-line (SLOW!)

ROUTINES
	STACK_FIT - main routine to execute stack fit
	GROOM1 - linear fit to pre-edge values
	INPUTS to GROOM1
	spectrum - the input and the result after subtraction of back
	back     - the constant to be subtracted
	integral - integrated value in background region
	zero     - number of points to evaluate constant background

OUTPUTS:
	If run from AXIS, the results are placed in AXIS buffers
 buffer 1 - n are the spectra of the n-models to be used in the fit,
              interpolated to the energy values of the stack.
 buffer 4 - (4+n) are the resulting composition maps for the n components
 buffer 8 - linear term of fit
 buffer 9 - chi-square of the fit
 otherwise display windows are generated as required

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks
	@stack_process_com
	Volume_data - STACK
 	@BSIF_COM - nc data

PROCEDURE:
	After reading in the stack (*.nc) and the model spectra (*.txt)
 and the names to be used for the output files,
 the spectrum at each pixel is fit to (linear) + SUM{coeff(i)*model spectra(i)}
 The coefficients at each pixel constitute the component map for species i.
 The user can choose to perform a pre-edge subtraction based on the first {m} -data points
 in order to base the analysis on solely the core spectra signal

MODIFICATION HISTORY:
 ***********
 ORIGINAL kernel of this routine was written by Rick Kneedler
 ***********
 (25-May-99 aph) first developed from Kneedler code
 (19-Jun-99 aph) allow user choice to background subtract image spectra
 (07-jul-99 aph) extend to arbitrary number of components
 (09-sep-99 aph) store all results automatically; correct (x,y) scale stuff
 (20-sep-99 aph) remove linear term; set NaN, Inf to zero; integer col #
 (23-oct-99 aph) force plot of components on store
 ( 7-oct-99 aph) allow assignment of simple names to output files
 (26-nov-99 aph) get rid of error message for text prompt
 (23-Dec-99 aph) correct bad point filter on output component maps
 (27-feb-00 aph) add groupIP to get_text cal; axis standard documentation
 (09-apr-00 aph) change groom.pro to fit a sloped line with feedback
 (19-oct-00 aph) increased max # of components to 8
 (13-nov-00 aph) fixed error for GE 5 component; model data
 (09-jan-01 aph) move groom to run with compile-on-fly
 (12-aug-01 aph) put overwrite checking into file writing procedure
 (14-may-03 aph) use comment line, not filename for prompt for name
					 par filesaves filenames and labels only
 (28-may-03 aph) fix-up no par; force extension to 'par'; fix up comp_names
 (04-jun-03 aph) use ax_par_save, ax_par_load
 (11-jun-03 aph) fix 1 boo-boo
 (30-dec-03 aph) add ax_sort_mono to force stack E-scale and reference spectral scales to be monotonic
 (20-jan-04 aph) use dialog_message to control residual stack writing
				  ensure E-value (0.0) added to component maps
 (10-Jun-04 aph) remove pre-edge background subtraction
 (01-feb-05 aph) fix ax_sort_mono to use structure (ricochet change from lox change)
 (17-Sep-08 aph) replace analcom with stack_process_com
 (30-jul-09 aph) add stack file name to component map names
                 truncate short name for component maps at the first space
 (20-Jul-10 aph) replace nwin,0 with window, 0  (line 247) - code error                

(See c:\axis2000\stack_fit.pro)


STACK_LINE_IO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
  STACK_LINE_Io

LAST CHANGED: ----------------------------------- 12 May 2014

 PURPOSE:
	This function normalizes a stack on a row by row basis
 When used for slow stacks, with clear Io region at the same  in all rows,
 this provides a more accurate correction of Io changes (e.g' from ring current decay)

 CATEGORY:
	stack processing; stand alone operation or from axis2000

 CALLING SEQUENCE:
	RESULT = STACK_LINE_Io()

 INPUTS: none

 KEYWORDS: none

 OUTPUTS: 	routine stores the OD-converted stack and
           returns the %-deviation of Io from  on an energy-by-energy basis

 COMMON BLOCKS:
 AXIS_COM	standard set of common blocks
 stack_process_com
 BSIF_com
 volume_data, image_stack

 RESTRICTIONS: none

 MODIFICATION HISTORY:
 (12-May-14 aph) first version - requested by Slava for AFCC ionomer mapping at CLS

(See c:\axis2000\stack_line_io.pro)


STACK_LIST.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		STACK_LIST.PRO

LAST CHANGED: ----------------------------------- 	24-Nov-11

 PURPOSE:
	This function is a wrapper around stack_readlist to convert all stack list files
 to Zimba format (first line is path; subsequent are names)
 automatic checking for alternate paths if initial path not correct

 CATEGORY:
	utility for reading stack_list files

 CALLING SEQUENCE:
	Result = STACK_LIST(list_filename)

 INPUTS: list_filename = file containing filename_list

 KEYWORDS: none

 OUTPUTS: returns 1 if successfully read the files; 0 otherwise

 COMMON BLOCKS:
	AXIS_COM

 SIDE EFFECTS: stack list is re-written in the list_filename file

 MODIFICATION HISTORY:
 (25-sep-99 aph) force write out in zimba version; this allows zimba to work
 (02-feb-00 aph) ensure path is written in line 1 when rewrite *.sl file
 (17-apr-00 aph) adapt for cases where first line is blank (peem, zimba)
               major rewrite to convert sphagetti to penne
 (24-Nov-11 aph) rewrote to work with Zimba format list files !!
                  AXIS standard header added

UNCTION stack_list, list_filename
axis_com
n_error, 2

check = 1
ep = ax_sep()


 stack_readlist, list_filename, filename_list
openr, iunit, list_filename, /get_lun
i=0
tmp = ' '
filename_list = strarr(1)
while not EOF(iunit) do begin
  readf, iunit, tmp
  filename_list(i) = tmp
  filename_list = [filename_list, ' ']
  i = i + 1
ndwhile
lose, iunit & free_lun, iunit


 for i=0, n_elements(filename_list)-1 do print, filename_list(i)

 --- FIRST, we will asume it is a Zimba format stacklist file

_files = n_elements(filename_list)-1
F (n_files EQ 0) THEN goto, bailout

 ------- CHECK IF FILENAMES are accessible. -----
 assume first line is the path (Zimba format)
irst_file = filename_list(0) + filename_list(1)
test = findfile(first_file, count=ctest)

 ------ If found, define path and check with second filename --
F ctest GT 0 then begin
t = ax_name(filename_list(0))
if t(0) NE '' then sl_path = t(0) else sl_path = DefPath
t = ax_name(filename_list(1))
fnew = sl_path + t(1) + '.' + t(2)
ftest = findfile(fnew, count=dtest)
if dtest EQ 0 then check = 0
NDIF ELSE check = 0

F check EQ 0 then BEGIN
 -------- the combination of the first and second lines in the stacklist file is not a valid file.
 - either the first line is an invalid path
 .......... or the file format is NOT Zimba (so first line is likely a filename ot blank)
 ....................or the file does not exist

 ------------------------- check if it is a zimba format file --------
	axis_log, 'first file: ' + first_file + '  was not found'
axis_log, 'Checking alternate locations'

t = ax_name(list_filename)	; check if files are in same area as list_filename
File_Path = t(0)
 PRINT, 'check if files are in same area as list_filename ', File_Path
fname = filename_list(1)
t = ax_name(fname)
fname = t(1) + '.' + t(2)
fnew = File_Path + fname
axis_log, 'Path to ' + filename_list(0) + ' is incorrect. Trying . . . ' + fnew
ftest = findfile(fnew,count=dtest)

if dtest GT 0 then begin
	sl_path = File_Path
endif else begin
	axis_log, ' Invalid Path. Select a file from the directory containing the data'
	ftest = pickfile2(/read,filter ='*.*')
	t = ax_name(ftest)
	File_Path = t(0)
	fnew = File_Path + fname
	axis_log, 'Checking that ' + fname + ' is in directory ' + File_Path
	ftest = findfile(fnew,count=etest)
	if etest EQ 0 then goto, bailout
	sl_path = File_Path
endelse
 -------- check that we have correct information
 print, 'sl_path= ', sl_path
 for i=1, n_elements(filename_list)-1 do print, filename_list(i)

NDIF

(See c:\axis2000\stack_list.pro)


STACK_MAKE

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		STACK_MAKE

LAST CHANGED: ----------------------------------- 30-Jul-09

 PURPOSE:
	This procedure generates a stack from the product of an image times a spectrum.
 Typically this would be used to strip out a component from a stack, or for simulations.

 CATEGORY:
	Stack analysis

 CALLING SEQUENCE:
	STACK_MAKE, SPEC, IMAGE

 INPUTS:
	SPEC  - 1-d axis structure which has spectrum of the component
	IMAGE - 2-d axis structure which has image (typically component map)

 KEYWORDS: none

 OUTPUTS:
	The stack is saved to disk

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks
	stack_process_com
	COMMON volume_data, image_stack
	bsif_com

 MODIFICATION HISTORY:
 (11-apr-00 aph) first version
 (10-nov-00 aph) corrected infor for *.dat file
 (29-jan-01 aph) defined energy array (eV) and filename_ev_msec_list
 (12-may-02 aph) correct header name format
 (17-Sep-08 aph) replace analcom with stack_process_com
 (30-Jul-09 aph) clean-up from change; add on_error, 2

(See c:\axis2000\stack_make.pro)


STACK_MESH

[Previous Routine] [Next Routine] [List of Routines]
NAME:
  STACK_MESH

LAST CHANGED: ----------------------------------- 31-Jan-11

 PURPOSE:
	This procedure changes mesh of a stack

 CATEGORY:
	stack processing; stand alone operation or from axis2000

 CALLING SEQUENCE:
	STACK_MESH

 INPUTS: none

 KEYWORDS: none

 OUTPUTS: 	none

 COMMON BLOCKS:
 AXIS_COM	standard set of common blocks
 stack_process_com
 BSIF_com
 volume_data, image_stack

 RESTRICTIONS: none

 MODIFICATION HISTORY:
 (31-jan-11 aph) first version generated from stack_append

(See c:\axis2000\stack_mesh.pro)


STACK_PROCESS.PRO[1]

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	STACK_PROCESS.PRO

LAST CHANGED: ----------------------------------- 29-Jul-11 [ FROM 24-Apr-06 - INCOMPLETE ]

 PURPOSE:
	This set of procedures and functions is a widget to display
 and extract spectra from stacks.
 This version (derived from from late January 98 version of CJJ) has been
 modifed to handle file names and paths better.
 Read in Io signals from ascii (*.txt) spectral format files (x,y)
 Correct E-scales; normalize yield data; subtract spectra, stacks
 extract images (*.nc format) from stacks.

 CATEGORY:
	Stack analysis.
 Called from aXis2000 by stacks~stack~analyse~AXIS (or AXIS binary)

 CALLING SEQUENCE:
	STACK_PROCESS, [ list_filename, shift_filename, fpath=fpath, binary=binary, $
                   zoom=zoom, text_height=text_height, realign=realign, $
                   help=help, no_align = no_align ]

 INPUTS:
 list_filename		name of file with list of *.nc image files
 shift_filename	name of file with list of x,y pixel shifts for alignment

 KEYWORDS:
 fpath			path for files
 binary		read in as *.ncb binary (all images in one file)
 zoom			zoom factor
 text_height	size of text
 realign		launch stack_align after applying shifs in shift_filename
 help			print help information
 no_align		do not launch stack_align

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks
	BSIF_COM	common for NetCDF files
	STACK_PROCESS_COM		common for stack_process
	VOLUME_DATA image_stack - 3d array of stack data
	PIX_SHIFT	set of pixel shifts ( xpix_shift, ypix_shift  )

 ROUTINES
 STACK_PROCESS_readroi
 STACK_PROCESS_writeroi
 STACK_PROCESS_gifmovie
 STACK_PROCESS_roi_event,event
 STACK_PROCESS_roi
 STACK_PROCESS_desensitive
 STACK_PROCESS_sensitive
 STACK_PROCESS_graphics
 STACK_PROCESS_bar
 STACK_PROCESS_makespectrum
 STACK_PROCESS_plotspectrum, i_file
 STACK_PROCESS_imgdisp,i_file
 STACK_PROCESS_event,event

 MODIFICATION HISTORY:
 ( 2-may-98 aph) improve filenames and Io read-in
 (20-may-99 aph) - BINARY keyword added to call
 (13-jun-98 aph) correct printed flag on writes
 (14-jun-98 aph) bsif_com
 (30-jun-98 aph) OD determination;
 (6-jul-98 aph) movie buttons, eV_shift, cursor select frame
 (8-Jan-99 aph) hourglass, close,/all to get round no lun problems (movie); path
 (11-Jan-99 aph) symbols - default to none; noYzero; aloadct for IDL 4
 (14-May-99 aph) add TEY-ON/TEY-OFF button for PEEM stacks
 (15-May-99 aph) drop first line
 (19-may-99 aph) REINTRODUCE option to save only image as the movie
 (22-may-99 aph) read-in from binary files enabled (optiona); write to binary
 (08-jun-99 aph) use new version of get_num: group = STACK_PROCESS_par.main_base
 (25-jun-99 aph) add axis_com to put in top_color_index, white_color_index
 (28-jun-99 aph) remove conflict with 'label' and axis_com use of this
 (10-jul-99 aph) add clipping to common area; reverse -ve slope axes; fixe error
 (16-jul-99 aph) remove infinite loop on check for location of files
 (18-jul-99 aph) adapt stack_wb procedure to work with TEY (I/I-t (no log) data (PEEM; TEY-stxm)
 (26-sep-99 aph) remove aloadct (no longer supporting IDL 4.0 operation)
 (27-oct-99 aph) reset (x,y) scales in stack binary writes
 (28-oct-99 aph) no_align keyword added to call
 (28-oct-99 aph) no_align keyword added to call
 (26-jan-00 aph) let sub-flag work independent of OD flag
 (30-mar-00 aph) added group id to get_text
 (09-apr-00 aph) add save image; subtract image; subtract background stack
 (16-apr-00 aph) initial path is DefPath
 (24-apr-00 aph) path picked up at all writes; images (*.nc) allows all to write
 (30-apr-00 aph) image write - allow start number to sync with original file numbers
 (08-may-00 aph) image write - make file numbers be 3 digits; default start with 1; write *.sl
 (10-may-00 aph) stack_binary (*.ncb) default cols/rows eliminate grey;
 (14-may-00 aph) correct filter for image subtraction
 (19-Jul-00 aph) option to update spectrum in movie
 (30-may-01 aph) force energy values to be sorted and increasing
 (11-may-01 aph) if have subtracted spectrum, image or stack,
                 ensure the difference is what is saved as *.ncb, or images etc
 (23-dec-01 aph) start *.nc numbering at 0; remove desensitize of stack "*.ncb" & others
 (28-dec-01 aph) sesnsitize stack (*.ncb); fix first file blank on image (*.nc)
 (06-jan-01 aph) add slicer3; query removal energy sorting !
 (12-may-02 aph) AXIS standard header added
 (25-may-03 aph) fix co-ordinate error if Io read-in;
					add all-pixels button; add ratio image button
					improve sensitize / desensitize
 (15-jun-03 aph) add exchange E-scale; delete image
 (10-jul-03 aph) fix problem of wrong DAT file with multiple 'remove images'
 (26-feb-04 aph) add zoom, x,y axis control
 (01-mar-04 aph) fix display of roi (region, pixels) in zoom mode
 (27-mar-04 aph) add (E,I)-range control; avg stack; median added
 (07-apr-04 aph) remove first image;
 (10-apr-04 aph) add remove_zeros; troubleshoot spectral select
 (02-may-04 aph) continue trouble-shooting spectral select problem
 (15-may-04 aph) sensitize path & filename boxes if ROI selected
 (11-jul-04 aph) try to add scroll bars - failed so far !
               shrink vertical size of commands to fit on 768 vertical screen
 (31-jul-04 aph) replace gif image with png image (gif not supported by IDL6, XP)
 (21-jan-05 aph) exit STACK_PROCESS after writing stack
 (19-feb-05 aph) add 'constant' and 'gain' controls
 (03-jul-05 aph) add 'ratio to spectrum'
 (07-jul-05 aph) change color reset properties when close to avoid problem of B/W inversion in aXis2000
 (15-nov-05 aph)  average images over E-range displayed
 (15-Dec-05 aph) add clip_images
 (18-feb-06 aph) add map
 (21-feb-06 aph) correct extensions when write out *.sl list file
 (08-apr-06 gaj) add write out of all images in tif format
 (19-apr-06 aph) correct row, column minimums for clipping after alignment; auto-zoom
 (21-apr-06 aph) add *.roi as default name for roi region
 (25-apr-06 aph) multiple region display

 -------- MANY UPDATES TO MAINLINE CODE SHOULD BE ADDED !!!!

 (30-jul-09 aph) changed analcom to stack_process_com (update to stack_process)
 (29-jul-11 aph) changed stack_analyze_par.spec_savefile_label to replace wt_spec (old spectrum writer) to use spc_save

(See c:\axis2000\stack_analyze-multi.pro)


STACK_PROCESS.PRO[2]

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	STACK_PROCESS.PRO

LAST CHANGED: ----------------------------------- 25-Jul-2015 (aph)

 PURPOSE:
	This set of procedures and functions is a widget to display
 and extract spectra from stacks.
 This version (derived from from late January 98 version of CJJ) has been
 modifed to handle file names and paths better.
 Read in Io signals from ascii (*.txt) spectral format files (x,y)
 Correct E-scales; normalize yield data; subtract spectra, stacks
 extract images (*.nc format) from stacks
 RENAMED 17-Sep-08 (old name: stack_analyze - conflicted with CJJ).

 CATEGORY:
	Stack processing.
 Called from aXis2000 by stacks~analyse~AXIS or stacks~analyse~AXIS binary

 CALLING SEQUENCE:
	STACK_PROCESS, [ list_filename, shift_filename, binary=binary, $
                   zoom=zoom, text_height=text_height, realign=realign, $
                   help=help, no_align = no_align ]

 INPUTS:
 list_filename		name of file with list of *.nc image files
 shift_filename	name of file with list of x,y pixel shifts for alignment

 KEYWORDS:
 fpath			path for files
 binary		read in as *.ncb binary (all images in one file)
 zoom			zoom factor
 text_height	size of text
 realign		launch stack_align after applying shifs in shift_filename
 help			print help information
 no_align		do not launch stack_align
 debug			extensive printing to track progress

 COMMON BLOCKS:
	AXIS_COM	       standard set of common blocks
	BSIF_COM	       common for NetCDF files
	STACK_PROCESS_COM  common for stack process
	VOLUME_DATA        image_stack - 3d array of stack data
	PIX_SHIFT	       set of pixel shifts ( xpix_shift, ypix_shift  )

 ROUTINES
 stack_analyze_readroi
 stack_analyze_writeroi
 stack_analyze_gifmovie
 stack_analyze_roi_event,event
 stack_analyze_roi
 stack_analyze_desensitive
 stack_analyze_sensitive
 stack_analyze_graphics
 stack_analyze_bar
 stack_analyze_makespectrum
 stack_analyze_plotspectrum, i_file
 stack_analyze_imgdisp,i_file
 stack_analyze_event,event
 stack_analyze_maximg
 stack_analyze_par.avg_stack

 MODIFICATION HISTORY:
 ( 2-may-98 aph) improve filenames and Io read-in
 (20-may-99 aph) - BINARY keyword added to call
 (13-jun-98 aph) correct printed flag on writes
 (14-jun-98 aph) bsif_com
 (30-jun-98 aph) OD determination;
 (6-jul-98 aph) movie buttons, eV_shift, cursor select frame
 (8-Jan-99 aph) hourglass, close,/all to get round no lun problems (movie); path
 (11-Jan-99 aph) symbols - default to none; noYzero; aloadct for IDL 4
 (14-May-99 aph) add TEY-ON/TEY-OFF button for PEEM stacks
 (15-May-99 aph) drop first line
 (19-may-99 aph) REINTRODUCE option to save only image as the movie
 (22-may-99 aph) read-in from binary files enabled (optiona); write to binary
 (08-jun-99 aph) use new version of get_num: group = stack_analyze_par.main_base
 (25-jun-99 aph) add axis_com to put in top_color_index, white_color_index
 (28-jun-99 aph) remove conflict with 'label' and axis_com use of this
 (10-jul-99 aph) add clipping to common area; reverse -ve slope axes; fixe error
 (16-jul-99 aph) remove infinite loop on check for location of files
 (18-jul-99 aph) adapt stack_wb procedure to work with TEY (I/I-t (no log) data (PEEM; TEY-stxm)
 (26-sep-99 aph) remove aloadct (no longer supporting IDL 4.0 operation)
 (27-oct-99 aph) reset (x,y) scales in stack binary writes
 (28-oct-99 aph) no_align keyword added to call
 (28-oct-99 aph) no_align keyword added to call
 (26-jan-00 aph) let sub-flag work independent of OD flag
 (30-mar-00 aph) added group id to get_text
 (09-apr-00 aph) add save image; subtract image; subtract background stack
 (16-apr-00 aph) initial path is DefPath
 (24-apr-00 aph) path picked up at all writes; images (*.nc) allows all to write
 (30-apr-00 aph) image write - allow start number to sync with original file numbers
 (08-may-00 aph) image write - make file numbers be 3 digits; default start with 1; write *.sl
 (10-may-00 aph) stack_binary (*.ncb) default cols/rows eliminate grey;
 (14-may-00 aph) correct filter for image subtraction
 (19-Jul-00 aph) option to update spectrum in movie
 (30-may-01 aph) force energy values to be sorted and increasing
 (11-may-01 aph) if have subtracted spectrum, image or stack,
                 ensure the difference is what is saved as *.ncb, or images etc
 (23-dec-01 aph) start *.nc numbering at 0; remove desensitize of stack "*.ncb" & others
 (28-dec-01 aph) sesnsitize stack (*.ncb); fix first file blank on image (*.nc)
 (06-jan-01 aph) add slicer3; query removal energy sorting !
 (12-may-02 aph) AXIS standard header added
 (25-may-03 aph) fix co-ordinate error if Io read-in;
					add all-pixels button; add ratio image button
					improve sensitize / desensitize
 (15-jun-03 aph) add exchange E-scale; delete image
 (10-jul-03 aph) fix problem of wrong DAT file with multiple 'remove images'
 (26-feb-04 aph) add zoom, x,y axis control
 (01-mar-04 aph) fix display of roi (region, pixels) in zoom mode
 (27-mar-04 aph) add (E,I)-range control; avg stack; median added
 (07-apr-04 aph) remove first image;
 (10-apr-04 aph) add remove_zeros; troubleshoot spectral select
 (02-may-04 aph) continue trouble-shooting spectral select problem
 (15-may-04 aph) sensitize path & filename boxes if ROI selected
 (11-jul-04 aph) try to add scroll bars - failed so far !
               shrink vertical size of commands to fit on 768 vertical screen
 (31-jul-04 aph) replace gif image with png image (gif not supported by IDL6, XP)
 (21-jan-05 aph) exit stack_analyze after writing stack
 (19-feb-05 aph) add 'constant' and 'gain' controls
 (03-jul-05 aph) add 'ratio to spectrum'
 (07-jul-05 aph) change color reset properties when close to avoid problem of B/W inversion in aXis2000
 (15-nov-05 aph)  average images over E-range displayed
 (15-Dec-05 aph) add clip_images
 (18-feb-06 aph) add map
 (21-feb-06 aph) correct extensions when write out *.sl list file
 (08-apr-06 gaj) add write out of all images in tif format
 (19-apr-06 aph) correct row, column minimums for clipping after alignment; auto-zoom
 (21-apr-06 aph) add *.roi as default name for roi region
 (31-may-06 jso) adapt Readroi to read *.png type ROI files from Lox stacks
 (10-jun-06 aph) integrate Jacob's alternate Lox ROI, using *.png images
 (07-jul-06 rec) add stack_analyze_maximg
 (22-Sep-06 aph) correct multi-image write out to get *.sl file
 (22-Sep-06 aph) cosmetic changes
 (12-Nov-06 aph) correct multi-image write out to get *.sl file (again)
                 put energy sort into binary read; add ratio to constant (gain)
 (11-jan-07 aph) multiply constant, image
 (26-feb-07 aph) replaced direct use of interpolate with ax_mesh to get subtraction of spectra correct
 (17-jul-07 aph) optimize read-in from memory rather than disk; leave widget on top
 (17-Sep-07 aph) do remove_zeros image-by-image
 (29-Dec-07 aph) correct name in header; leave widget on top - TRY #2
 (03-Mar-08 MJ)  keyword /SCROLL in widget_base() needs X_SCROLL_SIZE
 (21-mar-08 aph) fix up stack_analyze subtract stack (missing read-in !!); merged MJ version
 (13-apr-08 aph) turn on pre-set window size (X_Scroll_size, Y_Scroll_size) only for non-Windows OS
                 over-write warning when writing spectra or images
 (17-sep-08 aph) convert name from stack_analyze to stack_process; change analcom to stack_process_com
 (21-sep-08 aph) add ability to revert to tranmsission, given the Io signal
 (22-Nov-08 aph) add file overwrite check to saving spectra & make it work
 (19-Dec-08 aph) write out only images in range of E displayed (shrink stacks)
 (29-jul-09 aph) auto-transfer name of roi to name of output
 (11-Aug-09 aph) fixe wrong variable name for filename for image write
 (17-Aug-09 aph) mods to chase why VM version does not work if try to build in align info
                move shifting part of stack_align into stack_process
 (16-Feb-10 aph) add calibrate (x-axis - full range)
 (22-Jul-10 aph) modify energies in stack filename_ev_msec list
 (23-Jul-10 aph) add no_read option for situations where image_stack exists
 (03-Feb-11 aph) corrected no-read stacks (was error on stack_rb introduced 20-Feb-10
                rescale_flag = 1 set for all stacks
				 now displays io files read from disk
 (19-Feb-11 aph) remove annoying HELP, image_stack display
 (22-Apr-11 aph) add replace bad lines (for STXM5321 data)
 (17-May-11 aph) add work around for ID5.2 in energy calibration routine; reset energy limits when E-cal
 (31-Jul-11 aph) remove commented out reference to wt_spec (old writer)
 (04-Oct-11 aph) add ROTATE 90 CW, CCW
 (22-Nov-11 aph) stop using old CurBuf index when placing resultants (avg, map) into aXis buffers
				  desensitivze OD control when TEY is ON; add 'exchange x,y axes'
 (24-Nov-11 aph) enable reading stack list with *.axb files
 (07-Dec-11 aph) limits for write-out in IDL notation (0 to #-1); add tooltips; add adjustable Path
 (08-Dec-11 aph) preserve aspect ratio in the zoom
 (24-Dec-12 aph) solve problem of avg_image overwriting active buffer
                 preload filename with name of stack; add stack name to label for average
 (01-Jan-13 aph) default map (2-E); stop overwriting CruBuf when save map image
 (28-Apr-13 aph) cut recommended zoom by 2
 (28-Aug-13 aph) reat identical points differently than out of order points on stack read-in
 (01-Sep-13 aph) change banner name to stack_process (also referred as that in new Help file)
 (25-Oct-13 aph) get write movies working
 (21-Apr-14 aph)  rotate stack - correct x, y dimensions; check for existing name BEFORE completing write
 (30-nov-14 aph) force gif movies to write to the current path as defined in stack_process Path variable
                 using lpath (from axis_com) to establish path
				   modify spectrum_save to allow paths & files names with spaces (don't use strcompress(/remove_all) !!)
 (22-Mar-15 aph) apply correct (x,y) axes / scales to truncated stacks
                 error discovered with Ti2p/O1s TXM stacks of memresistor (Carta)
 (25-Jul-15 aph) fix XY-scale so that y-axis scales proportional to X-axis (get_num problem)

(See c:\axis2000\stack_process.pro)


STACK_PROCESS_ALIGN_COM

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	STACK_PROCESS_ALIGN_COM

LAST CHANGED: ----------------------------------- 11-Jan-10

 PURPOSE:
	This FILE contains the COMMON block, STACK_PROCESS_ALIGN_COMMON

 CATEGORY:
	AXIS: Stack_process common block

 CALLING SEQUENCE:
	@stack_process_align_com (to include in the stack_analyse routines)

 INPUTS: none

 KEYWORDS: none

 OUTPUTS: none

 MODIFICATION HISTORY:
 (23-Jan-98 version) CJJ written
 (30-dec-99 aph) added documentation
 (07-mar-09 aph) updated with 1 more line !!!
 (11-Jan-10 aph) changed name to remove conflict with stack_align_common in stack_analyze.sav (CJJ)

(See c:\axis2000\stack_process_align_com.pro)


STACK_PROCESS_COM

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	STACK_PROCESS_COM

LAST CHANGED: ----------------------------------- 29-Nov-14

 PURPOSE:
	This FILE contains the COMMON block, stack_process_common

 CATEGORY:
	AXIS: Stack_analyze common block

 CALLING SEQUENCE:
	@stack_process_com (to include in the stack_process (axis2000 version of stack_analyze) routines)

 INPUTS: none

 KEYWORDS: none

 OUTPUTS: none

 DETAILS: - variables in the common block:
   plot_cols, plot_rows: size of plot region in pixels
   char_ypix: height of a character in pixels
   charsize: scaling to have characters come out at char_ypix height
   textregion_ypix: height of text plus scalebar region below image
   textregion_nlines: number of lines to text plus scalebar region
   r,g,b: color vectors for 8 bit display
   i_color_index, i0_color_index: color indices for I and I0 respectively
   top_color_index: full white
	disp_xmin, disp_xmax, disp_ymin, disp_ymax

 MODOFICATIONS
 (16-apr-98 aph) - added filepath, filesave to common !!
  filename_header = filepath + sep + filesave,
                  where sep is system specific separator
                  and parameters related to Io readin
 (30-jun-98 aph) - added OD_flag, rescale_flag,stop_flag
 ( 6-jul-98 aph) - moviestate, framenum, framerate:  for movies
 ( 6-jul-98 aph) - spectrum_x_scale, spectrum_y_scale: to allow cursor selection of image
 ( 6-jul-98 aph) - filename_ev_msec_list: to update E-scales
 ( 7-jul-98 aph) - sub_flag, ref_spectrum: to allow subtraction of ref. spectrum
 (14-may-99 aph) - tey_flag to prevent logarithm
 (25-jun-99 aph) - remove xx_color_index (in axis_com, part of ax_color)
 (29-jun-99 aph) - put color_index items back; axis_colr_common kept separate
 (31-dec-99 aph) - standard documentation
 (09-apr-00 aph) - add stack_analyze_par.sub_image, stack_analyze_par.sub_stack
 (08-may-00 aph) - add xpix_shift, ypix_shift - 2d arrays with mon/max shifts - separate common
 (22-feb-04 aph) - add disp_xmin, disp_xmax, disp_ymin, disp_ymax, ixl, ixh, iyl, iyh
 (26-mar-04 aph) - add disp_emin, disp_emax
 (02-may-04 aph) - add sa_debug
 (18-feb-06 aph) - add peak_img, bgnd_1, etc for mapping
 (23-apr-06 aph) - multi-region plotting - n_roi, i_roi becomes 2d
 (18-mar-07 aph) - add limits (for fitting stacks)
 (17-Sep-08 aph) - change name to stack_process_com to differentiate
                    from similar common block in jacobsen's stack_analyze
 (29-Nov-14 aph) - removed filepath from the common block (filepath and path are FUNCTIONS in IDL)
                   replaced with DefPath (which is in aXis_com

(See c:\axis2000\stack_process_com.pro)


STACK_PROCESS_TOF.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	STACK_PROCESS_TOF.PRO

LAST CHANGED: -----------------------------  30-Jul-09 [from 13-Apr-08  (aph FROM 26-Feb-04)]
   CAUTION - lots of updates of regular stack_analayze missed !!

 PURPOSE:
	This set of procedures and functions is a widget to display
 and extract spectra from stacks.
 This version (derived from from late January 98 version of CJJ) has been
 modifed to handle file names and paths better.
 Read in Io signals from ascii (*.txt) spectral format files (x,y)
 Correct E-scales; normalize yield data; subtract spectra, stacks
 extract images (*.nc format) from stacks.

 CATEGORY:
	Stack analysis.
 Called from aXis2000 by stacks~stack~analyse~AXIS (or AXIS binary)

 CALLING SEQUENCE:
	STACK_PROCESS, [ list_filename, shift_filename, fpath=fpath, binary=binary, $
                   zoom=zoom, text_height=text_height, realign=realign, $
                   help=help, no_align = no_align ]

 INPUTS:
 list_filename		name of file with list of *.nc image files
 shift_filename	name of file with list of x,y pixel shifts for alignment

 KEYWORDS:
 fpath			path for files
 binary		read in as *.ncb binary (all images in one file)
 zoom			zoom factor
 text_height	size of text
 realign		launch stack_align after applying shifs in shift_filename
 help			print help information
 no_align		do not launch stack_align

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks
	BSIF_COM	common for NetCDF files
	STACK_PROCESS_CCM		common for stack process_tof
	VOLUME_DATA image_stack - 3d array of stack data
	PIX_SHIFT	set of pixel shifts ( xpix_shift, ypix_shift  )

 ROUTINES
 STACK_PROCESS_readroi
 STACK_PROCESS_writeroi
 STACK_PROCESS_gifmovie
 STACK_PROCESS_roi_event,event
 STACK_PROCESS_roi
 STACK_PROCESS_desensitive
 STACK_PROCESS_sensitive
 STACK_PROCESS_graphics
 STACK_PROCESS_bar
 STACK_PROCESS_makespectrum
 STACK_PROCESS_plotspectrum, i_file
 STACK_PROCESS_imgdisp,i_file
 STACK_PROCESS_event,event

 MODIFICATION HISTORY:
 ( 2-may-98 aph) improve filenames and Io read-in
 (20-may-99 aph) - BINARY keyword added to call
 (13-jun-98 aph) correct printed flag on writes
 (14-jun-98 aph) bsif_com
 (30-jun-98 aph) OD determination;
 (6-jul-98 aph) movie buttons, eV_shift, cursor select frame
 (8-Jan-99 aph) hourglass, close,/all to get round no lun problems (movie); path
 (11-Jan-99 aph) symbols - default to none; noYzero; aloadct for IDL 4
 (14-May-99 aph) add TEY-ON/TEY-OFF button for PEEM stacks
 (15-May-99 aph) drop first line
 (19-may-99 aph) REINTRODUCE option to save only image as the movie
 (22-may-99 aph) read-in from binary files enabled (optiona); write to binary
 (08-jun-99 aph) use new version of get_num: group = STACK_PROCESS_par.main_base
 (25-jun-99 aph) add axis_com to put in top_color_index, white_color_index
 (28-jun-99 aph) remove conflict with 'label' and axis_com use of this
 (10-jul-99 aph) add clipping to common area; reverse -ve slope axes; fixe error
 (16-jul-99 aph) remove infinite loop on check for location of files
 (18-jul-99 aph) adapt stack_wb procedure to work with TEY (I/I-t (no log) data (PEEM; TEY-stxm)
 (26-sep-99 aph) remove aloadct (no longer supporting IDL 4.0 operation)
 (27-oct-99 aph) reset (x,y) scales in stack binary writes
 (28-oct-99 aph) no_align keyword added to call
 (28-oct-99 aph) no_align keyword added to call
 (26-jan-00 aph) let sub-flag work independent of OD flag
 (30-mar-00 aph) added group id to get_text
 (09-apr-00 aph) add save image; subtract image; subtract background stack
 (16-apr-00 aph) initial path is DefPath
 (24-apr-00 aph) path picked up at all writes; images (*.nc) allows all to write
 (30-apr-00 aph) image write - allow start number to sync with original file numbers
 (08-may-00 aph) image write - make file numbers be 3 digits; default start with 1; write *.sl
 (10-may-00 aph) stack_binary (*.ncb) default cols/rows eliminate grey;
 (14-may-00 aph) correct filter for image subtraction
 (19-Jul-00 aph) option to update spectrum in movie
 (30-may-01 aph) force energy values to be sorted and increasing
 (11-may-01 aph) if have subtracted spectrum, image or stack,
                 ensure the difference is what is saved as *.ncb, or images etc
 (23-dec-01 aph) start *.nc numbering at 0; remove desensitize of stack "*.ncb" & others
 (28-dec-01 aph) sesnsitize stack (*.ncb); fix first file blank on image (*.nc)
 (06-jan-01 aph) add slicer3; query removal energy sorting !
 (12-may-02 aph) AXIS standard header added
 (25-may-03 aph) fix co-ordinate error if Io read-in;
					add all-pixels button; add ratio image button
					improve sensitize / desensitize
 (15-jun-03 aph) add exchange E-scale; delete image
 (10-jul-03 aph) fix problem of wrong DAT file with multiple 'remove images'
 (26-feb-04 aph) add x,y axis control
;
 -------- MANY UPDATES TO MAINLINE CODE SHOULD BE ADDED !!!!

 (13-apr-08 aph) turn on pre-set window size (X_Scroll_size, Y_Scroll_size) only for non-Windows OS
                 over-write warning when writing spectra or images


 -------- MANY UPDATES TO MAINLINE CODE SHOULD BE ADDED !!!!

 (30-jul-09 aph) changed analcom to stack_process_com (update to stack_process)
 (29-jul-11 aph) changed stack_analyze_par.spec_savefile_label to replace wt_spec (old spectrum writer) to use spc_save

(See c:\axis2000\stack_analyze-TOF.pro)


STACK_RB

[Previous Routine] [Next Routine] [List of Routines]
NAME:
  STACK_RB

LAST CHANGED: ----------------------------------- 10-Nov-13

 PURPOSE:
	This procedure reads in a whole stack (3d (E,x,y) array) from binary
 places data into image_stack (Common volume_data)
 Re-Scales data to restore a factor used to avoind integer loss of detail

 CATEGORY:
	stack processing; stand alone operation

 CALLING SEQUENCE:
	STACK_RB, FILE

 INPUTS:
 	FILE	name of the output file

 KEYWORDS: none

 OUTPUTS: 	none

 COMMON BLOCKS:
 AXIS_COM	standard set of common blocks
 stack_process_com
 BSIF_com
 volume_data, image_stack

 RESTRICTIONS: none

 MODIFICATION HISTORY:
 (22-may-99 aph) first version
 (08-jun-99 aph) add group ID to get_num calls
 (06-jul-99 aph) free_lun !; reverses image_stack for -ve axes
 (27-oct-99 aph) print scale factor; preserve (x,y) axes
 (28-feb-02 aph) AXIS standard header added
 (02-may-04 aph) error recovery if file name error; fix header
 (19-feb-05 aph) close *.dat file to release it !
 (10-nov-06 aph) use axis_log
 (25-dec-07 aph) correct header
 (17-Sep-08 aph) replace analcom with stack_process_com
 (27-Jan-10 aph) generate filenae_list from filename_ev__msec_list
                 since it is used by stack_append
 (20-Feb-10 aph) adapt to reading in reals
 (02-Feb-11 aph) corrected no-read - if scale = 1.0 never loaded image_stack !
 (24-Nov-11 aph) increased size of field to display stack size
 (10-Nov-13 aph) increased field size for indicated E-range

(See c:\axis2000\stack_rb.pro)


STACK_READLIST

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		STACK_READLIST

LAST CHANGED: ----------------------------------- 	21-Feb-06

 PURPOSE:
	This procedure reads in a stack
 set of files from a pre-made list (*.sl) or a listing of files of a specific type

 CATEGORY:
	utility

 CALLING SEQUENCE:
	STACK_READLIST, list_filename, filename_list

 INPUTS:
 list_filename	input list
 filename_list	output list

 KEYWORDS:  NONE

 OUTPUTS:
filename_list

 COMMON BLOCKS: NONE

 MODIFICATION HISTORY:
 (10-aug-99 aph) revised to read either zimba or jacobsen format "*.sl" files
 (16-oct-99 aph) set up to handle *sl files with incorrect path information
 (21-feb-06 aph) AXIS standard header added

(See c:\axis2000\stack_readlist.pro)


STACK_ROTATE

[Previous Routine] [Next Routine] [List of Routines]
NAME:
  STACK_ROTATE

LAST CHANGED: ----------------------------------- 22-Mar-15

 PURPOSE:
	This procedure rotates each image of a stack

 CATEGORY:
	stack processing; stand alone operation

 CALLING SEQUENCE:
	STACK_ROTATE, FILE=FILE

 INPUTS: none required

 KEYWORDS:
 	FILE	name of the output file

 OUTPUTS: 	differentiated stack

 COMMON BLOCKS:
 AXIS_COM	standard set of common blocks
 stack_process_com
 BSIF_com
 volume_data, image_stack

 SIDE EFFECTS: none

 RESTRICTIONS: none

 MODIFICATION HISTORY:
 (12-Jan-09 aph) first version
 (22-Mar-15 aph) -  (x,y) axes / scales of rotated stack written correctly
                    alert user to stacks with non-square pixels; use avg. value

(See c:\axis2000\stack_rotate.pro)


STACK_WB

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		STACK_WB

LAST CHANGED: ----------------------------------- 21-Apr-2014
 PURPOSE:
	This procedure writes  a whole stack (3d (E,x,y) array) to a binary file
 with associated *.dat file to track paramaters
 assumes Common volume_data, image_stack exists and contains the data
 Scales data to within 1000 and 10000 of above 3e4 or below 1e3
 scale factor is stored, and reinstalled when using STACK_rb.pro

 CATEGORY:
	stack processing; stand alone operation

 CALLING SEQUENCE:
	WRITE_WB, FILE [, real=real, silent = silent, overwrite=overwrite]

 INPUTS:
 	FILE	name of the output file

 KEYWORDS:
 	REAL  - write as reals
	SILENT - if set, no feedback
	OVERWRITE - if set, do not check if file exists

 OUTPUTS:
	*.ncb file

 COMMON BLOCKS:
 AXIS_COM	standard set of common blocks
 STACK_PROCESS_COM
 BSIF_COM
 volume_data, image_stack

 SIDE EFFECTS:


 RESTRICTIONS: none

 MODIFICATION HISTORY:
 (22-may-99 aph) first version
 (09-sep-99 aph) (x,y) scale reset to account for dimensions on nsls data
 (26-sep-99 aph) clean up name
 (27-oct-99 aph) leave (x,y) axes in original dimensions
 (28-feb-02 aph) adapt to handle 1-image stacks; AXIS standard header added
 (04-jun-04 aph) add free_lun; get to write more than 8-character filenames in list
 (17-Jun-05 aph) warning & switch re Unix format; print => axis_log
 (17-Sep-08 aph) replace analcom with stack_process_com
 (14-dec-09 aph) desensitize to filenames with '.' in them
 (27-Jan-10 aph) add write protect for *,ncb
 (14-Feb-10 aph) add write protext for *.dat files !; write as reals
 (20-Feb-10 aph) add hourglass for slow writes
 (22-Jul-10 aph) correct flag for case where scale is < 1
                 fix REAL write out
 (22-Jul-13 aph) ensure filename has *.ncb, *.dat extensions
 (23-Jul-13 aph) add DefPath and remove duplicate checks
 (26-Jul-13 aph) REMOVE defPath - it was putting stacks in crazy places  & added back the second overwrite check !
 (10-Nov-13 aph) change printed information if do not save stack
 (21-Apr-14 aph) add OVERWRITE option to avoid multiple checks for existing file
 (21-Jul-14 aph) corrected header

(See c:\axis2000\stack_wb.pro)


STAG.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		STAG.PRO

LAST CHANGED: ----------------------------------- 	21 Jul 2014

 PURPOSE:
	This function checks for  existence of one or more specified structure field (or tag)
 returns T/F (0/1) byte or byte array

 CATEGORY:
	data utility

 CALLING SEQUENCE:
 for procedures:
	ZOOM [, FACT = Fact, /INTERP, XSIZE = Xs, YSIZE = Ys, /CONTINUOUS, $
		/KEEP, ZOOM_WINDOW=Zoom_Win, /NEW_WINDOW ]
 for functions:
	Result = STAG (s, tag(s))

 INPUTS:
	S 	structure
	TAG	array of tags to check for

 KEYWORDS:
	KEY1:

 OUTPUTS:
	No explicit outputs.   A new window is created if necessary
;
 MODIFICATION HISTORY:
 (11-nov-00 cgz) migrated from STRUCTURE.PRO
 (21-Jul-14 aph) AXIS standard header added

(See c:\axis2000\stag.pro)


STRING2FILE

[Previous Routine] [Next Routine] [List of Routines]
 NAME: 
       STRING2FILE 
 
 PURPOSE: 
       This procedure writes the contents of a string array to a text  
       file, one element per line. 
 
 CATEGORY: 
       Input / Output 
 
 CALLING SEQUENCE: 
       STRING2FILE, In_string, Filename 
 
 INPUTS: 
       In_string: The string array to write to the file. 
 
       Filename:  The name of the text file to receive the string data. 
 
 KEYWORD PARAMETERS: 
       APPEND:    If set, and if the output file exists, the data is appended 
                  to the output file. By default, the output file is 
                  overwritten. 
 
 OUTPUTS: 
       None 
 
 WRITTEN BY: 
       Billy W. Loo, Jr. 
       Bioengineering Graduate Group, UCSF / UCB 
       School of Medicine, UCD 
       Lawrence Berkeley National Lab 
       May, 1997 

(See c:\axis2000\string2file.pro)


STRSPLIT

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
       STRSPLIT

 PURPOSE:
   Wrapper on the build in system routine STRTOK that implements exactly
   the same interface as STRTOK, but with the STRSPLIT name.

       The reason for doing this is so that if a user has their own
   STRSPLIT in their local user library, their version will superceed
   this one. RSI does not recommend this practice, but it is
   allowed for backwards compatability reasons. See the
       documentation for STRSPLIT in the IDL Reference manual
   for details on arguments, keywords, and results.


 MODIFICATION HISTORY:
   14 October 1999, AB, RSI.
   AB, 5/4/2001, Switch from using _EXTRA to _STRICT_EXTRA, so that
       incorrect keywords passed to STRTOK will issue proper
       error messages instead of being silently ignored.

(See c:\axis2000\strsplit.pro)


STR_COLUMNS

[Previous Routine] [Next Routine] [List of Routines]
 NAME: 
       STR_COLUMNS 
 
 PURPOSE: 
       This procedure takes a string array containing rows of text, and 
       divides it into a 2-D array with each row divided into columns. 
 
 CATEGORY: 
       String processing. 
 
 CALLING SEQUENCE: 
       STR_COLUMNS, Input 
 
 INPUTS: 
       Input:     A 1-D string array. Each element is a row of text containing 
                  columns of text separated by a delimiter. Each row must  
                  have the same number of column elements. The input array 
                  will be overwritten by the resulting 2-D string array. 
 
 KEYWORD PARAMETERS: 
       DELIMITER: A string containing the delimiter between columns. The  
                  default delimiter is white space between columns. See 
                  the documentation for SPLIT_STRING for details. 
 
 OUTPUTS: 
       The input parameter is overwritten with the output. 
 
 ROUTINES USED BY THIS MODULE: 
       SPLIT_STRING             (Bill Loo's IDL routine) 
 
 WRITTEN BY: 
       Billy W. Loo, Jr. 
       Bioengineering Graduate Group, UCSF / UCB 
       School of Medicine, UCD 
       Lawrence Berkeley National Lab 
       December, 1997 

(See c:\axis2000\str_columns.pro)


STXM4_NCB

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	STXM4_NCB

LAST CHANGED: ----------------------------------- 30-Jul-09

 PURPOSE:
	This procedure converts a series of NSLS STXM IV image files
 into a binary stack file. The STXM IV files are those listed in a '*.sl' file

 CATEGORY:
	AXIS: stack analysis

 CALLING SEQUENCE:
	RESULT = STXM4_NCM(group_leader=axis_ID)

 INPUTS:
	none

 KEYWORD PARAMETERS:
	GROUP_LEADER - identification of caller for modal control

 OUTPUTS:
  FILE.NCB - stack binary file

 COMMON BLOCKS:
	stack_process_com
	axis_com
	bsif_com
 	volume_data

 RESTRICTIONS:
	caveat emptor

 MODIFICATION HISTORY:
 (30-sep-01 aph) first developed
 (30-Jul-09 aph) changed analcom to stack_process_com (update to stack_process)

(See c:\axis2000\stxm4_ncb.pro)


SXM_ACOMMON.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		SXM_ACOMMON.PRO

LAST CHANGED: ----------------------------------- 	22 Jul 2014

 PURPOSE:
	This file holds a common block for NSLS cryo-STXM (netCDF) data files

 MODIFICATION HISTORY:
 (21-Dec-00 cjj) file obtained from CJJ's source
 (22-Jul-14 aph) AXIS standard header added

(See c:\axis2000\sxm_acommon.pro)


SXM_COMMON.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		SXM_COMMON.PRO

LAST CHANGED: ----------------------------------- 	22 Jul 2014

 PURPOSE:
	This file holds a common block for NSLS cryo-STXM (netCDF) data files

 MODIFICATION HISTORY:
 (21-Dec-00 cjj) file obtained from CJJ's source
 (22-Jul-14 aph) AXIS standard header added

(See c:\axis2000\sxm_common.pro)


SXM_FILEEXIST

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		SXM_FILEEXIST

LAST CHANGED: ----------------------------------- 	22 Jul 2014

 PURPOSE:
	This function checks existence of a file (normally use findfile)
 ; Returns 1 if the file exists, 0 otherwise.

 CATEGORY:
	Image display.

 CALLING SEQUENCE:
 for procedures:
	ZOOM [, FACT = Fact, /INTERP, XSIZE = Xs, YSIZE = Ys, /CONTINUOUS, $
		/KEEP, ZOOM_WINDOW=Zoom_Win, /NEW_WINDOW ]
 for functions:
	Result = Sxm_fileexists (filename, [nofindfile=nofindfile])

 INPUTS:
	filename - name of file

 KEYWORDS:
	nofindfile	error value (0 if not found, 1 if found)

 MODIFICATION HISTORY:
 (21-Dec-00 cjj) file obtained from CJJ's source
 (22-Jul-14 aph) AXIS standard header added

(See c:\axis2000\sxm_fileexists.pro)


SXM_IPAR.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		SXM_IPAR.PRO

LAST CHANGED: ----------------------------------- 	22 Jul 2014

 PURPOSE:
	This procedure sets up the data structure sxm_par

 CATEGORY:
	Image display.

 CALLING SEQUENCE:
 for procedures:
	SXM_IPAR

 INPUTS: none

 KEYWORDS: none

 COMMON BLOCKS:
	SXM_COMMON

 MODIFICATION HISTORY:
 (21-Dec-00 cjj) file obtained from CJJ's source
 (22-Jul-14 aph) AXIS standard header added

(See c:\axis2000\sxm_ipar.pro)


SXM_READFILE.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		SXM_READFILE.PRO

LAST CHANGED: ----------------------------------- 	22 Jul 2014

 PURPOSE:
	This function reads in NSLS-I cryo-STXM files
 which are in netCDF format.  It returns 0 on error and 1 on success.

 CATEGORY:
	Data I/O

 CALLING SEQUENCE:
	Result = SXM_READFILE (filename,[ error_message, header_only=header_only)]

 INPUTS:
 	FILENAME	name of cryo-STXM file
	ERROR_MESSAGE	if file not found

 KEYWORDS:
	HEADER_ONLY	if set, returns header only

 OUTPUTS:
	No explicit outputs.   A new window is created if necessary

 COMMON BLOCKS:
	@sxm_common
	@sxm_acommon
	@bsif_common

 MODIFICATION HISTORY:
 (04-apr-98 aph) read in "now_nm" type cryo-STXMfiles
 (22-Jul-14 aph) AXIS standard header added

(See c:\axis2000\sxm_readfile.pro)


SXM_STRCLEAN

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		SXM_STRCLEAN

LAST CHANGED: ----------------------------------- 	22 Jul 2014

 PURPOSE:
	This  function interconverts strings (to read) and bytearrays (to store in netCDF)

 CATEGORY:
	NSLS-1 cryo-STXM (SXM) utility

 CALLING SEQUENCE:
	Result = SXM_STRCLEAN(input [,to_string=to_string, to_bytearray=to_bytearray])

 INPUTS:
	INPUT	parameter to convert

 KEYWORDS:
	to_string - if set, convert to a string
	to_bytearray - if set, convert to a bytearray

 COMMON BLOCKS:
	sxm_common

 MODIFICATION HISTORY:
 (21-Dec-00 cjj) file obtained from CJJ's source
 (22-Jul-14 aph) AXIS standard header added

(See c:\axis2000\sxm_strclean.pro)


TEXT_READ.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME: 
	TEXT_READ.PRO 
 
LAST CHANGED: ----------------------------------- 11-nov-00 
 
PURPOSE: 
	TEXT_READ - multi-block file read-in 
 
CATEGORY: 
	STAND ALONE: utilities 
 
CALLING SEQUENCE: 
	Result = text_READ(FILNENAME)  
 
CALLED FROM AXIS: 
	many procedures 
 
ROUTINES 
	function TEXT_READ, FNAME, block=b, blkInfo=bi 
	reads the bth block (starting from zero) in the file 
 and returns the contents as a matrix 
 KEYWORDS: 
	BLOCK - block number to read 
	BLKINFO - string array for header information for block 
 
COMMON BLOCKS: none 
 

(See c:\axis2000\text_read.pro)


TEXT_READ1.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	TEXT_READ1.PRO

LAST CHANGED: ----------------------------------- 23-Jul-14

PURPOSE:
	TEXT_READ1 - simple text file read-in (single block)

CATEGORY:
	STAND ALONE: utilities

CALLING SEQUENCE:
	Result = text_READ1(FILNENAME)

CALLED FROM AXIS:
	many procedures

ROUTINES
	function 	TEXT_READ1, FNAME, print=print
 reads simple text files consisting of 1 block plus a header
 KEYWORDS
	PRINT - if set, then print header information

COMMON BLOCKS: none

(See c:\axis2000\text_read1.pro)


THUMBLBLS

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	THUMBLBLS

LAST CHANGED: ----------------------------------- 16-Feb-2010

PURPOSE:
	ThumbLbls display the thumbnail sketches used for buffer identification

CATEGORY:
	AXIS:  utility (captive)

CALLING SEQUENCE:
	ThumbLbls, /ALL

CALLED FROM AXIS:
	whenever execute PlotBuf to display a new Buffer; clear; etc

;INPUTS: none

KEYWORDS:
	ALL  - force all 9 to be redsiplayed

OUTPUTS:
	revised AXIS display

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

MODIFICATION HISTORY:
 (   MAR-98 APH) split from axis_c to shrink file
 (14-jun-98 aph) axis_com
 (24-jun-99 aph) consistent color for image/spectra ; ADD zstack_color_common
 (26-jul-99 aph) if curBuf=0, only update labels
 (26-sep-99 aph) separated from THUMBS.PRO to have file name = run name
                adapted to 9 separate windows
 (31-jan-00 aph) AXIS standard documentation; re-ordered to avoid loss of utility routines
 (11-mar-00 aph) remove comment on @axis_com line
 (16-apr-00 aph) handle 3d images which have 3-channel (3-d) data structure
 (19-dec-00 cgz) substituted ax_white_color_index with ax_plot_axes_color_index
			substituted ax_black_color_index with ax_plot_bkgd_color_index
 (16-Feb-10 aph) separated from parent Thumblbls.pro file to follow IDL conventions

(See c:\axis2000\thumblbls.pro)


THUMBPLOT

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	THUMBPLOT

LAST CHANGED: ----------------------------------- 19-dec-00

PURPOSE:
	Thumbplot plots a thumbnail of buffer data in Bufnum

CATEGORY:
	AXIS:  utility (captive)

CALLING SEQUENCE:
	ThumbPlot, BUFNUM

CALLED FROM AXIS:
	whenever execute PlotBuf to display a new Buffer; clear; etc

;INPUTS:
	BUFNUM  - number of buffer to update thumbnail

KEYWORDS: none

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

MODIFICATION HISTORY:
 (   MAR-98 APH) split from axis_c to shrink file
 (14-jun-98 aph) axis_com
 (24-jun-99 aph) consistent color for image/spectra ; ADD zstack_color_common
 (26-jul-99 aph) if curBuf=0, only update labels
 (26-sep-99 aph) separated from THUMBS.PRO to have file name = run name
                adapted to 9 separate windows
 (31-jan-00 aph) AXIS standard documentation; re-ordered to avoid loss of utility routines
 (11-mar-00 aph) remove comment on @axis_com line
 (16-apr-00 aph) handle 3d images which have 3-channel (3-d) data structure
 (19-dec-00 cgz) substituted ax_white_color_index with ax_plot_axes_color_index
			substituted ax_black_color_index with ax_plot_bkgd_color_index
 (16-Feb-10 aph) separated  from parent thumblbls.pro to follow IDL conventions

(See c:\axis2000\thumbplot.pro)


THUMBZOOM

[Previous Routine] [Next Routine] [List of Routines]
NAME: 
	THUMBZOOM 
 
LAST CHANGED: ----------------------------------- 19-dec-00 
 
PURPOSE: 
	This procedure plots 4 or 9 buffers in the main image of AXIS 
 
CATEGORY: 
	AXIS: utility 
 
CALLING SEQUENCE: 
	ThumbZoom [, NUM=num , BufChoice=Buf4, color=color, all_scale=all_scale] 
 
CALLED FROM AXIS: 
	->Zoom->Thumbnails->{4->{B/W,color},9->{B/W,color}} 

INPUTS: 
	All input parameters are passed as keywords or by AXIS_COM. 
 
KEYWORDS: 
	NUM = 4 - display four user-selected buffers ( =9 - all buffers) 
	BUFCHOICE - indices of the selected buffers 
	COLOR - display images with current color table, spectra with AXIS_COLORS 
	ALL_SCALE - scale images by min/max of all displayed images 
 
OUTPUTS: 
	The composite image is generated as an AXIS 2d structure in bufer = 10. 
 All image options should execute on this composite image 
 USE COPY to write multi-image display to a single buffer 
 
COMMON BLOCKS: 
	@AXIS_COM	standard set of common blocks 
 
MODIFICATION HISTORY: 
 (xx-MAR-98 aph) split from axis_c 
 (14-jun-98 aph) axis_com 
 (24-jun-99 aph) go for consistent color ! 
 (29-jun-99 aph) correct name for axis_color_common variables 
 (10-jul-99 aph) add B/W or color option to assist printing 
 (26-sep-99 aph) split from Thumbs.pro to have filename = pro name 
 (01-Jan-00 aph) generate mega-image for lineouts 
 (01-jan-00 aph) AXIS standard documentation 
 (30-nov-00 cgz) Replaced call of wdivide with explicit !p.multi statement
			Replaced IF NUM EQ # staements with CASE structure
 (19-dec-00 cgz) substituted ax_white_color_index with ax_plot_axes_color_index
			substituted ax_black_color_index with ax_plot_bkgd_color_index

(See c:\axis2000\thumbzoom.pro)


TIF2NCDF

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	TIF2NCDF

LAST CHANGED: ----------------------------------- 12-may-02

 PURPOSE:
	This procedure converts one or a series of tif-format images
 into netCDF format FILES (nsls 'OLD' *.NC) using tifrd_im.pro
 Works for ALS PEEM-2 (12-bit and 16-bit via rd_peem.pro)
 and SRC Elmitech (De Stasio) 16-bit tif file formats
 optional binning, E-calibrate, dark-correction (using multiple files), gain-correction.
 Area of interest files from PEEM-2 camera can be used to select regions from
 full scale images (not working as of jul-01)

 CATEGORY:
	Image readin
 called from stacks~convert format~TIF to netCDF~1 / many / file

 CALLING SEQUENCE:
	TIF2NCDF [, file, list=list, bin=bin, outlist = outlist, $
             delE=delE, fltr = fltr, delC=delC]

 INPUTS:
 	FILE	path&name of tif file - optional

 KEYWORDS:
	LIST	name of file with list of set of names of {path&file} (*.lst format)
	BIN		average pixels in bocks of n (bin = 2 cuts size x4; bin=3 by 9 etc)
	OUTLIST	name of stack list file (*.sl) to write list of files for later analysis
	AOI		[x0, y0, x1, y1] defining region of interest
	delE	shift in energy scale (linear re-calibration)
	fltr	allow call line selection of filter (default = '*.tif')
	delC	constant background to apply to all pixels

 OUTPUTS:
	file as path+name+'.nc' written for each input file or list element

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

 SIDE EFFECTS:

 PROCEDURE:
 PEEM-2 and Elmitech formats are differentiated by
 convention in PEEM-2 of including a # to seperate sample name from sequence number
 The image and associated information are put into
 BSIF_COMMON variables:
   image_data (the array which holds the image - possible several
		planes deep for I, IO, CLOCK)
   x_normal, y_normal, rotated, x_title, y_title

 MODIFICATION HISTORY:
 (13-May-99 aph) adapted from als2ncdf
 (08-jun-99 aph) add group to get_num calls
 (15-jun-99 aph) generalise to handle lists with no path or defective path
 (17-jul-99 aph) provision for dark count subtraction
 (18-jul-99 aph) improved checking for correct filenames (Get_path modified)
 (26-mar-00 aph) correct read in of ALS PEEM lists
 (24-oct-00 aph) option to use 12-bit or 16-bit PEEM data
 (03-oct-01 aph) allow subtraction of constant if needed (Mephisto PEEM)
 (30-mar-01 aph) set up for Elmitech stacks; bypass filename sorting
				  default bgnd - 32768; different E read
 (19-apr-01 aph) changed sl format to match zimba (path/names)
 (22-apr-01 aph) AXIS standard header added; force extensions
 (08-may-01 aph) implement dark image for background correction; implement AOI
 (14-jul-01 aph) add option to subtract dark file (or a sum) from each image
 (31-jul-01 aph) add axis keyword to RD_PEEM call and to call to this routine
 (12-may-02 aph) correct invalid name format in header.

(See c:\axis2000\tif2ncdf.pro)


TIFRD_IM.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	TIFRD_IM.PRO

LAST CHANGED: ----------------------------------- 21-Jul-14

 PURPOSE:
	This procedure reads a tif image file (*.tif) using RD_PEEM  and converts it to
 NetCDF format. This is used to process *.tif to *.nc files for use in stack_analyze

 CATEGORY:
	Image format conversion.

 CALLING SEQUENCE:
 for procedures:
	TIFRD_IM, [file, bin=bin, Energy=energy, white=white, CCD_bgnd=CCD_bgnd, $
        smth = smth, bits12 = bits12, region = region, scale=scale, $
		 help=help, _extra=e]

 INPUTS:
	FILE 	name of file to convert (user prompted if not supplied)

 KEYWORDS:
	BIN		paramater for binning
	BITS12 	if set to 12 this uses the 12-bit read routine in RD_PEEM
	ENERGY	sets energy of PEEM image
	CCD_bgnd CCD background image or average value that is subtracted
	SCALE 	pixel size in microns
	SMTH 	if set, applies a 3-point median smooth
	WHITE 	if set, divides the image by an image in file white
           (response of CCD to uniform illumination)
	AOI 	area of interest, defined by box, [x0,x1, y0, y1] acquired by PEEM-2
			used to extract su-image from dark and white files
	REGION 	a 4-number vector [x_start, x_stop, y_start, y_stop]
			defining the region of the image to be selected
			(if scale set, in real space units. Otherwise, in pixels)
	NOFILTER if set, then pickfile dialog does not have filter set to '*.tif'
	HELP	print information about this routine
	_EXTRA	any other parameters to be passed on to other procedures

 COMMON
	AXIS_COM general common blocks for AXIS
	BSIF_COM - common for netCDF format

 OUTPUTS: data is set-up in image_data and with bsif_common variables set
	 ready to write *.nc if desired (as is done from tif2ncdf)

 MODIFICATION HISTORY:
 (13-May-99 aph) adapted from ax_rd_im; then to using rd_peem
 (08-jun-99 aph) add group to get_num call
 (17-jul99 aph) CCD_bgnd introduced
 (24-oct-00 aph) allow 12-bit or 16-bit ALS PEEM readin
 (06-may-01 aph) AXIS standard header added; gain for dynamic range deleted;
				format of image_data switched to float
 (12-jul-01 aph) correct for dark on read-in if aio_dark supplied
 (31-jul-01 aph) include /axis keyword in call to RD_PEEM (assumes only run from axis)
 (21-Jul-14 aph) corrected header

(See c:\axis2000\tifrd_im.pro)


TIF_CONVERT

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		TIF_CONVERT

LAST CHANGED: ----------------------------------- 	11-Mar-2013 (aph)

 PURPOSE:
	This file contains a set of procedures which are a widget to
 convert tif files written by various cameras to a set of NetCDF files
 or *.ncb file for use in aXis2000.
 Relative to the text-only approach of ax_peem_rd.pro, this widget
 has provision for graphical selection of the region of interest.
 Adapted to be called from axis2000

 CATEGORY:
	Image conversion.

 CALLING SEQUENCE:
 read~images+peem TIF_CONVERT:

 PROCEDURES
 tif_convert_prep
 tif_convert_limits_get_prep
 tif_convert_limits_get_imgdisp
 tif_convert_gl_dialogue_event
 tif_convert_gl_dialogue
 tif_convert_limits_get
 tif_convert

 INPUTS: none required

 KEYWORDS: none

 OUTPUTS:
	*.nc files are written if requested by user

 COMMON BLOCKS:
  @AXIS_COM	standard set of common blocks
  @BSIF_com
  @tif_convert_com
  @limits_get_common

 MODIFICATION HISTORY:
 (06-aug-02 aph) AXIS standard header added; integrated with axis2000
 (30-apr-03 aph) adapt for SRC, sphinx data
 (14-may-03 aph) add direct conversion to ncb; move to stack.convert menu; scale in nm/pixel
 (28-jul-03 aph) replaced 'label' names in setting up widget - conflict with Label array in axis.com
 (17-may-04 aph) adapt for Lox stacks
 (04-Jun-04 aph) modify name parsing to get all characters of filename in filename_ev_msec_list
                make work with sub-sets of the list
 (26-may-05 aph) set up microscope default settings; rationalize parameter display & setting
 (13-jul-05 aph) continue adapting PEEM_general for auto-configure to specific microscopes
                 reconfigured switches to make value and button the same
				  preserve values between read-ins (unless close IDL)
 (16-oct-05 aph) change read_lox to read_lox_spectra
 (20-jan-07 aph) add in processing for ALS PEEM-3 format files
 (05-apr-07 aph) correct pix_siz - was calling tif_rdim, rd_peem with scale in nm not microns
                 so image dimensions were wrong
 (12-Sep-07 aph) add group keyword to all calls ro Read_PEEM3
 (07-Aug-08 aph) add switch to select / de-select I-ring normalization
 (30-jul-09 aph) changed analcom to stack_process_com (update to stack_process) NB not done in initial Sep-08 change
 (11-Mar-13 aph) include processing for SagaLS Elmitec PEEM (energy scale generator)

(See c:\axis2000\tif_convert.pro)


TIF_CONVERT_COM.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	TIF_CONVERT_COM.PRO

LAST CHANGED: ----------------------------------- 07-Aug-08 (aph)

PURPOSE:
	This INCLUDE file contains COMMON blocks for  TIF_CONVERT

CATEGORY:
	AXIS: utility

CALLING SEQUENCE: @tif_convert_com

 NAMES AND MEANING OF COMMON VARIABLES
 *************************************************************************
 ***********         TIF_CONVERT COMMON PARAMETERS      ******************
 *************************************************************************

  COMMON tif_convert_common,	 $
	tif_convert_par  - widget values
	pathsep			-  path for files
	bits12			-  1 = 12bit, 0 =16bit
	ccd_bgnd		-  No of counts in average CCD background
	smth			-  1 = median smooth
	bin				-  nxn binning
	white			- file for CCD pattern correction
	start			-
	ncb_switch		- 1= store as binary, 0 = store as separate *.nc files
	pix_siz_nm		-  nm/pixel
	tif_signed		- 1 = signed, 0 = unsigned
	tif_region		- xmin, xmax, ymin, ymax - pixel limits o fregion of image to convert
	gotalist		- flag indicating set of files have been selected (1) or not (0)
	filename_list2	- list of output files
	spectrum_path	- path to spectrum file
	spectrum_file	- name of spectrum file
	spectrum_flag	- spectrum 1 = read, 0 = not read
	n_tif_files		- number of tif files
	tif_path		- input path
	nc_filebase		- output filename base
	nc_path			- output path
	lox_flag		- 1 = Lox, 0 = other (used in other programs)
	microscope		- current type of microscope (string)
   microscope_num  - current type of microscope (number)

(See c:\axis2000\tif_convert_com.pro)


TIF_LOAD.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		TIF_LOAD.PRO

LAST CHANGED: ----------------------------------- 	21 Jul 2014

 PURPOSE:
	This function loads *.tif, *,bmp and *.gif files into a 2D stucture

 CATEGORY:
	Data I/O

 CALLING SEQUENCE:
	Result = TIF_LOAD(NOF=nof, error=err, BMP=bmp, GIF=gif, _extra=e)

 INPUTS: none

 KEYWORDS:
	NOF		no filter
	BMP		file is a bmp
	GIF		file is a gif
	_EXTRA

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

 MODIFICATION HISTORY:
 (aph 20-feb-98) first developed
 (aph 14-jun-98) add axis_com
 (21-Jul-14 aph) AXIS standard header added

(See c:\axis2000\tif_load.pro)


TIF_TO_NCB

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	TIF_TO_NCB

LAST CHANGED: ----------------------------------- 02-May-14

 PURPOSE:
	This procedure converts a series of 16-bit unsigned tif files (*.tif) image files
 into a binary stack file.

 CATEGORY:
	AXIS: stack analysis

 CALLING SEQUENCE:
	RESULT = TIF_TO_NCB(group_leader=axis_ID)

 INPUTS:
	none

 KEYWORD PARAMETERS:
	GROUP_LEADER - identification of caller for modal control

 OUTPUTS:
    FILE.NCB - stack binary file

 COMMON BLOCKS:
   @AXIS_COM - set of common blocks for AXIS
	stack_process_com
	bsif_com
	volume_data

 RESTRICTIONS:
	caveat emptor

 MODIFICATION HISTORY:
 (02-May-14 aph) first developed (adapted from JPG_TO_NCB)
 (30-Jun-14 aph) correct header

(See c:\axis2000\tif_to_ncb.pro)


TVIMAGE

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
     TVIMAGE

 PURPOSE:
     This purpose of TVIMAGE is to enable the TV command in IDL
     to be a completely device-independent and color-decomposition-
     state independent command. On 24-bit displays color decomposition
     is always turned off for 8-bit images and on for 24-bit images.
     The color decomposition state is restored for those versions of
     IDL that support it (> 5.2). Moreover, TVIMAGE adds features
     that TV lacks. For example, images can be positioned in windows
     using the POSITION keyword like other IDL graphics commands.
     TVIMAGE also supports the !P.MULTI system variable, unlike the
     TV command. TVIMAGE was written to work especially well in
     resizeable graphics windows. Note that if you wish to preserve
     the aspect ratio of images in resizeable windows, you should set
     the KEEP_ASPECT_RATIO keyword, described below. TVIMAGE works
     equally well on the display, in the PostScript device, and in
     the Printer and Z-Graphics Buffer devices. The TRUE keyword is
     set automatically to the correct value for 24-bit images, so you
     don't need to specify it when using TVIMAGE.

 AUTHOR:
       FANNING SOFTWARE CONSULTING:
       David Fanning, Ph.D.
       1645 Sheely Drive
       Fort Collins, CO 80526 USA
       Phone: 970-221-0438
       E-mail: davidf@dfanning.com
       Coyote's Guide to IDL Programming: http://www.dfanning.com/

 CATEGORY:
     Graphics display.

 CALLING SEQUENCE:

     TVIMAGE, image

 INPUTS:
     image:    A 2D or 3D image array. It should be byte data.

       x  :    The X position of the lower-left corner of the image.
               This parameter is only recognized if the TV keyword is set.

       y  :    The Y position of the lower-left corner of the image.
               This parameter is only recognized if the TV keyword is set.

 KEYWORD PARAMETERS:

     BACKGROUND:   This keyword specifies the background color. Note that
               the keyword ONLY has effect if the ERASE keyword is also
               set or !P.MULTI is set to multiple plots and TVIMAGE is
               used to place the *first* plot.

     ERASE:    If this keyword is set an ERASE command is issued
               before the image is displayed. Note that the ERASE
               command puts the image on a new page in PostScript
               output.

     _EXTRA:   This keyword picks up any TV keywords you wish to use.

     HALF_HALF: If set, will tell CONGRID to extrapolate a *half* row
               and column on either side, rather than the default of
               one full row/column at the ends of the array.  If you
               are interpolating images with few rows, then the
               output will be more consistent with this technique.
               This keyword is intended as a replacement for
               MINUS_ONE, and both keywords probably should not be
               used in the same call to CONGRID.

     KEEP_ASPECT_RATIO: Normally, the image will be resized to fit the
               specified position in the window. If you prefer, you can
               force the image to maintain its aspect ratio in the window
               (although not its natural size) by setting this keyword.
               The image width is fitted first. If, after setting the
               image width, the image height is too big for the window,
               then the image height is fitted into the window. The
               appropriate values of the POSITION keyword are honored
               during this fitting process. Once a fit is made, the
               POSITION coordiates are re-calculated to center the image
               in the window. You can recover these new position coordinates
               as the output from the POSITION keyword.

     MARGIN:   A single value, expressed as a normalized coordinate, that
               can easily be used to calculate a position in the window.
               The margin is used to calculate a POSITION that gives
               the image an equal margin around the edge of the window.
               The margin must be a number in the range 0.0 to 0.333. This
               keyword is ignored if the POSITION keyword is used.

     MINUS_ONE: The value of this keyword is passed along to the CONGRID
               command. It prevents CONGRID from adding an extra row and
               column to the resulting array, which can be a problem with
               small image arrays.

     NOINTERPOLATION: Setting this keyword disables the default bilinear
               interpolation done to the image when it is resized. Nearest
               neighbor interpolation is done instead. This is preferred
               when you do not wish to change the pixel values of the image.
               This keyword must be set, for example, when you are displaying
               GIF files that come with their own non-IDL color table vectors.

     NORMAL:   Setting this keyword means image position coordinates x and y
               are interpreted as being in normalized coordinates. This keyword
               is only valid if the TV keyword is set.

     OVERPLOT: Setting this keyword causes the POSITION keyword to be ignored
               and the image is positioned in the location established by the
               last graphics command. For example:

                    Plot, Findgen(11), Position=[0.1, 0.3, 0.8, 0.95]
                    TVImage, image, /Overplot

     POSITION: The location of the image in the output window. This is
               a four-element floating array of normalized coordinates of
               the type given by !P.POSITION or the POSITION keyword to
               other IDL graphics commands. The form is [x0, y0, x1, y1].
               The default is [0.0, 0.0, 1.0, 1.0]. Note that this can
               be an output parameter if the KEEP_ASPECT_RATIO keyword is
               used.

     TV:       Setting this keyword makes the TVIMAGE command work much
               like the TV command, although better. That is to say, it
               will still set the correct DECOMPOSED state depending upon
               the kind of image to be displayed (8-bit or 24-bit). It will
               also allow the image to be "positioned" in the window by
               specifying the coordinates of the lower-left corner of the
               image. The NORMAL keyword is activated when the TV keyword
               is set, which will indicate that the position coordinates
               are given in normalized coordinates rather than device
               coordinates.

               Setting this keyword will ensure that the keywords
               KEEP_ASPECT_RATIO, MARGIN, MINUS_ONE, MULTI, and POSITION
               are ignored.

 OUTPUTS:
     None.

 SIDE EFFECTS:
     Unless the KEEP_ASPECT_RATIO keyword is set, the displayed image
     may not have the same aspect ratio as the input data set.

 RESTRICTIONS:
     If the POSITION keyword and the KEEP_ASPECT_RATIO keyword are
     used together, there is an excellent chance the POSITION
     parameters will change. If the POSITION is passed in as a
     variable, the new positions will be returned in the same variable
     as an output parameter.

     If a 24-bit image is displayed on an 8-bit display, the
     24-bit image must be converted to an 8-bit image and the
     appropriate color table vectors. This is done with the COLOR_QUAN
     function. The TVIMAGE command will load the color table vectors
     and set the NOINTERPOLATION keyword if this is done. Note that the
     resulting color table vectors are normally incompatible with other
     IDL-supplied color tables. Hence, other graphics windows open at
     the time the image is display are likely to look strange.

 EXAMPLE:
     To display an image with a contour plot on top of it, type:

        filename = FILEPATH(SUBDIR=['examples','data'], 'worldelv.dat')
        image = BYTARR(360,360)
        OPENR, lun, filename, /GET_LUN
        READU, lun, image
        FREE_LUN, lun

        TVIMAGE, image, POSITION=thisPosition, /KEEP_ASPECT_RATIO
        CONTOUR, image, POSITION=thisPosition, /NOERASE, XSTYLE=1, $
            YSTYLE=1, XRANGE=[0,360], YRANGE=[0,360], NLEVELS=10

 MODIFICATION HISTORY:
      Written by:     David Fanning, 20 NOV 1996.
      Fixed a small bug with the resizing of the image. 17 Feb 1997. DWF.
      Removed BOTTOM and NCOLORS keywords. This reflects my growing belief
         that this program should act more like TV and less like a "color
         aware" application. I leave "color awareness" to the program
         using TVIMAGE. Added 24-bit image capability. 15 April 1997. DWF.
      Fixed a small bug that prevented this program from working in the
          Z-buffer. 17 April 1997. DWF.
      Fixed a subtle bug that caused me to think I was going crazy!
          Lession learned: Be sure you know the *current* graphics
          window! 17 April 1997. DWF.
      Added support for the PRINTER device. 25 June 1997. DWF.
      Extensive modifications. 27 Oct 1997. DWF
          1) Removed PRINTER support, which didn't work as expected.
          2) Modified Keep_Aspect_Ratio code to work with POSITION keyword.
          3) Added check for window-able devices (!D.Flags AND 256).
          4) Modified PostScript color handling.
      Craig Markwart points out that Congrid adds an extra row and column
          onto an array. When viewing small images (e.g., 20x20) this can be
          a problem. Added a Minus_One keyword whose value can be passed
          along to the Congrid keyword of the same name. 28 Oct 1997. DWF
      Changed default POSITION to fill entire window. 30 July 1998. DWF.
      Made sure color decomposition is OFF for 2D images. 6 Aug 1998. DWF.
      Added limited PRINTER portrait mode support. The correct aspect ratio
          of the image is always maintained when outputting to the
          PRINTER device and POSITION coordinates are ignored. 6 Aug 1998. DWF
      Removed 6 August 98 fixes (Device, Decomposed=0) after realizing that
          they interfere with operation in the Z-graphics buffer. 9 Oct 1998. DWF
      Added a MARGIN keyword. 18 Oct 1998. DWF.
      Re-established Device, Decomposed=0 keyword for devices that
         support it. 18 Oct 1998. DWF.
      Added support for the !P.Multi system variable. 3 March 99. DWF
      Added DEVICE, DECOMPOSED=1 command for all 24-bit images. 2 April 99. DWF.
      Added ability to preserve DECOMPOSED state for IDL 5.2 and higher. 4 April 99. DWF.
      Added TV keyword to allow TVIMAGE to work like the TV command. 11 May 99. DWF.
      Added the OVERPLOT keyword to allow plotting on POSITION coordinates
         estabished by the preceding graphics command. 11 Oct 99. DWF.
      Added automatic recognition of !P.Multi. Setting MULTI keyword is no
         longer required. 18 Nov 99. DWF.
      Added NOINTERPOLATION keyword so that nearest neighbor interpolation
         is performed rather than bilinear. 3 Dec 99. DWF
      Changed ON_ERROR condition from 1 to 2. 19 Dec 99. DWF.
      Added Craig Markwardt's CMCongrid program and removed RSI's. 24 Feb 2000. DWF.
      Added HALF_HALF keyword to support CMCONGRID. 24 Feb 2000. DWF.
      Fixed a small problem with image start position by adding ROUND function. 19 March 2000. DWF.
      Updated the PRINTER device code to take advantage of available keywords. 2 April 2000. DWF.
      Reorganized the code to handle 24-bit images on 8-bit displays better. 2 April 2000. DWF.
      Added BACKGROUND keyword. 20 April 2000. DWF.
      Fixed a small problem in where the ERASE was occuring. 6 May 2000. DWF.
      Rearranged the PLOT part of code to occur before decomposition state
         is changed to fix Background color bug in multiple plots. 23 Sept 2000. DWF.
      Removed MULTI keyword, which is no longer needed. 23 Sept 2000. DWF.
      Fixed a small problem with handling images that are slices from 3D image cubes. 5 Oct 2000. DWF.
      Added fix for brain-dead Macs from Ben Tupper that restores Macs ability to display images. 8 June 2001. DWF.

(See c:\axis2000\TVimage.pro)


WIN2LPR

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		WIN2LPR

LAST CHANGED: ----------------------------------- 22-Jul-14

 PURPOSE:
	This procedure sends contents of the main screen to the PRINTER pseudo device.
 Earlier versions used approaches based on transfer to a disk file then copying to
 the printer device specified in the axis.ini file.

 CATEGORY:
  utility

 CALLING SEQUENCE:
 for procedures:
	WIN2LPR, printer, SIZE=sz, XS=xs, YS=ys, SYS=sys, PR = pr, _extra=e

 INPUTS:
 	printer

 KEYWORDS:
	SIZE 	pixels (for square windows)
	XS		X-pixels (for rectangular windows)
	YS		Y-pixels (for rectangular windows)
	SYS		define as 'WIN' or 'X'
	PR		printer device ('PCL' or 'PS')
	LS		landscape

 OUTPUTS:
	print out

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks


 MODIFICATION HISTORY:
 (22-Jun-97 aph) ********  Win2LPR MODIFIED !!!!
 (21-jun-97 APH) ADAPTED to allow printing from Windows system by
      replacing the PRB command for WINsystems (PRB is UNIX operating system specific)
      if SYS='WIN' and PR is not set, default printer is 'PS' (postscript)
 (28-jun-98 aph) adapt win2lpr to print to nsls X1A spooler
 (14-apr-99 aph) adapt win2lpr to NT use of lpr command
 (11-may-99 aph) generalize printing using 'OTHER'
 (11-mAY-99 aph)  added PR_command keyword
 (30-nov-00 cgz) Migrated WIN2LPR to separate file
 (29-jan-02 sgu) modified to use 'PRINTER' device
 (21-Jul-14 aph) corrected header

(See c:\axis2000\win2lpr.pro)


WIN2TIF.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		WIN2TIF.PRO

LAST CHANGED: ----------------------------------- 22-Jul-14 (aph)

 PURPOSE:
   This function reads contents of the WNUM graphics window
 into a TIFF file, with optional grayscale, 3-channel RGB or with data as REALS

 CATEGORY: graphics utility; standalone

 CALLING SEQUENCE:
   RESULT = WIN2TIF, FileName, WIN=win, GRAY=gray, REAL=real

 INPUTS:
  Filename	name of output file (*.tif)

 WNUM  number of window to read (optional; current window is default)
    wnum is specified either as number
    or as a 5-element array [num, x0, y0, xwid, ywid] for a subset of the window

 KEYWORDS:
 WNUM		window number
 WIN		alternative to specifying WNUM
 GRAY		if set, write as 8-bit grayscale
 REAL		if set, write as a float

 OUTPUTS: writes a TIFF file to disk

 COMMON BLOCKS:
 COLORS

 FUNCTION
  READWIN [, wnum]  -- read window into bytscal array from window, WNMUM


 MODIFICATION HISTORY:
 (30-nov-00 cgz) Separated from WINDOW.PRO
 (04-jan-01 cgz) Migrated READWIN from WINDOWS.PRO
 (12-mar-03 aph) get to read 3-color from true color display; tiff_write (IDL4) => write_tiff (idl5)
 (02-dec-05 aph) flip image for IDL after 6.0
 (26-Feb-14 aph) get actual data and write as FLOAT
 (22-Jul-14 aph) corrected header

(See c:\axis2000\win2tif.pro)


WRITE_CTS

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	WRITE_CTS

LAST CHANGED: ----------------------------------- 24-Jul-2010

 PURPOSE:
	This function converts an aXis binary stack to set of ascii spectra (*.cts)
 suitable for input to PyMCA

 CATEGORY:
	utiltiy

 CALLING SEQUENCE:
	RESULT = WRITE_CTS(group=group, verbose=verbose, silent=silent, _extra=e)

 INPUTS:

 KEYWORDS:
	GROUP		group leader (Axis_ID if called from aXis2000 and axis)
	MULTI_DET 	multiple detector signals in one file
	SILENT  	if set, no feedback
	EXTRA 		passed on parameters

 OUTPUTS:
 set of 1-column ascii files suitable to read into PYMCA
 sum of all all XRF spectra

 COMMON BLOCKS:
   @AXIS_COM - set of common blocks for AXIS
	Volume_data - stack
   @BSIF_COM - common block for netCDF

 SIDE EFFECTS:

 RESTRICTIONS:
 assumes all XGLabs file names involve cycling the last 3 spaces before '.' as the sequence number

 PROCEDURE:

 RESTRICTIONS:

 MODIFICATION HISTORY:
 (26-Feb-10 aph) first developed from ax_xrf_convert
 (24-Jul-10 aph) correct the filename generation algorithm

(See c:\axis2000\write_cts.pro)


WRITE_GIF

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
	WRITE_GIF

 PURPOSE:
	Write an IDL image and color table vectors to a
	GIF (graphics interchange format) file.

 CATEGORY:

 CALLING SEQUENCE:

	WRITE_GIF, File, Image  ;Write a given array.

	WRITE_GIF, File, Image, R, G, B  ;Write array with given color tables.


 INPUTS:
	Image:	The 2D array to be output.

 OPTIONAL INPUT PARAMETERS:
      R, G, B:	The Red, Green, and Blue color vectors to be written
		with Image.
 Keyword Inputs:
	CLOSE = if set, closes any open file if the MULTIPLE images
		per file mode was used.  If this keyword is present,
		nothing is written, and all other parameters are ignored.
	MULTIPLE = if set, write files containing multiple images per
		file.  Each call to WRITE_GIF writes the next image,
		with the file remaining open between calls.  The File
		parameter is ignored, but must be supplied,
		after the first call.  When writing
		the 2nd and subsequent images, R, G, and B are ignored.
		All images written to a file must be the same size.


 OUTPUTS:
	If R, G, B values are not provided, the last color table
	established using LOADCT is saved. The table is padded to
	256 entries. If LOADCT has never been called, we call it with
	the gray scale entry.


 COMMON BLOCKS:
	COLORS

 SIDE EFFECTS:
	If R, G, and B aren't supplied and LOADCT hasn't been called yet,
	this routine uses LOADCT to load the B/W tables.

 COMMON BLOCKS:
	WRITE_GIF_COMMON.
 RESTRICTIONS:
	This routine only writes 8-bit deep GIF files of the standard
	type: (non-interlaced, global colormap, 1 image, no local colormap)

	The Graphics Interchange Format(c) is the Copyright property
	of CompuServ Incorporated.  GIF(sm) is a Service Mark property of
	CompuServ Incorporated.

 MODIFICATION HISTORY:
	Written 9 June 1992, JWG.
	Added MULTIPLE and CLOSE, Aug, 1996.

(See c:\axis2000\ax_write_gif.pro)


WRITE_MRC_FILE.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		WRITE_MRC_FILE.PRO

LAST CHANGED: ----------------------------------- 22-Jul-14  [aph,30-Jlu-09,from 06-Jul-06 (gaj)

 PURPOSE:
	This procedure writes  a whole stack (3d (E,x,y) array) to a *.MRC binary file
 	It assumes Common volume_data, image_stack exists and contains the data

	For definition of the MRC format see:
	http://bio3d.colorado.edu/imod/doc/mrc_format.txt
   http://www.msg.ucsf.edu/IVE/IVE4_HTML/IM_ref2.html#Introduction



 CATEGORY:
	stack processing

 CALLING SEQUENCE:
	WRITE_MRC_FILE, FILE

 INPUTS:
 	FILE	name of the output file

 KEYWORDS: none

 OUTPUTS:
	*.mrc file

 COMMON BLOCKS:
 AXIS_COM	standard set of common blocks
 STACK_PROCESS_COM
 BSIF_COM
 volume_data, image_stack

 MODIFICATION HISTORY:
 (12-apr-06 gaj) first version based on WRITE_WB
 (01-may-06 aph) clean-up
 (06-jul-06 gaj) added extended header to store tilt angles. Fixed bug with scaling of min, max, mean
 (30-jul-09 aph) changed analcom to stack_process_com (update to stack_process)
 (22-Jul-14 aph) corrected header

(See c:\axis2000\write_mrc_file.pro)


WRITE_P3B

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		WRITE_P3B

LAST CHANGED: ----------------------------------- 	20-Jan-07

 PURPOSE:
	This function writes a 2-d array as an ALS PEEM3 image
 (IDL windows binary with a structure defining microscope parameters)

 CATEGORY:
	utility

 CALLING SEQUENCE:
	Result =  WRITE_P3B, Filename, Data, TAGS = tags

 INPUTS:
	Filename	name of file (ext = '*.p3b')
	Data		2-d array with image

 KEYWORDS:
	TAGS	predefined structure of microscope parameters

 OUTPUTS:
	RESULT	ALS PEEM3 format data file

 COMMON BLOCKS: none


 MODIFICATION HISTORY:
 (20-Jan-07 aph) extracted from filetype_p3b.pro (20-jan-07 version of A. Scholl)

(See c:\axis2000\write_p3b.pro)


WRITE_PRINCETON

[Previous Routine] [Next Routine] [List of Routines]
 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 c:\axis2000\write_princeton.pro)


WRITE_SDF.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		WRITE_SDF.PRO

LAST CHANGED: ----------------------------------- 22-Jul-14

 PURPOSE:
	This function writes a self-defining format ascii file
 as used in STXM microscopes using the STXM_control acquisition code.
 This is also used to write VLM images to be read into STXM_control
 AXIS 2d format buffers are written as images
 Axis 1d format buffers are written as NEXAFS point (spectra)

 CATEGORY:
	Input / output utilty; stand alone or from ax_sdf / axis2000

 CALLING SEQUENCE:
	Result = WRITE_SDF(structure,[ file=file, group=group, _extra=e])

 INPUTS:
   STRUCTURE	axis format structure

 KEYWORDS:
 	FILE		optional file name
	GROUP		group leader (Axis_ID if called from aXis2000 and axis)
	_EXTRA		other passed through parameters

 OUTPUTS:
	file written to disk
 1d (spectra) - *.hdr, *.xsp
 2d (image, linescan) - *.hdr, *.xim

 COMMON BLOCKS:
	STACK_PROCESS_COM  common for stack_process
	AXIS_COM	standard set of common blocks
	BSIF_COM	stack common

 MODIFICATION HISTORY:
 (18-oct-01 aph) first version
 (02-may-04 aph) add spectrum write-out
 (30-jul-09 aph) changed analcom to stack_process_com (update to stack_process)
 (22-Jul-14 aph) corrected header

(See c:\axis2000\write_sdf.pro)


WRITE_SPECTRUM

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		WRITE_SPECTRUM

LAST CHANGED: ----------------------------------- 	31-Jul-11

 PURPOSE:
	This procedure writes a spectral netCDF file (format for old NSLS1 X1A STXM data)

 CATEGORY:
	Image display.

 CALLING SEQUENCE:
  WRITE_SPECTRUM,  nc_filename, ev_nm_angstroms, signal, $
                    comments=comments, ev=ev, angstroms=angstroms, nm=nm

 INPUTS:
	NC_FILENAME	flename
	EV_NM_ANGSTROMS	parameter defining x-axis unit
 	SIGNAL	y-axis data

 KEYWORDS:
	COMMENTS - optional header comments
	EV		- energy axis
	ANGSTROMS - wavelength axis (in A)
	NM - wavelength axis (in A)

 OUTPUTS: file is written

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

 SIDE EFFECTS:
	A window is created/destroyed.

 MODIFICATION HISTORY:
 (01--Jun-93 cjj) from Mark Rivers stuff;
 (31-Jul-11 aph) AXIS standard header added

(See c:\axis2000\write_spectrum.pro)


WRITE_STXM

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		WRITE_STXM

LAST CHANGED: ----------------------------------- 	31-Jul-11

 PURPOSE:
	This procedure writes a NSLS1 X1A  STXM image file (netCDF)
 It assumes that you have put the image and associated information
 into BSIF_COMMON variables:
   image_data (the array which holds the image - possible several
		planes deep for I, IO, CLOCK)
   x_normal, y_normal, rotated, x_title, y_title,
   x_dist, and y_dist

 If "sd" is passed in the argument list, then the STXM scan data
 is assumed to reside in sd.  Otherwise, it is assumed that user_buffer
 contains sd. In the netCDF file, the scan data is written
 as scan data info and not as a user_buffer (since user_buffers
 are inherent to BSIF but are neither encouraged nor disallowed in netCDF)

 CATEGORY:
	input/output

 CALLING SEQUENCE:
 	WRITE_STXM, file, sd

 INPUTS:
 	FILE	name of file
	SD 	 structure with data

 KEYWORDS:
	HELP	if set, print help

 OUTPUTS: none (file written)

 COMMON BLOCKS:
	BSIF_COM	standard netCDF common block

 MODIFICATION HISTORY:
 (01-Jun-93 cjj) Based on Mark Rivers stuff; Chris Jacobsen, June 1993.
 (27-Aug-93 cjj) the change from version 1.0 to version 1.1 involved
      changing the netCDF attribute "sd.operator" to "operator".
 (02-Nov-93 cjj) the change to version 1.2 forces x_title and y_title to
      be strings rather than byte arrays.
 (31-Jul-11 aph) AXIS standard header added

(See c:\axis2000\write_stxm.pro)


WRITE_TAGS

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		WRITE_TAGS

LAST CHANGED: ----------------------------------- 	20-Jan-07

 PURPOSE:
	This function writes parameters as a structure in the AL SPEEM3 data format

 CATEGORY:
	utility

 CALLING SEQUENCE:
	Result =  WRITE_P3B, UNIT,  tags

 INPUTS:
	Unit	open file unit number
	Tags	parameters with associated Tag names (IDL structure)

 KEYWORDS: none

 OUTPUTS: adds tags to data file

 COMMON BLOCKS: none


 MODIFICATION HISTORY:
 (20-Jan-07 aph) extracted from filetype_p3b.pro (20-jan-07 version of A. Scholl)

(See c:\axis2000\writetags.pro)


WRITE_XAS[1]

[Previous Routine] [Next Routine] [List of Routines]
NAME: 
	WRITE_XAS 
 
LAST CHANGED: ----------------------------------- 26-sep-00 
 
PURPOSE: 
	This procedure writes a spectrum into 'XAS' format, with 
 optional guided writing of the header paramaters 
 
CATEGORY: 
	STAND ALONE:  spectral processing 
 
CALLING SEQUENCE: 
 	WRITE_XAS_WRAP 
 
CALLED FROM AXIS: 
	Write-XAS spectrum 
 
ROUTINES 
	WRITE_XAS_WRAP 
	WRITE_XAS - routine that actually writes data (many keywords!) 
 
INPUTS: 
	lun		logical unit number 
	header	header array 
	info	request for information about routine 
 for WRITE_XAS 
	filename - name of file 
	ev		energy array 
	data	intensity array 
	header	header 
 
KEYWORDS: 
	none for write_xas_wrap 
 
	for WRITE_XAS: 
   formula		= chemical formula of sample 
	common_name	= common_name of sample 
	edge		= edge 
	acquisition_mode = acquisition_mode 
	source_purity = source_purity 
	comments 	= comments 
	delta_ev	= energy resolution 
	yaxis		= yaxis label 
	contact_person = contact_person 
	journal		= journal 
	authors		= authors 
	title		= title 
	volume		= volume 
	issue_number = issue_number 
	year		= year 
	pages		= pages 
	booktitle	= booktitle 
	editors		= editors 
	publisher	= publisher 
	address		= address 
	help		= help 
 
OUTPUTS: 
	File written in XAS format 
 
COMMON BLOCKS: 
	none 
 
MODIFICATION HISTORY: 
 file obtained from Jacobsen Feb-98; developed from Mancini / Hitchcock format 
 (26-sep-00 aph) AXIS standard documentation 

(See c:\axis2000\write_xas-1col.pro)


WRITE_XAS[2]

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	WRITE_XAS

LAST CHANGED: ----------------------------------- 04-Jun-08

PURPOSE:
	This procedure writes a spectrum into 'XAS' format, with
 optional guided writing of the header paramaters

CATEGORY:
	STAND ALONE:  spectral processing

CALLING SEQUENCE:
 	WRITE_XAS_WRAP

CALLED FROM AXIS:
	Write-XAS spectrum

ROUTINES
	WRITE_XAS_WRAP
	WRITE_XAS - routine that actually writes data (many keywords!)

INPUTS:
	lun		logical unit number
	header	header array
	info	request for information about routine
 for WRITE_XAS
	filename - name of file
	ev		energy array
	data	intensity array
	header	header

KEYWORDS:
	none for write_xas_wrap

	for WRITE_XAS:
   formula		= chemical formula of sample
	common_name	= common_name of sample
	edge		= edge
	acquisition_mode = acquisition_mode
	source_purity = source_purity
	comments 	= comments 				; multiple lines
	delta_ev	= energy resolution
	yaxis		= yaxis label
	contact_person = contact_person
	journal		= journal
	authors		= authors
	title		= title
	volume		= volume
	issue_number = issue_number
	year		= year
	pages		= pages
	booktitle	= booktitle
	editors		= editors
	publisher	= publisher
	address		= address
	help		= help

OUTPUTS:
	File written in XAS format

COMMON BLOCKS:
	none

MODIFICATION HISTORY:
 file obtained from Jacobsen Feb-98; developed from Mancini / Hitchcock format
 (26-sep-00 aph) AXIS standard documentation
 (22-May-08 aph) add multi-column write for ISEELS & polymer database
 (04-jun-08 aph) add handling of ISEELS and NSLS headers

(See c:\axis2000\write_xas.pro)


WVLEN2EN, EN2WVLEN[1]

[Previous Routine] [Next Routine] [List of Routines]
 NAME: 
       WVLEN2EN, EN2WVLEN 
 
 PURPOSE: 
       These functions convert between photon energy and wavelength. 
 
 CATEGORY: 
       Optics 
 
 CALLING SEQUENCE: 
       Wavelength = EN2WVLEN(Energy) 
 
 INPUTS: 
       Input:  The photon energy to convert. 
 
 KEYWORD PARAMETERS: 
       m:        If set, wavelength is in meters. This is the default. 
 
       nm:       If set, wavelength is in nanometers. 
 
       Angstrom: If set, wavelength is in Angstroms. 
  
       J:        If set, photon energy is in Joules. This is the default. 
 
       keV:      If set, photon energy is in kiloelectron Volts. 
 
       eV:       If set, photon energy is in electron volts. 
 
 OUTPUTS: 
       Result:  The conversion of photon energy to wavelength. 
 
 WRITTEN BY: 
       Billy W. Loo, Jr. 
       Bioengineering Graduate Group, UCSF / UCB 
       School of Medicine, UCD 
       Lawrence Berkeley National Lab 
       December, 1997 

(See c:\axis2000\en2wvlen.pro)


WVLEN2EN, EN2WVLEN[2]

[Previous Routine] [Next Routine] [List of Routines]
 NAME: 
       WVLEN2EN, EN2WVLEN 
 
 PURPOSE: 
       These functions convert between photon energy and wavelength. 
 
 CATEGORY: 
       Optics 
 
 CALLING SEQUENCE: 
       Energy = WVLEN2EN(Wavelength) 
 
 INPUTS: 
       Input:  The wavelength to convert. 
 
 KEYWORD PARAMETERS: 
       m:        If set, wavelength is in meters. This is the default. 
 
       nm:       If set, wavelength is in nanometers. 
 
       Angstrom: If set, wavelength is in Angstroms. 
  
       J:        If set, photon energy is in Joules. This is the default. 
 
       keV:      If set, photon energy is in kiloelectron Volts. 
 
       eV:       If set, photon energy is in electron volts. 
 
 OUTPUTS: 
       Result:  The conversion of wavelength to photon energy. 
 
 WRITTEN BY: 
       Billy W. Loo, Jr. 
       Bioengineering Graduate Group, UCSF / UCB 
       School of Medicine, UCD 
       Lawrence Berkeley National Lab 
       December, 1997 

(See c:\axis2000\wvlen2en.pro)


XAS1.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		XAS1.PRO

LAST CHANGED: ----------------------------------- 	30-Aug-2013

 PURPOSE:
	This function reads Beamline 7 STXM X-ray absorption spectral data (1995-1998)

 CATEGORY:
	data read in

 CALLING SEQUENCE:
	Result = xas1(file, plot=pl, DEFPATH=defpath, OPT=opt, _extra=e)

 INPUTS:
	FILE	filename

 KEYWORDS:
	PLOT	if set, display data
 default (no opt) is to read in E,col1,col2
 OPT = col1:   raw data - ASSUMES transmission detector in col(1); OSA in col(2)
 OPT = col2:  extract col(2)  - OSA (pre-98) or trans (after Dec-97; flipped here)
 OPT = col3;  extract col(3)  - TEY
 OPT = dark:  dark correct signals
 OPT = OSA;   use OSA signal for Io & convert to rel-O.D.  (no dark correct)
 OPT = OSA-dark; dark correct, then use OSA signal for Io & convert to rel-O.D.

 OUTPUTS:
	No explicit outputs.   A new window is created if necessary

 COMMON BLOCKS: none

 MODIFICATION HISTORY:
 (09-Dec-97 aph)  multi-section files; single file to do all types of read-in of ALS STXM spectral files
 (15-feb-98 aph) cancel protect; read 0 dark_pt  files
 (04-mar-98 aph) still problems with 0 dark pts;
 (09-apr-98 aph) save img_shifts; correct spike; add col(3) = TEY
 (07-Aug-98 aph) indicate extension (? not done since col indicated already)
 (30-Aug-13 aph) AXIS standard header added

(See c:\axis2000\xas1.pro)


XAS2.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		XAS2.PRO

LAST CHANGED: ----------------------------------- 	30-Aug-2013

 PURPOSE:
	This function reads two Beamline 7 STXM X-ray absorption data files
  and computes Beers- law absorption as ln(hole/DET)

 CATEGORY:
	read in

 CALLING SEQUENCE:
	Result = XAS2 (file, PLOT=pl, DEFPATH=defpath, OPT=opt, _extra=e )

 INPUTS:
	FILE	filename1

 KEYWORDS:

 OPT = 'raw' (default) - do not use OSA normalisation or dark correct
 OPT = 'dark' - dark correct but no OSA normalisation
 OPT = 'OSA' - OSA normalise but no dark correction
 OPT = 'OSA-dark' - dark correct AND OSA normalize

  ASSUMES identical sampling in both files !!!!!!!!!

 OUTPUTS:
	No explicit outputs.   A new window is created if necessary

 COMMON BLOCKS: none

 MODIFICATION HISTORY:
 (20-Dec-97 aph) auto-detect version of file format
                 all of 2-file readin functions put into one program with opt= options
 (30-Aug-13 aph) AXIS standard header added

(See c:\axis2000\xas2.pro)


XAS_XRF_EXTRACT

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	XAS_XRF_EXTRACT

LAST CHANGED: ----------------------------------- 20-Feb-12

PURPOSE:
	This function extracts absorption stacks from a 4-d array (*.ssb)
 written by XAS_XRF_STACK and writes them as regular 3D stacks (*.ncb)

CATEGORY:
	STAND ALONE: utility

CALLING SEQUENCE:
	Result = XAS_XRF_EXTRACT( [,ch_low=ch_low, ch_hi=ch_hi. file=file, silent=silent])

CALLED FROM AXIS:
	Read->Images->AXIS

INPUTS:
	TMP - AXIS 4d array (x,y,E-XRF,E-XAS)

KEYWORDS:
	CH_LOW	lower limit of channels / energies to integrate
	CH_HI	upper limit of channels / energies to integrate
	FILE - filename to read
	SILENT  flag to control entry to axis log

COMMON BLOCKS:
 AXIS_COM	standard set of common blocks
 STACK_PROCESS_COM
 BSIF_COM
 volume_data, image_stack
 volume_data2, xas_xrf_stack

;MODIFICATION HISTORY:
 (21-Apr-10 aph) first written
 (20-feb-12 aph) extend to extracting XRF spectra; save mean XRF spectrum

unction xas_xrf_extract, file=file, ch_low=ch_low, ch_hi=ch_hi, silent=silent, $
            verbose=verbose, group=group, extra = extra
axis_com
stack_process_com
OMMON volume_data, image_stack
OMMON volume_data2, xas_xrf_stack
bsif_com
n_error,2

 print, 'entry'
 help, xas_xrf_stack

  ---------- read  *.ssb data
 if n_elements(xas_xrf_stack) EQ 0 then  begin
xas_xrf_file =''
xas_xrf_file = pickfile2(/READ, FILTER='*.ssb', /LPATH, DEFPATH=defpath)
if strlen(xas_xrf_file) eq 0 then return, 0.	; bail if canceled
ev = stack2_rb(file=xas_xrf_file)
t=size(xas_xrf_stack)
nx = t(1)
ny = t(2)
nch = t(3)
nev = t(4)
 endif

 -------- generate sum of all XRF spectra if requested
rf_e = findgen(nch)
rf_mean = fltarr(nch)
or i=0,nch-1 do xrf_mean(i)=mean(xas_xrf_stack(*,*,i,*))
=ax_name(xas_xrf_file)
l = 'mean XRF spectrum ' + t(1)
 = {t:'1d', x:xrf_e, d:xrf_mean, dn:xrf_mean, xl:'XRF channel', dl: dl}
ile =  pickfile2(/READ, prompt='name for Mean XRF spectrum', FILTER='*.txt', /LPATH, DEFPATH=defpath)
f strlen(file) ne 0 then t = spc_save(s, file=file)

(See c:\axis2000\xas_xrf_extract.pro)


XM1_LOAD

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	XM1_LOAD

LAST CHANGED: ----------------------------------- 21-feb-01

PURPOSE:
	This function reads in XM-1 images from *.spe files

CATEGORY:
	images read in

CALLING SEQUENCE:
	Result = XM1_LOAD(file=file, _extra=e)

CALLED FROM AXIS:
	Read->Images->ALS-XM1

INPUTS: none. All input parameters are passed as keywords.

KEYWORDS:
	FILE 	filename to read
	NOF		no filter
	GROUP 	name of parent group (Axis_ID)
	_EXTRA	passed on parameters

OUTPUTS:
	RESULT = AXIS 2d structure

COMMON BLOCKS:
	@AXIS_COM	standard set of common blocks

PROCEDURE:
	XM1_LOAD uses xmload, nojunk,loadcmsa, flatbg (from Greg Denbaux)

MODIFICATION HISTORY:
 (21-feb=01 aph) first version

(See c:\axis2000\xm1_load.pro)


XMLOAD

[Previous Routine] [Next Routine] [List of Routines]

NAME:
		XMLOAD

LAST CHANGED: ----------------------------------- 12-may-02 (aph)

 PURPOSE:
 This function loads an XM-1 image, removes camera artifacts,
 and rotates the image to correspond with the Winview orientation.

 CONTENTS OF THIS FILE (in order)

	LOADCMSA
	COMPRESSPIXELS
	NOJUNK
	EXP_TIME
	XMLOAD

 CATEGORY:
	Image read in

 CALLING SEQUENCE:
	Result = XMLOAD(FNAME)

 INPUTS:
 	FNAME - name of the file (optional)

 KEYWORDS:
	ZOOM
	NOSHOW		DO NOT DISPLAY (if not set, uses LOOK in standalone mode)
	MZPSHIFT
	MAG
	BINX
	BINY
	ENERGY
	WAVEL
	NOPRINT
	VERSION
	IMTYPE

 OUTPUTS:
	No explicit outputs.  In stand alone mode, displays corrected image

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks; locked into running through AXIS
	CMSA

 SIDE EFFECTS: none

 RESTRICTIONS:
	LOOK - not yet functioning

 PROCEDURE:
	Image is read in using loadcmsa.pro
	Camera artefacts corrected etc using nojunk.pro
	Display in stand alone mode using look.pro

 MODIFICATIONS
 8/4/95: John Heck first version
 1-9-98: modified to return 0 if file not found by loadcmsa, Angelic
 5-1-97: modified for filenames bigger than ymmdd999, Werner
 (21-feb-01 aph) adapting for windows environment & reading into AXIS
 (23-feb-01 aph) implement calibration and background corrections
 (12-may-02 aph) correct header name format

(See c:\axis2000\xmload.pro)


XPSECSIM_COM.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		XPSECSIM_COM.PRO

LAST CHANGED: -----------------------------------  18-Jul-10

 PURPOSE: Common Blocks For XSPEC_SIM Program

 CATEGORY:
	Data manipulation.

 CALLING SEQUENCE:  not applicable

 MODIFICATION HISTORY:
 (03-jan-07 jso) last version supplied
 (09-mar-07 aph) AXIS standard header added
 (18-Jul-10 aph) change name from AA_com to Xspecsim_com for consistency

(See c:\axis2000\xspecsim_com.pro)


XRF_MAP_SELECTOR

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		XRF_MAP_SELECTOR

LAST CHANGED: ----------------------------------- 	21-Jun-10

 PURPOSE:
	This function and associated procedures is a widget which
  displays XRF maps read from APS-XRF files and allows selection of 1 or more
  maps for transfer to aXis2000

 CATEGORY:
	Image display.and map selection

 CALLING SEQUENCE:
	xrf_map_selector, map_list=map_list

 INPUTS:
 This section is for POSITIONAL INPUTS only (not keywords)
	All input parameters are passed via common.

 KEYWORDS:


 OUTPUTS:
	No explicit outputs.   A new window is created if necessary

 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks
	XRF_COM  - parameters specific to XRF_MAP_SELECTOR and user files

 SIDE EFFECTS:
	A window is created/destroyed.

 PROCEDURE:
	details where needed

 EXAMPLE:


 MODIFICATION HISTORY:
 (21-Jun-10 aph) first version

(See c:\axis2000\xrf_map_selector.pro)


XSPECSIM.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		XSPECSIM.PRO

LAST CHANGED: -----------------------------------  23-Jul-10

 PURPOSE:
	This widget generates a simulated NEXAFS spectrum of a peptide or ptorein
  from stored amino acid spectra (Yan Zubavichus,Andrey Shaporenko,
  Michael Grunze and Michael Zharnikov, J. Phys. Chem A (Letters) 109, 2005, 6998-7000)
  with provision for incorporation of a 'peptide bond correction'

 CATEGORY:
	Data manipulation. Stand alone or runs from aXis2000

 XSpecSim routines
	CANCEL			quit XSpecSim
	CHKCLICK
	SIMPLESUM
	COMPLEX SUM		include peptide bond correction
	LOADSEQUENCE
	LOADENERGY
	LOADEN
	LOADAA
	LOADDAT
	DropListEncb
	DropListDatcb

 ASSOOCIATED ROUTINES
 AA_WriteConfig  write a config file
 ExtrapolateAA   extrapolate to predefined E--scale
 GenExtrap       generaized ibterpolation
 ParseComposition determine numbers of H,C,N,O,S from AA list
 Read_AA_header  reader header of AA spectral files
 Read_AAdata     reads AA reference spectra (C, N,O)
 Read_Energies   reads energies of spectral reference
 ReadData        reads AA Data files
 XSpecSim_init   initialize environment for XSpecSim
 XSpecSim_run    run XSpec_Sim 
 
 CALLING SEQUENCE:  XSpecSim

 INPUTS: via the gui: energy scale; amino acid sequence

 KEYWORDS: none

 OUTPUTS:
	data file with simulated spectrum

 COMMON BLOCKS:
 axis_com     standard set of aXis2000 common blocks
	XSPECSIM_COM	common for XSpecSim

 MODIFICATION HISTORY:
 (03-jan-07 jso) last version supplied
 (09-mar-07 aph) AXIS standard header added, name changed
 (20-Jul-10 aph) set up as a compile-when-run, in aXis2000
 (23-Jul-10 aph) modified SF_path to use that defined in XSpecSim_init
 

(See c:\axis2000\xspecsim.pro)


XSPECSIM_INIT.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
	XSPECSIM_INIT.PRO

LAST CHANGED: ----------------------------------- 23-Jul-10

PURPOSE:
 Reads the configuration file for XSpecSim

 CATEGORY:
 Utility; part of XSpecSim, spectral simulator package

CALLED FROM XSpecSim_run:

OUTPUTS: none

COMMON BLOCKS:
	@XSpecSim_Com		X-SpecSim common block
	
	MODIFICATION HISTORY:
 (28-feb-07 jso) first version
 (19-Jul-10 aph) AXIS standard header added;
      changed from AA_init to XSpecSim_Init
 (23-Jul-10 aph) modified path definitions to work wih CodePath 
           without assuming code is in c:\aXis2000\

(See c:\axis2000\xspecsim_init.pro)


ZIMBA_RUN.PRO

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		ZIMBA_RUN.PRO

LAST CHANGED: ----------------------------------- 	22 Jul 2014

 PURPOSE:
	This  procedure executes Zstack_analyze outside of aXis2000
   by loading data from individual files (*.sl, *.axb), with or without an alignment file
   use it to generate movies with multiple spectra selected

 CATEGORY:
	Image manipulation

 CALLING SEQUENCE:
 for procedures:
	ZIMBA_RUN, AXIS=AXIS

 INPUTS:
 This section is for POSITIONAL INPUTS only (not keywords)
	All input parameters are passed as keywords.

 KEYWORDS:
	AXIS - if set, indicates AXIS widget exists and the user prompt dialog is used
;
 COMMON BLOCKS:
	AXIS_COM	standard set of common blocks

 MODIFICATION HISTORY:
 (26-sep-99 aph) first version (simplifying axis_c)
 (18-jan-00 aph) adapt to new zstack code (Jan-00)
 (22-Jul-14 aph) AXIS standard header added; add binary stack readin

(See c:\axis2000\zimba_run.pro)


ZSTACK_ALIGN.PRO

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
	ZSTACK_ALIGN.PRO

 LAST CHANGED: ------------------  03-Aug-15

 AUTHORS:
	Carl G. Zimba (Photons UnLimited)
	Chris Jacobsen (SUNY - Stonybrook)
   Adam Hitchcock (McMaster)
 PURPOSE:
	Alignment of images abtained on an x-ray microscope.
	Called by ZSTACK_ANALYZE.PRO
 CATEGORY:
	Data analysis.
 CALLING SEQUENCE:
	zstack_align
 INPUTS:
	filename_list,ev_list,msec_list,filename_display_list
    *******  and image_stack of zstack_common must be previously defined via ZSTACK_ANALYZE.PRO

 KEYWORD PARAMETERS:
	filename_shift = name of file containing alignment shifts saved during a previous alignment
	realign = set to redo alignment with existing dragbox
	low_mem = set to reduce required memory allocation
 OUTPUTS:
	NONE
	x_shift, y_shift, corr_dim_stack, corr_stack, shifted_image_stack of zstack_align_common
		are computed as output
 COMMON BLOCKS:
	zstack_common	:
		data_source				:	type of x-ray microscopy data: STXM:1, SXM:2, SM:3, ALS:4, POLY:5
		data_directory				:	directory of data files
		image_stack				:	3-D matrix of multiple x-ray microscope images
		filename_list				:	list of filename corresponding to images in image_stack
		ev_list					:	list of x-ray energies corresponding to images in image_stack
		msec_list					:	list of dwell times corresponding to images in image_stack
		filename_display_list			:	list of filename, x-ray energy, and dwell time corresponding to images in image_stack
		displayed_file_index			:	index in image_stack, filename_list, msec_list, and filename_display_list currently being displayed or processed
		n_files					:	number of images
		list_filename				:	name of file to save or retrieve list of data files
		shift_filename				:	filename of alignment shifts
		x_shift					:	array of x-coordinate alignment shifts
		y_shift					:	array of y-coordinate alignment shifts
		data_shifted				:	0: data was not shifted and should not be clipped, 1: data was shifted and should be clipped, -1: denotes ZSTACK_PROFILE.PRO is being run as a stand-alone procedure
		n_clipped_cols				:	number of columns in clipped image
		n_clipped_rows				:	number of rows in clipped image
		clipbox					:	vector of four points defining dimensions of region unclipped by alignment: [xleft,xright,ybot,ytop]
	zstack_align_common
		zstack_align_par			:	variables controlling ZSTACK Align dialog window
		file_num					:	vector of file numbers of image files
		dragbox					:	vector of four points defining dimensions of region selected for alignment: [xleft,xright,ybot,ytop]
		edge_enhance				:	edge enhancement parameter: 0: none, 1: sobel, 2: roberts
		edgegauss_pixels			:	number of pixels used for edgeguass smoothing in ZSTACK_ALIGN_IMAGES.PRO, default = 3
		edgefill					:	type of filling to occur at edges of shifted images: mean, median, max, min, zero
		image_match				:	Image to align to: -1: preceding image, 0: constant image, 1: following image
		constant_file_index			:	image of index to use as reference when aligning to a constant image
		corr_max					:	0: use 3-pt fitted maximum of correlation function, 1: use center of mass of correlation function
		maxshift					:	2-point vector of minimum and maximum values of x-shift and y_shift, and temp_x_shift and temp_y_shift within ZSTACK_ALIGN_TUNE
		doalign_complete			:	-1: alignment in progress, 0: alignment not started, 1: alignment finished, 2: using alignment from stored file
		low_memory					:	Reflects keyword LOW_MEM: 0: use full memory allocation, 1: use reduced memory allocation
		corr_stack					:	3-D matrix of correlation functions corresponding to image_stack
		shifted_image_stack			:	3-D matrix of shifted images corresponding to image_stack
		corr_dim_stack				:	3-D matrix (i,j,k) of maxima of correlation functions: i: x maximum, j: y maximum, k: image file
		shift_threshold				:	mimimum shift required to actually shift the image
	zstack_tune_common
		zstack_tune_par				:	variables controlling ZSTACK Tune Alignment dialog window
		temp_x_shift				:	vector of alignment shifts along x-coordinate for images in image_stack, obtained within ZSTACK_ALIGN_TUNE
		temp_y_shift				:	vector of alignment shifts along y-coordinate for images in image_stack, obtained within ZSTACK_ALIGN_TUNE
		init_x_shift				:	vector of initial alignment shifts along x-coordinate for images in image_stack
		init_y_shift				:	vector of initial alignment shifts along y-coordinate for images in image_stack
		image_center				:	array of pixel coordinates specifying the center (in pixels) of each image
		corr_center				:	array of pixel coordinates specifying the center (in pixels) of each correlation function image
		shifted_center				:	array of pixel coordinates specifying the center (in pixels) of each shifted image
		subimage_center				:	array of pixel coordinates specifying the center (in pixels) of each subimage
		subcorr_center				:	array of pixel coordinates specifying the center (in pixels) of each correlation function subimage
		subshifted_center			:	array of pixel coordinates specifying the center (in pixels) of each shifted subimage
		subimage_pixels				:	size of subimages in pixels
		fid_pt					:	pixel coordinates of present fiducial point(s)
		n_fid_pt					:	number of fiducial points
		all_fid_pt					:	array of all fiducial points
		fid_pt_index				:	index of fiducial point(s)
	zstack_display_common
		zstack_display_par			:	variables controlling ZSTACK Display dialog window
		image_zoom					:	zoom factor for displaying images
		subimage_zoom				:	zoom factor for subimages
		movie_delay				:	delay used to display movie images of data stacks, dependent upon machine speed
		disp_min					:	minimum percentage intensity for display of images
		disp_max					:	maximum percentage intensity for display of images
		disp_gamma					:	gamma factor for display of images
		spectrum_display			:	Display spectra as: 1: Single Beam, 2: Percent Transmittance, 3: Absorbance
		spectrum_offset				:	Offset used to plot spectra
		init_zoom					:	initial zoom factor for displaying images (used in ZSTACK_SAVE and ZSTACK_TUNE)
		movie_active				:	movie of images is active: 0: NO, 1: YES
		profile_zoom				:	zoom factor for file number axis on profile images
		image_range				:	scale images using: 0: intensity range of each image, 1: intensity range of full image stack
		image_ratio				:	Display images normalized by: 0: inv_image_stack, 1: i0 spectrum
		ratio_image_index			:	index of image to use when ratio images to a constant image
		image_scale				:	Display images normalized by: 0: inv_image_stack, 1: i0 spectrum
		image_invert				:	invert color bar: 0: NO, 1: YES
		temp_old_display			:	initial array of display parameters, set at beginning of ZSTACK_DISPLAY
		temp_new_display			:	array of display parameters updated as display options are changed
		zstack_subroutine			:	subroutine from which ZSTACK_DISPLAY was called
		spectra_x_min				:	mimimum x-ray energy value to plot spectra
		spectra_x_max				:	maximum x-ray energy value to plot spectra
		spectra_y_min				:	mimimum intensity value to plot spectra
		spectra_y_max				:	maximum intensity value to plot spectra
		x_autoscale				:	autoscale x-ray energy scale: 0: NO, 1: YES
		y_autoscale				:	autoscale spectra intensity scale: 0: NO, 1: YES
	zstack_color_common
		bottom_color_index			:	index of lowermost color of gradient colorscale
		top_color_index				:	index of uppermost color of gradient colorscale
		black_color_index			:	index of black color
		white_color_index			:	index of white color
		plot_bkgd_color_index			:	color index for plot background, either black or white
		plot_axes_color_index			:	color index for plot axes, either whilte or black
		image_border_color_index		:	color index for image border in zstack_buildlist and zstack_profile dialog windows
		dragbox_color_index			:	color index for dragbox used to define subregion for alignment
		corr_ctr_color_index			:	color index for crosshair showing center of correlation function
		corr_max_color_index			:	color index for crosshair showing maximum of correlation function
		x_shift_color_index			:	color index for plotting of x-shift
		y_shift_color_index			:	color index for plotting of y-shift
		shift_cursor_color_index		:	color index for cursor in shift plot, indicating file number
		tune_fiducial_color_index		:	color index for fiducial points in closeup of shifted image in zstack_tune dialog window
		spectra_color_index			:	color indices (14) for plotting of spectra
		spectra_cursor_color_index		:	color index for cursor in spectra plot, indicating x-ray energy
		profile_color_index			:	color index for plotting of intensity profile and cursor in profile image indicating row or column
		profile_cursor_color_index		:	color index for cursor in profile image, indicating x-ray energy
		profile_spectrum_color_index	:	color index for plotting of profile spectrum
		test1_color_index			:	color index #1 for testing
		test2_color_index			:	color index #2 for testing
		test3_color_index			:	color index #3 for testing
 SIDE EFFECTS:

 RESTRICTIONS:
	Used as ZSTACK suite of routines
 PROCEDURE:
	Called by ZSTACK_ANALYZE.PRO
 EXAMPLE:

 MODIFICATION HISTORY:
 Modified 25-mar-1998 to deal with 24 bit graphics, CJJ
 Modified July 11 and 13, 1998 to deal with changes to align.pro, CJJ
 Modified 28-aug-1998 to work with corrected 24 bit graphics. CJJ
 Modified 31-Aug-1998 to add x_shift, y_shift to argument list, and
   remove shift_filename!, CJJ

 Modified 20feb99, CGZ
 Extensively modified and rewritten STACK_ALIGN.PRO to form ZSTACK_ALIGN.PRO
 Changes and additions are numerous:

 All procedures and common variables starting with 'stack' were changed to 'zstack'
 so that the existing routine, STACK_ALIGN.PRO, can be run in parallel

 Added the following procedures:
	zstack_align_prep		:	sets common variables, color table, and color indices
	zstack_align_imgdisp		:	displays images and shift plot
	zstack_align_save_shift	:	saves alignment shift into MAPPER file, *.aln
	zstack_align_read_shift	:	reads alignment shifts from MAPPER file, *.aln

 Rewrote stack_align_sensitive to be two separate procedures with better control
	zstack_align_sensitive	:	activate features on Stack Align dialog window
	zstack_align_desensitive	:	deactivate features on Stack Align dialog window

 Pre-existing procedures
	zstack_align_doalign		:	controls alignment of image stack with active display
	zstack_align_event		:	event routine for zstack_align
	zstack_align			:	main procedure for alignment of STXM images

 Modified user interface window to include
	display and movie of image, correlation function, shifted image
		dragbox is plotted on both image and shifted image
		center of correlation function displayed as crosshair overlay (same as CJJ)
		maximum of correlation function displayed as 1-pixel box overlay (same as CJJ)
	modified plot of alignment shifts
		- use actual file numbers instead of file sequence number (relative number)
 ***** APH (23-may-04) - undo this change ! ************************
		- added plot_x_min and plot_x_max
		? is it useful to plot vs x-ray energy instead - would require considerable work
			might be able to plot both using upper and lower x-axes
	movie can be played before and after alignment to inspect position of dragbox
		and quality of alignment
	cursor bar added to plot of alignment shifts highlighting shift and file
		during movie or static display
	displayed file can be selected either using file list or alignment plot
		clicking on alignment plot, prints file info and alignment shift in Output Log
	text fields added to display image and shift information during movie or static display
	added "Load New Color Table" to change color table of image
	saving and retrieving of file of alignment shifts
	added ability to redo alignment
		- can now do multiple alignments using different conditions, saving each

 Changed zstack_align_par.dragbox_label routine in zstack_align_event
	Replaced getbox routine with box_cursor routine, more robust on multiple platforms, CGZ

 Adapted display routines to use zstack_align_imgdisp
	One display algorithm which can be easily modified
	Only exception is real-time plotting of alignment shift in zstack_align_doalign

 Changed the way the color table is specified: zstack_align_prep
	- much simpler now, only executed once, allows multiple colors easily

 New variables:
	corr_stack			:	stack of correlation functions
	shift_image_stack	:	stack of shifted images
	corr_dim_stack		:	array of dimensions specifying center and maxima of
							correlation function
							used for displaying correlation function
	edgefill			:	type of filling to occur at edges of shifted images
							(edges can contain no data due to shifting)
							set within zstack_align_doalign
		meanfill 		:	replace with mean of image
		medianfill 	:	replace with median of image
		maxfill 		:	replace with maximum of image
		minfill 		:	replace with minimum of image
		zero			:	replace with zero (default)
 	doalign_complete	:	specifies state of alignment
							(modified from use in stack_align.pro)
		-1			:	alignment in progress
		 0			:	alignment not started
		 1			:	alignment finished
		 2			:	using alignment from stored file

		-2			:	manual alignment in progress
		-1			:	auto-alignment in progress
		 0			:	alignment not started
		 1			:	auto-alignment finished
		 2			:	manual alignment finished
		 3			:	using alignment from stored file

 Restored shift_filename to argument list

 Changed dragbox conditional from
	IF ((dragbox(0) NE 0) AND (dragbox(1) NE 0) AND $
		(dragbox(2) NE 0) AND (dragbox(3) NE 0)) THEN BEGIN
	to IF ((dragbox(2) NE 0) AND (dragbox(3) NE 0)) THEN BEGIN
	to accomodate dragbox = [0,0,*,*], i.e., lower left corner

 Save alignment / Do not save alignment choice wasn't working in CJJ version - fixed

 Stack_align would give non-zero shift for first image
	This is fixed with modification of call to zstack_align_images (updated version of align.pro)

 Added dragbox coordinates to header of MAPPER file of alignment shifts

 Added zstack_align_tune to interactively adjust alignment shifts
	essentially superceding stack_manalign.pro.
	This can be improved upon to incorporate features of stack_manalign.pro

 Moved nearly all widget_control,var,sensitive = 0/1 statements to
	zstack_align_sensitive and zstack_align_desensitive for more reliable operation
	and better organization of code (instead of being widely dispersed)
	zstack_align_sensitive has situation-dependent conditionals to control appearance of window

 Need to restore virtual memory allocation when working with large data arrays
 	so corr_stack, shift_image_stack, and corr_dim_stack) set to zero at end

 Added alignment to following image - useful if image quality is better at high energy
	This is in addition to existing alignment to preceding image and to a constant image
	Eliminated variable, zstack_align_par.constant_match
	Added variable, image_match with valid values:
		-1			:	alignment using preceding image
		 0			:	alignment using constant image
		 1			:	alignment using following image

 Added low_mem keyword to STACK_ANALYZE.PRO and STACK_ALIGN.PRO
	If set, then shifted_image_stack is not formed with STACK_ALIGN.PRO
	This reduces memory use by 1/3 and is useful when large arrays are being processed.
		This comes at some reduction in speed for displaying new images,
		most noticeable during playing of image movies
	If set, display of shifted images within STACK_ALIGN.PRO is done by calculating
		shifted image from x_shift, y_shift, and image_stack
		every time an image is displayed.
	With low_mem set, IDL partition should be approx. >9 times n_elements(image_stack)
	With low_mem not set, IDL partition should be approx. >13 times n_elements(image_stack)
		(based on tests on a Macintosh)

 Modified COMMON block structure so that common variables are shared with all zstack routines
	i.e., zstack_common contains variables used by
		ZSTACK_ANALYZE.PRO, ZSTACK_READLIST.PRO, ZSTACK_BUILDLIST.PRO, and ZSTACK_ALIGN.PRO
 Common variables are now defined only once in each file, not repetitively as before.
 Common variables for data are now determined within ZSTACK_BUILDLIST.PRO or ZSTACK_READLIST.PRO:
	image_stack, filename_list, ev_list, msec_list, filename_display_list
	This requires that files be read only once, eliminated time-intensive duplicate calls of
		STXM_READ.PRO or SXM_READ.PRO

 Modified zstack_align_par, zstack_align_tune_par
	so that they only contain only variables associated with dialog window.
	All other variables have been moved to zstack_align_common

 Added n_files, list_filename, and shift_filename variables to zstack_common variable

 Divided align and tune functions into two separate procedures: ZSTACK_ALIGN.PRO and ZSTACK_TUNE.PRO
 ZSTACK_TUNE.PRO could be used as a replacement for ZSTACK_MANALIGN.PRO

 Modified so that zoom can be changed after alignment is complete
	added /new_zoom option to ZSTACK_ALIGN.PRO and slightly altered button naming routine

 End of Modifications 20feb99, CGZ

 Fixed display of alignment shifts for alignment using following image.  CGZ 12aug99

 Added EXIT button to exit ZSTACK package directly from zstack_align dialog, CGZ 12aug99
 Removed CGZ, 12aug99

 Changed default value of image_match to -1, i.e., will use preceding image for aligment
	CGZ, 09sep99

 Added optional sections to plot maximum of correlation function and
	points used to determine center of mass,  commented out for routine use
	Useful in troubleshooting
	CGZ, 28sep99

 Changed header of file of alignment shifts (*.aln) to include alignment conditions
	CGZ, 28sep99

 Modified to optimize use of memory
	Each correlation function, corr_stack(*,*,i), is now only as large as region
	defined by dragbox.  Formerly, each correlation function had the same dimensions
	as the image.  So if a 50x50 pixel dragbox is used with 200x200 pixel images,
	this uses only 7% of the memory used if the entire image is used for the alignment.

 (06oct00 cgz) Moved dragbox from zstack_align_common to zstack_common
	so that it can be used in zstack_save to select subregion of interest

 (13oct00 cgz) Altered definition of dragbox so that it is now [xleft,xright,ybot,ytop]
		This makes it consistent with definition of other cursor boxes
		and eliminates need for min and max testing
		Changed logic statement from:	IF ((dragbox(2) NE 0) AND (dragbox(3) NE 0)) THEN BEGIN
							to:	IF ((dragbox(1) NE 0) AND (dragbox(3) NE 0)) THEN BEGIN

 (29oct00 cgz) Modified !version.os routines to use !version.os_family variable
 (31oct00 cgz)
		Modified zstack_buildlist_savelist to include dialog_pickfile so directory can be selected
		Replaced platform-dependent code with call to zstack_analyze_extract_filename
 (10nov00 cgz)
		Fixed hourglass cursor problem with time-intensive alignments
 (28nov00 cgz) migrated zstack_profile_colorbar routine to zstack_analyze.pro
 (26-mar-01 aph) change BOX_CURSOR to BX_CURSOR
 (13-apr-01 aph) tried Zimba suggested fix
 (23-may-04 aph) get plot of alignment shifts to work
 (03-Mar-08 MJ)  Keyword /SCROLL in widget_base() needs X_SCROLL_SIZE.
                 Took out initial size and placement of base widget.
                 Put back in temporary filenumber array to get plot of shifts.
 (13-apr-08 aph) turn on pre-set window size (X_Scroll_size, Y_Scroll_size) only for non-Windows OS
 (07-mar-09 aph) added binary_filenmane to zstack_common
                set default align filename to stack name (.aln) NB was done before ! (shift_filename)
 (27-Jul-09 aph) external common
 (02-Aug-15 aph) when exit this program, pass back the folder of the stack (previously only the filename)
 (02-aug-15 aph) ensure DefPath is defined correctly as exit Zstack_spectra; added @axis_com to all routines
 (03-Aug-15 aph) changed label to zlabel since label is an array in axis_com

(See c:\axis2000\zstack_align.pro)


ZSTACK_ALIGN_COMMON

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		ZSTACK_ALIGN_COMMON

LAST CHANGED: ----------------------------------- 	26-Jul-09

 PURPOSE:
	This file contians the common block, ZSTACK_ALIGN_COMMON

 CATEGORY: programming utility 

 CALLING SEQUENCE: @zstack_align_common to inclide in a file

 INPUTS: none

 KEYWORDS: none

 OUTPUTS: none

 MODIFICATION HISTORY:
 (26-jul-09 aph) isolated from zstack_plot

(See c:\axis2000\zstack_align_common.pro)


ZSTACK_ANAYSE_COMMON

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		ZSTACK_ANAYSE_COMMON

LAST CHANGED: ----------------------------------- 	26-Jul-09

 PURPOSE:
	This file contians the common block, ZSTACK_ANALYZE_COMMON

 CATEGORY: programming utility 

 CALLING SEQUENCE: @zstack_analyze_common to inclide in a file

 INPUTS: none

 KEYWORDS: none

 OUTPUTS: none

 MODIFICATION HISTORY:
 (27-jul-09 aph) isolated from zstack_plot; added final dummy variable

(See c:\axis2000\zstack_analyze_common.pro)


ZSTACK_BUILD_LIST_COMMON

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		ZSTACK_BUILD_LIST_COMMON

LAST CHANGED: ----------------------------------- 	26-Jul-09

 PURPOSE:
	This file contians the common block, zstack_build_list_common

 CATEGORY: programming utility 

 CALLING SEQUENCE: @zstack_build_list_common to inclide in a file

 INPUTS: none

 KEYWORDS: none

 OUTPUTS: none

 MODIFICATION HISTORY:
 (26-jul-09 aph) isolated from zstack_plot
 (27-jul-09 aph) changed name from zstack_buildlist_common, par to zstack_build_list_common, par
                to avoid conflict with version in stack_analyze.sav (a guess - NO GO)
                remove BINARY_FILENAME tas it is in zstack_common - DUMBKOPF

(See c:\axis2000\zstack_build_list_common.pro)


ZSTACK_COLOR.PRO[1]

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
	ZSTACK_COLOR.PRO
	
 LAST CHANGED: -----------------  27-Jul-09 (aph)
 
 AUTHORS:
	Carl G. Zimba (NIST)

 PURPOSE:
	Establish color table and color_index variables for ZSTACK suite
	Called by ZSTACK_ANALYZE.PRO

 CATEGORY:
	Data analysis.

 CALLING SEQUENCE:
	zstack_color
	
 INPUTS:
	NONE
	
 KEYWORD PARAMETERS:
	show = set to show 16 x 16 grid of color table
	
 OUTPUTS: 
 	NONE
 	
 COMMON BLOCKS:
	zstack_color_common
		bottom_color_index			:	index of lowermost color of gradient colorscale
		top_color_index				:	index of uppermost color of gradient colorscale
		black_color_index			:	index of black color
		white_color_index			:	index of white color
		plot_bkgd_color_index			:	color index for plot background, either black or white
		plot_axes_color_index			:	color index for plot axes, either whilte or black
		image_border_color_index		:	color index for image border in zstack_buildlist and zstack_profile dialog windows
		dragbox_color_index			:	color index for dragbox used to define subregion for alignment
		corr_ctr_color_index			:	color index for crosshair showing center of correlation function
		corr_max_color_index			:	color index for crosshair showing maximum of correlation function
		x_shift_color_index			:	color index for plotting of x-shift
		y_shift_color_index			:	color index for plotting of y-shift
		shift_cursor_color_index		:	color index for cursor in shift plot, indicating file number
		tune_fiducial_color_index		:	color index for fiducial points in closeup of shifted image in zstack_tune dialog window
		spectra_color_index			:	color indices (14) for plotting of spectra
		spectra_cursor_color_index		:	color index for cursor in spectra plot, indicating x-ray energy
		profile_color_index			:	color index for plotting of intensity profile and cursor in profile image indicating row or column
		profile_cursor_color_index		:	color index for cursor in profile image, indicating x-ray energy
		profile_spectrum_color_index	:	color index for plotting of profile spectrum
		test1_color_index			:	color index #1 for testing
		test2_color_index			:	color index #2 for testing
		test3_color_index			:	color index #3 for testing
 SIDE EFFECTS:

 RESTRICTIONS:

 PROCEDURE:
	Called by ZSTACK_ANALYZE.PRO
 EXAMPLE:

 MODIFICATION HISTORY:
 (17-Jul-99 cgz) Modified color table arrangement
		Moved "hard" colors used for plotting to bottom of color table (i.e., color indices 0-16)
			and "grayscale" to top of color table (i.e., color indices 16-255)
		Also put in conditional tests for less than and more than 256 colors
 (30-mar-02 aph) made plot display black on white
 (27-Jul-09 aph) change to external common

(See c:\axis2000\zstack_color.pro)


ZSTACK_COLOR.PRO[2]

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
	ZSTACK_COLOR.PRO

LAST CHANGED: ----------------------------------- 23-feb-06

 AUTHORS:
	Carl G. Zimba (Photons Unlimited)

 PURPOSE:
       A modal dialog widget allowing the user to specify
       the RGB color triple specifying the color. The return
       value of the function is the color triple.

 CATEGORY:
       Graphics, Color Specification.

 CALLING SEQUENCE:
       color = Zstack_PickColor(colorindex)

 INPUTS:
	NONE

 KEYWORD PARAMETERS:
       GROUP_LEADER: The group leader for this widget program. This
              keyword is required for MODAL operation. If not supplied
              the program is a BLOCKING widget. Be adviced, however, that
              the program will NOT work if called from a blocking widget
              program, unless a GROUP_LEADER is supplied.
       STARTINDEX: Sixteen pre-determined colors are loaded The STARTINDEX
              is the index in the color table where these 16 colors will
              be loaded. By default, it is !D.Table_Size - 17.
       TITLE: The title on the program's top-level base. By default the
              title is "Pick a Color".
       CANCEL: A keyword that is set to 1 if the CANCEL button is selected
              and to 0 otherwise.
 OUTPUTS:
	NONE
 COMMON BLOCKS:
	zstack_color_common
		bottom_color_index			:	index of lowermost color of gradient colorscale
		top_color_index				:	index of uppermost color of gradient colorscale
		black_color_index			:	index of black color
		white_color_index			:	index of white color
		plot_bkgd_color_index			:	color index for plot background, either black or white
		plot_axes_color_index			:	color index for plot axes, either whilte or black
		image_border_color_index		:	color index for image border in zstack_buildlist and zstack_profile dialog windows
		dragbox_color_index			:	color index for dragbox used to define subregion for alignment
		corr_ctr_color_index			:	color index for crosshair showing center of correlation function
		corr_max_color_index			:	color index for crosshair showing maximum of correlation function
		x_shift_color_index			:	color index for plotting of x-shift
		y_shift_color_index			:	color index for plotting of y-shift
		shift_cursor_color_index		:	color index for cursor in shift plot, indicating file number
		tune_fiducial_color_index		:	color index for fiducial points in closeup of shifted image in zstack_tune dialog window
		spectra_color_index			:	color indices (14) for plotting of spectra
		spectra_cursor_color_index		:	color index for cursor in spectra plot, indicating x-ray energy
		profile_color_index			:	color index for plotting of intensity profile and cursor in profile image indicating row or column
		profile_cursor_color_index		:	color index for cursor in profile image, indicating x-ray energy
		profile_spectrum_color_index	:	color index for plotting of profile spectrum
		test1_color_index			:	color index #1 for testing
		test2_color_index			:	color index #2 for testing
		test3_color_index			:	color index #3 for testing
 SIDE EFFECTS:

 RESTRICTIONS:

 PROCEDURE:
	Called by ZSTACK_ANALYZE.PRO (not true)
 EXAMPLE:

 MODIFICATION HISTORY:
	Modified from PICKCOLOR.PRO written by David Fanning, http://www.dfanning.com
 (23-feb-06 aph) try to get working to allow selecting colors in axis

(See c:\axis2000\zstack_pickcolor.pro)


ZSTACK_COLOR_COMMON

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		ZSTACK_COLOR_COMMON

LAST CHANGED: ----------------------------------- 	26-Jul-09

 PURPOSE:
	This file contians the common block, ZSTACK_COLOR_COMMON

 CATEGORY: programming utility 

 CALLING SEQUENCE: @zstack_color_common to inclide in a file

 INPUTS: none

 KEYWORDS: none

 OUTPUTS: none

 MODIFICATION HISTORY:
 (26-jul-09 aph) isolated from zstack_plot

(See c:\axis2000\zstack_color_common.pro)


ZSTACK_COMMON

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		ZSTACK_COMMON

LAST CHANGED: ----------------------------------- 	26-Jul-09

 PURPOSE:
	This file contians the common block, ZSTACK_COMMON

 CATEGORY:
	Image display.

 CALLING SEQUENCE: @zstack_common to inclide in a file

 INPUTS: none

 KEYWORDS: none

 OUTPUTS: none

 MODIFICATION HISTORY:
 (21-feb-06 aph) isolated from header of zstack_color
 (07-mar-09 aph)  added binary_filename to allow default ALN name to be generated
 (27-Jul-09 aph) move to aXis2010

(See c:\axis2000\zstack_common.pro)


ZSTACK_DISPLAY_COMMON

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		ZSTACK_DISPLAY_COMMON

LAST CHANGED: ----------------------------------- 	26-Jul-09

 PURPOSE:
	This file contians the common block, ZSTACK_DISPLAY_COMMON

 CATEGORY: programming utility 

 CALLING SEQUENCE: @zstack_display_common to inclide in a file

 INPUTS: none

 KEYWORDS: none

 OUTPUTS: none

 MODIFICATION HISTORY:
 (26-jul-09 aph) isolated from zstack_plot

(See c:\axis2000\zstack_display_common.pro)


ZSTACK_PLOT.PRO

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
	ZSTACK_PLOT.PRO

 LAST CHANGED: --------------------------  03-Aug-09

 AUTHORS:
	Carl G. Zimba (Photons UnLimited)
	Adam Hitchcock (McMaster)
 PURPOSE:
	Modification of display parameters used for ZSTACK.
	Called by ZSTACK suite of procedures
 CATEGORY:
	Data analysis.
 CALLING SEQUENCE:
	zstack_display, subroutine, new_zoom=new_zoom
 INPUTS:
	subroutine = name of zstack procedure from which zstack_display was invoked
	filename_list,ev_list,msec_list,filename_display_list, and image_stack of zstack_common
		must be previously defined via ZSTACK_ANALYZE.PRO
 KEYWORD PARAMETERS:
	new_zoom = set to indicate a new image_zoom factor
 OUTPUTS:
	NONE
	x_shift, y_shift, corr_dim_stack, corr_stack, shifted_image_stack of zstack_align_common
		are computed as output
 COMMON BLOCKS:
	zstack_common	:
		data_source				:	type of x-ray microscopy data: STXM:1, SXM:2, SM:3, ALS:4, POLY:5
		data_directory				:	directory of data files
		image_stack				:	3-D matrix of multiple x-ray microscope images
		filename_list				:	list of filename corresponding to images in image_stack
		ev_list					:	list of x-ray energies corresponding to images in image_stack
		msec_list					:	list of dwell times corresponding to images in image_stack
		filename_display_list			:	list of filename, x-ray energy, and dwell time corresponding to images in image_stack
		displayed_file_index			:	index in image_stack, filename_list, msec_list, and filename_display_list currently being displayed or processed
		n_files					:	number of images
		list_filename				:	name of file to save or retrieve list of data files
		shift_filename				:	filename of alignment shifts
		x_shift					:	array of x-coordinate alignment shifts
		y_shift					:	array of y-coordinate alignment shifts
		data_shifted				:	0: data was not shifted and should not be clipped, 1: data was shifted and should be clipped, -1: denotes ZSTACK_PROFILE.PRO is being run as a stand-alone procedure
		n_clipped_cols				:	number of columns in clipped image
		n_clipped_rows				:	number of rows in clipped image
		clipbox					:	vector of four points defining dimensions of region unclipped by alignment: [xleft,xright,ybot,ytop]
	zstack_analyze_common
		zstack_analyze_par			:	variables controlling ZSTACK Analyze dialog window
		do_edge_clip				:	Clip edges of null data created by image alignment:	0: NO, 1: YES
		do_despike					:	Despike data before alignment:	0: NO, 1: YES
		do_median_filter			:	Median filter data before alignment:	0: NO, 1: YES
		do_save_memory				:	Conserve memory by not creating duplicate arrays: 0: NO, 1: YES
	zstack_build_list_common
		zstack_build_list_par			:	variables controlling ZSTACK Buildlist dialog window
		data_filelist				:	List of all data file within data_directory
		this_filename				:	Name of currently selected data file
		first_filename				:	Name of data file selected as the first file in sequence
		last_filename				:	Name of data file selected as the last file in sequence
		this_ev					:	X-ray energy of currently selected file
		first_ev					:	X-ray energy of data file selected as the first file in sequence
		last_ev					:	X-ray energy of data file selected as the last file in sequence
		got_first					:	Logic control parameter: O: don't have first file, 1: have first file
		got_last					:	Logic control parameter: O: don't have last file, 1: have last file
		got_a_file					:	Logic control parameter: O: don't have a file, 1: have a file
		delete_file_index			:	index of file to be deleted from list
	zstack_align_common
		zstack_align_par			:	variables controlling ZSTACK Align dialog window
		file_num					:	vector of file numbers of image files
		dragbox					:	vector of four points defining dimensions of region selected for alignment: [xleft,xright,ybot,ytop]
		edge_enhance				:	edge enhancement parameter: 0: none, 1: sobel, 2: roberts
		edgegauss_pixels			:	number of pixels used for edgeguass smoothing in ZSTACK_ALIGN_IMAGES.PRO, default = 3
		edgefill					:	type of filling to occur at edges of shifted images: mean, median, max, min, zero
		image_match				:	Image to align to: -1: preceding image, 0: constant image, 1: following image
		constant_file_index			:	image of index to use as reference when aligning to a constant image
		corr_max					:	0: use 3-pt fitted maximum of correlation function, 1: use center of mass of correlation function
		maxshift					:	2-point vector of minimum and maximum values of x-shift and y_shift, and temp_x_shift and temp_y_shift within ZSTACK_ALIGN_TUNE
		doalign_complete			:	-1: alignment in progress, 0: alignment not started, 1: alignment finished, 2	: using alignment from stored file
		low_memory					:	Reflects keyword LOW_MEM: 0: use full memory allocation, 1: use reduced memory allocation
		corr_stack					:	3-D matrix of correlation functions corresponding to image_stack
		shifted_image_stack			:	3-D matrix of shifted images corresponding to image_stack
		corr_dim_stack				:	3-D matrix (i,j,k) of maxima of correlation functions: i: x maximum, j: y maximum, k: image file
		shift_threshold				:	mimimum shift required to actually shift the image
	zstack_tune_common
		zstack_tune_par				:	variables controlling ZSTACK Tune Alignment dialog window
		temp_x_shift				:	vector of alignment shifts along x-coordinate for images in image_stack, obtained within ZSTACK_ALIGN_TUNE
		temp_y_shift				:	vector of alignment shifts along y-coordinate for images in image_stack, obtained within ZSTACK_ALIGN_TUNE
		init_x_shift				:	vector of initial alignment shifts along x-coordinate for images in image_stack
		init_y_shift				:	vector of initial alignment shifts along y-coordinate for images in image_stack
		image_center				:	array of pixel coordinates specifying the center (in pixels) of each image
		corr_center				:	array of pixel coordinates specifying the center (in pixels) of each correlation function image
		shifted_center				:	array of pixel coordinates specifying the center (in pixels) of each shifted image
		subimage_center				:	array of pixel coordinates specifying the center (in pixels) of each subimage
		subcorr_center				:	array of pixel coordinates specifying the center (in pixels) of each correlation function subimage
		subshifted_center			:	array of pixel coordinates specifying the center (in pixels) of each shifted subimage
		subimage_pixels				:	size of subimages in pixels
		fid_pt					:	pixel coordinates of present fiducial point(s)
		n_fid_pt					:	number of fiducial points
		all_fid_pt					:	array of all fiducial points
		fid_pt_index				:	index of fiducial point(s)
	zstack_spectra_common
		zstack_spectra_par			:	variables controlling ZSTACK Spectra dialog window
		zstack_save_par				:	variables controlling ZSTACK Save dialog window
		roi_index					:	vector of pixels corresponding to regions of interest for all i spectra
		i_roi						:	vector of pixels corresponding to region of interest for current i spectrum
		n_roi						:	number of regions of interest defined for i spectra
		i0_roi					:	vector of pixels defining region of interest for i0 spectrum
		is_i0_roi					:	Type of region of interest: 0: i0, 1: i
		spectrum					:	2-D matrix (j,k) of spectra corresponding to defined regions of interest, j=0: i0 spectrum, j=1-14: i spectra, k corresponds to x-ray energy of image
		save_spectra_type			:	Type of file to save spectra as:
		spectra_filename_header		:	base filename of spectra and regions of interest to be saved on ZSTACK Spectra dialog window
		roi_filename				:	filename for storage and retrieval of regions of interest points
		save_filename_header			:	base filename of images to be saved on ZSTACK Save dialog window
		i0_filename				:	base filename of i0 spectrum to be retrieved
		i0_filetype				:	Type of file of retrieved I0 spectrum:	RAW, XAS, CSV
		i_roi_color_index			:	vector of indices of colors for display of regions of interest for i spectra
		i0_roi_color_index			:	color index for display of region of interest for i0 spectrum
		nonintegral_zoom_data			:	scaled byte image used when image_zoom is non-integral
	zstack_profile_common
		zstack_profile_par			:	variables controlling ZSTACK Profile dialog window
		profile_direction			:	0: along the column direction, 1: along the row direction
		profile_pixel				:	pixel actively used to generate profile image and plot
		profile_x_pixel				:	x pixel used to construct profile image
		profile_y_pixel				:	y pixel used to construct profile image
		profile_win_pixels			:	number of pixels for profile image window
		profile_image				:	image of profile intensity and image number
		profile_spectrum			:	spectrum arising from single pixel at center of cursor crosshairs in profile image
		profile_y_min				:	mimimum of all profile spectra
		profile_y_max				:	maximum of all profile spectra
		profile_filename_header		:	base filename of profile intensity plot to be saved on ZSTACK Profile dialog window
		profile_filename			:	filename of profile intensity plot to be saved on ZSTACK Profile dialog window
		spectrum_filename_header		:	base filename of profile spectrum to be saved on ZSTACK Profile dialog window
		spectrum_filename			:	filename of profile spectrum to be saved on ZSTACK Profile dialog window
		spectra_filename			:	filename of profile spectra to be saved on ZSTACK Profile dialog window
		profile_use				:	0: ZSTACK_PROFILE used as a subroutine, 1: ZSTACK_PROFILE used as a stand-alone application
	zstack_display_common
		zstack_plot_par			:	variables controlling ZSTACK Display dialog window
		image_zoom					:	zoom factor for displaying images
		subimage_zoom				:	zoom factor for subimages
		movie_delay				:	delay used to display movie images of data stacks, dependent upon machine speed
		disp_min					:	minimum percentage intensity for display of images
		disp_max					:	maximum percentage intensity for display of images
		disp_gamma					:	gamma factor for display of images
		spectrum_display			:	Display spectra as: 1: Single Beam, 2: Percent Transmittance, 3: Absorbance
		spectrum_offset				:	Offset used to plot spectra
		init_zoom					:	initial zoom factor for displaying images (used in ZSTACK_SAVE and ZSTACK_TUNE)
		movie_active				:	movie of images is active: 0: NO, 1: YES
		profile_zoom				:	zoom factor for file number axis on profile images
		image_range				:	scale images using: 0: intensity range of each image, 1: intensity range of full image stack
		image_ratio				:	Display images normalized by: 0: inv_image_stack, 1: i0 spectrum
		ratio_image_index			:	index of image to use when ratio images to a constant image
		image_scale				:	Display images normalized by: 0: inv_image_stack, 1: i0 spectrum
		image_invert				:	invert color bar: 0: NO, 1: YES
		temp_old_display			:	initial array of display parameters, set at beginning of ZSTACK_DISPLAY
		temp_new_display			:	array of display parameters updated as display options are changed
		zstack_subroutine			:	subroutine from which ZSTACK_DISPLAY was called
		plot_x_min					:	mimimum x-value to plot shifts or spectra
		plot_x_max					:	maximum x-value to plot shifts or spectra
		plot_y_min					:	mimimum y-value to plot shifts or spectra
		plot_y_max					:	maximum y-value to plot shifts or spectra
		x_autoscale				:	autoscale x-values on plots of shifts or spectra: 0: NO, 1: YES
		y_autoscale				:	autoscale y-values on plots of shifts or spectra: 0: NO, 1: YES
	zstack_color_common
		bottom_color_index			:	index of lowermost color of gradient colorscale
		top_color_index				:	index of uppermost color of gradient colorscale
		black_color_index			:	index of black color
		white_color_index			:	index of white color
		plot_bkgd_color_index			:	color index for plot background, either black or white
		plot_axes_color_index			:	color index for plot axes, either whilte or black
		image_border_color_index		:	color index for image border in zstack_buildlist and zstack_profile dialog windows
		dragbox_color_index			:	color index for dragbox used to define subregion for alignment
		corr_ctr_color_index			:	color index for crosshair showing center of correlation function
		corr_max_color_index			:	color index for crosshair showing maximum of correlation function
		x_shift_color_index			:	color index for plotting of x-shift
		y_shift_color_index			:	color index for plotting of y-shift
		shift_cursor_color_index		:	color index for cursor in shift plot, indicating file number
		tune_fiducial_color_index		:	color index for fiducial points in closeup of shifted image in zstack_tune dialog window
		spectra_color_index			:	color indices (14) for plotting of spectra
		spectra_cursor_color_index		:	color index for cursor in spectra plot, indicating x-ray energy
		profile_color_index			:	color index for plotting of intensity profile and cursor in profile image indicating row or column
		profile_cursor_color_index		:	color index for cursor in profile image, indicating x-ray energy
		profile_spectrum_color_index	:	color index for plotting of profile spectrum
		test1_color_index			:	color index #1 for testing
		test2_color_index			:	color index #2 for testing
		test3_color_index			:	color index #3 for testing
 SIDE EFFECTS:

 RESTRICTIONS:
	Used as ZSTACK suite of routines
 PROCEDURE:
	Called by ZSTACK_ALIGN.PRO, ZSTACK_BUILDLIST.PRO, ZSTACK_PROFILE.PRO,
			ZSTACK_SAVE.PRO, ZSTACK_SPECTRA.PRO, ZSTACK_TUNE.PRO
 EXAMPLE:

 MODIFICATION HISTORY:

 (13oct00 cgz) altered definition of dragbox so that it is now [xleft,xright,ybot,ytop]
		this makes it consistent with definition of other cursor boxes
		and eliminates need for min and max testing
		Changed logic statement from:	IF ((dragbox(2) NE 0) AND (dragbox(3) NE 0)) THEN BEGIN
							to:	IF ((dragbox(1) NE 0) AND (dragbox(3) NE 0)) THEN BEGIN

 (29oct00 cgz) several modifications to be compatible with new version of zstack_save
 (05nov00 cgz) modified widget to include more choices on control, added image, spectral, and stack subtraction, not fully implemented
				will be able to use any image, any spectrum for normalization
			modified names of image normalization variables
			modified values of image_ratio
 (28nov00 cgz) migrated zstack_display_colorbar routine to zstack_analyze.pro
 (23-may-04 aph) force color scale, 0 when plotting
 (21-mar-08 MJ)  changed to work on unix (Xscroll_size)
 (13-apr-08 aph) turn on pre-set window size (X_Scroll_size, Y_Scroll_size) only for non-Windows OS
 (07-mar-09 aph) added binary_filenmane to zstack_common
 (26-Jul-09 aph) remove all secondary calls to common blocks & replace with @zstack_(common) syntax
 ;               since the Eclipse workspace tags as errors even though it is an allowed IDL syntax
 (03-Aug-09 aph) change from base-10 to natural log for spectra (Larry Nitler Carnegie)

(See c:\axis2000\zstack_plot.pro)


ZSTACK_PROFILE_COMMON

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		ZSTACK_PROFILE_COMMON

LAST CHANGED: ----------------------------------- 	26-Jul-09

 PURPOSE:
	This file contians the common block, ZSTACK_PROFILE_COMMON

 CATEGORY: programming utility 

 CALLING SEQUENCE: @zstack_profile_common to inclide in a file

 INPUTS: none

 KEYWORDS: none

 OUTPUTS: none

 MODIFICATION HISTORY:
 (26-jul-09 aph) isolated from zstack_plot

(See c:\axis2000\zstack_profile_common.pro)


ZSTACK_READ_MAPPER

[Previous Routine] [Next Routine] [List of Routines]
NAME:
 		ZSTACK_READ_MAPPER

LAST CHANGED: ----------------------------------- 	27-July-11

 PURPOSE:
	This procedure reads in Zimba format alignment shifts, which are
 stored similar to Mapper files (files written by CJJJ's stack alignmnent)
  (x,y) values are stored it in float arrays x and y (y can be multi-valued)

 CATEGORY:
	read in

 CALLING SEQUENCE:
	READ_MAPPER, filename, x, y, help=help, quiet=quiet

 INPUTS:
 	FILENAME	name of file

 KEYWORDS:
	HELP	list parameters
	QUIET	turn off print comments
	PARAMS	array of keywprds which defines the type of alignment used

 ROUTINES:
	Read_mapper_firstnum	strips out all stuff before a comma

 MAPPER file format is  (this is output of Zimba auto-align)

 ! X-Y Pixel shifts after alignment
 ! Full images used
 ! Aligned to preceding images
 ! Correlation maximum determined by 3-pt quadratic fit
 ! No edge enhancement
 ! Maximum allowed shift of 10 pixels
 ! Shift threshold of 0.01 pixels
 ! Edgegauss smoothing of 3 pixels
 ALIGN(-1,-1,0,0,10,0.01,3,0,0,0,0,-1
 PLOTIT(4
 532_110326020_a000.xim  278.00   0.80,0.0000,0.0000
 532_110326020_a001.xim  285.30   0.80,-0.1701,-1.0884
 532_110326020_a002.xim  292.40   0.80,-0.0824,-1.3861
 532_110326020_a003.xim  300.20   0.80,0.0361,-1.5492

 MODIFICATION HISTORY:
 (20-Nov-99 cjj)  rewritten from Rivers stuff
 (20-feb-00 cgz) Renamed zstack_read_mapper.pro, making ZSTACK suite independent
 (19-dec-00 cgz) Padded input_string with leading zeroto ensure that it can be interpreted as a number
 (12-may-02 aph) AXIS standard header added
 (27-jul-11 aph) updated header; tried to get CJJ and Zimba to cross-read

(See c:\axis2000\zstack_read_mapper.pro)


ZSTACK_SAVE.PRO[1]

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
	ZSTACK_SAVE.PRO

 LAST CHANGED: ----------------------------------- 11-Jan-10

 PURPOSE:
	Save images after alignment using ZSTACK_ANALYZE
 AUTHORS:
	Carl G. Zimba (Photons UnLimited),
	Partially derived from previous code by Chris Jacobsen (SUNY - Stonybrook)
 CATEGORY:
	Data analysis.
 CALLING SEQUENCE:
	zstack_save
 INPUTS:
	NONE
 KEYWORD PARAMETERS:
	NONE
 OUTPUTS:
	NONE
 COMMON BLOCKS:
	zstack_common	:
		data_source				:	type of x-ray microscopy data: STXM:1, SXM:2, SM:3, ALS:4, POLY:5
		data_directory				:	directory of data files
		image_stack				:	3-D matrix of multiple x-ray microscope images
		filename_list				:	list of filename corresponding to images in image_stack
		ev_list					:	list of x-ray energies corresponding to images in image_stack
		msec_list					:	list of dwell times corresponding to images in image_stack
		filename_display_list			:	list of filename, x-ray energy, and dwell time corresponding to images in image_stack
		displayed_file_index			:	index in image_stack, filename_list, msec_list, and filename_display_list currently being displayed or processed
		n_files					:	number of images
		list_filename				:	name of file to save or retrieve list of data files
		shift_filename				:	filename of alignment shifts
		x_shift					:	array of x-coordinate alignment shifts
		y_shift					:	array of y-coordinate alignment shifts
		data_shifted				:	0: data was not shifted and should not be clipped, 1: data was shifted and should be clipped, -1: denotes ZSTACK_PROFILE.PRO is being run as a stand-alone procedure
		n_clipped_cols				:	number of columns in clipped image
		n_clipped_rows				:	number of rows in clipped image
		clipbox					:	vector of four points defining dimensions of region unclipped by alignment: [xleft,xright,ybot,ytop]
		dragbox					:	vector of four points defining dimensions of region selected by box_cursor: [xleft,xright,ybot,ytop]
	zstack_spectra_common
		zstack_spectra_par			:	variables controlling ZSTACK Spectra dialog window
		zstack_save_par				:	variables controlling ZSTACK Save dialog window
		roi_index					:	vector of pixels corresponding to regions of interest for all i spectra
		i_roi						:	vector of pixels corresponding to region of interest for current i spectrum
		n_roi						:	number of regions of interest defined for i spectra
		i0_roi					:	vector of pixels defining region of interest for i0 spectrum
		is_i0_roi					:	Type of region of interest: 0: i0, 1: i
		spectrum					:	2-D matrix (j,k) of spectra corresponding to defined regions of interest, j=0: i0 spectrum, j=1-14: i spectra, k corresponds to x-ray energy of image
		save_spectra_type			:	Type of file to save spectra as:
		spectra_filename_header		:	base filename of spectra and regions of interest to be saved on ZSTACK Spectra dialog window
		roi_filename				:	filename for storage and retrieval of regions of interest points
		save_filename_header			:	base filename of images to be saved on ZSTACK Save dialog window
		i0_filename				:	base filename of i0 spectrum to be retrieved
		i0_filetype				:	Type of file of retrieved I0 spectrum:	RAW, XAS, CSV
		i_roi_color_index			:	vector of indices of colors for display of regions of interest for i spectra
		i0_roi_color_index			:	color index for display of region of interest for i0 spectrum
		nonintegral_zoom_data			:	scaled byte image used when image_zoom is non-integral
	zstack_display_common
		zstack_display_par			:	variables controlling ZSTACK Display dialog window
		image_zoom					:	zoom factor for displaying images
		subimage_zoom				:	zoom factor for subimages
		movie_delay				:	delay used to display movie images of data stacks, dependent upon machine speed
		disp_min					:	minimum percentage intensity for display of images
		disp_max					:	maximum percentage intensity for display of images
		disp_gamma					:	gamma factor for display of images
		spectrum_display			:	Display spectra as: 1: Single Beam, 2: Percent Transmittance, 3: Absorbance
		spectrum_offset				:	Offset used to plot spectra
		init_zoom					:	initial zoom factor for displaying images (used in ZSTACK_SAVE and ZSTACK_TUNE)
		movie_active				:	movie of images is active: 0: NO, 1: YES
		profile_zoom				:	zoom factor for file number axis on profile images
		image_range				:	scale images using: 0: intensity range of each image, 1: intensity range of full image stack
		image_ratio				:	Display images normalized by: 0: inv_image_stack, 1: i0 spectrum
		ratio_image_index			:	index of image to use when ratio images to a constant image
		image_scale				:	Display images normalized by: 0: inv_image_stack, 1: i0 spectrum
		image_invert				:	invert color bar: 0: NO, 1: YES
		temp_old_display			:	initial array of display parameters, set at beginning of ZSTACK_DISPLAY
		temp_new_display			:	array of display parameters updated as display options are changed
		zstack_subroutine			:	subroutine from which ZSTACK_DISPLAY was called
		plot_x_min					:	mimimum x-ray energy value to plot spectra
		plot_x_max					:	maximum x-ray energy value to plot spectra
		plot_y_min					:	mimimum intensity value to plot spectra
		plot_y_max					:	maximum intensity value to plot spectra
		x_autoscale				:	autoscale x-ray energy scale: 0: NO, 1: YES
		y_autoscale				:	autoscale spectra intensity scale: 0: NO, 1: YES
	zstack_color_common
		bottom_color_index			:	index of lowermost color of gradient colorscale
		top_color_index				:	index of uppermost color of gradient colorscale
		black_color_index			:	index of black color
		white_color_index			:	index of white color
		plot_bkgd_color_index			:	color index for plot background, either black or white
		plot_axes_color_index			:	color index for plot axes, either whilte or black
		image_border_color_index		:	color index for image border in zstack_buildlist and zstack_profile dialog windows
		dragbox_color_index			:	color index for dragbox used to define subregion for alignment
		corr_ctr_color_index			:	color index for crosshair showing center of correlation function
		corr_max_color_index			:	color index for crosshair showing maximum of correlation function
		x_shift_color_index			:	color index for plotting of x-shift
		y_shift_color_index			:	color index for plotting of y-shift
		shift_cursor_color_index		:	color index for cursor in shift plot, indicating file number
		tune_fiducial_color_index		:	color index for fiducial points in closeup of shifted image in zstack_tune dialog window
		spectra_color_index			:	color indices (14) for plotting of spectra
		spectra_cursor_color_index		:	color index for cursor in spectra plot, indicating x-ray energy
		profile_color_index			:	color index for plotting of intensity profile and cursor in profile image indicating row or column
		profile_cursor_color_index		:	color index for cursor in profile image, indicating x-ray energy
		profile_spectrum_color_index	:	color index for plotting of profile spectrum
		test1_color_index			:	color index #1 for testing
		test2_color_index			:	color index #2 for testing
		test3_color_index			:	color index #3 for testing
 SIDE EFFECTS:

 RESTRICTIONS:

 PROCEDURE:
   Called from within ZSTACK_SPECTRA.PRO.
 EXAMPLE:

 MODIFICATION HISTORY:
   25-Mar-1998 - now works with 24 bit graphics, CJJ
   24-Jul-1998 - two changes (based on suggestions by Adam
     Hitchcock, but the implementations here are my own) CJJ :
     1. allow user to read in i0 files from an ascii file of
        (line by line) values of ev, khz.  The file is used
        only if it spans a larger range of eV values than the
        images in the stack span.
     2. Click on the spectrum to change the file which is displayed
   14-Aug-1998 - now if there's an alignment file, read it in and
     apply it but STILL give the user the chance to align the stack.
     This allows one to (for example) first align a stack manually,
     and then do an automatic alignment over a restricted shift
     range to "refine" the alignment. CJJ
   28-Aug-1998: with IDL 5.1 the way 24 bit graphics is handled is
     now different - need to invoke device,decomposed=0, CJJ
   31-Aug-1998: Allow saving and reading of stack files as XDR data,
     don't read ROI file by default on startup, use zoom=1 unless
     explicitly told otherwise, have alignment shifts saved by
     this program rather than by alignment programs, allow clipping
     of data to exclude shift boundaries, CJJ
   27-sep-1998: but tvrd() works differently on different devices
     so need to write images for GIF files to Z buffer, CJJ
   13-oct-1998: Save many images at once, start to work on
     ratio image stuff, CJJ

 Modified 20feb99, CGZ
 Extensively modified and rewritten STACK_ANALYZE.PRO to form ZSTACK_ANALYZE.PRO
 Changes and additions are numerous:

 All procedures and common variables starting with 'stk' were changed to 'zstack'
 so that the existing routine, STACK_ANALYZE.PRO, can be run in parallel

 Reorganized STACK_ANALYZE.PRO so that
	spectral analysis is done with ZSTACK_SPECTRA and zstack_spectra_* procedures
		spectra and regions of interest are saved with ZSTACK_SPECTRA
	saving of image data is done with ZSTACK_SAVE and ZSTACK_SAVE_* procedures

 Procedures have been modified, added, eliminated as below:
	zstack_save_prep		:	formerly stk_anl_graphics
	zstack_save_imgdisp		:	formerly stk_anl_imgdisp
	zstack_save_plotspectrum	:	formerly stk_anl_plotspectrum
	zstack_save_clip_data		:	formerly stk_anl_clipdata
	zstack_save_desensitive	:	new, adapted from stk_anl_desensitive
	zstack_save_sensitive		:	new, adapted from stk_anl_sensitive
	zstack_save_gifimage		:	stk_anl_savegifimg
	zstack_save_gifmovie		:	stk_anl_gifmovie
	zstack_save_stack_data	:	formerly stk_dat_savefile
	zstack_save_event		:	new, adapted from stk_anl_event
	zstack_save			:	new, adapted from stack_analyze
	stk_aln_savefile		:	eliminated, moved to ZSTACK_ALIGN.PRO (zstack_align_save_shift)
	stk_dat_readfile		:	eliminated
	stk_anl_readroi			:	eliminated
	stk_anl_roi_event		:	eliminated, replace with CW_DEFROI.PRO
	stk_anl_roi			:	eliminated, replace with CW_DEFROI.PRO

 Functions of procedures are now:
	zstack_save_prep		:	sets color table and color indices and defines common variables
	zstack_save_imgdisp		:	displays images and shift plot
	zstack_save_plotspectrum	:	displays extracted spectra
	zstack_save_clip_data		:	defines area of images not clipped by alignment shift
	zstack_save_desensitive	:	deactivate features on Stack Save dialog window
	zstack_save_sensitive		:	activate features on Stack Save dialog window
	zstack_save_gifimage		:	save *.gif image of stack data
	zstack_save_gifmovie		:	save *m.gif movie of stack data
	zstack_save_stack_data	:	save stack data as file (for both clipped and unclipped)
	zstack_save_event		:	event routine for zstack_save
	zstack_save			:	main procedure for saving images and stack data sets

 Modified user interface window to include
	display and movie of image and clipped image
		regions of interest are plotted on both image and clipped image
		cursor bar added to plot of spectra highlighting energy and intensity position
			during movie or static display
		eliminated text embedded in image, replaced it with text fields in dialog window
	displayed file can be selected either using file list or spectral plot
		clicking on spectral plot, prints file info and spectral intensity in Output Log
	text fields added to display image information during movie or static display
		this replaces text as part of image implemented in STACK_ANALYZE.PRO
	eliminated "Add I Pixel" and "Add I0 Pixel" since it is embedded part of CW_DEFROI.PRO
	eliminated ratio image feature - may restore later
	eliminated IDL Slicer feature - may restore later
	"Load New Color Table" option added
		can change the color table in either ZSTACK_SPECTRA, ZSTACK_SAVE, or ZSTACK_PROFILE
	saving of spectra in multiple formats: *.xas, *.spc, *.gif
	added ability to extract spectra from multiple regions simultaneously (up to 14 spectra)

 Replaced stk_anl_roi and stk_anl_roi_event with CW_DEFROI.PRO
	New routine is shipped with IDL and is more robust on multiple platforms
	Allow selection of regions of interest as polygon, single point, rectangle, or circle

 Changed the way the color table is specified:
	- calls ZSTACK_COLOR.PRO from within zstack_save_prep
	- much simpler now, only executed once, allows multiple colors easily

 Deleted unused variables
	char_ypix,charsize,textregion_nlines,textregion_ypix,
	i_images_color_index,i0_images_color_index,i0_images_list,i_images_list

 Renamed ev to ev_list, and msec to msec_list

 Added option for data from Polymer STXM
	/poly keyword and stxm1_sxm2_sm3_als4_poly5 variable
	Made stxm1_sxm2_sm3_als4_poly5 part of zstack_common variable

 Modified Stack Save dialog window for 3 columns, including a long list of image files

 Modified COMMON block structure so that common variables are shared with all zstack routines
	i.e., zstack_common contains variables used by
		ZSTACK_ANALYZE.PRO, ZSTACK_READLIST.PRO, ZSTACK_BUILDLIST.PRO, and ZSTACK_ALIGN.PRO
 Common variables are now defined only once in each file (in zstack_save_prep), not repetitively as before.
 Common variables for data are now determined within ZSTACK_BUILDLIST.PRO or ZSTACK_READLIST.PRO:
	image_stack, filename_list, ev_list, msec_list, filename_display_list
	This requires that files be read only once, eliminated time-intensive duplicate calls of
		STXM_READ.PRO or SXM_READ.PRO

 Modified zstack_save_par
	so that they only contain only variables associated with dialog window.
	All other variables have been moved to zstack_analyze_common

 Moved list_filename and shift_filename variables to zstack_common variable
 Added n_files variable to zstack_common variable
 Header with list_filename and shift_filename now wriiten as part of *.spc and *.roi files

 Ratio of image to I0 spectrum appears to be useless
	Previously, some slight variation in image contrast was present
	but was likely due to the way the percent_image was computed:
	Former:	percent_image = 100. * image_stack(*,*,i_file) / max(image_stack(*,*,i_file))
					(via obsolete invmax_image_stack variable)
		which didn't scale image intensity accurately between 0 and 100
	Now:		this_image = image_stack(*,*,i_file) / min(image_stack(*,*,i_file))
			percent_image = 100. * this_image / max(this_image)
		which forces image intensity to be accurately scaled between 0 and 100
	So eliminate 'ratio image to i0 spectrum' option
	Explore possibility of displaying image using log or exp scale, in addition to present linear scale

 Modified zstack_save_stack_data procedure to save image stack (*.stk)
	Saved image stack has a format slightly different from CJJ code since it includes the filename_list
		so the file structure of the two different file formats makes them incompatible

 (05oct00 cgz)
	Modified dialog widget to include capability to select subregion,
		better capability to select various formats to save data as image, movie, binary
	Created zstack_save_common to include variables for saving various image and movie formats
		Moved zstack_save_par and save_filename_header from zstack_spectra_common
		Moved dragbox from zstack_align_common to zstack_common
			so that it can be used in zstack_save to select subregion of interest
		Modified other zstack procedures to conform

 (06oct00 cgz)
	Added capability to specify a subregion using a dragbox routine

 (13oct00 cgz) altered definition of dragbox so that it is now [xleft,xright,ybot,ytop]
		this makes it consistent with definition of other cursor boxes
		and eliminates need for min and max testing
		Changed logic statement from:	IF ((dragbox(2) NE 0) AND (dragbox(3) NE 0)) THEN BEGIN
							to:	IF ((dragbox(1) NE 0) AND (dragbox(3) NE 0)) THEN BEGIN
 (06nov00 cgz)
	Added button to invoke IDL Slicer with full (unclipped) aligned image stack
 (28nov00 cgz) migrated zstack_profile_colorbar routine to zstack_analyze.pro
 ===============================================================================
 (22feb02 aph) replace cgz modified code with write_sb call for binary stack
 -------- DONE in the zstack_jan01 version (axis_dev)
 (11-jul-04 aph) try to get save images panel to work correctly
	- mpeg and mgif do not work un der IDL 6.0 (license inhibit)
	- replace write_gif with write_tiff - does not display image; inverted
 --------
 (16jul04 aph) fix 'invalid widget error' - needed to add CONDITIONAL: IF (data_shifted EQ 1)
			 on zstack_save_par.clipped_image_label sensitive and desensitive lines
                convert to write sequence of tif files for  movie generation
 (03-Mar-08 MJ) Keyword /SCROLL in widget_base() needs X_SCROLL_SIZE.
                Use of /SCROLL and /MODAL at the same time not allowed.
 (13-apr-08 aph) turn on pre-set window size (X_Scroll_size, Y_Scroll_size) only for non-Windows OS
 (07-mar-09 aph) added binary_filenmane to zstack_common
 (27-jul-09 aph) external common; print if no code
 (03-Aug-09 aph) change from base-10 to natural log for spectra (Larry Nitler Carnegie)
 (11-Jan-10 aph) changed write_gif procedure to ax_write_gif procedure to work-around
                 the conflict of the named write_gif_common common block in IDL's write_gif.pro
                 with that embedded in stack_analyze.sav (CJJ)

(See c:\axis2000\zstack_save-Nov2010.pro)


ZSTACK_SAVE.PRO[2]

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
	ZSTACK_SAVE.PRO

 LAST CHANGED: ----------------------------------- 27-Jul-15

 PURPOSE:
	Save images after alignment using ZSTACK_ANALYZE
 AUTHORS:
	Carl G. Zimba (Photons UnLimited),
	Partially derived from previous code by Chris Jacobsen (SUNY - Stonybrook)
 CATEGORY:
	Data analysis.
 CALLING SEQUENCE:
	zstack_save
 INPUTS:
	NONE
 KEYWORD PARAMETERS:
	NONE
 OUTPUTS:
	NONE
 COMMON BLOCKS:
	zstack_common	:
		data_source				:	type of x-ray microscopy data: STXM:1, SXM:2, SM:3, ALS:4, POLY:5
		data_directory				:	directory of data files
		image_stack				:	3-D matrix of multiple x-ray microscope images
		filename_list				:	list of filename corresponding to images in image_stack
		ev_list					:	list of x-ray energies corresponding to images in image_stack
		msec_list					:	list of dwell times corresponding to images in image_stack
		filename_display_list			:	list of filename, x-ray energy, and dwell time corresponding to images in image_stack
		displayed_file_index			:	index in image_stack, filename_list, msec_list, and filename_display_list currently being displayed or processed
		n_files					:	number of images
		list_filename				:	name of file to save or retrieve list of data files
		shift_filename				:	filename of alignment shifts
		x_shift					:	array of x-coordinate alignment shifts
		y_shift					:	array of y-coordinate alignment shifts
		data_shifted				:	0: data was not shifted and should not be clipped, 1: data was shifted and should be clipped, -1: denotes ZSTACK_PROFILE.PRO is being run as a stand-alone procedure
		n_clipped_cols				:	number of columns in clipped image
		n_clipped_rows				:	number of rows in clipped image
		clipbox					:	vector of four points defining dimensions of region unclipped by alignment: [xleft,xright,ybot,ytop]
		dragbox					:	vector of four points defining dimensions of region selected by box_cursor: [xleft,xright,ybot,ytop]
	zstack_spectra_common
		zstack_spectra_par			:	variables controlling ZSTACK Spectra dialog window
		zstack_save_par				:	variables controlling ZSTACK Save dialog window
		roi_index					:	vector of pixels corresponding to regions of interest for all i spectra
		i_roi						:	vector of pixels corresponding to region of interest for current i spectrum
		n_roi						:	number of regions of interest defined for i spectra
		i0_roi					:	vector of pixels defining region of interest for i0 spectrum
		is_i0_roi					:	Type of region of interest: 0: i0, 1: i
		spectrum					:	2-D matrix (j,k) of spectra corresponding to defined regions of interest, j=0: i0 spectrum, j=1-14: i spectra, k corresponds to x-ray energy of image
		save_spectra_type			:	Type of file to save spectra as:
		spectra_filename_header		:	base filename of spectra and regions of interest to be saved on ZSTACK Spectra dialog window
		roi_filename				:	filename for storage and retrieval of regions of interest points
		save_filename_header			:	base filename of images to be saved on ZSTACK Save dialog window
		i0_filename				:	base filename of i0 spectrum to be retrieved
		i0_filetype				:	Type of file of retrieved I0 spectrum:	RAW, XAS, CSV
		i_roi_color_index			:	vector of indices of colors for display of regions of interest for i spectra
		i0_roi_color_index			:	color index for display of region of interest for i0 spectrum
		nonintegral_zoom_data			:	scaled byte image used when image_zoom is non-integral
	zstack_display_common
		zstack_display_par			:	variables controlling ZSTACK Display dialog window
		image_zoom					:	zoom factor for displaying images
		subimage_zoom				:	zoom factor for subimages
		movie_delay				:	delay used to display movie images of data stacks, dependent upon machine speed
		disp_min					:	minimum percentage intensity for display of images
		disp_max					:	maximum percentage intensity for display of images
		disp_gamma					:	gamma factor for display of images
		spectrum_display			:	Display spectra as: 1: Single Beam, 2: Percent Transmittance, 3: Absorbance
		spectrum_offset				:	Offset used to plot spectra
		init_zoom					:	initial zoom factor for displaying images (used in ZSTACK_SAVE and ZSTACK_TUNE)
		movie_active				:	movie of images is active: 0: NO, 1: YES
		profile_zoom				:	zoom factor for file number axis on profile images
		image_range				:	scale images using: 0: intensity range of each image, 1: intensity range of full image stack
		image_ratio				:	Display images normalized by: 0: inv_image_stack, 1: i0 spectrum
		ratio_image_index			:	index of image to use when ratio images to a constant image
		image_scale				:	Display images normalized by: 0: inv_image_stack, 1: i0 spectrum
		image_invert				:	invert color bar: 0: NO, 1: YES
		temp_old_display			:	initial array of display parameters, set at beginning of ZSTACK_DISPLAY
		temp_new_display			:	array of display parameters updated as display options are changed
		zstack_subroutine			:	subroutine from which ZSTACK_DISPLAY was called
		plot_x_min					:	mimimum x-ray energy value to plot spectra
		plot_x_max					:	maximum x-ray energy value to plot spectra
		plot_y_min					:	mimimum intensity value to plot spectra
		plot_y_max					:	maximum intensity value to plot spectra
		x_autoscale				:	autoscale x-ray energy scale: 0: NO, 1: YES
		y_autoscale				:	autoscale spectra intensity scale: 0: NO, 1: YES
	zstack_color_common
		bottom_color_index			:	index of lowermost color of gradient colorscale
		top_color_index				:	index of uppermost color of gradient colorscale
		black_color_index			:	index of black color
		white_color_index			:	index of white color
		plot_bkgd_color_index			:	color index for plot background, either black or white
		plot_axes_color_index			:	color index for plot axes, either whilte or black
		image_border_color_index		:	color index for image border in zstack_buildlist and zstack_profile dialog windows
		dragbox_color_index			:	color index for dragbox used to define subregion for alignment
		corr_ctr_color_index			:	color index for crosshair showing center of correlation function
		corr_max_color_index			:	color index for crosshair showing maximum of correlation function
		x_shift_color_index			:	color index for plotting of x-shift
		y_shift_color_index			:	color index for plotting of y-shift
		shift_cursor_color_index		:	color index for cursor in shift plot, indicating file number
		tune_fiducial_color_index		:	color index for fiducial points in closeup of shifted image in zstack_tune dialog window
		spectra_color_index			:	color indices (14) for plotting of spectra
		spectra_cursor_color_index		:	color index for cursor in spectra plot, indicating x-ray energy
		profile_color_index			:	color index for plotting of intensity profile and cursor in profile image indicating row or column
		profile_cursor_color_index		:	color index for cursor in profile image, indicating x-ray energy
		profile_spectrum_color_index	:	color index for plotting of profile spectrum
		test1_color_index			:	color index #1 for testing
		test2_color_index			:	color index #2 for testing
		test3_color_index			:	color index #3 for testing
 SIDE EFFECTS:

 RESTRICTIONS:

 PROCEDURE:
   Called from within ZSTACK_SPECTRA.PRO.
 EXAMPLE:

 MODIFICATION HISTORY:
   25-Mar-1998 - now works with 24 bit graphics, CJJ
   24-Jul-1998 - two changes (based on suggestions by Adam
     Hitchcock, but the implementations here are my own) CJJ :
     1. allow user to read in i0 files from an ascii file of
        (line by line) values of ev, khz.  The file is used
        only if it spans a larger range of eV values than the
        images in the stack span.
     2. Click on the spectrum to change the file which is displayed
   14-Aug-1998 - now if there's an alignment file, read it in and
     apply it but STILL give the user the chance to align the stack.
     This allows one to (for example) first align a stack manually,
     and then do an automatic alignment over a restricted shift
     range to "refine" the alignment. CJJ
   28-Aug-1998: with IDL 5.1 the way 24 bit graphics is handled is
     now different - need to invoke device,decomposed=0, CJJ
   31-Aug-1998: Allow saving and reading of stack files as XDR data,
     don't read ROI file by default on startup, use zoom=1 unless
     explicitly told otherwise, have alignment shifts saved by
     this program rather than by alignment programs, allow clipping
     of data to exclude shift boundaries, CJJ
   27-sep-1998: but tvrd() works differently on different devices
     so need to write images for GIF files to Z buffer, CJJ
   13-oct-1998: Save many images at once, start to work on
     ratio image stuff, CJJ

 Modified 20feb99, CGZ
 Extensively modified and rewritten STACK_ANALYZE.PRO to form ZSTACK_ANALYZE.PRO
 Changes and additions are numerous:

 All procedures and common variables starting with 'stk' were changed to 'zstack'
 so that the existing routine, STACK_ANALYZE.PRO, can be run in parallel

 Reorganized STACK_ANALYZE.PRO so that
	spectral analysis is done with ZSTACK_SPECTRA and zstack_spectra_* procedures
		spectra and regions of interest are saved with ZSTACK_SPECTRA
	saving of image data is done with ZSTACK_SAVE and ZSTACK_SAVE_* procedures

 Procedures have been modified, added, eliminated as below:
	zstack_save_prep		:	formerly stk_anl_graphics
	zstack_save_imgdisp		:	formerly stk_anl_imgdisp
	zstack_save_plotspectrum	:	formerly stk_anl_plotspectrum
	zstack_save_clip_data		:	formerly stk_anl_clipdata
	zstack_save_desensitive	:	new, adapted from stk_anl_desensitive
	zstack_save_sensitive		:	new, adapted from stk_anl_sensitive
	zstack_save_gifimage		:	stk_anl_savegifimg
	zstack_save_gifmovie		:	stk_anl_gifmovie
	zstack_save_stack_data	:	formerly stk_dat_savefile
	zstack_save_event		:	new, adapted from stk_anl_event
	zstack_save			:	new, adapted from stack_analyze
	stk_aln_savefile		:	eliminated, moved to ZSTACK_ALIGN.PRO (zstack_align_save_shift)
	stk_dat_readfile		:	eliminated
	stk_anl_readroi			:	eliminated
	stk_anl_roi_event		:	eliminated, replace with CW_DEFROI.PRO
	stk_anl_roi			:	eliminated, replace with CW_DEFROI.PRO

 Functions of procedures are now:
	zstack_save_prep		:	sets color table and color indices and defines common variables
	zstack_save_imgdisp		:	displays images and shift plot
	zstack_save_plotspectrum	:	displays extracted spectra
	zstack_save_clip_data		:	defines area of images not clipped by alignment shift
	zstack_save_desensitive	:	deactivate features on Stack Save dialog window
	zstack_save_sensitive		:	activate features on Stack Save dialog window
	zstack_save_gifimage		:	save *.gif image of stack data
	zstack_save_gifmovie		:	save *m.gif movie of stack data
	zstack_save_stack_data	:	save stack data as file (for both clipped and unclipped)
	zstack_save_event		:	event routine for zstack_save
	zstack_save			:	main procedure for saving images and stack data sets

 Modified user interface window to include
	display and movie of image and clipped image
		regions of interest are plotted on both image and clipped image
		cursor bar added to plot of spectra highlighting energy and intensity position
			during movie or static display
		eliminated text embedded in image, replaced it with text fields in dialog window
	displayed file can be selected either using file list or spectral plot
		clicking on spectral plot, prints file info and spectral intensity in Output Log
	text fields added to display image information during movie or static display
		this replaces text as part of image implemented in STACK_ANALYZE.PRO
	eliminated "Add I Pixel" and "Add I0 Pixel" since it is embedded part of CW_DEFROI.PRO
	eliminated ratio image feature - may restore later
	eliminated IDL Slicer feature - may restore later
	"Load New Color Table" option added
		can change the color table in either ZSTACK_SPECTRA, ZSTACK_SAVE, or ZSTACK_PROFILE
	saving of spectra in multiple formats: *.xas, *.spc, *.gif
	added ability to extract spectra from multiple regions simultaneously (up to 14 spectra)

 Replaced stk_anl_roi and stk_anl_roi_event with CW_DEFROI.PRO
	New routine is shipped with IDL and is more robust on multiple platforms
	Allow selection of regions of interest as polygon, single point, rectangle, or circle

 Changed the way the color table is specified:
	- calls ZSTACK_COLOR.PRO from within zstack_save_prep
	- much simpler now, only executed once, allows multiple colors easily

 Deleted unused variables
	char_ypix,charsize,textregion_nlines,textregion_ypix,
	i_images_color_index,i0_images_color_index,i0_images_list,i_images_list

 Renamed ev to ev_list, and msec to msec_list

 Added option for data from Polymer STXM
	/poly keyword and stxm1_sxm2_sm3_als4_poly5 variable
	Made stxm1_sxm2_sm3_als4_poly5 part of zstack_common variable

 Modified Stack Save dialog window for 3 columns, including a long list of image files

 Modified COMMON block structure so that common variables are shared with all zstack routines
	i.e., zstack_common contains variables used by
		ZSTACK_ANALYZE.PRO, ZSTACK_READLIST.PRO, ZSTACK_BUILDLIST.PRO, and ZSTACK_ALIGN.PRO
 Common variables are now defined only once in each file (in zstack_save_prep), not repetitively as before.
 Common variables for data are now determined within ZSTACK_BUILDLIST.PRO or ZSTACK_READLIST.PRO:
	image_stack, filename_list, ev_list, msec_list, filename_display_list
	This requires that files be read only once, eliminated time-intensive duplicate calls of
		STXM_READ.PRO or SXM_READ.PRO

 Modified zstack_save_par
	so that they only contain only variables associated with dialog window.
	All other variables have been moved to zstack_analyze_common

 Moved list_filename and shift_filename variables to zstack_common variable
 Added n_files variable to zstack_common variable
 Header with list_filename and shift_filename now wriiten as part of *.spc and *.roi files

 Ratio of image to I0 spectrum appears to be useless
	Previously, some slight variation in image contrast was present
	but was likely due to the way the percent_image was computed:
	Former:	percent_image = 100. * image_stack(*,*,i_file) / max(image_stack(*,*,i_file))
					(via obsolete invmax_image_stack variable)
		which didn't scale image intensity accurately between 0 and 100
	Now:		this_image = image_stack(*,*,i_file) / min(image_stack(*,*,i_file))
			percent_image = 100. * this_image / max(this_image)
		which forces image intensity to be accurately scaled between 0 and 100
	So eliminate 'ratio image to i0 spectrum' option
	Explore possibility of displaying image using log or exp scale, in addition to present linear scale

 Modified zstack_save_stack_data procedure to save image stack (*.stk)
	Saved image stack has a format slightly different from CJJ code since it includes the filename_list
		so the file structure of the two different file formats makes them incompatible

 (05oct00 cgz)
	Modified dialog widget to include capability to select subregion,
		better capability to select various formats to save data as image, movie, binary
	Created zstack_save_common to include variables for saving various image and movie formats
		Moved zstack_save_par and save_filename_header from zstack_spectra_common
		Moved dragbox from zstack_align_common to zstack_common
			so that it can be used in zstack_save to select subregion of interest
		Modified other zstack procedures to conform

 (06oct00 cgz)
	Added capability to specify a subregion using a dragbox routine

 (13oct00 cgz) altered definition of dragbox so that it is now [xleft,xright,ybot,ytop]
		this makes it consistent with definition of other cursor boxes
		and eliminates need for min and max testing
		Changed logic statement from:	IF ((dragbox(2) NE 0) AND (dragbox(3) NE 0)) THEN BEGIN
							to:	IF ((dragbox(1) NE 0) AND (dragbox(3) NE 0)) THEN BEGIN
 (06nov00 cgz)
	Added button to invoke IDL Slicer with full (unclipped) aligned image stack
 (28nov00 cgz) migrated zstack_profile_colorbar routine to zstack_analyze.pro
 ===============================================================================
 (22feb02 aph) replace cgz modified code with write_sb call for binary stack
 -------- DONE in the zstack_jan01 version (axis_dev)
 (11-jul-04 aph) try to get save images panel to work correctly
	- mpeg and mgif do not work un der IDL 6.0 (license inhibit)
	- replace write_gif with write_tiff - does not display image; inverted
 --------
 (16jul04 aph) fix 'invalid widget error' - needed to add CONDITIONAL: IF (data_shifted EQ 1)
			 on zstack_save_par.clipped_image_label sensitive and desensitive lines
                convert to write sequence of tif files for  movie generation
 (03-Mar-08 MJ) Keyword /SCROLL in widget_base() needs X_SCROLL_SIZE.
                Use of /SCROLL and /MODAL at the same time not allowed.
 (13-apr-08 aph) turn on pre-set window size (X_Scroll_size, Y_Scroll_size) only for non-Windows OS
 (07-mar-09 aph) added binary_filenmane to zstack_common
 (27-jul-09 aph) external common; print if no code
 (03-Aug-09 aph) change from base-10 to natural log for spectra (Larry Nitler Carnegie)
 (11-Jan-10 aph) changed write_gif procedure to ax_write_gif procedure to work-around
                 the conflict of the named write_gif_common common block in IDL's write_gif.pro
                 with that embedded in stack_analyze.sav (CJJ)
 (22-Jul-14 aph) change writejpeg to writejpeg2000 to try to get movies as multi-image writing to work
 (27-Jul-14 aph) change () to [] with specified ranges

(See c:\axis2000\zstack_save.pro)


ZSTACK_SAVE_COMMON

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		ZSTACK_SAVE_COMMON

LAST CHANGED: ----------------------------------- 	26-Jul-09

 PURPOSE:
	This file contians the common block, ZSTACK_SAVE_COMMON

 CATEGORY: programming utility 

 CALLING SEQUENCE: @zstack_save_common to inclide in a file

 INPUTS: none

 KEYWORDS: none

 OUTPUTS: none

 MODIFICATION HISTORY:
 (26-jul-09 aph) isolated from zstack_plot

(See c:\axis2000\zstack_save_common.pro)


ZSTACK_SPECTRA_COMMON

[Previous Routine] [Next Routine] [List of Routines]
NAME:
		ZSTACK_SPECTRA_COMMON

LAST CHANGED: ----------------------------------- 	26-Jul-09

 PURPOSE:
	This file contians the common block, ZSTACK_SPECTRA_COMMON

 CATEGORY: programming utility 

 CALLING SEQUENCE: @zstack_spectra_common to inclide in a file

 INPUTS: none

 KEYWORDS: none

 OUTPUTS: none

 MODIFICATION HISTORY:
 (26-jul-09 aph) isolated from zstack_plot

(See c:\axis2000\zstack_spectra_common.pro)


ZSTACK_TUNE.PRO

[Previous Routine] [Next Routine] [List of Routines]
 NAME:
	ZSTACK_TUNE.PRO

 LAST CHANGED: ----------------------------------- 27-Jul-09

 AUTHORS:
	Carl G. Zimba (NIST), Chris Jacobsen (SUNY - Stonybrook)
 PURPOSE:
	Alignment of images abtained on an x-ray microscope.
	Called by ZSTACK_ALIGN.PRO
 CATEGORY:
	Data analysis.
 CALLING SEQUENCE:
	zstack_tune
 INPUTS:
	NONE
	filename_list,ev_list,msec_list,filename_display_list, and image_stack of zstack_common
		must be previously defined via ZSTACK_ANALYZE.PRO
 KEYWORD PARAMETERS:
	NONE
 OUTPUTS:
	x_shift, y_shift, corr_dim_stack, corr_stack, shifted_image_stack of zstack_align_common
		are computed as output
 COMMON BLOCKS:
	zstack_common	:
		data_source				:	type of x-ray microscopy data: STXM:1, SXM:2, SM:3, ALS:4, POLY:5
		data_directory				:	directory of data files
		image_stack				:	3-D matrix of multiple x-ray microscope images
		filename_list				:	list of filename corresponding to images in image_stack
		ev_list					:	list of x-ray energies corresponding to images in image_stack
		msec_list					:	list of dwell times corresponding to images in image_stack
		filename_display_list			:	list of filename, x-ray energy, and dwell time corresponding to images in image_stack
		displayed_file_index			:	index in image_stack, filename_list, msec_list, and filename_display_list currently being displayed or processed
		n_files					:	number of images
		list_filename				:	name of file to save or retrieve list of data files
		shift_filename				:	filename of alignment shifts
		x_shift					:	array of x-coordinate alignment shifts
		y_shift					:	array of y-coordinate alignment shifts
		data_shifted				:	0: data was not shifted and should not be clipped, 1: data was shifted and should be clipped, -1: denotes ZSTACK_PROFILE.PRO is being run as a stand-alone procedure
		n_clipped_cols				:	number of columns in clipped image
		n_clipped_rows				:	number of rows in clipped image
		clipbox					:	vector of four points defining dimensions of region unclipped by alignment: [xleft,xright,ybot,ytop]
	zstack_align_common
		zstack_align_par			:	variables controlling ZSTACK Align dialog window
		file_num					:	vector of file numbers of image files
		dragbox					:	vector of four points defining dimensions of region selected for alignment: [xleft,xright,ybot,ytop]
		edge_enhance				:	edge enhancement parameter: 0: none, 1: sobel, 2: roberts
		edgegauss_pixels			:	number of pixels used for edgeguass smoothing in ZSTACK_ALIGN_IMAGES.PRO, default = 3
		edgefill					:	type of filling to occur at edges of shifted images: mean, median, max, min, zero
		image_match				:	Image to align to: -1: preceding image, 0: constant image, 1: following image
		constant_file_index			:	image of index to use as reference when aligning to a constant image
		corr_max					:	0: use 3-pt fitted maximum of correlation function, 1: use center of mass of correlation function
		maxshift					:	2-point vector of minimum and maximum values of x-shift and y_shift, and temp_x_shift and temp_y_shift within ZSTACK_ALIGN_TUNE
		doalign_complete			:	-1: alignment in progress, 0: alignment not started, 1: alignment finished, 2	: using alignment from stored file
		low_memory					:	Reflects keyword LOW_MEM: 0: use full memory allocation, 1: use reduced memory allocation
		corr_stack					:	3-D matrix of correlation functions corresponding to image_stack
		shifted_image_stack			:	3-D matrix of shifted images corresponding to image_stack
		corr_dim_stack				:	3-D matrix (i,j,k) of maxima of correlation functions: i: x maximum, j: y maximum, k: image file
		shift_threshold				:	mimimum shift required to actually shift the image
	zstack_tune_common
		zstack_tune_par				:	variables controlling ZSTACK Tune Alignment dialog window
		temp_x_shift				:	vector of alignment shifts along x-coordinate for images in image_stack, obtained within ZSTACK_ALIGN_TUNE
		temp_y_shift				:	vector of alignment shifts along y-coordinate for images in image_stack, obtained within ZSTACK_ALIGN_TUNE
		init_x_shift				:	vector of initial alignment shifts along x-coordinate for images in image_stack
		init_y_shift				:	vector of initial alignment shifts along y-coordinate for images in image_stack
		image_center				:	array of pixel coordinates specifying the center (in pixels) of each image
		corr_center				:	array of pixel coordinates specifying the center (in pixels) of each correlation function image
		shifted_center				:	array of pixel coordinates specifying the center (in pixels) of each shifted image
		subimage_center				:	array of pixel coordinates specifying the center (in pixels) of each subimage
		subcorr_center				:	array of pixel coordinates specifying the center (in pixels) of each correlation function subimage
		subshifted_center			:	array of pixel coordinates specifying the center (in pixels) of each shifted subimage
		subimage_pixels				:	size of subimages in pixels
		fid_pt					:	pixel coordinates of present fiducial point(s)
		n_fid_pt					:	number of fiducial points
		all_fid_pt					:	array of all fiducial points
		fid_pt_index				:	index of fiducial point(s)
	zstack_display_common
		zstack_display_par			:	variables controlling ZSTACK Display dialog window
		image_zoom					:	zoom factor for displaying images
		subimage_zoom				:	zoom factor for subimages
		movie_delay				:	delay used to display movie images of data stacks, dependent upon machine speed
		disp_min					:	minimum percentage intensity for display of images
		disp_max					:	maximum percentage intensity for display of images
		disp_gamma					:	gamma factor for display of images
		spectrum_display			:	Display spectra as: 1: Single Beam, 2: Percent Transmittance, 3: Absorbance
		spectrum_offset				:	Offset used to plot spectra
		init_zoom					:	initial zoom factor for displaying images (used in ZSTACK_SAVE and ZSTACK_TUNE)
		movie_active				:	movie of images is active: 0: NO, 1: YES
		profile_zoom				:	zoom factor for file number axis on profile images
		image_range				:	scale images using: 0: intensity range of each image, 1: intensity range of full image stack
		image_ratio				:	Display images normalized by: 0: inv_image_stack, 1: i0 spectrum
		ratio_image_index			:	index of image to use when ratio images to a constant image
		image_scale				:	Display images normalized by: 0: inv_image_stack, 1: i0 spectrum
		image_invert				:	invert color bar: 0: NO, 1: YES
		temp_old_display			:	initial array of display parameters, set at beginning of ZSTACK_DISPLAY
		temp_new_display			:	array of display parameters updated as display options are changed
		zstack_subroutine			:	subroutine from which ZSTACK_DISPLAY was called
		spectra_x_min				:	mimimum x-ray energy value to plot spectra
		spectra_x_max				:	maximum x-ray energy value to plot spectra
		spectra_y_min				:	mimimum intensity value to plot spectra
		spectra_y_max				:	maximum intensity value to plot spectra
		x_autoscale				:	autoscale x-ray energy scale: 0: NO, 1: YES
		y_autoscale				:	autoscale spectra intensity scale: 0: NO, 1: YES
	zstack_color_common
		bottom_color_index			:	index of lowermost color of gradient colorscale
		top_color_index				:	index of uppermost color of gradient colorscale
		black_color_index			:	index of black color
		white_color_index			:	index of white color
		plot_bkgd_color_index			:	color index for plot background, either black or white
		plot_axes_color_index			:	color index for plot axes, either whilte or black
		image_border_color_index		:	color index for image border in zstack_buildlist and zstack_profile dialog windows
		dragbox_color_index			:	color index for dragbox used to define subregion for alignment
		corr_ctr_color_index			:	color index for crosshair showing center of correlation function
		corr_max_color_index			:	color index for crosshair showing maximum of correlation function
		x_shift_color_index			:	color index for plotting of x-shift
		y_shift_color_index			:	color index for plotting of y-shift
		shift_cursor_color_index		:	color index for cursor in shift plot, indicating file number
		tune_fiducial_color_index		:	color index for fiducial points in closeup of shifted image in zstack_tune dialog window
		spectra_color_index			:	color indices (14) for plotting of spectra
		spectra_cursor_color_index		:	color index for cursor in spectra plot, indicating x-ray energy
		profile_color_index			:	color index for plotting of intensity profile and cursor in profile image indicating row or column
		profile_cursor_color_index		:	color index for cursor in profile image, indicating x-ray energy
		profile_spectrum_color_index	:	color index for plotting of profile spectrum
		test1_color_index			:	color index #1 for testing
		test2_color_index			:	color index #2 for testing
		test3_color_index			:	color index #3 for testing
 SIDE EFFECTS:

 RESTRICTIONS:

 PROCEDURE:
	Called by ZSTACK_ALIGN.PRO
 EXAMPLE:

 MODIFICATION HISTORY:
 Modified 25-mar-1998 to deal with 24 bit graphics, CJJ
 Modified July 11 and 13, 1998 to deal with changes to align.pro, CJJ
 Modified 28-aug-1998 to work with corrected 24 bit graphics. CJJ
 Modified 31-Aug-1998 to add x_shift, y_shift to argument list, and
   remove shift_filename!, CJJ

 Modified 20feb99, CGZ
 Extensively modified and rewritten STACK_ALIGN.PRO to form ZSTACK_ALIGN.PRO
 Changes and additions are numerous:

 All procedures and common variables starting with 'stack' were changed to 'zstack'
 so that the existing routine, STACK_ALIGN.PRO, can be run in parallel

 Added the following procedures:
	zstack_align_prep		:	sets color table and color indices
	zstack_tune_imgdisp		:	displays images and shift plot
	zstack_align_save_shift	:	saves alignment shift into MAPPER file, *.aln
	zstack_align_read_shift	:	reads alignment shifts from MAPPER file, *.aln
	zstack_tune_event	:	event routine for zstack_tune
	zstack_tune		:	interactive adjustment of individual alignment shifts

 Rewrote stack_align_sensitive to be two separate procedures with better control
	zstack_align_sensitive	:	activate features on Stack Align dialog window
	zstack_align_desensitive	:	deactivate features on Stack Align dialog window

 Pre-existing procedures
	zstack_align_doalign		:	controls alignment of image stack with active display
	zstack_align_event		:	event routine for zstack_align
	zstack_align			:	main procedure for alignment of STXM images

 Modified user interface window to include
	display and movie of image, correlation function, shifted image
		dragbox is plotted on both image and shifted image
		center of correlation function displayed as crosshair overlay (same as CJJ)
		maximum of correlation function displayed as 1-pixel box overlay (same as CJJ)
	modified plot of alignment shifts
		- use actual file numbers instead of file sequence number (relative number)
		- added plot_x_min and plot_x_max
		? is it useful to plot vs x-ray energy instead - would require considerable work
			might be able to plot both using upper and lower x-axes
	movie can be played before and after alignment to inspect position of dragbox
		and quality of alignment
	cursor bar added to plot of alignment shifts highlighting shift and file
		during movie or static display
	displayed file can be selected either using file list or alignment plot
		clicking on alignment plot, prints file info and alignment shift in Output Log
	text fields added to display image and shift information during movie or static display
	added "Load New Color Table" to change color table of image
	saving and retrieving of file of alignment shifts
	added ability to redo alignment
		- can now do multiple alignments using different conditions, saving each

 Changed zstack_align_par.dragbox_label routine in zstack_align_event
	Replaced getbox routine with box_cursor routine, more robust on multiple platforms, CGZ

 Adapted display routines to use zstack_tune_imgdisp
	One display algorithm which can be easily modified
	Only exception is real-time plotting of alignment shift in zstack_align_doalign

 Changed the way the color table is specified: zstack_align_prep
	- much simpler now, only executed once, allows multiple colors easily

 New variables:
	corr_stack			:	stack of correlation functions
	shift_image_stack	:	stack of shifted images
	corr_dim_stack		:	stack of dimensions specifying center and maxima of
							correlation function
							used for displaying correlation function
	edgefill			:	 type of filling to occur at edges of shifted images
							(edges can contain no data due to shifting)
							set within zstack_align_doalign
		meanfill 		:	replace with mean of image
		medianfill 	:	replace with median of image
		maxfill 		:	replace with maximum of image
		minfill 		:	replace with minimum of image
		zero			:	replace with zero (default)
 	doalign_complete	:	specifies state of alignment
							(modified from use in stack_align.pro)
		-1			:	alignment in progress
		 0			:	alignment not started
		 1			:	alignment finished
		 2			:	using alignment from stored file

 Restored shift_filename to argument list

 Changed dragbox conditional from
	IF ((dragbox(0) NE 0) AND (dragbox(1) NE 0) AND $
		(dragbox(2) NE 0) AND (dragbox(3) NE 0)) THEN BEGIN
	to IF ((dragbox(2) NE 0) AND (dragbox(3) NE 0)) THEN BEGIN
	to accomodate dragbox = [0,0,*,*], i.e., lower left corner

 Save alignment / Do not save alignment choice wasn't working before - fixed

 Stack_align would give non-zero shift for first image
	This is fixed with modification of call to zstack_align_images (updated version of align.pro)

 Added dragbox coordinates to header of MAPPER file of alignment shifts

 Added zstack_align_tune to interactively adjust alignment shifts
	essentially superceding stack_manalign.pro.
	This can be improved upon to incorporate features of stack_manalign.pro

 Moved nearly all widget_control,var,sensitive = 0/1 statements to
	zstack_align_sensitive and zstack_align_desensitive for more reliable operation
	and better organization of code (instead of being widely dispersed)
	zstack_align_sensitive has situation-dependent conditionals to control appearance of window

 Need to restore virtual memory allocation when working with large data arrays
 	so corr_stack, shift_image_stack, and corr_dim_stack) set to zero at end

 Added alignment to following image - useful if image quality is better at high energy
	This is in addition to existing alignment to preceeding image and to a constant image
	Eliminated variable, zstack_align_par.constant_match
	Added variable, image_match with valid values:
		-1			:	alignment using preceeding image
		 0			:	alignment using constant image
		 1			:	alignment using following image

 Added low_mem keyword to STACK_ANALYZE.PRO and STACK_ALIGN.PRO
	If set, then shifted_image_stack is not formed with STACK_ALIGN.PRO
	This reduces memory use by 1/3 and is useful when large arrays are being processed.
		This comes at some reduction in speed for displaying new images,
		most noticeable during playing of image movies
	If set, display of shifted images within STACK_ALIGN.PRO is done by calculating
		shifted image from x_shift, y_shift, and image_stack
		every time an image is displayed.
	With low_mem set, IDL partition should be approx. >9 times n_elements(image_stack)
	With low_mem not set, IDL partition should be approx. >13 times n_elements(image_stack)
		(based on tests on a Macintosh)

 Modified COMMON block structure so that common variables are shared with all zstack routines
	i.e., zstack_common contains variables used by
		ZSTACK_ANALYZE.PRO, ZSTACK_READLIST.PRO, ZSTACK_BUILDLIST.PRO, and ZSTACK_ALIGN.PRO
 Common variables are now defined only once in each file, not repetitively as before.
 Common variables for data are now determined within ZSTACK_BUILDLIST.PRO or ZSTACK_READLIST.PRO:
	image_stack, filename_list, ev_list, msec_list, filename_display_list
	This requires that files be read only once, eliminated time-intensive duplicate calls of
		STXM_READ.PRO or SXM_READ.PRO

 Modified zstack_align_par, zstack_tune_par
	so that they only contain only variables associated with dialog window.
	All other variables have been moved to zstack_align_common

 Added n_files, list_filename, and shift_filename variables to zstack_common variable

 End of Modifications 20feb99, CGZ

 Divided align and tune functions into two separate procedures: ZSTACK_ALIGN.PRO and ZSTACK_TUNE.PRO
 ZSTACK_TUNE.PRO could be used as a replacement for ZSTACK_MANALIGN.PRO

 Fixed problem in zstack_tune_desensitive and zstack_tune_sensitive
	if stored shift file was used, CGZ 27jun99

 Problem with returning to ZSTACK_ALIGN dialog if new zoom factor is selected
	Images not properly displayed.  Fixed CGZ 12aug99

 (05oct00 cgz)
	Created zstack_save_common to include variables for saving various image and movie formats
		Moved zstack_save_par and save_filename_header from zstack_spectra_common
 (28nov00 cgz) migrated zstack_profile_colorbar routine to zstack_analyze.pro
 (04jan01 cgz) modified display routine of subimage of correlation function
			wasn't working properly for alignments using an off-center subregion
			still some issues here for selecting subregion for display
			desensitized corr_win for now
 (22feb02 aph) correct transfer back from manual alignment to zstack_align
 (03-Mar-08 MJ) Keyword /SCROLL in widget_base() needs X_SCROLL_SIZE.
                Use of /SCROLL and /MODAL at the same time not allowed.
 (13-apr-08 aph) turn on pre-set window size (X_Scroll_size, Y_Scroll_size) only for non-Windows OS
 (07-mar-09 aph) added binary_filenmane to zstack_common
 (27-jul-09 aph) external common

(See c:\axis2000\zstack_tune.pro)


ZSTACK_TUNE_COMMON

[Previous Routine] [List of Routines]
NAME:
		ZSTACK_TUNE_COMMON

LAST CHANGED: ----------------------------------- 	26-Jul-09

 PURPOSE:
	This file contians the common block, ZSTACK_TUNE_COMMON

 CATEGORY: programming utility 

 CALLING SEQUENCE: @zstack_tune_common to inclide in a file

 INPUTS: none

 KEYWORDS: none

 OUTPUTS: none

 MODIFICATION HISTORY:
 (26-jul-09 aph) isolated from zstack_plot

(See c:\axis2000\zstack_tune_common.pro)