pro routine_fft_mass_dimm_ellip_all_nights,Date=Date,$
	stats_directory=stats_directory,$
        x_center_file=x_center_file,y_center_file=y_center_file,$
        depth=depth,x_off=x_off,y_off=y_off,exam_date=exam_date


If (not keyword_set(Date)) then Date='10'
If (not keyword_set(exam_date)) then exam_date='1_31'
If (not keyword_set(stats_sub_directory)) then stats_sub_directory='stats_'+exam_date+'/'
If (not keyword_set(x_center_file)) then x_center_file='newest_x_centers.txt'
If (not keyword_set(y_center_file)) then y_center_file='newest_y_centers.txt'
If (not keyword_set(depth)) then depth=0
If (not keyword_set(postscript_dir)) then postscript_dir='distorted_postscripts'
If (not keyword_set(x_off)) then x_off=0
If (not keyword_set(y_off)) then y_off=0

Date_later=Date
root_dir='/nfs/slac/g/ki/ki08/lsst/CPanalysis/2005-05-'+Date+'/ShackHartman/'
stats_directory='/nfs/slac/g/ki/ki08/lsst/CPanalysis/2005-05-'+Date+$
          '/ShackHartman/'+stats_sub_directory+'/'
postscript_dir='/nfs/slac/g/ki/ki08/lsst/CPanalysis/'+exam_date+'_figs/'



nonfiducial=[1,2,3,4,5,6,7,8,9,13,14,17,18,19,20,21,22,23,24,25,$
          26,27,28,29,30,31,32,38,39,45,46,47,48,49,50,$
          51,52,53,54,55,63,64,71,72,73,74,75,$
          76,77,78,79,88,89,98,98,99,100,$
          101,102,103,113,114,123,124,125,$
          126,127,128,138,139,149,150,$
          151,152,163,164,174,175,$
          176,177,188,189,200,$
          201,210,213,214,225,$
          226,238,239,249,$
          251,261,262,263,264,265,266,$
          276,286,287,288,289,290,291,$
          301,302,303,304,305,306,307,308,309,$
          310,311,312,313,314,315,316,$
          317,318,319,320,321,322,323,324,325,$
          326,327,336,337,338,339,340,341,$
          351,361,362,363,364,365,366,$
          376,388,389,$
          401,413,414,425,$
          426,427,438,439,449,450,$
          451,452,454,463,464,473,474,475,$
          476,477,478,488,489,498,499,500,$
          501,502,503,504,513,514,522,523,524,525,$
          526,527,528,529,530,538,539,546,547,548,549,550,$
          551,552,553,554,555,556,563,564,570,571,572,573,574,575,$
          576,577,578,579,580,581,582,588,589,594,595,596,597,598,599,600,$
          601,602,603,604,605,606,607,608,609,610,613,614,617,618,619,620,621,$
          622,623,624,625]-1

;Extra Index for the scale offset
complement,findgen(626),nonfiducial,fiducial
fitted=fiducial

;ARRAYS OF FILES
offset_files=file_search(stats_directory+'*5132*sub_offsets.txt',count=num_stats_files)

;CONSTANTS
kmax=12
num=25
grid_spots=625
index=findgen(625)
DIMM_int=36

;ARRAY REFERENCE 25x25=625 FOR GRID
subx=2*indgen(num)-25           ;The x-reference numbers
suby=indgen(num)-12             ;The y-reference numbers

;HUGE DATA CUBE
x_offset_hor=complexarr(num_stats_files,num,num)
y_offset_hor=complexarr(num_stats_files,num,num)
x_offset_ver=complexarr(num_stats_files,num,num)
y_offset_ver=complexarr(num_stats_files,num,num)

;ffts
xfft_array=complexarr(num_stats_files,num,num)
yfft_array=complexarr(num_stats_files,num,num)

;Correlations
timee1=fltarr(num_stats_files-depth,num,num)
timee2=fltarr(num_stats_files-depth,num,num)

timee1num=fltarr(num_stats_files-depth,num,num)
timee2num=fltarr(num_stats_files-depth,num,num)
timeeden=fltarr(num_stats_files-depth,num,num)

timee1_arr=fltarr(num,num)
timee2_arr=fltarr(num,num)

frame_e1=fltarr(num_stats_files)
frame_e2=fltarr(num_stats_files)
frame_e=fltarr(num_stats_files)
frame_thetap=fltarr(num_stats_files)
frame_thetam=fltarr(num_stats_files)

frame_DIMM=fltarr(1)
frame_e_DIMM=fltarr(1)

;Average Ellipticity
frame_e1_av=fltarr(kmax)
frame_e2_av=fltarr(kmax)
frame_e_av=fltarr(kmax)

;Grid for partvelvec
x_ref_col=12.5*subx+542
y_ref_col=25.0*suby+460
index=findgen(num*num)
gridx=fltarr(num*num)
gridy=fltarr(num*num)
gridx(index)=x_ref_col(index mod num)
gridy(index)=y_ref_col(index/num)

;Indices and such
no_bins=8
a=findgen(13)+12
b=findgen(12)
subn=[a,b]
subm=subn

;Get coordinates for grid
readcol,offset_files(0),xcoord,ycoord,format='x,f,x,f,x'
;Get times for each file ts stands for timestamp
readcol,root_dir+'5-'+Date+'-Time_stamp.txt',yearts,monthts,datets,hrts,$
					     minutets,sects,file_namets,$
					     format='f,f,f,f,f,f,a'

;Get the DIMM numbers so we don't have to use the function over and over
DIMM_dir='/nfs/slac/g/ki/ki08/lsst/CPanalysis/DIMM/'

readcol,DIMM_dir+'DIMM_numbers.txt',yeard,monthd,dated,hrd,minuted,secd,fwhm,$
        meandx,mstrehlstrlt2,mstrehlstr2t2,$
        format='(d,d,d,d,d,d,f,f,f,f)'

;Number of lines in file is 1539
DIMM=dblarr(5,1537)

for i=0,1536 do begin
    juldate,[yeard(i),monthd(i),dated(i),hrd(i),minuted(i),secd(i)],jd
    DIMM(0,i)=fwhm(i)
    DIMM(1,i)=meandx(i)
    DIMM(2,i)=mstrehlstrlt2(i)
    DIMM(3,i)=mstrehlstr2t2(i)
    DIMM(4,i)=jd
endfor


;FILL THE DATA CUBES

dates=['10','11','12']

for date_index=0,2 do begin

  ;Do this for each date separately
  Date=dates(date_index)  
  root_dir='/nfs/slac/g/ki/ki08/lsst/CPanalysis/2005-05-'+Date+'/ShackHartman/'
  stats_directory='/nfs/slac/g/ki/ki08/lsst/CPanalysis/2005-05-'+Date+$
          '/ShackHartman/'+stats_sub_directory+'/'
offset_files=file_search(stats_directory+'*5132*sub_offsets.txt',count=num_stats_files)
  ;Get times for each file ts stands for timestamp
readcol,root_dir+'5-'+Date+'-Time_stamp.txt',yearts,monthts,datets,hrts,$
                                             minutets,sects,file_namets,$
                                             format='f,f,f,f,f,f,a'

  for file_number=0,num_stats_files-depth-1 do begin

        ;Take the results from the offset.txt files and fill the cube
        readcol,offset_files(file_number),x_offset,y_offset,format='X,X,f,X,f'
	
	;Take in time stamp and look for range
	;DIMM readings are spaced about 1:12 seconds apart so look for one 
	;in this interval
	
	;Get upper limit
	if sects(file_number)+DIMM_int ge 60 then begin
	   if minutets(file_number)+1 ge 60 then begin
	      hr_upper=hrts(file_number)+1
	      min_upper=0
	      sec_upper=sects(file_number)-60+DIMM_int
	   endif else begin
	      hr_upper=hrts(file_number)
	      min_upper=minutets(file_number)+1
	      sec_upper=sects(file_number)-60+DIMM_int
	   endelse
	endif else begin
      	      hr_upper=hrts(file_number)
              min_upper=minutets(file_number)
              sec_upper=sects(file_number)+DIMM_int
	endelse
	
	;Get lower limit
	if sects(file_number)-DIMM_int lt 0 then begin
           if minutets(file_number)-1 lt 0 then begin
              hr_lower=hrts(file_number)-1
              min_lower=59
              sec_lower=sects(file_number)+60-DIMM_int
           endif else begin
              hr_lower=hrts(file_number)
              min_lower=minutets(file_number)-1
              sec_lower=sects(file_number)+60-DIMM_int
           endelse
        endif else begin
              hr_lower=hrts(file_number)
              min_lower=minutets(file_number)
              sec_lower=sects(file_number)-DIMM_int
        endelse

	if hr_lower ne hr_upper then begin
           region=where(((minuted gt min_lower) and (hrd eq hr_lower) $
		     and (datets(file_number) eq dated)) or $
             	        ((minuted lt min_upper) and (hrd eq hr_upper) $
		     and (datets(file_number) eq dated)))
        endif else begin
           region=where(((minuted ge min_lower) and (hrd eq hr_lower) $
		     and (datets(file_number) eq dated)) and $
           	        ((minuted le min_upper) and (hrd eq hr_upper) $
		     and (datets(file_number) eq dated)))
       endelse
       if region(0) ne -1 then begin
          startreg=region(0)
          stopreg=region(n_elements(region)-1)
          DIMM_Vals=DIMM(*,startreg:stopreg)
       endif else begin
          b=fltarr(5,1)
          DIMM_Vals=b
       endelse
        ;Obtain the difference ordered in COLUMN, ROW between centroid and grid         point
	
	x_offset(where(x_offset eq -10))=0
        y_offset(where(y_offset eq -10))=0

        x_offset_hor(file_number,*,*)=x_offset
        y_offset_hor(file_number,*,*)=y_offset

        ;Obtain the difference ordered in ROW, COLUMN
        x_offset_ver(file_number,*,*)=x_offset((index mod 25)*25+index/25)
        y_offset_ver(file_number,*,*)=y_offset((index mod 25)*25+index/25)


	
        timee1num(file_number,*,*)=x_offset_ver(file_number,*,*)*$
			      x_offset_ver(file_number+depth,*,*)-$
         		      y_offset_ver(file_number,*,*)*$
			      y_offset_ver(file_number+depth,*,*)

        timee2num(file_number,*,*)=(x_offset_ver(file_number,*,*)*$
		              y_offset_ver(file_number+depth,*,*)$
			     +x_offset_ver(file_number+depth,*,*)$
			     *y_offset_ver(file_number,*,*))

        timeeden(file_number,*,*)=(x_offset_ver(file_number,*,*)^2+$
                              y_offset_ver(file_number,*,*)^2)

   timee1temp=timee1num(file_number,*,*)
   timee2temp=timee2num(file_number,*,*)
   timeedtemp=timeeden(file_number,*,*)

   
   frame_e1(file_number)=mean(timee1temp(where(timee1temp ne 0)))/$
                         mean(timeedtemp(where(timee1temp ne 0)))
   frame_e2(file_number)=mean(timee2temp(where(timee2temp ne 0)))/$
                         mean(timeedtemp(where(timee2temp ne 0)))
   frame_e(file_number)=sqrt(frame_e1(file_number)^2+frame_e2(file_number)^2)
   
   if frame_e2(file_number) < 0 then begin
	frame_thetap(file_number)=-asin(sqrt(.5*(1-sqrt(1-frame_e2(file_number)^2/$
                                   frame_e(file_number)^2))))
   endif else begin 
	frame_thetap(file_number)=asin(sqrt(.5*(1-sqrt(1-frame_e2(file_number)^2/$
                                   frame_e(file_number)^2))))
   endelse

   ;Match the ellipticity with a DIMM measurement
   if DIMM_vals(0,0) gt 0 then begin
      print,DIMM_vals(*,0)
      if frame_DIMM(0) eq 0 then begin
         frame_DIMM(0)=DIMM_vals(0,0)
         frame_e_DIMM(0)=frame_e(file_number)
      endif else begin
         frame_DIMM=[frame_DIMM,DIMM_vals(0,0)]
	 frame_e_DIMM=[frame_e_DIMM,frame_e(file_number)]
      endelse          
   endif

  endfor

endfor

bin_max=1.4
bin_min=.5
bin_width=.1
no_bins=((bin_max-bin_min)+bin_width)/bin_width
e_avg=fltarr(no_bins)
DIMM_histogram=histogram(frame_DIMM,BINSIZE=bin_width,min=bin_min,max=bin_max,$
                         locations=loc_dimm_bins,reverse_indices=DIMM_ind)
for i=0, no_bins-2 do begin
  rel_indices=DIMM_ind(DIMM_ind(i):DIMM_ind(i+1)-1)
  e_avg(i)=mean(frame_e_DIMM(rel_indices))

endfor
  
set_plot,'ps'
device,filename=Postscript_dir+'Mass_Dimm_E_Scatter_plot_All_nights'+$
		Date_later+'.ps'                  
loadct,0                      ;load color table 39
device,/color                   ;allow color on the postscript
device,ysize=8.5,/inches        ;Height of plot in y
device,xsize=11.0,/inches        ;Width of plot in x
device,yoffset=1.0,/inches      ;Y position of lower left corner

white='FFFFFF'x
black='000000'x
!P.CHARSIZE=1.0
!P.THICK=4.

!p.multi=[0,1,1]
lengthe=size(frame_DIMM)

plot,frame_e_DIMM,frame_DIMM,psym=2,xtitle='ellipticity',ytitle='DIMM vals'
xyouts,.2,.1,'Number of points='+strtrim(lengthe(1),2),/normal

device,/close
set_plot,'x'

stop

end

