3
_'                 @   s   d Z dd Zdd ZdS )a  
****************************************        
***   Program for the ray tracing    ***         
****************************************
This code is part of the LIFELINE program.

Copyright (C) 2020-2021 University of Liege (Belgium)
Enmanuelle Mossoux (STAR Institute)
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public
License as published by the Free Software Foundation, either version 3 of the License, or any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
details.
You should have received a copy of the GNU General Public License along with this program.
If not, see <http://www.gnu.org/licenses/>.

Run: from raytracing import RT
     ray_tracing=RT(ndeltaZZ, xx, yy, zz, deltaZZ, deltaX, deltaY, deltaZ, x_vec, y_vec, z_vec, d, cote_cd, kT_all, sigma_all, Mdot1, Mdot2, R1, R2, Teff_1, Teff_2, dwind_prim, dwind_sec, dir_obs, mp, zt1, pt1, yt1, zt2, pt2, yt2, treecdw1, treecdw2, tree, treevec)
c             C   s  dd l }|j}|j||  }|dk r0|t| }|j|| d }d}t|dkrt||k r|| |j|d |d  d  }	|| |j|d |d  d  }
||jd|d |d    |jtt||
 t||	 gtt||
 t||	 g  }t||kr d| |d  }t||krd| |j|| | d |j|d |d  d   }|dk r|d| | }d| |j|d |d  d  | }t|S )N    g       @g           g      ?g      ?)	mathpiatanabstansqrtlogmaxmin)zzptau0Rr   r   testZalptaux1x2Zterme r   3/local/network/htdocs/Lifeline/codes3/raytracing.pytauX   s(    ""\8
&r   c)       L      C   s  dd l })dd l}*ddlm}+ g },|)j}-|*jt| d }.|*j||.|  ||.|  ||.|  gj}/d}0x>t	t| D ],}1|| }|| }|| }|}2|'}3|(}4||kr|}2|%}3|&}4|2|3ko|2|4k r|#j
|| || || ggd d }5|$j
|| || || gg\}6}7|6d }6|7d }7||5 dkr d}8|}9|}:|!j
||7 | |	|7 | |
|7 | gg\};}<|;d };d}=|;|6krd}=|j
|| |)j|d |d  | gg\}>}?|?d }?|*j|j|? d d |j|? d	 d  }@|d
 }Ad|A d|A |:|*j|d |d  |d   d   }Bnd}8|}9|}:|"j
||7 | |	|7 | |
|7 | gg\};}<|;d };d}=|;|6krd}=|j
|| | |)j|d |d  | gg\}>}?|?d }?|*j|j|? d d |j|? d	 d  }@|d
 }Ad|A d|A |:|*j|| d |d  |d   d   }B|=dkr|*j|||g|*jj|*j|||g }C|,j||5  |,jt||5 t|*j|C|d| d    |0d }0|=dkr|8dk
r(|,j|B |9t||0d |  |)j|d | d  d|: d|- |@ |: d | d  }D|@dk rd}D|,j|D |"j
|/t|0d d d d f \}E}>|*j|Edd  |Edd  dk d }Ft|Fdkr d|A d|A |:|*j||/t|0d d df  d |/t|0d d df d  |/t|0d d df d   d   }Gx8t	tt|Gd D ]}H|,j|G|Hd   |j
||/t|0d |Hd  df  | |)j|/t|0d |Hd  df d |/t|0d |Hd  df d  | gg\}>}?|?d }?|*j|j|? d d |j|? d	 d  }I|,j|9t||0|Hd  d |  |)j|d | d  d|: d|- |I |: d | d   qW P |*j|Fdd  |Fdd  dkd }Jt|Jdkr.|Fd t|/t|0d df d kr.d|A d|A |:|*j||/t|0d d df  d |/t|0d d df d  |/t|0d d df d   d   }Gx8t	tt|Gd D ]}H|,j|G|Hd   |j
||/t|0d |Hd  df  | |)j|/t|0d |Hd  df d |/t|0d |Hd  df d  | gg\}>}?|?d }?|*j|j|? d d |j|? d	 d  }I|,j|9t||0|Hd  d |  |)j|d | d  d|: d|- |I |: d | d   qW P t|JdkrF|Fd }Kn|F|Jd  }Kd|A d|A |:|*j||/t|0d t|K|0 df  d |/t|0d t|K|0 df d  |/t|0d t|K|0 df d   d   }Gx8t	tt|Gd D ]}H|,j|G|Hd   |j
||/t|0d |Hd  df  | |)j|/t|0d |Hd  df d |/t|0d |Hd  df d  | gg\}>}?|?d }?|*j|j|? d d |j|? d	 d  }I|,j|9t||0|Hd  d |  |)j|d | d  d|: d|- |I |: d | d   qW |K|0 d }0|8dkr|,j|B |9t||0d |  |)j|d |d  d|: d|- |@ |: d | d  }D|@dk 
rd}D|,j|D |!j
|/t|0d d d f \}E}>|*j|Edd  |Edd  dk d }Ft|Fdkrd|A d|A |:|*j|/t|0d d df d |/t|0d d df d  |/t|0d d df d   d   }Gx4t	tt|Gd D ]}H|,j|G|Hd   |j
|/t|0d |Hd  df | |)j|/t|0d |Hd  df d |/t|0d |Hd  df d  | gg\}>}?|?d }?|*j|j|? d d |j|? d	 d  }I|,j|9t||0|Hd  d |  |)j|d |d  d|: d|- |I |: d | d   qW P |*j|Fdd  |Fdd  dkd }Jt|Jdkr|Fd t|/t|0d df d krd|A d|A |:|*j|/t|0d d df d |/t|0d d df d  |/t|0d d df d   d   }Gx4t	tt|Gd D ]}H|,j|G|Hd   |j
|/t|0d |Hd  df | |)j|/t|0d |Hd  df d |/t|0d |Hd  df d  | gg\}>}?|?d }?|*j|j|? d d |j|? d	 d  }I|,j|9t||0|Hd  d |  |)j|d |d  d|: d|- |I |: d | d   qW P t|Jdkr|Fd }Kn|F|Jd  }Kd|A d|A |:|*j|/t|0d t|K|0 df d |/t|0d t|K|0 df d  |/t|0d t|K|0 df d   d   }Gx4t	tt|Gd D ]}H|,j|G|Hd   |j
|/t|0d |Hd  df | |)j|/t|0d |Hd  df d |/t|0d |Hd  df d  | gg\}>}?|?d }?|*j|j|? d d |j|? d	 d  }I|,j|9t||0|Hd  d |  |)j|d |d  d|: d|- |I |: d | d   qnW |K|0 d }0|0| krvP qvW |,S )Nr   )KDTreeg      ?   inoutr   uxuyghh!w>g?g333333?gffffff?g?g     @@g      @g      Y@g           g      >@g       @r   r   r   r   r   r   r   )r   numpyscipy.spatialr   r   arangeintarrayTrangequeryr   iloclinalgnormappendr   dotr   wherelen)LndeltaZZxxyyr   deltaZZdeltaXdeltaYdeltaZx_vecy_vecz_vecdcote_cdkT_all	sigma_allMdot1Mdot2R1R2Teff_1Teff_2tree_prim_windtree_sec_wind
dwind_prim	dwind_secdir_obsmpzt1pt1yt1zt2pt2yt2treecdw1treecdw2treetreevecxmin1xmax2ymin1ymax2r   npr   ray_tracingr   Zrange_pointsZrayZincr_zz_Z	test_distZmin1Zmax2	ind_closeZdistvecZind_closevecZ	cote_chocZMdotradiusZdistcdwZind_closecdwinoutrienZ
ind_close2ZvwindZT0ZTwindZrdeltanZ
append_valZ
dist_resteZ	index_negZTwind_resteZirestZ
vwind_restZ
index_neg2Zindex_reprendrer   r   r   RT-   s   *&".
.*8.
2*:
(.


L

&&vz*`&4vz*`
z*`

L

"&rv*`&4rv*`
v*`r]   N)__doc__r   r]   r   r   r   r   <module>   s   