ó
ÉâQc           @   s'  d  Z  d d l Td d l Td d l Td d l m Z m Z m Z m Z d d l	 m
 Z
 m Z d d l m Z d d l Z d d l m Z d d l m Z d d l Td d	 l m Z m Z m Z m Z d d
 l m Z m Z d d l m Z m Z m Z d( Z d) Z  d d$ „ Z" d% „  Z# d& d' „ Z$ d S(*   s›      
    Algorithm for integrated data analyze of the visible light signal from GOLEM tokamak. 
    Many different diagnotics with different wavelength resolution, time resolution, time shift error, 
    and signal error is availible on the tokamak.This algirithm puts them together and finds simplest 
    solution which corespondes to the measured signal. Usually most of the wavelength information is provided 
    by spectrometer and the higth freqency part is provided by fast cameras and photodiodes. 
    The problem is solved as least squares fit of the data by nonparametrical model sim maximal simplisity. 
    
	Autor: Tomas Odstrcil
	date:12.12.2012
	
	

iÿÿÿÿ(   t   *(   t   choleskyt   analyzet   cholesky_AAtt   CholmodError(   t   fftconvolvet   gaussian(   t   linalgN(   t   sparse(   t   repmat(   t   normt   invt   qrt   pinv(   t   save_advt   load_adv(   t   Resamplet   upsample_smootht   GapsFillingt   HIt   OIt   OIIt   OIIIt   HeIt   CIIt   CIIIt   NIt   NIIt   NIIIt   Mystery1s   CIV+NIV+OIVs   b-s   r-s   r--s   r-.s   g-s   k--s   k-.s   y-s   y--s   y-.s   c-s   m:c   	      C   sÂ   t  |  ƒ } | d  k r* t j | ƒ } n  t | ƒ t | d ƒ t | ƒ } t j | ƒ } d t | ƒ } | t |  | ƒ } t	 |  | |  | | j
 ƒ } | | | d 9} | t | ƒ f S(   Ni   i   (   t   lent   Nonet   npt   identityt   diagt   matrixR   R   t   sumt   doublet   Tt   sqrt(	   t   valuest   errort   correlMatrixt   nt   covarMatrixt   icovarMatrixt   st   mt   chi2(    (    sW   /srv/fyzport/fyzika/golem/velin/includes/analysis/Radiation/1212Impurities_TO.ON/IDA.pyt   WeightedMean'   s    $c         C   s€  t  |  d ƒ } t | | f ƒ } t | d f ƒ } xv t | | |  ƒ D]b \ } } } t | ƒ t | d ƒ t | ƒ }	 t j |	 ƒ }
 | |
 7} | t |
 | ƒ j 7} qG Wt j | ƒ } t | | ƒ j } d } xy t | | |  ƒ D]e \ } } } t | ƒ t | d ƒ t | ƒ }	 t j |	 ƒ }
 | t	 | | | | |
 j ƒ 7} qç W| | t  |  ƒ 9} t
 | ƒ t t | ƒ ƒ f S(   Ni    i   i   (   R   t   zerost   zipR"   R#   R   R   t   dotR&   R%   t   squeezeR'   (   t   vectorst
   vec_errorst   correlMatrixesR+   R.   t   xt   cort   errt   vect   covt   icovR0   (    (    sW   /srv/fyzport/fyzika/golem/velin/includes/analysis/Radiation/1212Impurities_TO.ON/IDA.pyt   WeightedMeanVec5   s"    "$
"$'i
   c   h         s9  d GHt  d ƒ \ }  } | \ } } }	 }
 } | \ } } } } } } } } t |  |	 d  d  … d f |	 d  d  … d f ƒ }	 x­ t t | | ƒ ƒ D]– \ } \ } } t |  | d  d  … d f | d  d  … d f d d d d ƒ| | <t |  | d  d  … d f | d  d  … d f d d d d ƒ| | <q’ Wt | d ƒ } t | d ƒ } t |
 d ƒ } t | ƒ ‰  t t | ƒ ƒ | } t | ˆ  f ƒ } xT t t | | ƒ ƒ D]= \ } \ } } t	 | d |	 | | ƒ | d  d  … | f <q£Wt
 ƒ  } t
 ƒ  } t
 ƒ  } xt t | | | ƒ ƒ D]\ } \ } }  }! t t | ƒ ƒ sft |  ƒ \ }  }" t | ƒ \ } }" n  t | ƒ }# t | | | d ƒ }$ t |  ƒ }% t |! | | | d |# d |$ ƒ\ }& }' t |! |  | | d |# d |$ d |% d |% ƒ\ }& }( | j |& ƒ | j |' ƒ | j |( ƒ qWt | | | f ƒ }) xQ t |
 j ƒ D]@ \ } }* t |* d	 d d
 t d | ƒ\ |) | d  d  … f <}" qCWt	 | j |) ƒ }+ t	 | j |
 j ƒ }, t ˆ  ƒ }- t ˆ  ƒ }. xƒ t t | |+ ƒ ƒ D]l \ } \ }/ }0 t |/ |0 d  d  d … d d ƒ}1 t |1 ƒ d t |1 ƒ |- | <t |0 ƒ t |/ ƒ |. | <qÜW|- | }2 | j d d ƒ t j | ƒ }3 |3 j ƒ  }4 t t j d |2 f ƒ t j | | f ƒ d |4 ƒ\ }5 }6 | |5 | | d 7} |2 |5 8}2 t  t ˆ  ƒ |2 f | |6 t! ˆ  ƒ f |4 d d  … d d  … f |4 d d  … d d  … f f ƒ \ }2 }7 t" |2 d d ƒ}2 t" |7 d d ƒ}7 xê t t |2 |7 | | | |+ ƒ ƒ D]Ç \ } \ }- }8 }/ }9 }: }0 t# |8 |5 ƒ }; | | c |- 7<| | c |. | 9<|- |5 7}- t |: |: |- |/ ƒ |. | |/ (t |: |: |- |9 ƒ |. | |9 (|9 d c |; t$ t |9 ƒ ƒ | 7)|: |5 8}: q‡W| | }< |< | }= t |= ƒ }> t% |
 dZ d d ƒ}? t" | d t& ƒ}@ t% |@ d[ d d ƒ}@ t' t j( |? |@ f ƒ ƒ }A t% | d\ d d ƒ}B t" | d t& ƒ}C t% |C d] d d ƒ}C t' t j( |B |C f ƒ ƒ }D |D d 7}D t) t* |< |< ƒ t! d | f ƒ | d d ƒ}E t) | j t+ | | d d ƒd d ƒ}F t( |E |F f ƒ }G t, d |D d ƒ }H |H |G }G |H |A }A | d }& |& | k  |& | k }I t' t- |I d | ƒ ƒ }I t! d |= f ƒ }J |J d d  d  … f c d 9<d |J d |I f <t |I ƒ d }K t. |K d |K ƒ }L |L t |L ƒ :}L t |J d d  d  … f |L d d ƒ|J d d  d  … f <d |J d d  d  | | … f <t/ |J d^ |= |= d d ƒ}M |M j |M }M |M j |M }N |G j |G }O t! |= ƒ }P t0 |O |N ƒ }Q xó t1 d ƒ D]å }R |M j t j/ |P d |= |= ƒ |M }P d }S x‡ t1 d ƒ D]y } |Q j2 |O |S |P ƒ t' |Q |G j |A ƒ ƒ }T t3 |G |T |A ƒ d t |A ƒ }U |S G|U GH|U d k  rÔ	|S d 9}S q\	Pq\	Wt4 |T ƒ }V d |V |V d k  <t |V ƒ |V }P q 	W|G |T }W |W |A }X t3 |X ƒ d t |A ƒ }U d  G|U GHt, |D d ƒ }Y t% |T d | f d d ƒ}T t5 d! |& |T ƒ t6 d" d  d# d_ d& d' d( d) d* d+ ƒ }Z |Z j8 d, ƒ }[ xF t1 | ƒ D]8 } t9 |& d- |T d  d  … | f t: | d. t; | ƒq½
W|[ j< d/ d/ d0 |U d1 d d2 d3 d4 |[ j= d5 d) ƒt> d6 d7 d8 t ƒ }\ |\ j? ƒ  j@ d9 ƒ tA d: | d- d; d< d= d> ƒ tA d: | d- d; d< d= d> ƒ |[ jB d? ƒ |[ jC d@ ƒ |[ jD dA ƒ |[ jE | d- d | d- d ƒ |Z jF dB dC dA ƒ|Z jG ƒ  |Y |W | |  }] t% |] | d f d d ƒ}] t3 |X |<  ƒ d |< }U dD }^ |Z j8 d, ƒ }[ xN t1 | ƒ D]@ } t9 | d- |] | d  d  … f | |^ t: | d. t; | ƒqXW|[ j< d/ d/ d0 |U d1 d d2 d3 d4 |[ j= d5 d) ƒ|[ jB d? ƒ |[ jC dE ƒ t> d6 d7 d8 t ƒ }\ |\ j? ƒ  j@ d9 ƒ xe t1 | ƒ D]W } tH | d- |
 d  d  … | f | |^ dF | d  d  … | f dG t: | d dH ƒqW|[ jD dA ƒ |[ jE | d- d | d- d ƒ |Z jF dI dC dA ƒ|Z jG ƒ  |Y |W }_ tI dJ ƒ ‰ ‡  ‡ f dK †  t1 ˆ  d ƒ Dƒ }` |Z j8 d, ƒ }[ t3 |X |< ƒ d t |A ƒ |< }U d }a | | }b x,t | | | | | | |` ƒ D]\ }! } }c }d }e }f }g t9 |d d- |e dL |g dM dN ƒtJ t jK |! d- |! d  d  d … d- g ƒ t jK | |c | |c d  d  d … g ƒ dO dP dQ |g dR dS ƒt | ƒ |a k rt | ƒ n |a }a t9 |! d- |_ |b |b t | ƒ !|b dT dU dL |g d. |f ƒ|b t | ƒ 7}b q[W|[ j< d/ d/ d0 |U d1 d d2 d3 d4 |[ j= d5 d) ƒt> d6 d7 d8 t ƒ }\ |\ j? ƒ  j@ d9 ƒ |[ jE | d- d | d- d ƒ |[ jL |a dV |a dW ƒ |[ jB d? ƒ |[ jC dX ƒ |Z jF dY dC dA ƒ|Z jG ƒ  d  S(`   Ns	   IDA starts   ./data/componentsi    i   t   leftt   rightt   t_mint   t_maxi   t   sampleIntegt   upsampleiÿÿÿÿt   modet   samei   R*   t   ndmint   ordert   Ft   copyt   Cg-Cëâ6?t   formatt   csrt   diai2   i   i   g     ˆÃ@gÍÌÌÌÌÌô?gü©ñÒMbP?R0   s   ./data/IDA_ions_projectionst   numt   figsizei   i   t   dpiiP   t	   facecolort   wt	   edgecolort   kio   g     @@t   labelgÍÌÌÌÌÌì?s   $\chi^2/doF = %2.1f$t   horizontalalignmentt   verticalalignmentt   bottomt	   transformt   backgroundcolort   locs
   upper leftt   fancyboxgffffffæ?R9   t   lss   -.t   ct   gs   t [ms]s   relative intensity [-]t   tights!   ./graphs/IDA_ions_projections.pngt   bbox_inchesgš™™™™™¹?s   shift+intensity [a.u.]t   yerrt   fmtt   .s"   ./graphs/spectrometer_retrofit.pngt   gist_rainbowc         3   s#   |  ] } ˆ | d  ˆ  ƒ Vq d S(   g      ð?N(    (   t   .0t   i(   t   n_photodiodest   cm(    sW   /srv/fyzport/fyzika/golem/velin/includes/analysis/Radiation/1212Impurities_TO.ON/IDA.pys	   <genexpr>w  s    t   colort	   linestylet   -t   alphagš™™™™™Ù?t   fct   ecR   g      Y@s   --i   gš™™™™™ñ?s   intensity [a.u.]s!   ./graphs/photodiodes_retrofit.png(   iÿÿÿÿi   (   iÿÿÿÿi   (   iÿÿÿÿi   (   iÿÿÿÿi   (   i    i   (   i   i   (M   R   t   interpt	   enumerateR3   t   sizeR   t   meant   difft   emptyR4   t   listt   allt   isfiniteR   t   amint   amaxR   t   appendR&   R   t   TrueR2   R   t   argmaxR$   t   insertR   t
   block_diagt   todenseR1   R    t   hstackR?   t   onest   arrayt   hypott   abst   reshapet   FalseR5   t   vstackt   kront   eyeR!   t   diagsR	   R   t   spdiagsR   t   ranget   cholesky_inplaceR
   RK   R   t   figureR   t   add_subplott   plott   stylest   namest   textt	   transAxest   legendt	   get_framet	   set_alphat   axvlinet
   set_xlabelt
   set_ylabelt   axist   set_xlimt   savefigt   clft   errorbart   get_cmapt   fillt   concatenatet   set_ylim(h   t
   wavelengtht   plasma_startt
   plasma_endt   SpectrometerDatat   PhotodiodesDataRE   t
   componentst	   spec_tvect   spec_tvecErrort   SpectrSensitivt
   projectiont   projectionErrort	   photoDatat
   photoErrort
   correlListt	   photoTvect   photoTvecPrecist   photoFiltert   photoSensitivityt
   photoLabelRi   t   pfiltert   rsPhotodiodt
   n_featurest   n_componentst   n_measurementt   dtt   FilterProjMatrixt   photoData_downt   photoError_downt   photoTvec_downt   pdatat   perrort   ptvect   _RB   RC   t   minerrt   tvect   dataR;   t   upsampled_projt   projt   PhotodFromSpect   PhotodFromSpec2t   shiftt	   amplitudet   photodt   spectt   convolutiont   tshiftt   MR*   t   spec_tshiftt   spec_tshift_errt
   tshift_errt	   shift_errt   photodEt   photoTt	   err_shiftt   n_bt   n_xR9   t   b1t   b2t   bt   e1t   e2t   et   ReductMatrixt
   FiltMatrixR&   t   iEt   interv_noplasmat	   diag_datat   stdt	   gauss_wint   Dt   DDt   TTt   Wt   factort   jt   lamRa   R0   t   g_tmpt   ft   residt   Et   figt   axt   legt	   retroSpect   spacet
   retroDiodsRl   t   ymaxt   indext   perrt
   ptvec_fullt
   pdata_fullt   labt   pc(    (   Rj   Rk   sW   /srv/fyzport/fyzika/golem/velin/includes/analysis/Radiation/1212Impurities_TO.ON/IDA.pyt   IntegLightAnalyzU   sr   2(BF(/			.(!8("

A=
$


.	


5#"	

	'6 
>(- 

#"
:**$9 (   R   R   R   R   R   R   R   R   R   R   R   s   CIV+NIV+OIV(   s   b-s   r-s   r--s   r-.s   g-s   k--s   k-.s   y-s   y--s   y-.s   c-s   m:(%   t   __doc__t   numpyt   matplotlib.pyplott   SpectrometerControlt   scikits.sparse.cholmodR   R   R   R   t   scipy.signalR   R   R   t   timet   scipyR   t   numpy.matlibR	   t   scipy.sparset   scipy.linalgR
   R   R   R   t   pygolem_lite.modulesR   R   t   CalcIonProjectionsR   R   R   R•   R”   R   R1   R?   R  (    (    (    sW   /srv/fyzport/fyzika/golem/velin/includes/analysis/Radiation/1212Impurities_TO.ON/IDA.pyt   <module>   s$   


"
"	 