https://github.com/pdera/GSE_ADA
Raw File
Tip revision: 7cc7ff8da8952323140d7dc9e6c58af5adffbafc authored by hgarbeil on 02 February 2016, 02:46:00 UTC
HDF 5 (.h5) file support for GSE_ADA (assumes entry1/data/data structure)
Tip revision: 7cc7ff8
new_fitting.pro

;-----------------------------

function G2D_flattop, X, Y, P

; parameters
;   P[0] - background
;   P[1] - peak intensity
;   P[2] - x width
;   P[3] - y width
;   P[4] - tilting of the profile
;   P[5] - x shift
;   P[6] - y shift
 LYV=65535 ;top y value

 mtx=[[cos(p[4]),sin(p[4])],[-sin(p[4]),cos(p[4])]]
 XY=[[X],[Y]]
 XY1=mtx ## XY
 sz=n_elements(X)
 X1=XY1[0:sz-1,0]
 Y1=XY1[0:sz-1,1]
 sz=n_elements(p)
 if sz eq 8 then $
 begin
 U=((x1-p[5])/p[2])^2+((y1-p[6])/p[3])^2
 G=p[0]+p[1]*exp(-U/2.)
 return,G<LYV
 endif else return,0
end

;--------------------------------

pro new_fitting, pica, bs

    pic=pica;<1000
    Gauss = GAUSS2DFIT( pic, P0, /TILT)
    print, 'gaussfit', p0
    p1=p0
    p1[2]=p0[2]
    p1[3]=p0[3]
    p1[5]=p0[5]-BS[0]
    p1[6]=p0[4]-bs[1]
    p1[4]=p0[6]


   parinfo = replicate({value:0.D, fixed:0, limited:[0,0], $
                       limits:[0.D,0]}, 8)
   parinfo[4].limits(0)  = -!pi;!pi/2.
   parinfo[4].limits(1)  =  !pi;*3./2.
   parinfo[5].limited(0) = 1
   parinfo[5].limited(1) = 1
   parinfo[5].limits(0)  = -bs[0]
   parinfo[5].limits(1)  = bs[0]
   parinfo[6].limited(0) = 1
   parinfo[6].limited(1) = 1
   parinfo[6].limits(0)  = -bs[1]
   parinfo[6].limits(1)  = bs[1]
   parinfo[7].limited(0) = 1
   parinfo[7].limited(1) = 1
   parinfo[7].limits(0)  = 0.
   parinfo[7].limits(1)  = 1.


   p1=[p1,0.0]
   parinfo[*].value  = p1
   XX=Xinvec([bs[0]*2+1,bs[1]*2+1])
   yy=yinvec([bs[0]*2+1,bs[1]*2+1])
   zz=TWO2ONE(PIC)
   er=REPLICATE(1.,(bs[0]*2+1)*(bs[1]*2+1))
   A = MPFIT2DFUN('G2D_flattop', XX, YY, ZZ, ER, PERROR=PE, BESTNORM=BN,parinfo=parinfo, ERRMSG=msg)
   pic2=long(one2two(G2D_flattop(XX, YY, A)))
   print, pic
   print
   print, pic2
   print
   print, pic-pic2
   b=congrid(pic-pic2, 500,500)
   window, 1, xsize=500, ysize=500
   tvscl, b


   window, 2, xsize=500, ysize=500
   c=congrid(pic2, 500,500)
   tvscl, c

   window, 3, xsize=500, ysize=500
   c=congrid(pic, 500,500)
   tvscl, c

    print, 'gaussfit', p0
   print, 'XXXXXXXXXXXX ',a

   print,'--------> ', min(pic-pic2), max(pic-pic2)

end
back to top