def read_equirectangular(file_name, unit_scale=1, ):
    f = fit.read_header(file_name)
    data = fit.read(file_name)[0]
    data[:, :-1] = np.roll(data[:, :-1], (f['NAXIS1'] - 1) / 2, axis=1)[:, ::-1]
    data[:, -1] = data[:, 0]
    dmax = f['DATAMAX']
    dmin = f['DATAMIN']
    data[data > dmax] = -1e6 * dmax
    data[data < dmin] = -1e6 * dmax
    data = sv.equirectangular2heapix(data)
    data[data <= 0] = np.nan
    return unit_scale * data
AtNiASi.shape = (len(S_diag), len(S_diag))
AtNiASii = sv.InverseCholeskyMatrix(AtNiASi)
AtNiSidata = AtNidata_sum + fake_solution_map / S_diag
combined_result = AtNiASii.dotv(AtNiSidata)

plot_IQU(combined_result, '+'.join(INSTRUMENTS) + '+GSM', 2, shape=(2, 2), coord='CG')



###parkes
parkes_150 = fit.read("/home/omniscope/data/polarized foregrounds/parkes_150mhz.bin")[0]
parkes_150[:, :-1] = np.roll(parkes_150[:, :-1], 180, axis=1)[:, ::-1]
parkes_150[:, -1] = parkes_150[:, 0]
parkes_150[parkes_150 > 7.e3] = -1e-9
parkes_150[parkes_150 <= 0] = -1e-9
parkes_150 = sv.equirectangular2heapix(parkes_150, nside_standard)
parkes_150[parkes_150 <= 0] = np.nan
hpv.mollview(np.log10(parkes_150), nest=True, min=0, max=4, sub=(2, 2, 3), title='parkes150MHz')

####GSM####
plot_IQU(fake_solution_map, 'GSM', 4, shape=(2, 2), coord='CG')






clean = False
if clean:#take abt 10 min, not quite working. ringing seems not caused by wiener filter??

    bright_pt_mask = np.abs(result/sizes) > np.percentile(np.abs(result/sizes), 99)
                sys.exit(0)
        ns *= 2

resolutions = {}


#########################
###Stockert 2.72#########################
#########################
data_x = np.arange(PI/2, -PI/2-.00001, -DEGREE/8)%(2*PI)
data_y = np.arange(PI/2+DEGREE*50, PI/2-DEGREE*50-.00001, -DEGREE/8)%(2*PI)
stockert11cm = fit.read('/home/omniscope/data/polarized foregrounds/fits27917_stockert11cm_180_100.bin')[0] * 1e-3
stockert11cm_header = fit.read_header('/home/omniscope/data/polarized foregrounds/fits27917_stockert11cm_180_100.bin')
stockert11cm[stockert11cm > stockert11cm_header['DATAMAX'] * 1e-3] = -1e6 * stockert11cm_header['DATAMAX']
stockert11cm[stockert11cm < stockert11cm_header['DATAMIN'] * 1e-3] = -1e6 * stockert11cm_header['DATAMAX']
stockert11cm = sv.equirectangular2heapix(stockert11cm, nside=1024, data_x=data_x, data_y=data_y)
stockert11cm[stockert11cm < 0] = np.nan
stockert11cm = {2.72: stockert11cm}
resolutions[2.72] = 21 * ARCMIN#data website uses 21, paper says 4.3
if plot_individual:
    plot_dataset(stockert11cm)

#########################
###mother file#########################
#########################
# motherfile = {}
# motherfile_data = np.fromfile("/home/omniscope/data/polarized foregrounds/motherfile_3145728_16_float64.bin", dtype='float64').reshape((3145728, 16))[hpf.nest2ring(512, range(3145728))]
# for i in range(motherfile_data.shape[1]):
#     motherfile[i] = motherfile_data[:, i]
# plot_dataset(motherfile)
# AtNiASii = sv.InverseCholeskyMatrix(AtNiASi)
# AtNiSidata = AtNidata_sum + fake_solution_map * rescale / S_diag
# combined_result = AtNiASii.dotv(AtNiSidata)
#
# plot_IQU(combined_result / rescale, '+'.join(INSTRUMENTS) + '+GSM', 2, shape=(3, 4), coord='CG')
#


###parkes
parkes_header = fitsio.read_header("/home/omniscope/data/polarized foregrounds/parkes_150mhz.bin")
parkes_150 = fitsio.read("/home/omniscope/data/polarized foregrounds/parkes_150mhz.bin")[0]
parkes_150[:, :-1] = np.roll(parkes_150[:, :-1], 180, axis=1)[:, ::-1]
parkes_150[:, -1] = parkes_150[:, 0]
parkes_150[parkes_150 > parkes_header['DATAMAX']] = -parkes_header['DATAMAX']
parkes_150[parkes_150 < parkes_header['DATAMIN']] = -parkes_header['DATAMAX']
parkes_150 = sv.equirectangular2heapix(parkes_150, nside, nest=False)
parkes_150[parkes_150 <= 0] = np.nan
ang0, ang1 = hp.rotator.rotateDirection(equ2013_to_gal_matrix, hpf.pix2ang(nside, range(12 * nside ** 2), nest=True))
parkes_150 = hpf.get_interp_val(parkes_150, ang0, ang1)

parkes_header = fitsio.read_header("/home/omniscope/data/polarized foregrounds/parkes_85mhz.bin")
parkes_85 = fitsio.read("/home/omniscope/data/polarized foregrounds/parkes_85mhz.bin")[0]
parkes_85[:, :-1] = np.roll(parkes_85[:, :-1], 180, axis=1)[:, ::-1]
parkes_85[:, -1] = parkes_85[:, 0]
parkes_85[parkes_85 > parkes_header['DATAMAX']] = -parkes_header['DATAMAX']
parkes_85[parkes_85 < parkes_header['DATAMIN']] = -parkes_header['DATAMAX']
parkes_85 = sv.equirectangular2heapix(parkes_85, nside, nest=False)
parkes_85[parkes_85 <= 0] = np.nan
equ2013_to_gal_matrix = hp.rotator.Rotator(coord='cg').mat.dot(sv.epoch_transmatrix(2000, stdtime=2013.58))
ang0, ang1 = hp.rotator.rotateDirection(equ2013_to_gal_matrix, hpf.pix2ang(nside, range(12 * nside ** 2), nest=True))
parkes_85 = hpf.get_interp_val(parkes_85, ang0, ang1)