B
    d|              [   @   s<  d 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m	Z	m
Z
 ddddd	d
d	d
ddddddddddddddddddddddd d!d"d#d$d%d&d'd(d(d)d*d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYZZdZd[dZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdpdqdrdsdtdudvdwdxdydzd{d|d}d~dddddddddddddddddddddddddddddddddddddddddddddTZdd ZdddZG dd dZG dd dZG dd dZG dd deZG dd deZG dd dZdddZdddZdddÄZdZdZdS )zF
Some helper classes and functions for outputing html and LaTeX pages
    )print_functionN)
rad_to_dms
rad_to_hmsz$h_0$z$\cos{\iota}$z$\psi$ (rad)z$\phi_0$ (rad)z$\alpha$z$\delta$z
$f_0$ (Hz)z$\dot{f}$ (Hz/s)z$\ddot{f}$ (Hz/s$^2$)z$f_3$ (Hz/s$^3$)z$f_4$ (Hz/s$^4$)z$f_5$ (Hz/s$^5$)z$f_6$ (Hz/s$^6$)z$f_7$ (Hz/s$^7$)z$f_8$ (Hz/s$^8$)z$f_9$ (Hz/s$^9$)z$f_{10}$ (Hz/s$^{10}$)z	$\log{L}$zp.m. $\alpha$ (rad/s)zp.m. $\delta$ (rad/s)z$\pi$ (rad)z$a \sin{i}$ (lt s)z$(a \sin{i})_{2}$ (lt s)z$(a \sin{i})_{3}$ (lt s)z	$\sin{i}$z	$P_b$ (s)z$(P_b)_2$ (s)z$(P_b)_3$ (s)z	$T_0$ (s)z$(T_0)_2$ (s)z$(T_0)_3$ (s)z$T_{\textrm{asc}}$ (s)z$\omega_0$ (rad)z$(\omega_0)_2$ (rad)z$(\omega_0)_3$ (rad)z$\dot{P}$ (s/s)z$\gamma$z$e$z$e_2$z$e_3$z$(f_b)_0$ (Hz)z$(f_b)_1$ (Hz)z$(f_b)_2$ (Hz)z$(f_b)_3$ (Hz)z$(f_b)_4$ (Hz)z$(f_b)_5$ (Hz)z$(f_b)_6$ (Hz)z$(f_b)_7$ (Hz)z$(f_b)_8$ (Hz)z$(f_b)_9$ (Hz)z
$m_2$ (kg)z$M$ (kg)z$\varepsilon$z$h_0^{95\%}$z$h_0^{{{}\%}}$z$Q_{22}$\,(kg\,m$^2$)zspin-down ratioz$h_0^{95\%}$/h_0^{\rm sd}$z$h_0^{\rm sd}$z$f_{\rm rot}$ (Hz)z$f_{\rm gw}$ (Hz)z$\dot{f}_{\rm rot}$ (Hz/s)z$\dot{f}_{\rm gw}$ (Hz/s)zpower ratio (\%)z$\dot{\omega}$z$\epsilon_1$z$\epsilon_2$z$C_{22}$z$C_{21}$z$C_{{22}}^{{{}\%}}$z$C_{{21}}^{{{}\%}}$z$\phi_{22}$z$\phi_{21}$z$I_{31}$z$I_{21}$z$I_{{31}}^{{{}\%}}$z$I_{{21}}^{{{}\%}}$z$\lambda$ (rad)z$\cos{\theta}$zdistance (kpc)z$\rho$z*$\log{}_{10}\left(B_{\textrm{SvN}}\right)$z*$\log{}_{10}\left(B_{\textrm{CvI}}\right)$z+$\log{}_{10}\left(B_{\textrm{CvIN}}\right)$)ZH0COSIOTAPSIPHI0RADECRAJDECJF0F1F2F3F4F5F6F7F8F9F10ZLOGLPMRAPMDECPMDCPXA1A1_2A1_3SINIPBPB_2PB_3T0T0_2T0_3TASCOMOM_2OM_3ZPBDTZPBDOTZGAMMAEECCECC_2ECC_3FB0FB1FB2FB3FB4FB5FB6FB7FB8FB9M2MTOTELLH95H0ULQ22SDRATZSDRAT95SDLIMF0ROTF0GWF1ROTF1GWSDPOWRATZOMDOTZOMDTEPS1EPS2C22C21C22ULC21ULPHI22PHI21I31I21I31ULI21ULZLAMBDAZCOSTHETADISTSNRBSNBCIBCINz&alpha;z&delta;zf<sub>0</sub> (Hz)zf<sub>1</sub> (Hz/s)z f<sub>2</sub> (Hz/s<sup>2</sup>)z f<sub>3</sub> (Hz/s<sup>3</sup>)z f<sub>4</sub> (Hz/s<sup>4</sup>)z f<sub>5</sub> (Hz/s<sup>5</sup>)z f<sub>6</sub> (Hz/s<sup>6</sup>)z f<sub>7</sub> (Hz/s<sup>7</sup>)z f<sub>8</sub> (Hz/s<sup>8</sup>)z f<sub>9</sub> (Hz/s<sup>9</sup>)z"f<sub>10</sub> (Hz/s<sup>10</sup>)zf<sub>rotation</sub> (Hz)z#Spin-down<sub>rotation</sub> (Hz/s)zf<sub>GW</sub> (Hz)zSpin-down<sub>GW</sub> (Hz/s)zepoch (MJD)za sin<it>i</i> (lt s)z#(a sin<it>i</i>)<sub>2</sub> (lt s)z#(a sin<it>i</i>)<sub>3</sub> (lt s)zsin<it>i</it>$z
<it>e</it>z<it>e</it><sub>2</sub>z<it>e</it><sub>3</sub>z&epsilon;<sub>1</sub>z&epsilon;<sub>2</sub>zT<sub>0</sub> (MJD)z!(T<sub>0</sub>)<sub>2</sub> (MJD)z!(T<sub>0</sub>)<sub>3</sub> (MJD)zT<sub>asc</sub> (MJD)z&omega;<sub>0</sub> (deg)z'(&omega;<sub>0</sub>)<sub>2</sub> (deg)z'(&omega;<sub>0</sub>)<sub>3</sub> (deg)z<it>m</it><sub>2</sub> (kg)z<it>M</it> (kg)z<it>P</it><sub>b</sub> (days)z+(<it>P</it><sub>b</sub>)<sub>2</sub> (days)z+(<it>P</it><sub>b</sub>)<sub>3</sub> (days)z)(<it>f</it><sub>b</sub>)<sub>0</sub> (Hz)z)(<it>f</it><sub>b</sub>)<sub>1</sub> (Hz)z)(<it>f</it><sub>b</sub>)<sub>2</sub> (Hz)z)(<it>f</it><sub>b</sub>)<sub>3</sub> (Hz)z)(<it>f</it><sub>b</sub>)<sub>4</sub> (Hz)z)(<it>f</it><sub>b</sub>)<sub>5</sub> (Hz)z)(<it>f</it><sub>b</sub>)<sub>6</sub> (Hz)z)(<it>f</it><sub>b</sub>)<sub>7</sub> (Hz)z)(<it>f</it><sub>b</sub>)<sub>8</sub> (Hz)z)(<it>f</it><sub>b</sub>)<sub>9</sub> (Hz)zh<sub>0</sub>zC<sub>21</sub>zC<sub>21</sub><sup>{}%</sup>zC<sub>22</sub>zC<sub>22</sub><sup>{}%</sup>zI<sub>21</sub>zI<sub>21</sub><sup>{}%</sup>zI<sub>31</sub>zI<sub>31</sub><sup>{}%</sup>z	cos&iota;z&psi; (rad)z&phi;<sub>0</sub> (rad)z&phi;<sub>21</sub> (rad)z&phi;<sub>22</sub> (rad)zp.m. &alpha; (rad/s)zp.m. &delta; (rad/s)z
&pi; (rad)zDistance (kpc)zSpin-down limitz&#949;ratiozh<sub>0</sub><sup>95%</sup>zh<sub>0</sub><sup>{}%</sup>z!h<sub>0</sub><sup>95%</sup> priorzpower ratio (%)z!Q<sub>22</sub> (kg m<sup>2</sup>)z!log<sub>10</sub>(B<sub>SvN</sub>)z!log<sub>10</sub>(B<sub>CvI</sub>)z"log<sub>10</sub>(B<sub>CvIN</sub>)zlog<sub>10</sub>(max. L)z&rho;)Tr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r@   rB   rA   rC   PEPOCHr   r   r   r   r*   r+   r,   r-   rE   rF   r#   r$   r%   r&   r'   r(   r)   r8   r9   r    r!   r"   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r   rH   rJ   rG   rI   rN   rP   rM   rO   r   r   r   rL   rK   r   r   r   r   rQ   r?   r:   r>   r;   r<   H0PRIORrD   r=   rS   rT   rU   ZMAXLrR   c          	   C   s(   t | tttt| |d   S )N   )roundintmathfloorlog10abs)xZsf ra   d/work/yifan.wang/ringdown/master-ringdown-env/lib/python3.7/site-packages/lalapps/pulsarhtmlutils.pysigfig   s    rc      htmlc             C   s`   t | }t|dkrNt|dk rN|dkr:tt||S dtt|| S nt|||dS d S )Ng{Gz?g     @@re   z$%s$)otype)floatnpr_   reprrZ   exp_str)fdphorlZfvra   ra   rb   
dec_or_exp   s    rn   c               @   s  e Zd Zd}ddZd~ddZdddZdd	d
Zdd Zdd Zdd Z	dd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d0d1 Zd2d3 Zd4d5 Zd6d7 Zdd9d:Zdd;d<Zd=d> Zd?d@ Z dAdB Z!dCdD Z"dEdF Z#dGdH Z$dIdJ Z%dKdL Z&dMdN Z'dOdP Z(dQdR Z)dSdT Z*dUdV Z+dWdX Z,dYdZ Z-d[d\ Z.d]d^ Z/d_d` Z0dadb Z1dcdd Z2dedf Z3dgdh Z4didj Z5dkdl Z6dmdn Z7dodp Z8dqdr Z9dsd Zdtd Z	dudv Z:dwdx Z;dydz Z<d{d| Z=d8S )paramhtmldispfunchmsc             C   s   |dkrt | S t| S d S )Nrp   )ra_strrn   )rk   stypera   ra   rb   r      s    zparamhtmldispfunc.RAJc             C   s   |dkrt | S t| S d S )Nrp   )rq   rn   )rk   rr   ra   ra   rb   r	      s    zparamhtmldispfunc.RAdmsc             C   s   |dkrt | S t| S d S )Nrs   )dec_strrn   )rk   rr   ra   ra   rb   r      s    zparamhtmldispfunc.DECJc             C   s   |dkrt | S t| S d S )Nrs   )rt   rn   )rk   rr   ra   ra   rb   r
      s    zparamhtmldispfunc.DECc             C   s   t | S )N)rn   )rk   ra   ra   rb   r         zparamhtmldispfunc.PMRAc             C   s   t | S )N)rn   )rk   ra   ra   rb   r     ru   zparamhtmldispfunc.PMDECc             C   s   t | S )N)rn   )rk   ra   ra   rb   r     ru   zparamhtmldispfunc.PMDC   c             C   s   t | |dS )N)rl   )rn   )rk   rl   ra   ra   rb   r     s    zparamhtmldispfunc.F0c             C   s   t t| dS )Nrd   )rj   rg   )rk   ra   ra   rb   r     ru   zparamhtmldispfunc.F1c             C   s   t t| dS )Nrd   )rj   rg   )rk   ra   ra   rb   r     ru   zparamhtmldispfunc.F2c             C   s   t t| dS )Nrd   )rj   rg   )rk   ra   ra   rb   r   	  ru   zparamhtmldispfunc.F3c             C   s   t t| dS )Nrd   )rj   rg   )rk   ra   ra   rb   r   
  ru   zparamhtmldispfunc.F4c             C   s   t t| dS )Nrd   )rj   rg   )rk   ra   ra   rb   r     ru   zparamhtmldispfunc.F5c             C   s   t t| dS )Nrd   )rj   rg   )rk   ra   ra   rb   r     ru   zparamhtmldispfunc.F6c             C   s   t t| dS )Nrd   )rj   rg   )rk   ra   ra   rb   r     ru   zparamhtmldispfunc.F7c             C   s   t t| dS )Nrd   )rj   rg   )rk   ra   ra   rb   r     ru   zparamhtmldispfunc.F8c             C   s   t t| dS )Nrd   )rj   rg   )rk   ra   ra   rb   r     ru   zparamhtmldispfunc.F9c             C   s   t t| dS )Nrd   )rj   rg   )rk   ra   ra   rb   r     ru   zparamhtmldispfunc.F10c             C   s    dt tdt | d d   S )Nz%.1fg    @gd;OI@g     @)rg   ri   )rk   ra   ra   rb   rW     ru   zparamhtmldispfunc.PEPOCHc             C   s   t | S )N)rn   )rk   ra   ra   rb   r     ru   zparamhtmldispfunc.A1c             C   s   t | S )N)rn   )rk   ra   ra   rb   r*     ru   zparamhtmldispfunc.Ec             C   s   t | S )N)rn   )rk   ra   ra   rb   rE     ru   zparamhtmldispfunc.EPS1c             C   s   t | S )N)rn   )rk   ra   ra   rb   rF     ru   zparamhtmldispfunc.EPS2c             C   s   t | S )N)rn   )rk   ra   ra   rb   r8     ru   zparamhtmldispfunc.M2c             C   s   t | S )N)rn   )rk   ra   ra   rb   r9     ru   zparamhtmldispfunc.MTOTc             C   s   t | S )N)rn   )rk   ra   ra   rb   r     ru   zparamhtmldispfunc.SININc             C   sH   |dkr$t tt| d d ddS dttdt| d d   S d S )Ndiffgd;OI@g     @rd   )rl   z%.2fg    @)rn   ri   rg   )rk   rr   ra   ra   rb   r#     s    zparamhtmldispfunc.T0c             C   sH   |dkr$t tt| d d ddS dttdt| d d   S d S )Nrw   gd;OI@g     @rd   )rl   z%.2fg    @)rn   ri   rg   )rk   rr   ra   ra   rb   r&     s    zparamhtmldispfunc.TASCc             C   s   t tt| d tj ddS )Ng     f@rY   )rl   )rn   ri   rg   r\   pi)rk   ra   ra   rb   r'   #  ru   zparamhtmldispfunc.OMc             C   s   t tt| d S )Ng     @)rn   ri   rg   )rk   ra   ra   rb   r    $  ru   zparamhtmldispfunc.PBc             C   s   t t| dS )NrY   )rj   rg   )rk   ra   ra   rb   r   %  ru   zparamhtmldispfunc.H0c             C   s   t t| dS )NrY   )rj   rg   )rk   ra   ra   rb   r<   &  ru   zparamhtmldispfunc.H0ULc             C   s   t t| dS )NrY   )rj   rg   )rk   ra   ra   rb   rH   '  ru   zparamhtmldispfunc.C21c             C   s   t t| dS )NrY   )rj   rg   )rk   ra   ra   rb   rJ   (  ru   zparamhtmldispfunc.C21ULc             C   s   t t| dS )NrY   )rj   rg   )rk   ra   ra   rb   rG   )  ru   zparamhtmldispfunc.C22c             C   s   t t| dS )NrY   )rj   rg   )rk   ra   ra   rb   rI   *  ru   zparamhtmldispfunc.C22ULc             C   s   t t| dS )NrY   )rj   rg   )rk   ra   ra   rb   rN   +  ru   zparamhtmldispfunc.I21c             C   s   t t| dS )NrY   )rj   rg   )rk   ra   ra   rb   rP   ,  ru   zparamhtmldispfunc.I21ULc             C   s   t t| dS )NrY   )rj   rg   )rk   ra   ra   rb   rM   -  ru   zparamhtmldispfunc.I31c             C   s   t t| dS )NrY   )rj   rg   )rk   ra   ra   rb   rO   .  ru   zparamhtmldispfunc.I31ULc             C   s   t | S )N)rn   )rk   ra   ra   rb   r   /  ru   zparamhtmldispfunc.COSIOTAc             C   s   t | S )N)rn   )rk   ra   ra   rb   r   0  ru   zparamhtmldispfunc.PHI0c             C   s   t | S )N)rn   )rk   ra   ra   rb   rK   1  ru   zparamhtmldispfunc.PHI22c             C   s   t | S )N)rn   )rk   ra   ra   rb   rL   2  ru   zparamhtmldispfunc.PHI21c             C   s   t | S )N)rn   )rk   ra   ra   rb   r   3  ru   zparamhtmldispfunc.PSIc             C   s   t t| dS )NrY   )rj   rg   )rk   ra   ra   rb   r:   4  ru   zparamhtmldispfunc.ELLc             C   s   t t| dS )NrY   )rj   rg   )rk   ra   ra   rb   r?   5  ru   zparamhtmldispfunc.SDLIMc             C   s>   t t| d}|dk rd| S |dk r.d| S dt| S d S )Nrd   g      ?z%.2fg      $@z%.1fz%d)rc   rg   rZ   )rk   fsfra   ra   rb   r>   6  s    zparamhtmldispfunc.SDRATc             C   s   dt |  S )Nz%.1f)rg   )rk   ra   ra   rb   rQ   >  ru   zparamhtmldispfunc.DISTc             C   s   dt t|  S )Nz%d)rZ   rg   )rk   ra   ra   rb   rD   ?  ru   zparamhtmldispfunc.SDPOWRATc             C   s   t | ddS )NrY   )rl   )rn   )rk   ra   ra   rb   r=   @  ru   zparamhtmldispfunc.Q22c             C   s   t | S )N)rn   )rk   ra   ra   rb   r@   A  ru   zparamhtmldispfunc.F0ROTc             C   s   t | S )N)rn   )rk   ra   ra   rb   rA   B  ru   zparamhtmldispfunc.F0GWc             C   s   t t| dS )NrY   )rj   rg   )rk   ra   ra   rb   rB   C  ru   zparamhtmldispfunc.F1ROTc             C   s   t t| dS )NrY   )rj   rg   )rk   ra   ra   rb   rC   D  ru   zparamhtmldispfunc.F1GWc             C   s   t | S )N)rn   )rk   ra   ra   rb   r   E  ru   c             C   s   t | S )N)rn   )rk   ra   ra   rb   r   F  ru   c             C   s   t | S )N)rn   )rk   ra   ra   rb   rS   G  ru   zparamhtmldispfunc.BSNc             C   s   t | S )N)rn   )rk   ra   ra   rb   rT   H  ru   zparamhtmldispfunc.BCIc             C   s   t | S )N)rn   )rk   ra   ra   rb   rU   I  ru   zparamhtmldispfunc.BCINc             C   s   | S )Nra   )rk   ra   ra   rb   
DEFAULTSTRJ  ru   zparamhtmldispfunc.DEFAULTSTR)rp   )rp   )rs   )rs   )rv   )N)N)>__name__
__module____qualname__r   r	   r   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rW   r   r*   rE   rF   r8   r9   r   r#   r&   r'   r    r   r<   rH   rJ   rG   rI   rN   rP   rM   rO   r   r   rK   rL   r   r:   r?   r>   rQ   rD   r=   r@   rA   rB   rC   rS   rT   rU   rz   ra   ra   ra   rb   ro      sz   






ro   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+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCdD Z$dEdF Z%dGdH Z&dIdJ Z'dKdL Z(dMdN Z)dOdP Z*dQdR Z+dSdT Z,dUdV Z-dWdX Z.dYdZ Z/d[d\ Z0d]S )^paramlatexdispfuncc             C   s   t t| ddS )NrY   latex)rj   rg   )rk   ra   ra   rb   r:   O  ru   zparamlatexdispfunc.ELLc             C   s   t t| ddS )NrY   r   )rj   rg   )rk   ra   ra   rb   r;   P  ru   zparamlatexdispfunc.H95c             C   s   t t| ddS )NrY   r   )rj   rg   )rk   ra   ra   rb   r   Q  ru   zparamlatexdispfunc.H0c             C   s   t t| ddS )NrY   r   )rj   rg   )rk   ra   ra   rb   r<   R  ru   zparamlatexdispfunc.H0ULc             C   s   t t| ddS )NrY   r   )rj   rg   )rk   ra   ra   rb   rH   S  ru   zparamlatexdispfunc.C21c             C   s   t t| ddS )NrY   r   )rj   rg   )rk   ra   ra   rb   rJ   T  ru   zparamlatexdispfunc.C21ULc             C   s   t t| ddS )NrY   r   )rj   rg   )rk   ra   ra   rb   rG   U  ru   zparamlatexdispfunc.C22c             C   s   t t| ddS )NrY   r   )rj   rg   )rk   ra   ra   rb   rI   V  ru   zparamlatexdispfunc.C22ULc             C   s   t t| ddS )NrY   r   )rj   rg   )rk   ra   ra   rb   rN   W  ru   zparamlatexdispfunc.I21c             C   s   t t| ddS )NrY   r   )rj   rg   )rk   ra   ra   rb   rP   X  ru   zparamlatexdispfunc.I21ULc             C   s   t t| ddS )NrY   r   )rj   rg   )rk   ra   ra   rb   rM   Y  ru   zparamlatexdispfunc.I31c             C   s   t t| ddS )NrY   r   )rj   rg   )rk   ra   ra   rb   rO   Z  ru   zparamlatexdispfunc.I31ULc             C   s   t t| ddS )NrY   r   )rj   rg   )rk   ra   ra   rb   rX   [  ru   zparamlatexdispfunc.H0PRIORc             C   s   t t| ddS )NrY   r   )rj   rg   )rk   ra   ra   rb   r?   \  ru   zparamlatexdispfunc.SDLIMc             C   s:   t t| d}|dk rd| S |dk r.d| S d| S d S )Nrd   g      ?z%.2fg      $@z%.1fz%d)rc   rg   )rk   ry   ra   ra   rb   r>   ]  s    zparamlatexdispfunc.SDRATc             C   s
   t | dS )Nr   )rq   )rk   ra   ra   rb   r   e  ru   zparamlatexdispfunc.RAJc             C   s
   t | dS )Nr   )rt   )rk   ra   ra   rb   r   f  ru   zparamlatexdispfunc.DECJc             C   s
   t | dS )Nr   )rq   )rk   ra   ra   rb   r	   g  ru   zparamlatexdispfunc.RAc             C   s
   t | dS )Nr   )rt   )rk   ra   ra   rb   r
   h  ru   zparamlatexdispfunc.DECc             C   s   t | ddS )Nr   )rm   )rn   )rk   ra   ra   rb   r   i  ru   zparamlatexdispfunc.PMRAc             C   s   t | ddS )Nr   )rm   )rn   )rk   ra   ra   rb   r   j  ru   zparamlatexdispfunc.PMDECc             C   s   t | ddS )Nr   )rm   )rn   )rk   ra   ra   rb   r   k  ru   zparamlatexdispfunc.PMDCc             C   s   t | ddS )Nr   )rm   )rn   )rk   ra   ra   rb   r8   l  ru   zparamlatexdispfunc.M2c             C   s   t | ddS )Nr   )rm   )rn   )rk   ra   ra   rb   r9   m  ru   zparamlatexdispfunc.MTOTc             C   s   dt |  S )Nz%.1f)rg   )rk   ra   ra   rb   rQ   n  ru   zparamlatexdispfunc.DISTc             C   s   dt |  S )Nz%d)r[   )rk   ra   ra   rb   rD   o  ru   zparamlatexdispfunc.SDPOWRATc             C   s   t t| ddS )NrY   r   )rj   rg   )rk   ra   ra   rb   r=   p  ru   zparamlatexdispfunc.Q22c             C   s   dt |  S )Nz%.2f)rg   )rk   ra   ra   rb   r   q  ru   zparamlatexdispfunc.F0c             C   s   dt |  S )Nz%.2f)rg   )rk   ra   ra   rb   r@   r  ru   zparamlatexdispfunc.F0ROTc             C   s   dt |  S )Nz%.2f)rg   )rk   ra   ra   rb   rA   s  ru   zparamlatexdispfunc.F0GWc             C   s   t t| ddS )NrY   r   )rj   rg   )rk   ra   ra   rb   r   t  ru   zparamlatexdispfunc.F1c             C   s   t t| ddS )NrY   r   )rj   rg   )rk   ra   ra   rb   r   u  ru   zparamlatexdispfunc.F2c             C   s   t t| ddS )NrY   r   )rj   rg   )rk   ra   ra   rb   r   v  ru   zparamlatexdispfunc.F3c             C   s   t t| ddS )NrY   r   )rj   rg   )rk   ra   ra   rb   r   w  ru   zparamlatexdispfunc.F4c             C   s   t t| ddS )NrY   r   )rj   rg   )rk   ra   ra   rb   r   x  ru   zparamlatexdispfunc.F5c             C   s   t t| ddS )NrY   r   )rj   rg   )rk   ra   ra   rb   r   y  ru   zparamlatexdispfunc.F6c             C   s   t t| ddS )NrY   r   )rj   rg   )rk   ra   ra   rb   r   z  ru   zparamlatexdispfunc.F7c             C   s   t t| ddS )NrY   r   )rj   rg   )rk   ra   ra   rb   r   {  ru   zparamlatexdispfunc.F8c             C   s   t t| ddS )NrY   r   )rj   rg   )rk   ra   ra   rb   r   |  ru   zparamlatexdispfunc.F9c             C   s   t t| ddS )NrY   r   )rj   rg   )rk   ra   ra   rb   r   }  ru   zparamlatexdispfunc.F10c             C   s   t t| ddS )NrY   r   )rj   rg   )rk   ra   ra   rb   rB   ~  ru   zparamlatexdispfunc.F1ROTc             C   s   t t| ddS )NrY   r   )rj   rg   )rk   ra   ra   rb   rC     ru   zparamlatexdispfunc.F1GWc             C   s   t | ddS )Nr   )rm   )rn   )rk   ra   ra   rb   rS     ru   zparamlatexdispfunc.BSNc             C   s   t | ddS )Nr   )rm   )rn   )rk   ra   ra   rb   rT     ru   zparamlatexdispfunc.BCIc             C   s   t | ddS )Nr   )rm   )rn   )rk   ra   ra   rb   rU     ru   zparamlatexdispfunc.BCINc             C   s   | S )Nra   )rk   ra   ra   rb   rz     ru   zparamlatexdispfunc.DEFAULTSTRN)1r{   r|   r}   r:   r;   r   r<   rH   rJ   rG   rI   rN   rP   rM   rO   rX   r?   r>   r   r   r	   r
   r   r   r   r8   r9   rQ   rD   r=   r   r@   rA   r   r   r   r   r   r   r   r   r   r   rB   rC   rS   rT   rU   rz   ra   ra   ra   rb   r~   N  s\   r~   c               @   s   e Zd ZdZd'ddZdd Zedd	 Zd
d Zedd Z	dd Z
edd Zdd Zedd Zdd Zedd Zdd Zedd Zdd Zed d! Zed"d# Zd$d% Zd&S )(htmltagz"
  A class to create a html tag
   Fc             C   sd   i | _ | | | | | | | | | | | d |rNd| _nd| _d| j | _d S )Nr   
zF<{tag} class="{class}" id="{id}" style="{style}"{extra}>{text}</{tag}>)	_taginfoset_tagset_tagtextset_tagclass	set_tagidset_tagstyleset_tagextraZ_newline_tagdata)selftagtagtexttagclasstagidtagstylenewlinera   ra   rb   __init__  s    





zhtmltag.__init__c             C   s6   t |tst |tstdn| | jd |  | S )z<
    Overload the += operator to append text to tagtext
    z(Error... appended text must be a string.text)
isinstancestrunicode
ValueErrorr   r   )r   ttextra   ra   rb   __iadd__  s    
zhtmltag.__iadd__c             C   s
   | j d S )Nr   )r   )r   ra   ra   rb   r     s    zhtmltag.tagc             C   s,   t |tst |tstdn
|| jd< d S )Nz Error... 'tag' must be a string.r   )r   r   r   r   r   )r   tra   ra   rb   r     s    
zhtmltag.set_tagc             C   s
   | j d S )Nclass)r   )r   ra   ra   rb   r     s    zhtmltag.tagclassc             C   s,   t |tst |tstdn
|| jd< d S )Nz'Error... 'class' text must be a string.r   )r   r   r   r   r   )r   Ztclassra   ra   rb   r     s    
zhtmltag.set_tagclassc             C   s
   | j d S )Nid)r   )r   ra   ra   rb   r     s    zhtmltag.tagidc             C   s,   t |tst |tstdn
|| jd< d S )Nz$Error... 'id' text must be a string.r   )r   r   r   r   r   )r   tidra   ra   rb   r     s    
zhtmltag.set_tagidc             C   s
   | j d S )Nstyle)r   )r   ra   ra   rb   r     s    zhtmltag.tagstylec             C   s,   t |tst |tstdn
|| jd< d S )Nz'Error... 'style' text must be a string.r   )r   r   r   r   r   )r   Ztstylera   ra   rb   r     s    
zhtmltag.set_tagstylec             C   s
   | j d S )Nr   )r   )r   ra   ra   rb   r     s    zhtmltag.tagtextc             C   s,   t |tst |tstdn
|| jd< d S )Nz#Error... tag text must be a string.r   )r   r   r   r   r   )r   r   ra   ra   rb   r     s    
zhtmltag.set_tagtextc             C   s
   | j d S )Nextra)r   )r   ra   ra   rb   tagextra  s    zhtmltag.tagextrac             C   sD   t |tst |tstdn"d}t|dkr2d}|| | jd< d S )Nz+Error... 'extra' tag text must be a string.r   r    r   )r   r   r   r   lenr   )r   Ztextraspacera   ra   rb   r     s    
zhtmltag.set_tagextrac             C   s   | j S )N)r   )r   ra   ra   rb   taginfo  s    zhtmltag.taginfoc             C   s   | j jf | jS )N)r   formatr   )r   ra   ra   rb   r     s    zhtmltag.textc             C   s   | j S )N)r   )r   ra   ra   rb   __str__  s    zhtmltag.__str__N)r   r   r   r   F)r{   r|   r}   __doc__r   r   propertyr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ra   ra   ra   rb   r     s$   

	r   c               @   s   e Zd ZdZdddZdS )atagz
  Class for a link tag
  r   c             C   s4   |dkr|}t | d|||| | d| dS )z=
    Input the link and the text that the link surrounds
    r   az	href="{}"N)r   r   r   r   )r   linkZlinktextZ	linkclassZlinkidZ	linkstylera   ra   rb   r     s    zatag.__init__N)r   r   r   r   )r{   r|   r}   r   r   ra   ra   ra   rb   r     s   r   c               @   sJ   e Zd ZdZdddZedd Zddd	Zd
d ZdddZ	dd Z
dS )	htmltablez+
  Class to make and return a html table
  tabler   c             C   s*   t j| d|||d g | _d| _d| _d S )Nr   )r   r   r   r   )r   r   _rows_nrows_thisrow)r   r   Z
tableclassZtableidZ
tablestylera   ra   rb   r     s    zhtmltable.__init__c          	   C   s   d}x| j D ]}d}x`|d D ]T}d}|d r2d}t||d |d |d |d	 }|d
jf | ||jd 7 }qW td||d |d |d	 dd}||j7 }qW | | | jS )Nr   datatdheaderthr   r   r   r   z'rowspan="{rowspan}" colspan="{colspan}"r   trT)r   )r   r   r   r   r   r   )r   Z
innertablerowrowtxtr   r   ZdatatagZrowtagra   ra   rb   	tabletext  s      
zhtmltable.tabletextc             C   s:   g |||d}| j | |  jd7  _|  jd7  _dS )zX
    Add a new empty row dictionary to the list and increment the current row index
    )r   r   r   r   rY   N)r   appendr   r   )r   ZrowclassZrowidZrowstyler   ra   ra   rb   addrow  s    zhtmltable.addrowc             C   sN   || j d kr"tdt| j f  n(| j| |  j d8  _ |  jd8  _dS )z
    Delete a row
    rY   z8Warning... cannot delete row '%d'. Only %d row in table.N)r   printZrowdixr   popr   )r   rowidxra   ra   rb   	deleterow%  s
    zhtmltable.deleterowFr   Nc	       
      C   s   |dkr| j }|t| jd kr*tdnX|||||ddd}	|dkrVtt||	d< |dkrntt||	d< | j| d	 |	 dS )
zM
    Add table data <td> (or <th> is header is True) tags to a given row
    NrY   z%Warning... row index is out of range.r   )r   r   r   r   r   rowspancolspanr   r   r   r   )r   r   r   r   r   r[   r   )
r   Zdatatext	dataclassZdataidZ	datastyler   r   r   r   r   ra   ra   rb   adddata0  s    
zhtmltable.adddatac             C   s   | j S )N)Ztabletxt)r   ra   ra   rb   r   B  s    zhtmltable.__str__)r   r   r   r   )r   r   r   )r   r   r   Fr   r   N)r{   r|   r}   r   r   r   r   r   r   r   r   ra   ra   ra   rb   r      s   

	
r   c               @   s   e Zd ZdZd)ddZdd	 Zd
d Zdd Zedd Z	dd Z
edd Zdd Zdd Zedd Zdd Zedd Zd*dd Zd+d"d#Zd,d%d&Zed'd( Zd!S )-
latextablez*
  Class to make a return a LaTeX table
  rY   cr   hc             C   sr   i | _ | | | | | | | | | | | | | | g | _d| _	d| _
d| _d| j d< dS )zX
    Create a table environment with `ncolumns` columns positioned with `columnpos`
    r   r   z\begin{{table}}{{{floatval}}}
{preamble}\caption{{{caption}\label{{{label}}}}}
\begin{{tabular}}{{{columnalign}}}
{table}
\end{{tabular}}
{postamble}
\end{{table}}r   r   N)
_tableinfoset_ncolumnsset_columnalignset_caption	set_labelset_floatvalset_preambleset_postambler   r   r   _tableformat)r   ncolumnscolumnaligncaptionlabelfloatvalpreamble	postamblera   ra   rb   r   J  s    






zlatextable.__init__c             C   s
   || _ d S )N)	_ncolumns)r   r   ra   ra   rb   r   `  s    zlatextable.set_ncolumnsc                s   t  trTt | jkr"tdqx( D ] }t |ts(t |ts(tdq(W  | _nNt  tsht  trt dkr fddt	| jD | _q g| _ntdd
| j| jd< d S )	NzKError... number of column alignments is not equal to the number of columns.z/Error... columnalign must be a list of strings.rY   c                s   g | ]} qS ra   ra   ).0_)r   ra   rb   
<listcomp>r  s    z.latextable.set_columnalign.<locals>.<listcomp>z0Error... columnalign must be a list or a string.r   r   )r   listr   r   r   r   r   	TypeErrorZ_columnalignrangejoinr   )r   r   cara   )r   rb   r   d  s    



zlatextable.set_columnalignc             C   s   || j d< d S )Nr   )r   )r   r   ra   ra   rb   r   z  s    zlatextable.set_labelc             C   s
   | j d S )Nr   )r   )r   ra   ra   rb   r   ~  s    zlatextable.labelc             C   s   || j d< d S )Nr   )r   )r   r   ra   ra   rb   r     s    zlatextable.set_captionc             C   s
   | j d S )Nr   )r   )r   ra   ra   rb   r     s    zlatextable.captionc             C   s   || j d< d S )Nr   )r   )r   r   ra   ra   rb   r     s    zlatextable.set_floatvalc             C   s   || j d< d S )Nr   )r   )r   r   ra   ra   rb   r     s    zlatextable.set_preamblec             C   s
   | j d S )Nr   )r   )r   ra   ra   rb   r     s    zlatextable.preamblec             C   s   || j d< d S )Nr   )r   )r   r   ra   ra   rb   r     s    zlatextable.set_postamblec             C   s
   | j d S )Nr   )r   )r   ra   ra   rb   r     s    zlatextable.postambleFc             C   s6   g |d}| j | |  jd7  _|  jd7  _d S )N)r   	underlinerY   )r   r   r   r   )r   r   r   ra   ra   rb   r     s    
zlatextable.addrowNc             C   s(   |d kr| j dd nd| j| d< d S )NT)r   r   )r   r   )r   r   ra   ra   rb   addhrule  s    zlatextable.addhruler   c             C   sb   |d kr| j }|t| jd kr*tdn4d|i}|dkrJ||d< ||d< | j| d | d S )NrY   z%Warning... row index is out of range.r   r   multicolumnmcalignr   )r   r   r   r   r   )r   Zdatatxtr   r   r   Zrowdatara   ra   rb   r     s    
zlatextable.adddatac             C   s4  d| j d< xt| jD  ]\}}g }d}x||d D ]p}|d }t|tsTt|tr\t|}d|kr||d 7 }|d|d |d |f  q4|d	7 }||d
  q4W || jkrt	|dkr|d dkrt
d| t	|dkr| j d  d|d 7  < |d r| j d  d7  < qW | jjf | j | _| jS )Nr   r   r   r   r   r   z\multicolumn{%d}{%s}{%s} r   rY   r   r   Fz0Error... too many or too few inputs in row '%d'.&z\\
z\hline
)r   	enumerater   r   rg   r[   ri   r   r   r   r   r   r   r   Z
_tabletext)r   ir   r   Zncolsr   valra   ra   rb   r     s*    
"zlatextable.tabletext)rY   r   r   r   r   r   r   )F)N)r   r   N)r{   r|   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ra   ra   ra   rb   r   F  s"   



r   rY   c             C   s   |dkrt dtjd d}d|  }|d}| dkrVd|t|d t|d	 f S | d
krd|t|d t|d	 f S tdd S )N   z#Precision must be less than 16 d.p.)filez%.16eere   z%.*f&times;10<sup>%d</sup>r   rY   r   z"\ensuremath{%.*f\!\times\!10^{%d}}z+Error... 'otype' must be 'html' or 'latex'.)r   sysstderrsplitlowerrg   r[   r   )rk   prf   sZssplitra   ra   rb   rj     s    
rj   c             C   s"  t | tjr| d}n&t | tr6dd t| D }ntdt|dkr`|d |d nt|dkrv|d dt|d  d	}|	 d
krd|d 
d|d 
d|d 
d|d 
df S |	 dkrd|d 
d|d 
d|d 
d|d 
df S tdd S )N:c             S   s   g | ]}t |qS ra   )r   )r   vra   ra   rb   r     s    zra_str.<locals>.<listcomp>z(Error... ra must be a string or a float.rY   0rd   z%.2f.re   z-%s<sup>h</sup>%s<sup>m</sup>%s<sup>s</sup>.%sr   r   z%$%s^{\rm h}%s^{\rm m}%s^{\rm s}\!.%s$z0Error... 'otype' input must be 'html' or 'latex')r   sixstring_typesr   rg   r   r   r   r   r   zfill)rarf   rp   ssra   ra   rb   rq     s     


88rq   c             C   s6  t | tjr| d}n&t | tr6dd t| D }ntdt|dkr`|d |d nt|dkrv|d dt|d  d	}|	 d
krdt
dd|d d|d d|d d|d df S |	 dkr*dt
dd|d d|d d|d d|d df S tdd S )Nr   c             S   s   g | ]}t |qS ra   )r   )r   r   ra   ra   rb   r     s    zdec_str.<locals>.<listcomp>z)Error... dec must be a string or a float.rY   r   rd   z%.2fr   re   z%s&deg;%s'%s".%sz\+r   r   r   z$%s^{\circ}%s'%s''\!.%s$z+Error... 'otype' must be 'html' or 'latex'.)r   r   r   r   rg   r   r   r   r   r   resubr   )decrf   rs   r   ra   ra   rb   rt     s     


BBrt   a  
/* create body style */
body {
  font-family: "Avant Garde", Avantegarde, Verdana, Geneva, "Trebuchet MS", sans-serif;
}

/* create header name style */
h1 {
  margin: 0px 0px 0px 0px;
  padding: 4px 4px 8px 4px;
  font-size: 20px;
  font-weight: bold;
  letter-spacing: 0px;
  font-family: "Avant Garde", Avantegarde, Verdana, Geneva, "Trebuchet MS", Sans-Serif;
  background-color: darkolivegreen;
}

h1 > a:link {
  color: white;
  text-shadow: 2px 2px 2px #1c2310;
  text-decoration: none;
}

h1 > a:visited {
  color: white;
  text-shadow: 2px 2px 2px #1c2310;
  text-decoration: none;
}

h1 > a:hover {
  color: white;
  text-shadow: 2px 2px 2px #7fa046;
  text-decoration: none;
}

h2 {
  margin: 0 0 8px 0;
  padding: 4px 4px 8px 4px;
  font-size: 16px;
  font-weight: bold;
  font-family: "Avant Garde", Avantegarde, Verdana, Geneva, "Trebuchet MS", Sans-Serif;
  text-shadow: 1px 1px 1px #333300;
  background-color: #666600;
  color: white
}

/* create footer style */
#footer {
  border-top: 1px solid #999;
  padding: 15px;
  font-family: monospace;
  text-align: left;
}

/* create a class for a posterior plot image */
.posplot{
  height: 400px;
  border: 0px solid #999;
}

/* create a class for a full joint posterior plot image */
.jointplot{
  height: 600px;
  border: 0px solid #999;
}

/* create a class for a background distribution plot image */
.backgroundplot{
  height: 400px;
  border: 0px solid #999;
}

/* create a class for a Bk data plot */
.dataplot{
  height: 275px;
}

/* create class for an amplitude spectral density plot */
.asdplot{
  height: 275px;
}

/* create class for an MCMC chain plot */
.chainplot{
  height: 275px;
}

/* style for links list */
.pagelinks {
  background-color: darkolivegreen;
  font-family: "Avant Garde", Avantegarde, Verdana, Geneva, "Trebuchet MS", Sans-Serif;
  overflow: hidden;
  color: white;
  font-size: 16px;
  padding: 0px 0px 3px 3px;
  margin: 0px 0px 8px 0px;
  text-shadow: 2px 2px 2px #1c2310;
}

div.pagelinks a:link {
  color: white;
  text-shadow: 2px 2px 2px #1c2310;
  text-decoration: none;
}

div.pagelinks a:visited {
  color: white;
  text-shadow: 2px 2px 2px #1c2310;
  text-decoration: none;
}

div.pagelinks a:hover {
  color: white;
  text-shadow: 2px 2px 2px #7fa046;
  text-decoration: none;
}

/* pulsar parameter table class */
.pulsartable {
  background-color: floralwhite;
  border: 0px solid;
  border-radius: 4px;
  box-shadow: 2px 2px 2px 2px #d8d8d8;
  -webkit-box-shadow: 2px 2px 2px 2px #d8d8d8;
  -moz-box-shadow: 2px 2px 2px 2px #d8d8d8;
  padding: 4px 4px 4px 4px;
}

/* upper limits table class */
.limitstable {
   background-color: floralwhite;
   border: 0px solid;
   border-radius: 4px;
   box-shadow: 2px 2px 2px 2px #d8d8d8;
   -webkit-box-shadow: 2px 2px 2px 2px #d8d8d8;
   -moz-box-shadow: 2px 2px 2px 2px #d8d8d8;
   padding: 4px 4px 4px 4px;
}

/* background evidence table class */
.evidencetable {
  background-color: floralwhite;
  border: 0px solid;
  border-radius: 4px;
  box-shadow: 2px 2px 2px 2px #d8d8d8;
  -webkit-box-shadow: 2px 2px 2px 2px #d8d8d8;
  -moz-box-shadow: 2px 2px 2px 2px #d8d8d8;
  padding: 4px 4px 4px 4px;
}

/* set defaults for table data and table headers */
table{
  border: 0px;
  border-collapse: collapse;
}

td{
  padding: 0px 8px 0px 8px;
  border: 0px;
}

th{
  padding: 0px 8px 0px 8px;
  border: 0px;
}

.leftborder{
  border-left: 1px solid #000;
}

.rightborder{
  border-right: 1px solid #000;
}

.topborder{
  border-top: 1px solid #000;
}

.bottomborder{
  border-bottom: 1px solid #000;
}

/* set text colour classes for detectors */
.H1{
  color: red;
}

.H2{
  color: cyan;
}

.L1{
  color: green;
}

.V1{
  color: blue;
}

.G1{
  color: magenta;
}

.Joint{
  color: black;
  font-weight: bold;
}
a!  
/* create body style */
body {
  font-family: Verdana, Geneva, "Trebuchet MS", sans-serif;
}

/* create footer style */
#footer {
  border-top: 1px solid #999;
  padding: 15px;
  font-family: monospace;
  text-align: left;
}

/* create link style */
a:link{
  color: #000000;
  text-decoration: none;
}

a:visited{
  color: #000000;
  text-decoration: none;
}

a:hover{
  color: #000000;
  text-decoration: none;
  text-shadow: 2px 2px 2px #ccc;
}

/* set defaults for table data and table headers */
table{
  border: 0px;
  border-collapse: collapse;
}

td{
  padding: 0px 8px 0px 8px;
  border: 0px;
}

th{
  padding: 0px 8px 0px 8px;
  border: 0px;
}

.leftborder{
  border-left: 1px solid #000;
}

.rightborder{
  border-right: 1px solid #000;
}

.topborder{
  border-top: 1px solid #000;
}

.bottomborder{
  border-bottom: 1px solid #000;
}

/* set text colour classes for detectors */
.H1{
  color: red;
}

.H2{
  color: cyan;
}

.L1{
  color: green;
}

.V1{
  color: blue;
}

.G1{
  color: magenta;
}

.Joint{
  color: black;
  font-weight: bold;
}
)rd   re   )rY   re   )re   )re   )r   
__future__r   r   numpyrh   r\   r   Zlalapps.pulsarpputilsr   r   ZparamlatexdictZparamhtmldictrc   rn   ro   r~   r   r   r   r   rj   rq   rt   Zresult_page_cssZresults_table_cssra   ra   ra   rb   <module>   s  
a8kF 


 m\