In [101]:
# This is the setup and 
import re
import subprocess

from astropy.io import fits
import pyfits

# Allow cell output in markdown using printmd function.
from IPython.display import Markdown, display
def printmd(string):
    display(Markdown(string))
printmd('**bold**')

In [100]:
ls


29-06-2014UT-ARCSAT/  dataSet.py  LICENSE         masterlog.log
Basic-Notebook.ipynb  images.py   log_handler.py  README.md

In [954]:
def read_obs_log(logName):
    # The Latin-1 encoding is needed because of the degree symobl.
    log = open(logName,'r', encoding='Latin-1')
    log = log.read()
    return log

def extract_log_metadata(log, filesMeta):
    """
    Parse log string and return a list of filenames and a dictionary.
    
    Arguments:
    - ARCSAT log in the form of a sngle string.
    
    Returns:
    - List of filenames(strings) that apear in the log. The file names
      have no .fits extension.
    - Dictionary whith the filenames as keys. The value for each filename
      (key) is a dictionary with the time. 
      
    Parses an arcsat log in the form of a single string; meant to handle
    a string comprised of all the logs for a given night. Finds all image
    file names referanced in the log and creates a list of those names (these
    file names don't have .fits extensions). Builds a dictionary with keys for
    each of these files. The value for each is itself a dictions with keys and
    vlues coresponding to information in the log. Find the time an image was
    finished and weither or not the image was plate solved. If plate solved
    the average FWHM is found.
    """
    
    filenames = []
    # Find the files that have information in the logs.
    searches = re.findall(r'(Imaging to) (\S+)', log)
    [filenames.append(x[1].strip('\n')) for x in searches[:]]
    filenames = [x + '.fits' for x in filenames]
    # Find all the relevant information on each file in the logs.
    for name in filenames:
        nameInLog = name.replace('.fits','')
        # Build a string containing only information for a single file.
        searchstring = r''+nameInLog+'.*?turning tracking off for safety\)'
        singleImageMeta = str(re.findall(searchstring, log, re.DOTALL)[0])
        filesMeta[name] = {}
        # Find the time that a given file was finished.
        finishTime = re.search(r'(\(exposure complete and image downloaded\))(.*?)(\S{8})',
                               singleImageMeta, re.DOTALL)
        finishTime = finishTime.group(3)
        filesMeta[name]['finishTime'] = finishTime
        # Dtermine if an image was plate solved and if so, get the average FWHM.
        if 'Solved!' in singleImageMeta:
            filesMeta[name]['solved'] = True
            fwhm = re.search(r'(Image) (FWHM is) (\d\D\d)', singleImageMeta)
            fwhm = float(fwhm.group(3))
            filesMeta[name]['fwhm'] = fwhm
        else:
            filesMeta[name]['solved'] = False
    return filesMeta

def create_files_meta():
    filesMeta = {}
    # List all fits files in the current dir into a string.
    ls = subprocess.check_output(['ls -1 *.fits'],
                                 universal_newlines=True, shell=True).strip().split('\n')
    # Determine the type of the image by file name, because french fries.
    for i in ls:
        filesMeta[i] = {}
        if 'Dark' in i:
            filesMeta[i]['imtype'] = 'dark'
            print(i)
        elif 'Bias' in i:
            filesMeta[i]['imtype'] = 'bias'
        elif 'skyflat' in i:
            filesMeta[i]['imtype'] = 'skyflat'
        elif 'domeflat' in i:
            filesMeta[i]['imtype'] = 'domeflat'
        else:
            filesMeta[i]['imtype'] = 'object'
            
        
    return filesMeta, ls

In [875]:
cd /home/brandon/Work/ADRL/


/home/brandon/Work/ADRL

In [876]:
log = read_arcsat_obs_log('masterlog.log')

In [877]:
cd 29-06-2014UT-ARCSAT/


/home/brandon/Work/ADRL/29-06-2014UT-ARCSAT

In [957]:
filesMeta, ls = create_files_meta()
filesMeta = extract_log_metadata(log, filesMeta)
print(filesMeta)


Dark_B2_20140629_120359.fits
Dark_B2_20140629_120729.fits
Dark_B2_20140629_121100.fits
{'domeflat_johnson-cousins_V_003.fits': {'imtype': 'domeflat'}, 'skyflat_johnson-cousins_Rc_004.fits': {'imtype': 'skyflat'}, 'NAPG-A-I_johnson-cousins_Ic_20140629_090200.fits': {'fwhm': 2.5, 'solved': True, 'finishTime': '09:05:42'}, 'domeflat_johnson-cousins_V_006.fits': {'imtype': 'domeflat'}, 'skyflat_halpha_6563_50_003.fits': {'imtype': 'skyflat'}, 'NAPG-A-I_johnson-cousins_Ic_20140629_085010.fits': {'fwhm': 2.6, 'solved': True, 'finishTime': '08:53:52'}, 'Bias_B2_20140629_115958.fits': {'imtype': 'bias'}, 'domeflat_johnson-cousins_Ic_002.fits': {'imtype': 'domeflat'}, 'skyflat_johnson-cousins_V_004.fits': {'imtype': 'skyflat'}, 'NAPG-L-V_johnson-cousins_V_20140629_094549.fits': {'fwhm': 2.7, 'solved': True, 'finishTime': '09:49:21'}, 'Bias_B2_20140629_120040.fits': {'imtype': 'bias'}, 'domeflat_johnson-cousins_Rc_003.fits': {'imtype': 'domeflat'}, 'domeflat_johnson-cousins_V_008.fits': {'imtype': 'domeflat'}, 'NAPG-L-R_johnson-cousins_Rc_20140629_092013.fits': {'fwhm': 4.6, 'solved': True, 'finishTime': '09:23:51'}, 'skyflat_johnson-cousins_V_002.fits': {'imtype': 'skyflat'}, 'NAPG-A-R_johnson-cousins_Rc_20140629_082803.fits': {'imtype': 'object'}, 'domeflat_johnson-cousins_Rc_004.fits': {'imtype': 'domeflat'}, 'NAPG-L-V_johnson-cousins_V_20140629_095118.fits': {'fwhm': 2.7, 'solved': True, 'finishTime': '09:54:50'}, 'NAPG-L-I_johnson-cousins_Ic_20140629_090756.fits': {'fwhm': 3.0, 'solved': True, 'finishTime': '09:11:38'}, 'domeflat_johnson-cousins_Ic_001.fits': {'imtype': 'domeflat'}, 'Bias_B2_20140629_120009.fits': {'imtype': 'bias'}, 'skyflat_halpha_6563_50_002.fits': {'imtype': 'skyflat'}, 'NAPG-A-V_johnson-cousins_Rc_20140629_082015.fits': {'fwhm': 2.2, 'solved': True, 'finishTime': '08:23:54'}, 'skyflat_johnson-cousins_Ic_001.fits': {'imtype': 'skyflat'}, 'NAPG-A-V_johnson-cousins_V_20140629_070902.fits': {'fwhm': 2.2, 'solved': True, 'finishTime': '07:12:35'}, 'domeflat_johnson-cousins_Rc_005.fits': {'imtype': 'domeflat'}, 'domeflat_johnson-cousins_Ic_008.fits': {'imtype': 'domeflat'}, 'skyflat_johnson-cousins_Rc_001.fits': {'imtype': 'skyflat'}, 'M31-F4-R_johnson-cousins_Rc_20140629_103227.fits': {'fwhm': 2.5, 'solved': True, 'finishTime': '10:36:05'}, 'NAPG-L-V_johnson-cousins_V_20140629_093852.fits': {'fwhm': 2.5, 'solved': True, 'finishTime': '09:42:23'}, 'Dark_B2_20140629_120729.fits': {'imtype': 'dark'}, 'domeflat_johnson-cousins_Ic_011.fits': {'imtype': 'domeflat'}, 'domeflat_johnson-cousins_Rc_001.fits': {'imtype': 'domeflat'}, 'domeflat_johnson-cousins_Rc_008.fits': {'imtype': 'domeflat'}, 'domeflat_johnson-cousins_Rc_009.fits': {'imtype': 'domeflat'}, 'Bias_B2_20140629_120030.fits': {'imtype': 'bias'}, 'domeflat_johnson-cousins_Ic_004.fits': {'imtype': 'domeflat'}, 'NAPG-L-R_johnson-cousins_Rc_20140629_092534.fits': {'fwhm': 2.9, 'solved': True, 'finishTime': '09:29:13'}, 'NAPG-L-R_johnson-cousins_Rc_20140629_093059.fits': {'fwhm': 3.2, 'solved': True, 'finishTime': '09:34:38'}, 'NAPG-A-R_johnson-cousins_Rc_20140629_083632.fits': {'fwhm': 2.5, 'solved': True, 'finishTime': '08:40:11'}, 'NAPG-A-V_johnson-cousins_V_20140629_073059.fits': {'fwhm': 2.7, 'solved': True, 'finishTime': '07:37:51'}, 'M31-F4-I_johnson-cousins_Ic_20140629_104833.fits': {'fwhm': 2.2, 'solved': True, 'finishTime': '10:52:14'}, 'Bias_B2_20140629_120019.fits': {'imtype': 'bias'}, 'NAPG-A-I_johnson-cousins_Ic_20140629_084421.fits': {'fwhm': 2.5, 'solved': True, 'finishTime': '08:48:03'}, 'NAPG-A-V_johnson-cousins_V_20140629_065934.fits': {'fwhm': 2.2, 'solved': True, 'finishTime': '07:00:05'}, 'domeflat_johnson-cousins_Rc_002.fits': {'imtype': 'domeflat'}, 'NAPG-L-I_johnson-cousins_Ic_20140629_091458.fits': {'fwhm': 3.2, 'solved': True, 'finishTime': '09:18:40'}, 'domeflat_johnson-cousins_Ic_007.fits': {'imtype': 'domeflat'}, 'domeflat_johnson-cousins_Rc_011.fits': {'imtype': 'domeflat'}, 'skyflat_johnson-cousins_Ic_002.fits': {'imtype': 'skyflat'}, 'domeflat_johnson-cousins_Ic_006.fits': {'imtype': 'domeflat'}, 'NAPG-A-V_johnson-cousins_V_20140629_064108.fits': {'fwhm': 2.1, 'solved': True, 'finishTime': '06:41:40'}, 'domeflat_halpha_6563_50_001.fits': {'imtype': 'domeflat'}, 'M31-F4-R_johnson-cousins_Rc_20140629_102158.fits': {'fwhm': 2.9, 'solved': True, 'finishTime': '10:25:36'}, 'domeflat_johnson-cousins_V_005.fits': {'imtype': 'domeflat'}, 'domeflat_johnson-cousins_V_010.fits': {'imtype': 'domeflat'}, 'domeflat_johnson-cousins_Ic_010.fits': {'imtype': 'domeflat'}, 'domeflat_johnson-cousins_Rc_007.fits': {'imtype': 'domeflat'}, 'skyflat_johnson-cousins_Rc_003.fits': {'imtype': 'skyflat'}, 'domeflat_johnson-cousins_V_011.fits': {'imtype': 'domeflat'}, 'M31-F4-V_johnson-cousins_V_20140629_101145.fits': {'fwhm': 2.6, 'solved': True, 'finishTime': '10:15:16'}, 'Dark_B2_20140629_120359.fits': {'imtype': 'dark'}, 'domeflat_johnson-cousins_Ic_009.fits': {'imtype': 'domeflat'}, 'Bias_B2_20140629_115917.fits': {'imtype': 'bias'}, 'Bias_B2_20140629_120051.fits': {'imtype': 'bias'}, 'domeflat_johnson-cousins_Rc_006.fits': {'imtype': 'domeflat'}, 'NAPG-A-V_johnson-cousins_V_20140629_075006.fits': {'fwhm': 2.4, 'solved': True, 'finishTime': '07:56:57'}, 'skyflat_johnson-cousins_Ic_003.fits': {'imtype': 'skyflat'}, 'domeflat_johnson-cousins_V_001.fits': {'imtype': 'domeflat'}, 'domeflat_johnson-cousins_V_004.fits': {'imtype': 'domeflat'}, 'domeflat_johnson-cousins_Ic_005.fits': {'imtype': 'domeflat'}, 'skyflat_johnson-cousins_Rc_002.fits': {'imtype': 'skyflat'}, 'Bias_B2_20140629_115905.fits': {'imtype': 'bias'}, 'NAPG-A-V_johnson-cousins_Rc_20140629_082803.fits': {'fwhm': 2.4, 'solved': True, 'finishTime': '08:31:41'}, 'skyflat_johnson-cousins_V_001.fits': {'imtype': 'skyflat'}, 'Dark_B2_20140629_121100.fits': {'imtype': 'dark'}, 'NAPG-A-V_johnson-cousins_V_20140629_080555.fits': {'fwhm': 2.4, 'solved': True, 'finishTime': '08:09:27'}, 'M31-F4-V_johnson-cousins_V_20140629_101657.fits': {'fwhm': 2.6, 'solved': True, 'finishTime': '10:20:29'}, 'M31-F4-R_johnson-cousins_Rc_20140629_102712.fits': {'fwhm': 2.6, 'solved': True, 'finishTime': '10:30:50'}, 'domeflat_johnson-cousins_Ic_003.fits': {'imtype': 'domeflat'}, 'NAPG-A-R_johnson-cousins_Rc_20140629_082015.fits': {'imtype': 'object'}, 'Bias_B2_20140629_115927.fits': {'imtype': 'bias'}, 'NAPG-A-V_johnson-cousins_V_20140629_081442.fits': {'fwhm': 2.1, 'solved': True, 'finishTime': '08:18:14'}, 'domeflat_johnson-cousins_V_007.fits': {'imtype': 'domeflat'}, 'Bias_B2_20140629_115938.fits': {'imtype': 'bias'}, 'skyflat_halpha_6563_50_001.fits': {'imtype': 'skyflat'}, 'domeflat_johnson-cousins_V_002.fits': {'imtype': 'domeflat'}, 'NAPG-A-V_johnson-cousins_V_20140629_074110.fits': {'fwhm': 3.1, 'solved': True, 'finishTime': '07:48:02'}, 'skyflat_johnson-cousins_Ic_004.fits': {'imtype': 'skyflat'}, 'Bias_B2_20140629_115948.fits': {'imtype': 'bias'}, 'skyflat_halpha_6563_50_004.fits': {'imtype': 'skyflat'}, 'M31-F4-V_johnson-cousins_V_20140629_100403.fits': {'fwhm': 2.4, 'solved': True, 'finishTime': '10:07:35'}, 'skyflat_johnson-cousins_V_003.fits': {'imtype': 'skyflat'}, 'domeflat_johnson-cousins_Rc_010.fits': {'imtype': 'domeflat'}, 'domeflat_johnson-cousins_V_009.fits': {'imtype': 'domeflat'}, 'NAPG-A-I_johnson-cousins_Ic_20140629_085529.fits': {'fwhm': 3.1, 'solved': True, 'finishTime': '08:59:11'}}

In [ ]:


In [ ]: