execfile('/afs/slac/u/ki/lances/python/python_HxRG/HxRG_Setup.py')
execfile('/afs/slac/u/ki/lances/python/Thesis2x2PlotSettings.py')
from ReturnRadialProfiles import *
from RadialFits import *
import optimize

PlotDir    = '/nfs/slac/g/ki/ki03/lances/KPNO/Latex/Thesis/GuideMode/Figures/'
BoxSize    = 21
DoCentroid = 1
TvFlag     = 0
Mode       = 0
Slope      = 1

#Guiding
FitsFileName='/nfs/slac/g/ki/ki03/lances/H2RG-32-147/ASIC/Reduced/07Dec14/SAO81134/SAO81134_H2RG_SIPIN_220_Reads_Dec15_2007_04_57_19_I_RPS_Slope.fits'
HxRG_G = HxRG_C(FitsFileName=FitsFileName)
HxRG_G.Get_Raw_Header(FitsFileName)
XCenG = 1948
YCenG = 1522
RadiiG, IntArrG, ReadG=ReturnRadialProfiles(FitsFileName, Mode, TvFlag=TvFlag,\
            XCen=XCenG, YCen=YCenG, Slope=Slope, BoxSize=BoxSize,\
            DoCentroid=DoCentroid)
Height_G, MuX_G, MuY_G, FWHMX_G, FWHMY_G, FWHM_G, E_G, EA_G = \
            moments(IntArrG, SubSize=1)

#No Guiding
FitsFileName='/nfs/slac/g/ki/ki03/lances/H1RG-022/ASIC/Reduced/07Nov19/SAO5417/SAO5417_I_NegPerDead_H1RG_SIPIN_2500_Reads_Nov19_2007_22_15_46_I_RPS_Slope.fits'
HxRG_NG = HxRG_C(FitsFileName=FitsFileName)
HxRG_NG.Get_Raw_Header(FitsFileName)
XCenNG = 910
YCenNG = 254
RadiiNG, IntArrNG, ReadNG=ReturnRadialProfiles(FitsFileName, Mode, \
            TvFlag=TvFlag,\
            XCen=XCenNG, YCen=YCenNG, Slope=Slope, BoxSize=BoxSize,\
            DoCentroid=DoCentroid)
Height_NG, MuX_NG, MuY_NG, FWHMX_NG, FWHMY_NG, FWHM_NG, E_NG, EA_NG = \
         moments(IntArrNG, SubSize=1)

#Setup the large figure
ImFig=mplot.figure(0)
mplot.clf()
mplot.hot()

#Plot the Guiding Radial Profile
FirstAx=ImFig.add_axes([0.050, 0.075, .420, 0.420])
IntArrG1d        = IntArrG.copy()
IntArrG1d.shape = IntArrG1d.size
RadiiG1d        = RadiiG.copy()
RadiiG1d.shape  = RadiiG1d.size
mplot.plot(RadiiG1d, HxRG_G.CGain*(IntArrG1d-IntArrG1d.min()), 'ro', \
      label=r'\textbf{Data (Guiding)}')
Amp_G, FWHM_G, Sky_G, Fit_G = RadialGaussFits(RadiiG, \
    HxRG_G.CGain*(IntArrG-IntArrG.min()), \
    IncFitData=1)
Amp_G_M, FWHM_G_M, Beta_G_M, Sky_G_M, Fit_G_M = RadialMoffatFits(RadiiG, \
    HxRG_G.CGain*(IntArrG-IntArrG.min()), \
    IncFitData=1)
Radii = frange(160)/10
mplot.plot(Radii, Amp_G*exp(-.5*Radii**2/FWHM_G**2), 'k-', \
      label=r'\textbf{Gaussian Fit}', lw=2)
mplot.plot(Radii, Amp_G_M*(1+(Radii/FWHM_G_M)**2)**Beta_G_M, 'k-.', \
      label=r'\textbf{Moffat Fit}', lw=3)
mplot.xlabel(r'\textbf{Radius (Pixels)}')
mplot.ylabel(r'\textbf{electrons per second}')
mplot.legend(loc=1, numpoints=1)
xlim(0,14)
#Format String
E_GStr      = "%.4f"   % E_G
FWHM_G      = 2*sqrt(2*log(2))*FWHM_G
FWHM_GStr   = "%.2f"   % FWHM_G
FWHM_G_M    = 2*sqrt(2**(-1/Beta_G_M)-1)*FWHM_G_M
FWHM_G_MStr = "%.2f"   % FWHM_G_M
XCenG_Str   = "%.0f"   % XCenG 
YCenG_Str   = "%.0f"   % YCenG
ITimeG_Str  = "%.1f"   % HxRG_G.ITime 
mplot.figtext(.24,.35,r'\textbf{Centroid = [\ '+XCenG_Str+','+YCenG_Str+']}')
mplot.figtext(.24,.32,r'\textbf{Ellipticity = '+E_GStr+'}')
mplot.figtext(.24,.29,r'\textbf{FWHM$_{Gauss}$= '+FWHM_GStr+'}')
mplot.figtext(.24,.26,r'\textbf{FWHM$_{Moffat}$= '+FWHM_G_MStr+'}')

#Show the Guiding Image
SecondAx=ImFig.add_axes([0.525, 0.075, .420, 0.420])
Im1=mplot.imshow(HxRG_G.CGain*(ReadG-ReadG.min()), interpolation='kaiser')
Im1.axes.yaxis.set_ticks('')
Im1.axes.xaxis.set_ticks('')
#Add the colorbar
pos = SecondAx.get_position()
l, b, w, h = getattr(pos, 'bounds', pos)
cax=axes([l+0.015,b-0.03,0.4,.02])
mplot.colorbar(cax=cax, orientation='horizontal', format='%.1f')
mplot.figtext(.55,.45,r'\textbf{Guiding}', color='white', fontsize=13)
mplot.figtext(.73,.45,r'\textbf{Exp. Time='+ ITimeG_Str+'\ s}', \
       fontsize=13, color='white')

ThirdAx=ImFig.add_axes([0.050, 0.570, .420, 0.420])
IntArrNG1d        = IntArrNG.copy()
IntArrNG1d.shape  = IntArrNG1d.size
RadiiNG1d         = RadiiNG.copy()
RadiiNG1d.shape   = RadiiNG1d.size
mplot.plot(RadiiNG1d, HxRG_NG.CGain*(IntArrNG1d-IntArrNG1d.min()), 'ro', \
     label=r'\textbf{Data (No Guiding)}')
mplot.xlabel(r'\textbf{Radius (Pixels)}')
mplot.ylabel(r'\textbf{electrons per second}')
Amp_NG, FWHM_NG, Sky_NG, Fit_NG = RadialGaussFits(RadiiNG, \
        HxRG_NG.CGain*(IntArrNG-IntArrNG.min()),\
        IncFitData=1)
Amp_NG_M, FWHM_NG_M, Beta_NG_M, Sky_NG_M, Fit_NG_M = RadialMoffatFits(RadiiG, \
    HxRG_G.CGain*(IntArrNG-IntArrNG.min()), \
    IncFitData=1)

mplot.plot(Radii, Amp_NG*exp(-.5*Radii**2/FWHM_NG**2), 'k-', \
      label=r'\textbf{Gaussian Fit}', lw=2)
mplot.plot(Radii, Amp_NG_M*(1+(Radii/FWHM_NG_M)**2)**Beta_NG_M, 'k-.', \
      label=r'\textbf{Moffat Fit}', lw=3)
#Format String
E_NGStr      = "%.4f"   % E_NG
FWHM_NG      = 2*sqrt(2*log(2))*FWHM_NG
FWHM_NGStr   = "%.2f"   % FWHM_NG
FWHM_NG_M    = 2*sqrt(2**(-1/Beta_NG_M)-1)*FWHM_NG_M
FWHM_NG_MStr = "%.2f"   % FWHM_NG_M
XCenNG_Str   = "%.0f"   % XCenNG
YCenNG_Str   = "%.0f"   % YCenNG
ITimeNG_Str  = "%.1f"   % HxRG_NG.ITime
mplot.figtext(.24,.85,r'\textbf{Centroid = [\ '+XCenNG_Str+','+YCenNG_Str+']}')
mplot.figtext(.24,.82,r'\textbf{Ellipticity = '+E_NGStr+'}')
mplot.figtext(.24,.79,r'\textbf{FWHM$_{Gauss}$=  '+FWHM_NGStr+'}')
mplot.figtext(.24,.76,r'\textbf{FWHM$_{Moffat}$=  '+FWHM_NG_MStr+'}')
mplot.legend(numpoints=1, loc=1)
xlim(0,14)

#Show the Guiding Image
FourthAx=ImFig.add_axes([0.525, 0.570, .420, 0.420])
Im1=mplot.imshow(HxRG_NG.CGain*(ReadNG-ReadNG.min()), interpolation='kaiser')
Im1.axes.yaxis.set_ticks('')
Im1.axes.xaxis.set_ticks('')
#Add the colorbar
pos = FourthAx.get_position()
l, b, w, h = getattr(pos, 'bounds', pos)
cax=axes([l+0.015,b-0.03,0.4,.02])
mplot.figtext(.55,.95,r'\textbf{No Guiding}', color='white', fontsize=13)
mplot.figtext(.73,.95,r'\textbf{Exp. Time='+ ITimeNG_Str+'\ s}', \
      fontsize=13, color='white')
mplot.colorbar(cax=cax, orientation='horizontal', format='%.1f')
mplot.savefig(PlotDir+'GuideModeVsNoGuideComparison.eps')
mplot.savefig(PlotDir+'GuideModeVsNoGuideComparison.png')


