
FUNCTION eis_cutout_windata, windata, xrange=xrange, yrange=yrange


;+
; NAME:
;	EIS_CUTOUT_WINDATA
;
; PURPOSE:
;       The spatial size of the WINDATA structure arrays are reduced
;       in size in the X and Y directions. 
;
; CATEGORY:
;	Hinode/EIS; spectral analysis.
;
; CALLING SEQUENCE:
; 
;	Result = EIS_CUTOUT_WINDATA(Windata, Xrange=, Yrange=)
;
; INPUTS:
;	Windata: An EIS windata structure (see eis_getwindata.pro).
;
; OPTIONAL INPUTS:
;	Xrange:	A 2 element array giving a X-range in pixels.
;	Yrange:	A 2 element array giving a Y-range in pixels.
;
; OUTPUTS:
;	A windata structure is returned but with arrays modified to
;	reflect the new spatial dimensions.
;
; SIDE EFFECTS:
;	Some parameters within the header may not reflect the new
;	dimensions, thus routines that use the header values may give
;	problems. (The tag 'yws' has been modified, however.)
;
; EXAMPLE:
;       IDL> wd=eis_getwindata(filename,195.12)
;       IDL> wdout=eis_cutout_windata(filename,xr=[10,30],yra=[50,70])
;
; MODIFICATION HISTORY:
;       Ver. 1, 11-Oct-2013, Peter Young
;-



IF n_params() LT 1 THEN BEGIN
  print,'Use:  IDL> wdout=eis_cutout_windata( wd [, xrange=, yrange= ])'
  return,-1
ENDIF 


wd2=windata
nx=wd2.nx
ny=wd2.ny
nl=wd2.nl

swtch=0
IF n_elements(xrange) NE 0 THEN BEGIN
  x0=max([0,xrange[0]]) & x1=min([nx-1,xrange[1]])
ENDIF ELSE BEGIN
  x0=0 & x1=nx-1
  swtch=swtch+1
ENDELSE 

IF n_elements(yrange) NE 0 THEN BEGIN
  y0=max([0,yrange[0]]) & y1=min([ny-1,yrange[1]])
ENDIF ELSE BEGIN
  y0=0 & y1=ny-1
  swtch=swtch+1
ENDELSE 

IF swtch EQ 2 THEN BEGIN
  print,'% EIS_CUTOUT_WINDATA: neither xrange= nor yrange= have been specified. Returning the original windata structure...'
  return,windata
ENDIF 


mx=x1-x0+1
my=y1-y0+1
int2=wd2.int[*,x0:x1,y0:y1]
err2=wd2.err[*,x0:x1,y0:y1]

wd3=rem_tag(wd2,['int','err','time','time_ccsds','exposure_time', $
                 'solar_x','solar_y','data_quality','wave_corr', $
                 'wave_corr_t','wave_corr_tilt'])
wd2=add_tag(wd3,fltarr(nl,mx,my),'int')
wd2=add_tag(wd2,fltarr(nl,mx,my),'err')
wd2=add_tag(wd2,dblarr(mx),'time')
wd2=add_tag(wd2,strarr(mx),'time_ccsds')
wd2=add_tag(wd2,fltarr(mx),'exposure_time')
wd2=add_tag(wd2,fltarr(mx),'solar_x')
wd2=add_tag(wd2,fltarr(my),'solar_y')
wd2=add_tag(wd2,fltarr(mx),'data_quality')
wd2=add_tag(wd2,fltarr(mx,my),'wave_corr')
wd2=add_tag(wd2,fltarr(my),'wave_corr_tilt')
wd2=add_tag(wd2,fltarr(mx),'wave_corr_t')
wd2.nx=mx
wd2.ny=my

wd2.int=windata.int[*,x0:x1,y0:y1]
wd2.err=windata.err[*,x0:x1,y0:y1]
wd2.time=windata.time[x0:x1]
wd2.time_ccsds=windata.time_ccsds[x0:x1]
wd2.exposure_time=windata.exposure_time[x0:x1]
wd2.solar_x=windata.solar_x[x0:x1]
wd2.solar_y=windata.solar_y[y0:y1]
wd2.data_quality=windata.data_quality[x0:x1]
wd2.wave_corr=windata.wave_corr[x0:x1,y0:y1]
wd2.wave_corr_tilt=windata.wave_corr_tilt[y0:y1]
wd2.wave_corr_t=windata.wave_corr_t[x0:x1]

wd2.xcen=mean(wd2.solar_x)
wd2.ycen=mean(wd2.solar_y)

wd2.time_stamp=systime()

wd2.hdr.yws=windata.hdr.yws+y0

return,wd2

END
