o
    gK g)                     @   s   d dl Zd dlm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dZdd Zdd	 Zd
d Zdd Zdd Zdd Zdd ZdddZdd ZedkrWe  dS dS )    N)deepcopyFc           
      C   s  d}|r*d|v rd|v rd|v s)|   }|std dS d|v rd|v rd|v rnd|v r2d|v sG|   }|s?td dS d|v r2d|v r2t| d }td td	|  i }	 |  }|   }|sptd dS |dsz	 ||fS |d  s	 ||fS |d dkr|d dkr	 ||fS d|v r| 	| 	 ||fS | d }|dd  
 }i }| D ]}	|	dd  ||	d < q|||< t|||  q_)N z[HRPROC]zMetaData::SatUsagez.000zend of file)NN   z--------------------zFound epoch TzUnexpected end of fileL   [   ]r      )readlinelogginginfofloatsplittellerror
startswith	isnumericseekrstrip)
fpone_seclineepochdatalast_posfreqsys_lined_syssp r    \/home/russ/Documents/_GNSS_data/2024/CSNMR-3404_Linkbelt_Self_Jamming/plot_sat_set_change.pyread_next_epoch   sh   





r"   c           	      C   s   i }|   D ]A\}}td| d|  |  D ]-\}}|| v rBt|| }t|D ]\}}|dkr9d||< q-d|||< q|||< qq|S )Nz   sys : +r   )itemsr   r   keyslist	enumeratejoin)	d	d_all_sysk_bandd_bandk_sysd_satscurrent_strncr    r    r!   combine_sats_in_epochB   s   
	r3   c                 C   sJ   t | }d}| D ]\}}|d}||7 }td|d| q
|S )Nr   r$      n=, num_sat_changes=)r3   r%   countr   r   )r*   r+   num_sat_changesr.   r/   r1   r    r    r!   num_sats_used_in_epochR   s   
r8   c                 C   s&   t | }t |}tt|t|}|S N)r3   diff_sysr   )ab	a_all_sys	b_all_syssat_change_listr    r    r!   diff_sats_by_epoch]   s   r@   c                 C   sX   d}|   D ]#\}}td| d|  |d}||7 }td|d| q|S )Nr         r#   r$   z      n=r5   )r%   r   r   r6   )r*   r7   r   r/   r1   r    r    r!   num_sats_used_in_bandd   s   
rB   c                    s    t  fddtt D S )Nc                 3   s     | ]} | | kV  qd S r9   r    ).0ir;   r<   r    r!   	<genexpr>o   s    zdiff_letters.<locals>.<genexpr>)sumrangelenrE   r    rE   r!   diff_lettersn   s    rJ   c                 C   s  t d|  t d| g }t| D ]q}t d| | | }t|D ]^}t d| || }||krt d| d t d|  t d|  t|D ]&\}}|| || kr}t|d }	|t||	  }
||
 t ||	|
 qW| |= ||=  nq(qt d	| t d
|   t| D ](}| | }t|D ]\}}|| dkrt|d }	|t||	  }
||
 qqt d| t d|  t|D ])}|| }t|D ]\}}|| dkrt|d }	|t||	  }
||
 qqt d| |S )Nza=zb=za_sys=zb_sys=z   Found sys  in bothrA   
   z   sat_change_list=z   leftover sys in a: r$      z      sat_change_list=z   leftover sys in b: )r   r   r'   r(   intstrappend)r;   r<   r?   a_sysa_satsb_sysb_satsr1   lan10sat_strlbr    r    r!   r:   r   sb   


r:   c           	      C   sH  t | } t |}d}t| D ]I}| | }t|D ]>}|| }||krVtd| d td|  td|  t||}|t|7 }td| | |= ||=  nqq|  D ] \}}td| d t|}||7 }td|d	| q\| D ] \}}td| d
 t|}||7 }td|d	| q|S )Nr   zFound band rK   z   z   num_changes=z   leftover band z in ar4   z, num_changes=z in b)r   r'   r   r   r:   rI   r%   rB   )	r;   r<   num_changesa_bandrQ   b_bandrS   r?   r1   r    r    r!   diff_sats_by_sys_and_band   s<   
r\   Tc                 C   s  d}g }d}d }t | }t||\}}	|r:t||\}}
|d u r!nt|	|
}t|
}|||t||d |
}	|s|  t|}| d d  d}t	d|  |j
|dd |r|j |d	< d
tjj_tjdddg ddd\}}|d j|j|jddd |d j|j|jddd |d j|j|jddd |d |  |d d |d d |d d |d d |j dk r|d ddg | d d  d}t	d|  t| t  t| |S )Nr   T)Timen_sats_usedn_sat_changeschange_listz_sat_changes.csvzSaving F)indexdT   r
   )      )r
   r   r   constrained)figsizeheight_ratioslayoutr   .r   )
markersize   zNum Sats ChangedzNum Sats UsedzdT (s)zTime (s)g      ?z_sat_changes.png)openr"   r@   r8   rP   rI   closepd	DataFrameprintto_csvr]   diffoptionsdisplaymin_rowspltsubplotsplotr_   r^   rc   	set_title
set_ylabel
set_xlabelmaxset_ylimsavefigshow)filenamer   rz   r   sat_changesreadAepochA_satsr   
epoch_prevepoch_sats_prev
epoch_satssat_change_list_by_epochn_satsdf	fname_outfigax	png_fnamer    r    r!   calc_changes_and_plot   s`   





r   c                  C   s   t jdt jd} | jddddd | jdd	d
dd | jdt jddd | jdddddd d}|  }tjtjd|j	  |t
jd t| t|j|j|j d S )Nz%Apply an elevation mask with t0x2t0x.)descriptionformatter_classz-fz
--filenamezTitanPlayer_log.txtzFile to process)defaulthelpz-1z	--one_sec
store_truezAonly process precise solutions that are on one second boundaries.)actionr   z--plotTzCreate plots)r   r   r   z	--verbosez-vr6   r   z+use multiple -v for more detailed messages.zK[%(levelname)-8s][%(filename)11s:%(lineno)-5s] %(funcName)-10s: %(message)srL   )levelformatstream)argparseArgumentParserArgumentDefaultsHelpFormatteradd_argumentBooleanOptionalAction
parse_argsr   basicConfigWARNINGverbosesysstdoutdebugr   r   r   rz   )parserlogger_formatargsr    r    r!   main1  sH   
	
r   __main__)F)T)pandasrp   matplotlib.pyplotpyplotrx   r   r   osjsonr   copyr   r"   r3   r8   r@   rB   rJ   r:   r\   r   r   __name__r    r    r    r!   <module>   s*   
5
Q
#K1
