B
    ra                  @   sF   d dl Zd dlZd dlZd dlZdZdZ	dZ
dd ZG dd dZdS )	    Nz assets/XJETS-master - Sheet1.csvz-assets/XJETS-master - col_name_attributes.csvz#assets/data_downloads/data_info.csvc       
         s   t |  t | 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}	|	}|||| g ||	|| g |||	    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'S )(	datastorec          
   C   s   ytt t| _t| jj| _| jj| _t t	| _	| jj
| j	ddd| _t tdj| _d| _| jjdd| _W n0 tk
r } zt| d| _W d d }~X Y nX d S )	NleftName)howon	attributeZgoodT)deepZbad)pdZread_csv
master_csv	master_dfr   indextotal_sourcescolumns	col_namesdata_availabilitymergecol_attrZ	set_indexTcol_attr_dfstatecopyendpoint_df
ValueErrorr   )selfZverrr   r   r   __init__5   s    
zdatastore.__init__c             C   s   | j S )N)r!   )r/   r   r   r   get_master_dataE   s    zdatastore.get_master_datac             C   s   | j | j d dk | _ d S )NZb_appr	   )r-   )r/   r   r   r   _filter_super_luminal_sourcesH   s    z'datastore._filter_super_luminal_sourcesc             C   s   | j | j d dk | _ d S )NzX-ray firstr   )r-   )r/   r   r   r   _filter_xray_upstream_offsetK   s    z&datastore._filter_xray_upstream_offsetc             C   s   | j | j d dk | _ d S )NzRadio firstr   )r-   )r/   r   r   r   _filter_xray_downstream_offsetN   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)r-   )r/   r   r   r   (_filter_xray_upstream_downstream_offsetsQ   s    z2datastore._filter_xray_upstream_downstream_offsetsc             C   s   | j S )N)r-   )r/   r   r   r   get_filtered_dataW   s    zdatastore.get_filtered_datac             C   s   | j jdd| _d S )NT)r   )r!   r,   r-   )r/   r   r   r   reset_filtersZ   s    zdatastore.reset_filtersc             C   s   | j | j d dk S )Nuse_as_scaler	   )r*   )r/   r   r   r   get_valid_scales]   s    zdatastore.get_valid_scalesc             C   s   | j | j d dk S )N
use_as_catr	   )r*   )r/   r   r   r   get_valid_categories`   s    zdatastore.get_valid_categoriesc             C   s   | j | j d ddk S )NZ
valid_axisintr	   )r*   astype)r/   r   r   r   get_valid_axesc   s    zdatastore.get_valid_axesc             C   s   | j S )N)r*   )r/   r   r   r   get_col_attributesf   s    zdatastore.get_col_attributesc             C   s$   ddddddddddd	dgS )
NzSuper luminal sourcesr2   )labelvaluez Sources with upstream X-ray peakr3   z"Sources with downstream X-ray peakr4   z!Sources with both kind of offsetsr5   r   )r/   r   r   r   get_filtersi   s    zdatastore.get_filtersc             C   sD   | j | j d ddk }dd | D }|ddd dd |S )	Nr8   r<   r	   c             S   s$   g | ]\}}|d  ||d  dqS )pretty_name)r@   rA   primaryTextr   )r   r   rowr   r   r   r   y   s   z.datastore.get_scaling_vars.<locals>.<listcomp>r   z
No scaling)r@   rA   rD   )r*   r=   iterrowsinsert)r/   Z	scales_dfoptionsr   r   r   get_scaling_varsu   s    
zdatastore.get_scaling_varsc             C   s<   | j | d}d}d|  |d  }| dd|d dS )Ng?(   r
   area   )sizeZsizemodeZsizeminsizerefcolor)r-   fillnar   tolist)r/   Zscale_usingscalesZmax_derired_marker_sizerN   r   r   r   get_marker_scaling_options   s    z$datastore.get_marker_scaling_optionsc             C   sD   | j | j d ddk }dd | D }|ddd dd |S )	Nr:   r<   r	   c             S   s$   g | ]\}}|d  ||d  dqS )rC   )r@   rA   rD   r   )r   r   rE   r   r   r   r      s   z2datastore.get_categorical_vars.<locals>.<listcomp>r   zNo Category)r@   rA   rD   )r*   r=   rF   rG   )r/   Zcat_dfrH   r   r   r   get_categorical_vars   s    

zdatastore.get_categorical_varsc                s   | j | d}|d dk rt| }t| 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| D || jj| d dd|dd |D ddS dd iS d S )Nr   r	   rO      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>rC   toparrayc             S   s   g | ]}t t|qS r   )strr<   )r   r   r   r   r   r      s    )titleZ	titlesideZtickmodeZtickvalsZticktext)rO   r   Zcolorbar)r-   rP   allr   sortuniquer   r   clrR   r[   r   rQ   r*   loc)r/   Z	cat_usingZ
cat_valuesZunique_valsZn_unique_valsr   r   r   r   )rX   r   get_cat_color   s,    
zdatastore.get_cat_colorc                s@   j j d |k jd d tj fddjD ddS )Nr   r   NAc          	      s6   g | ].}t t jj| d  t  | gqS )rC   )htmlTrTdr*   ra   )r   col)rE   r/   r   r   r      s   z.datastore.get_source_table.<locals>.<listcomp> )	className)r-   ilocrP   rd   Tabler%   )r/   sourcer   )rE   r/   r   get_source_table   s    
zdatastore.get_source_tablec             C   sz   | j d  | j d  | j d  | j d  | j d  | j d  | j d  | j d  t| j d	  | 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!   sumr<   r#   )r/   r   r   r   get_summary_data   s    zdatastore.get_summary_dataN)__name__
__module____qualname__r0   r1   r2   r3   r4   r5   r6   r7   r9   r;   r>   r?   rB   rI   rS   rT   rb   rm   ro   r   r   r   r   r   4   s&   0r   )pandasr   numpyr   Z
colorloverr`   dash_html_componentsrd   r    r(   r&   r   r   r   r   r   r   <module>   s   '