from utils import compute_longitude_profile
from class_source_diffuse_estimation import RunAlgorithm, source_image, diffuse_image, data_image, correlation_radius, significance_threshold, mask_dilation_radius, LonHigh, LonLow
from grid_binning import GridSeparation
import numpy as np
from astropy.io import fits
from astropy.table import Table
import matplotlib.pyplot as plt
from scipy.ndimage import gaussian_filter

__all__ = ['Run', 'BackgroundProfile', 'SignificanceProfile']

EXPOSURE = 1.5768e+11

from gammapy.image.utils import solid_angle
reference = fits.open(data_image)
PIXEL_SA = solid_angle(reference).mean()

def Run(correlation_radius = correlation_radius, significance_threshold=significance_threshold, mask_dilation_radius=mask_dilation_radius, number_of_iterations=50, data_image = data_image):
    
    operate = RunAlgorithm(analysis='Data', correlation_radius=correlation_radius, significance_threshold=significance_threshold, mask_dilation_radius=mask_dilation_radius,
                           number_of_iterations=number_of_iterations, data_image=data_image)
    
    background = fits.open(operate.background_filename)
    mask = fits.open(operate.mask_filename)
    significance = fits.open(operate.significance_filename)
    
    return background, mask, significance


def BackgroundProfile(binsz):
    background, mask, signifiance = Run(correlation_radius = correlation_radius, significance_threshold=significance_threshold, mask_dilation_radius=mask_dilation_radius, number_of_iterations=50, data_image = data_image)
""" Script to determine what fraction of source and diffuse flux is found in the large and small region"""

from astropy.io import fits
import numpy as np

filename = raw_input('Image filename: ')
source = fits.open(filename)[1]

from gammapy.image.utils import coordinates, solid_angle
lats, lons = coordinates(source)
solid_angle = solid_angle(source)
region_glat_high = 5
region_glat_low = -5
region_glon_high = 100
region_glon_low = -100

mask1 = (region_glat_low < lats) & (lats < region_glat_high)
mask2 = (region_glon_low < lons) & (lons < region_glon_high)
mask = mask1 & mask2

a = np.nan_to_num(source.data)
source_flux_frac = a[mask].sum()/a.sum()
print "Total Flux in Image"
print a.sum()

print "Galactic Flux"
print a[mask].sum()

print "Source Flux Fraction"
print source_flux_frac
""" Script to determine what fraction of source and diffuse flux is found in the large and small region"""

from astropy.io import fits

filename = raw_input('Image filename: ')
source = fits.open(filename)[1]

from gammapy.image.utils import coordinates, solid_angle
lats, lons = coordinates(source)
solid_angle = solid_angle(source)
region_glat_high = 5
region_glat_low = -5
region_glon_high = 100
region_glon_low = -100

mask1 = (region_glat_low < lats) & (lats < region_glat_high)
mask2 = (region_glon_low < lons) & (lons < region_glon_high)
mask = mask1 & mask2

a = source.data  #/ solid_angle.value
source_flux_frac = a[mask].sum() / a.sum()
print "Total Flux in Image"
print a.sum()

print "Galactic Flux"
print a[mask].sum()

print "Source Flux Fraction"
print source_flux_frac