##import standart Python modules
import os
import numpy as np

from PSF_phot import PSF_phot
import astropy.wcs as wcs
import astropy.io.fits as fits

##disable warnings
import warnings
warnings.simplefilter("ignore")

######################################################################
##set parameters for photometry
Path2Data  = 'D:/Work/Nastya/190929/z_s'   ##directory with data files

Center_Box_Size = 25
RAper = 10. ##FWHM=6
Gain = 1.0
Rnoise = 4.
      
#####################################################################
##for all files in Data
file_list = []
dir_content = os.listdir(Path2Data)

#create list of fits-files
for ii in range (0,len(dir_content)):
    if dir_content[ii].count('.fit') or dir_content[ii].count('.fits'):
        file_list.append(Path2Data +'/'+ dir_content[ii])

##read coo file
##Catalog = np.genfromtxt('D:/Temp/new_from_master/TESS/My_Cat.txt', skip_header=1)
Catalog = np.genfromtxt('coo.txt')
print(Catalog)

dTime = []
dMag = []
dMerr = []
dFlux = []
dSky = []
dShift = []

df=open(Path2Data + '/log.txt', 'w')

counter = len(file_list)
if counter>0:
    for ii in range (0, len(file_list)):
        print('----------<>-----------')
        counter = counter-1
        print('Frames: ' + str(counter))
        file_name = file_list[ii]
        print(file_name.split('/')[-1])
        
        ##read file, copy data and header
        hdulist = fits.open(file_name)
        Header =  hdulist[0].header
        Data = hdulist[0].data
        hdulist.verify('fix')
        MJD =Header['MJD-STRT']
        MJD = MJD + Header['EXPTIME']/(2.0*24.0*3600.)
        df.write(Header['DATE-OBS'] + '\t' + Header['EXP-STRT'] + '\t' + str(MJD) + '\t' +\
                 str(Header['EXPTIME']) + '\t' + str(Header['AIRMASS']) + '\t') #+ Header['FILTER'] 

        w = wcs.WCS(Header)       

        ##trim stars outside frame
        XY_2000 = w.wcs_world2pix(Catalog[:, 0:2], 0)        
##        print(XY_2000[:,0])
        _min = 0
        _max = min((Header['NAXIS1'], Header['NAXIS2']))
        Index_x = np.where((XY_2000[:,0]<_min) | (XY_2000[:,0]>_max))[0]
##        print(Index_x)
        XY_2000[Index_x] = [0, 0]
        Index_y = np.where((XY_2000[:,1]<_min) | (XY_2000[:,1]>_max))[0]
##        print(Index_y)
        XY_2000[Index_y] = [0, 0]

        ##PSF photometry of stars from full list       
        X_Y_Now, Sky, Flux, Mags, Merrs, SN = \
                PSF_phot(Data, XY_2000, Center_Box_Size, RAper, Gain, Rnoise) ##return coo, shift, flux, sn, sky, mag, mag_err

        dMag.append(Mags + 2.5 * np.log10(Header['EXPTIME']))
        dMerr.append(Merrs)
        dFlux.append(Flux)

        df.write(str(Sky))
        if np.isnan(Mags[0]):
            df.write('\t' + 'ERR' + '\n')
        else:
            df.write('\t' + 'OK' + '\n')

        print()
        
    df.close()
    
    dMag = np.array(dMag)
    dMerr = np.array(dMerr)
    dFlux = np.array(dFlux)
    
    Tube_Exp = '_'+str(RAper)+'pix_'+ Header['FILTER']
    np.savetxt(Path2Data + '/Mag' + Tube_Exp + '.txt', dMag, fmt = '%.3f', delimiter = '\t')
    np.savetxt(Path2Data + '/Merr' + Tube_Exp + '.txt', dMerr, fmt = '%.3f', delimiter = '\t')
    np.savetxt(Path2Data + '/Flux' + Tube_Exp + '.txt', dFlux, fmt = '%.1f', delimiter = '\t')

    
    
      
            
