3
?*td<%                 @   sJ   d dl Zd dlZd dlZd dlZdZdZ	dZ
dZdd ZG dd	 d	ZdS )
    Nzassets/new_master_list.csvz1assets/XJETS-master - col_name_attributes_new.csvz#assets/data_downloads/data_info.csvzassets/all_refs.csvc       
         s   t j|  t j| t| t|kr0td dS t| } krV fdd| D }ndg}g }g }xt|D ]}|dkr|| }n|}||d k	r|||d   d }	nd}	|	}|j||| g |j|	|| g |j||	    d  qnW ||fS )z
    Generate a color scale for int type categories. Each category will be at the center of a bin.
    The will generate a discrete color bar but may have unequal bin widths
    z1Length of values is greater than length of colorsNc                s   g | ]}|    qS  r   ).0i)max_valmin_valr   /var/www/atlasX/datastore.py
<listcomp>   s    z'generate_colorscale.<locals>.<listcomp>   r      )npmaxminlenprintrangeappend)
valuescolorsZnvalsZnorm_values
colorscaleticklocationsr   lbZprev_ubZubr   )r   r   r   generate_colorscale   s.    


r   c               @   s   e Z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 Z
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" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+S ),	datastorec             C   s   yt jt| _| jj| _t| jj| _| jj| _	t jt
jd| _t jt| _| jj| jddd| _t jtjdj| _d| _| jjdd| _W n0 tk
r } zt| d	| _W Y d d }~X nX d S )
N leftName)howon	attributeZgoodT)deepZbad)pdZread_csv
master_csv	master_dfcolumnsorig_columnsr   indextotal_sources	col_namescitations_filefillnarefs_dfdata_availabilitymergecol_attrZ	set_indexTcol_attr_dfstatecopyendpoint_df
ValueErrorr   )selfZverrr   r   r   __init__7   s    

zdatastore.__init__c             C   s   | j S )N)r$   )r4   r   r   r   get_orig_columnsI   s    zdatastore.get_orig_columnsc             C   s   | j S )N)r"   )r4   r   r   r   get_master_dataL   s    zdatastore.get_master_datac             C   s   | j | j d dk | _ d S )NZbapp3r	   )r2   )r4   r   r   r   _filter_super_luminal_sourcesO   s    z'datastore._filter_super_luminal_sourcesc             C   s   | j | j d dk | _ d S )NzX-ray firstr   )r2   )r4   r   r   r   _filter_xray_upstream_offsetR   s    z&datastore._filter_xray_upstream_offsetc             C   s   | j | j d dk | _ d S )NzRadio firstr   )r2   )r4   r   r   r   _filter_xray_downstream_offsetU   s    z(datastore._filter_xray_downstream_offsetc             C   s(   | j | j d dk| j d dk@  | _ d S )NzRadio firstr   zX-ray first)r2   )r4   r   r   r   (_filter_xray_upstream_downstream_offsetsX   s    z2datastore._filter_xray_upstream_downstream_offsetsc             C   s   | j S )N)r2   )r4   r   r   r   get_filtered_data^   s    zdatastore.get_filtered_datac             C   s   | j jdd| _d S )NT)r   )r"   r1   r2   )r4   r   r   r   reset_filtersa   s    zdatastore.reset_filtersc             C   s   | j | j d dk S )Nuse_as_scaler	   )r/   )r4   r   r   r   get_valid_scalesd   s    zdatastore.get_valid_scalesc             C   s   | j | j d dk S )N
use_as_catr	   )r/   )r4   r   r   r   get_valid_categoriesg   s    zdatastore.get_valid_categoriesc             C   s   | j | j d jddk S )NZ
valid_axisintr	   )r/   astype)r4   r   r   r   get_valid_axesj   s    zdatastore.get_valid_axesc             C   s   | j S )N)r/   )r4   r   r   r   get_col_attributesm   s    zdatastore.get_col_attributesc             C   s   dddgS )NzSuper luminal sourcesr8   )labelvaluer   )r4   r   r   r   get_filtersp   s    zdatastore.get_filtersc             C   sD   | j | j d jddk }dd |j D }|jddd dd |S )	Nr>   rB   r	   c             S   s$   g | ]\}}|d  ||d  dqS )pretty_name)rF   rG   primaryTextr   )r   r   rowr   r   r   r      s   z.datastore.get_scaling_vars.<locals>.<listcomp>r   z
No scaling)rF   rG   rJ   )r/   rC   iterrowsinsert)r4   Z	scales_dfoptionsr   r   r   get_scaling_vars|   s    
zdatastore.get_scaling_varsc             C   s<   | j | jd}d}d|j  |d  }|j dd|d dS )Ng?(   r
   area   )sizeZsizemodeZsizeminsizerefcolor)r2   r)   r   tolist)r4   Zscale_usingscalesZmax_derired_marker_sizerT   r   r   r   get_marker_scaling_options   s    z$datastore.get_marker_scaling_optionsc             C   sD   | j | j d jddk }dd |j D }|jddd dd |S )	Nr@   rB   r	   c             S   s$   g | ]\}}|d  ||d  dqS )rI   )rF   rG   rJ   r   )r   r   rK   r   r   r   r      s   z2datastore.get_categorical_vars.<locals>.<listcomp>r   zNo Category)rF   rG   rJ   )r/   rC   rL   rM   )r4   Zcat_dfrN   r   r   r   get_categorical_vars   s    

zdatastore.get_categorical_varsc                s   | j | jd}|d dkj rtj|j }tj| t|}|dk rPdd iS |dkrt|dkrttj	d d d }ntj	t
| d d	 }t||\}}|dkrdg} fd
d|j D || jj| d dd|dd |D ddS dd iS d S )Nr   r	   rU      3ZqualZDark2divZSpectralc                s   g | ]}|  qS r   r   )r   r   )min_unique_valr   r   r      s    z+datastore.get_cat_color.<locals>.<listcomp>rI   toparrayc             S   s   g | ]}t t|qS r   )strrB   )r   r   r   r   r   r      s    )titleZ	titlesideZtickmodeZtickvalsZticktext)rU   r   Zcolorbar)r2   r)   allr   sortuniquer   r   clrW   r`   r   rV   r/   loc)r4   Z	cat_usingZ
cat_valuesZunique_valsZn_unique_valsr   r   r   r   )r]   r   get_cat_color   s,    
zdatastore.get_cat_colorc                s@   j j d |k jd jd tj fddjD ddS )Nr   r   NAc                s6   g | ].}t jt jjj| d  t j | gqS )rI   )htmlTrTdr/   rf   )r   col)rK   r4   r   r   r      s   z.datastore.get_source_table.<locals>.<listcomp>r   )	className)r2   ilocr)   ri   Tabler'   )r4   sourcer   )rK   r4   r   get_source_table   s    
zdatastore.get_source_tablec             C   sz   | j d j | j d j | j d j | j d j | j d j | j d j | j d j | j d j t| j d	 j | jd

S )Nz#resolved X_ray knotsz#knots with offsetsz#knots without offsetsz
#HS  Xraysz#HS with offsetsz#HS without offsetszX-ray firstzRadio firstz/X-ray jet terminates before radio after a bend?)
Ztotal_resolved_xray_knotsZtotal_knots_with_offsetsZtotal_knots_without_offsetsZtotal_resolved_xray_HSZtotal_HS_with_offsetsZtotal_HS_without_offsetsZxray_first_offsetsZradio_first_offsetsZ#total_xray_jet_terminates_at_a_bendZ
total_jets)r"   sumrB   r&   )r4   r   r   r   get_summary_data   s    zdatastore.get_summary_datac             C   s   t d| | jjd| d}|jd dkr0dS g }dd }xV|j D ]J\}}|jtj||tj d|d  dtj tj	d	|d
 ddg qFW t d| tj
|S )NsrczName2==""r   r   c             S   s\   d}| d dkr$dt | d  d}| d  d| d  d| d	  d
| d  | d| d  
S )Nr   number()Zauthorz (yearz), Zjournal2z, volumez, p.pages)rB   )rnumr   r   r   get_apa_cite  s    z2datastore.get_formatted_refs.<locals>.get_apa_citera   z[ADS]linkZ_blank)hreftargetZref_l)r   r*   queryshaperL   r   ri   LiBrAOl)r4   rp   refsZref_listr~   r%   rK   r   r   r   get_formatted_refs   s    
 
zdatastore.get_formatted_refsN)__name__
__module____qualname__r5   r6   r7   r8   r9   r:   r;   r<   r=   r?   rA   rD   rE   rH   rO   rX   rY   rg   rq   rs   r   r   r   r   r   r   6   s*   0r   )pandasr    numpyr   Z
colorloverre   dash_html_componentsri   r!   r-   r+   r(   r   r   r   r   r   r   <module>   s   '