B
    bCa.<              2   @   s   d dl Z d dlZd dlZd dlZd dlZd dlZd dl	m
Z
 d dlmZ d dl mZmZ d dlmZ d dlmZ dZdZd	Zd
ZdZdZdZdZdZdZdZdZd ZdZ dZ!dZ"dZ#dZ$ddgddgddgddgdZ%d d!d"d#dZ&d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdF"Z'd$d%d%d&dGd'dHdId)dBd*dJd+d,d-dKdLd8d1d2d3dMdNd5d6d7d8dOdPdQd<dRdSd>dTdUdVdWdXdYdZd[d\d]d^dTd_d`dadb1Z'dcdd Z(G dedf dfZ)G dgdh dhe)Z*didj Z+dkdl Z,dmdn Z-dodp Z.dqdr Z/dsdt Z0dudv Z1dwdx Z2dydz Z3d{d| Z4d}d~ Z5dd Z6dS )    N)Time)signal)makedirspath)pyplot)EEXISTFgALAgd;Ox@g`"ەx@glx@gfffffx@g      ?gCl?gףp=
@?   B      g333333?d      g?bZCTIOgZSAAOrZMcDonaldkZWise)ZlscZcptelpZtlvgffffff!@g"@g      $@g333333%@i  i  in  i  i  i  ir  i~  i  i{  i  iu  ir  i  iZ  ip  iR  i  i  ig  ie  i+  ip  i  i  ij  iV  i  i8  i  i  i  i  i4  )"18351223520630269133739443587753327836682443828858873798230B100180114710115383115404126053136202149661152391154417165341A1760511821011876911940122068602204917051304954993376151120136190406i  i  i  i  i  i&  i  i  i  i  i@  i,  i  i  i  i  i  i}  i  ip  i  i  i  i!  i  i#  iL  )1r   r   r.   r   r-   r   r/   r   r   r0   r   r1   r   r   r   r   r   r   r   r    r!   r2   r"   r#   r$   r%   r&   r'   r(   r)   r*   r3   r+   r,   Z3427720Z5184732Z6116048Z6278762Z7871531Z7970740Z8006161Z8379927Z9139151Z10124866Z10454113Z10644253Z10963065Z12009504Z12258514c             C   s$   x|   D ]}t|| |  q
W d S )N)keysprint)headerh r8   &/home/travis/obs/LCO/nreshk/helpers.pyprint_header   s    r:   c               @   s   e Zd ZU ejjjjed< e	ed< e
ed< eed< e	ed< eed< e
ed< e
ed< e
ed	< eed
< eed< eed< eed< eed< eed< eed< dddZdS )rawDatar6   specfitsFileformatwaveGridmjdsitedatestarnxnOrdalphafhfkfrfbNc             C   s   d | _ |d kr||| _|d | _ |d | _t| j | _|d | _|d | _|d | _|d | _|| _	|| _|| _
|| _|| _n|j| _|j| _|j | _ |j| _|j| _|j	| _	|j
| _
|j| _|j| _|j| _|j| _|j| _|j| _|j| _|j| _|j| _d S )NzMJD-OBSZSITEIDzDATE-OBSZOBJ1ZNORDNX)r@   r6   rA   	siteAlpharF   rB   rC   rE   rD   r<   r=   r>   r?   rG   rH   rI   rJ   )selfr?   r<   r6   fileNamer>   copyr8   r8   r9   __init__   s>    





zrawData.__init__)NNNNNNN)__name__
__module____qualname__astropyiofitsr6   Header__annotations__liststrboolfloatintrP   r8   r8   r8   r9   r;      s"   
r;   c            
       s   e Zd ZU g ed< eed< g ed< g ed< dZeed< eed< eed< eed< eed	< e	ed
< e
ed< e
ed< e	ed< d fdd	Zdd Zdd Zdd Zdd Zdd Zdd Zdd Z  ZS ) analyzedDataflatshkwindowoffset dayhour	decimalYrlabelbadlamGrid	targOlapfaverageNc                s   |d k	rt  j|d t| drp| jd k	rp| j}tt|| _tt|	dd | _
t|dd| _d| j_nd | _|
| _|| _|| _|| _|| _|| _|| _|| _|	| _d S )N)rO   r@   .r
   )r>   decimalyear)superrP   hasattrr@   r]   npfloorrd   rZ   splitre   r   rf   r>   
outputPathrh   r_   ri   rj   rb   r`   rk   ra   )rM   rawri   r_   rj   r`   rb   rk   rh   ra   rs   r@   )	__class__r8   r9   rP     s$    
zanalyzedData.__init__c             C   s   | S )Nr8   )rM   r8   r8   r9   rt   .  s    zanalyzedData.rawc             C   s:   | j dkr |  t| j d S |  t| j d S d S )NF_dataZ_combined_data)rk   	outputDirrZ   re   rd   )rM   r8   r8   r9   	data_path4  s    
zanalyzedData.data_pathc             C   sV   | j dkr.|  t| j d t| j d S |  t| j d t| j d S d S )NF_z_report.pdfz_combined_report.pdf)rk   rw   rZ   re   rE   rd   )rM   r8   r8   r9   report_path;  s    
$zanalyzedData.report_pathc             C   sF   dt | j d t | j d t | j d t | j d t | j S )NzMJD: z and decYr z with z orders. SHK: z and offsets:)rZ   r@   rf   rE   r`   rb   )rM   r8   r8   r9   rg   A  s    zanalyzedData.labelc             C   s,   | j d krd| j d S | j | j d S d S )Nzoutput//)rs   rC   )rM   r8   r8   r9   starDirD  s    
zanalyzedData.starDirc             C   sH   | j d kr&d| j d t| j d S | j | j d t| j d S d S )Nzoutput/r{   )rs   rC   rZ   rd   )rM   r8   r8   r9   rw   J  s    
zanalyzedData.outputDirc             C   sZ   d}| j rd}|d| j d | j d d| jj d t| j d d| j 7 }|S )	Nrc   zbad zNRES spectra, z, z (z{:.6}z), S=z{:.4})	rh   rA   rB   r>   rf   valuerZ   r@   r`   )rM   tr8   r8   r9   pdfTitleP  s
    HzanalyzedData.pdfTitle)
NNNNNNNNNN)rQ   rR   rS   rX   r\   Z	outputStrr]   r   rZ   r[   rY   rP   rt   rx   rz   rg   r|   rw   r   __classcell__r8   r8   )ru   r9   r^      s,   
r^   c          
   C   sL   yt |  W n: tk
rF } z|jtkr4t| r4n W dd}~X Y nX dS )zECreates a directory. equivalent to using mkdir -p on the command lineN)r   OSErrorerrnor   r   isdir)Zmypathexcr8   r8   r9   mkdir_pZ  s    r   c             C   sN   t ||d d d d}t|dd }t|dd }|| }|S dS d S )Nfulliܛ  i  TF)r   fftconvolverp   meanmaxmaxNoiseRatio)ri   targcorrelationr   maxiratior8   r8   r9   bad_spec_detection_v2i  s    	  r   c             C   sN  d}t | d  }t | d  }d}d}| d | d  }tjj|d| }||| }	| || }
tt |	}|| }|| }|dk rd}|t	|	d krt	|	}t j
|	||< tt |	}ttt }t|
| |
|  }t|| |krd	}td
tt||   n0tdtt||  d t| d t|  |S )NgQ?i  i  Ti  r
   r   g?Fzspec with diff: zbad spec with diff: z first: z	 second: )rp   absargminscndimagefiltersgaussian_filterr]   	nanargminlennancahLamcakLamr5   rZ   )ri   r   ZallowedErrorZlowIZhighIrh   widthdLam	gausdTargZnewLookZadjLamfirstlowhighsecondZtrueDistZrealDistr8   r8   r9   bad_spec_detection  s2    0r   c             C   s   t rt|  d S )N)debugr5   )inputr8   r8   r9   dprint  s    r   c             C   s   | d j d S )Nr   zMJD-OBS)r6   )hdur8   r8   r9   mjd_from_hdu  s    r   c                sH   t  fdd| D }t fdd| D } | |  kr@|n|}|S )Nc                s   g | ]}| kr|qS r8   r8   ).0d)r@   r8   r9   
<listcomp>  s    z$find_nearest_mjd.<locals>.<listcomp>c                s   g | ]}| kr|qS r8   r8   )r   r   )r@   r8   r9   r     s    )r   min)ddr@   r   r   Znearkeyr8   )r@   r9   find_nearest_mjd  s    r   c                s     fdd| D }t ||jdS )Nc                s   i | ]}t |  |qS r8   )r   )r   r   )keyr8   r9   
<dictcomp>  s    zclosestKey.<locals>.<dictcomp>)r   )r   get)Zdicr   diffr8   )r   r9   
closestKey  s    r   c             C   s*   yt | d  dS  tk
r$   dS X d S )Nr   TF)r]   
ValueError)folderr8   r8   r9   is_folder_star  s
    r   c                s    fddt  D S )Nc                s&   g | ]}t jt j |r|qS r8   )osr   r   join)r   name)a_dirr8   r9   r     s    z0get_immediate_subdirectories.<locals>.<listcomp>)r   listdir)r   r8   )r   r9   get_immediate_subdirectories  s    r   c             C   sL   |  |}t|dt| d }| |d  }| | }||| || k 8 }|S )Nr
   )searchsortedrp   clipr   )Atargetidxleftrightr8   r8   r9   find_closest  s    
r   c             C   s(   d}x| D ]}||j 7 }q
W |t|  S )Nr   )r`   r   )datatotr   r8   r8   r9   	find_mean  s    
r   c             C   s0   t | }|| }x| D ]}| j|9  _qW d S )N)r   r`   )r   r   ZpreMeanrF   r   r8   r8   r9   set_data_mean  s    
r   )7r   rO   numpyrp   scipyr   astropy.io.fitsrT   Zastropy.io.fits.headerastropy.timer   r   r   r   
matplotlibr   pltr   r   r   cr   r   lamBlamRconWidlineWidZ	sigToFWHMlowGOrdZhighGOrdoldScalepdfModer   ZsingleIconSizeZaverageIconSizeZsingleOpacityZaverageOpacityZ
siteColorsrL   
tEffLookupr:   r;   r^   r   r   r   r   r   r   r   r   r   r   r   r   r8   r8   r8   r9   <module>   s  D^%B
