
    ]zi0W                     p   S SK r S SKrS SKrS SKrS SK7  S SK7  S SK7  S SKJ	r
Jr  S SKJr  S SKJr  S SKJr  S SKrS SKJr  S SKJr  S SKJr  S SKrS S	KJr  S SKrS SKr\R@                  " S
5        \RB                  RE                  SSSSSS.5         " S S\#5      r$ " S S\%5      r&S r'S r(S r)S r*S r+\RX                  " SS9S 5       r-\.S:X  aa  \" SSS9r/\/Ra                  5       r1\2" \Rf                  5      r4\$" 5       r5\5Rm                  5         \Rn                  " \4Rq                  5       5        gg)    N)*)FigureCanvasQTAggNavigationToolbar2QT)Figure)Pool)repeat)ArgumentParser)dateatan2ignorez#434343white)zfigure.facecolorzaxes.facecolorzaxes.labelcolorzxtick.colorzytick.colorc                       \ rS rSrSS jrS rS rS rS rS r	S	 r
S
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rSrg)MainGUI   Nc                     [         R                  X5        [        R                  " 5       S:  a  [        S5        [        eU R                  5         g )Ni `kzKPlease download a new version from https://streubel.unl.edu/STARTSMART.html)QMainWindow__init__timeprint
SystemExitinitUIselfparents     DiffusionLimitedAggregation.pyr   MainGUI.__init__   s6    T*99;#_`    c                    [        5       U l        U R                  [        S5      5        U R	                  S5        U R                  5         [        5       U l        U R                  R                  R                  U R                  5        U R                  R                  R                  U R                  5        U R                  5         U R                  5         U R                  R!                  S5        [#        5       nUR%                  U R                  5        UR%                  U R&                  5        U R                  R)                  U5        U R+                  S5        U R-                  U R                  5        U R/                  SS5        g )Nzicon.pngzQTextEdit, QLineEdit {background: '#707070'; color: white;} QGroupBox {border: 1px solid gray; border-radius: 5px; margin-top: 8px;} QGroupBox:title { subcontrol-origin: margin; subcontrol-position: top center; padding: 0 3px 0 3px; }P   u2   ⌘ Streubel Lab Diffusion-limited Aggregation ⌘i  i  )QWidgetMainsetWindowIconQIconsetStyleSheetinitParameters
CalcThreadCalcT
SendPointsconnectCalcTPoints_changed
SendStatusCalcTStatus_changedCreateParameterTabCreateDataVisualizationParameterTabsetFixedHeightQVBoxLayout	addWidgetDataVisualization	setLayoutsetWindowTitlesetCentralWidgetsetMinimumSize)r   vboxs     r   r   MainGUI.initUI!   s   I	5,-  H  	I\


%%d&>&>?

%%d&>&>?!$$&((,}t(()t--.		D!PQdii(D%r   c                 4   SS/SS//U l         SU l        / SQU l        SU l        SU l        SU l        S	U l        S
U l        SU l        SU l	        SU l
        SU l        SS/U l        / / / /U l        / / / /U l        / / / /U l        SU l        SU l        SU l        g )Ng?g?g333333?z[.4,.9],[.6,.9])r      r   r<      	     i  i(#  r   g?i  
      )p0Listp0ListInputDriftNoiseDiameter
Threshold2NNminNIter	RandDriftRandp0Randp0Dist2GridSizeFrozenPoints
DiffPointsp0Pointsindex
SliderStep	PointSizer   s    r   r&   MainGUI.initParameters8   s    2w2w',

	
S	2Jb*Br

r   c                     [        5       U l        [        5       n[        S5      U l        U R                  R                  S5        U R                  R                  S5        UR                  U R                  5        [        5       n[        S5      n[        U R                  5      U l        U R                  R                  S5        UR                  U5        UR                  U R                  5        [        S5      U l        U R                  R                  U R                   5        [#        5       nUR%                  U5        UR                  U R                  5        [        5       n[        S5      n[        ['        U R(                  S   5      5      U l        U R*                  R-                  [/        S	S
S5      5        U R*                  R                  S5        [        ['        U R(                  S   5      5      U l        U R0                  R-                  [/        S	S
S5      5        U R0                  R                  S5        [        ['        U R(                  S   5      5      U l        U R2                  R-                  [/        SSS5      5        U R2                  R                  S5        UR                  U5        UR                  U R*                  5        UR                  U R0                  5        UR                  U R2                  5        [        S5      U l        U R4                  R                  U R6                  5        [#        5       nUR%                  U5        UR                  U R4                  5        [        5       n[        S5      n	[        ['        U R8                  5      5      U l        U R:                  R-                  [/        SS
S5      5        U R:                  R                  S5        UR                  U	5        UR                  U R:                  5        [        5       n
[        S5      n[        ['        U R<                  5      5      U l        U R>                  R-                  [A        SS5      5        U R>                  R                  S5        U
R                  U5        U
R                  U R>                  5        [#        5       nUR%                  U5        UR%                  U
5        [        5       n[        S5      n[        ['        U RB                  5      5      U l"        U RD                  R-                  [A        SS5      5        U RD                  R                  S5        [        ['        U RF                  5      5      U l$        U RH                  R-                  [A        SS5      5        U RH                  R                  S5        UR                  U5        UR                  U RD                  5        UR                  U RH                  5        [        5       n[        S5      n[        ['        U RJ                  S   5      5      U l&        U RL                  R-                  [A        SS5      5        U RL                  R                  S5        [        ['        U RJ                  S   5      5      U l'        U RN                  R-                  [A        SS5      5        U RN                  R                  S5        UR                  U5        UR                  U RL                  5        UR                  U RN                  5        [#        5       nUR%                  U5        UR%                  U5        [        5       n[        S5      n[        ['        U RP                  5      5      U l)        U RR                  R-                  [A        SS5      5        U RR                  R                  S5        UR                  U5        UR                  U RR                  5        [        5       n[        S5      n[        ['        U RT                  5      5      U l+        U RV                  R-                  [A        SS5      5        U RV                  R                  S5        UR                  U5        UR                  U RV                  5        [#        5       nUR%                  U5        UR%                  U5        [        U R                  5      nUR%                  U5        URY                  [[        S
S
[\        R^                  R`                  [\        R^                  Rb                  5      5        UR%                  U5        URY                  [[        S
S
[\        R^                  R`                  [\        R^                  Rb                  5      5        UR%                  U5        URY                  [[        SS
[\        R^                  R`                  [\        R^                  Rb                  5      5        UR%                  U5        URY                  [[        SS
[\        R^                  R`                  [\        R^                  Rb                  5      5        UR%                  U5        URY                  [[        SS
[\        R^                  R`                  [\        R^                  Rb                  5      5        UR%                  U5        U R                  Rd                  Rg                  U Rh                  5        U R                  Rj                  Rg                  U Rl                  5        U R                  Rn                  Rg                  U Rp                  5        U R*                  Rj                  Rg                  U Rr                  5        U R0                  Rj                  Rg                  U Rt                  5        U R2                  Rj                  Rg                  U Rv                  5        U R4                  Rn                  Rg                  U Rx                  5        U R:                  Rj                  Rg                  U Rz                  5        U R>                  Rj                  Rg                  U R|                  5        U RD                  Rj                  Rg                  U R~                  5        U RH                  Rj                  Rg                  U R                  5        U RR                  Rj                  Rg                  U R                  5        U RL                  Rj                  Rg                  U R                  5        U RN                  Rj                  Rg                  U R                  5        U RV                  Rj                  Rg                  U R                  5        g )NRund   TzSites:   zRandomize siteszDrift (x,y,radial):r   ir@   r=   (   r<   r>   zRandomize influxzNoise:zStick distance:zParticles (max,min):i'  z
Grid size:r?   zIterations:i_ 2   zPoint size:   )E	QGroupBoxr0   QHBoxLayoutQPushButton	RunButtonsetMaximumWidthsetCheckabler3   QLabel	QLineEditrC   p0ListInputEditsetFixedWidth	QCheckBoxButtonRandp0
setCheckedrL   r2   	addLayoutstrrD   
DriftxEditsetValidatorQDoubleValidator
DriftyEditDriftRadialEditButtonRandDriftrK   rE   	NoiseEditrG   ThresholdEditQIntValidatorrH   NEditrI   NminEditrN   GridSizexEditGridSizeyEditrJ   	NIterEditrT   PointSizeEditaddSpacerItemQSpacerItemQSizePolicyPolicyMinimum	Expandingclickedr*   rX   textChangedp0ListInput_changedtoggledUpdateRandp0Driftx_changedDrifty_changedDriftRadial_changedUpdateRandDriftNoise_changedThreshold2_changed	N_changedNmin_changedNIter_changedGridSizex_changedGridSizey_changedPointSize_changed)r   hbox0hbox2p0ListLabelvbox1hbox3
DriftLabelvbox2hbox4
NoiseLabelhbox5ThresholdLabelvbox3hbox6NLabelhbox7GridSizeLabelvbox4hbox8
NIterLabelhbox9PointSizeLabelvbox5hboxs                           r   r.   MainGUI.CreateParameterTabM   s6	   %K$U+&&s+##D)'X&()9)9:**3/$,,-%&78$$T[[1))*12
#C

1$67$$%5c"Q%?@%%b)#C

1$67$$%5c"Q%?@%%b)(TZZ]);<))*:1Qq*AB**2.
#((,,-();<''7,,-H%
"3tzz?3##$4Qr!$<=$$R(
#' 12&s4??';<''a(<=((,'**+./s466{+


a 67

  $!#dii.1""=5#9:##B'

#&|,&s4==+;'<=''a(=>((,&s4==+;'<=''a(=>((,&**+**+M*
"3tzz?3##M!E$:;$$R(
#'.&s4>>':;''a(;<((,'**+4,,-u;r"k.@.@.H.H+J\J\JfJfghu;r"k.@.@.H.H+J\J\JfJfghu;r"k.@.@.H.H+J\J\JfJfghu;r"k.@.@.H.H+J\J\JfJfghu;r"k.@.@.H.H+J\J\JfJfghu&&txx0((001I1IJ!!))$*;*;<##++D,?,?@##++D,?,?@((001I1IJ$$,,T-A-AB""**4+=+=>&&..t/F/FG

&&t~~6!!))$*;*;<""**4+=+=>&&..t/E/EF&&..t/E/EF&&..t/E/EFr   c           	         [        5       U l        [        5       n[        5       U l        U R                  R                  SSSSSSS9  U R                  R                  R                  S5        [        U R                  5      U l	        U R                  R                  U5        U R                  R                  S5      U R                  R                  S5      U R                  R                  S5      /U l        U R                   Ht  nUR                  S5        UR                  S5        UR                  S	5        UR                  SU R                   S   5        UR#                  SU R                   S   5        Mv     U R                  R%                  5         ['        U R                  U5      U l        U R                  R+                  5         [-        [.        R0                  R2                  5      U l        U R4                  R7                  SS5        U R4                  R9                  S5        U R4                  R;                  S5        U R4                  R<                  R?                  U R@                  5        [C        U R                  5      nURE                  U R                  5        URE                  U R(                  5        URE                  U R4                  5        g )
Nr   r=   )leftbottomrighttopwspacehspacez#000         offequal)#r^   r4   r!   r   figsubplots_adjustpatchset_facecolorFigureCanvascanvas	setParentadd_subplotaxaxis
set_aspectset_xlimrN   set_ylimtight_layoutNavigationToolbarmpl_toolbardrawQSliderQtOrientation
HorizontalSlidersetRangesetValuesetSingleStepvalueChangedr*   Index_changedr2   r3   )r   dVar9   s       r   r/   MainGUI.CreateDataVisualization   s   !*Y8  a!TU V$$V,"488,b!88'',TXX-A-A#-FtxxG[G[\_G`aAOOF#FF5MLL!JJqq)*JJqq)*  	,T[["=bnn778Qq!Q!!!$  ((););<4112t{{#t''(t{{#r   c                 2   [        U R                  5       GH  u  pUR                  5         [        R                  " U R
                  U   U R                     5      n[        R                  " U R                  U   U R                     5      n[        R                  " U R                  U   U R                     5      n[        [        R                  " U5      5      S:X  a  UR                  US S 2S4   US S 2S4   U R                  SS9  UR                  US S 2S4   US S 2S4   U R                  SS9  [        [        R                  " U5      5      S:X  aC  UR                  US S 2S4   US S 2S4   U R                  [        [        US S 2S4   5      5      S9  UR                  S5        UR                  S5        UR!                  SU R"                  S   5        UR%                  SU R"                  S   5        GM     U R&                  R)                  5         g )	Nr<   r   r=   r)scbr   r   )	enumerater   clanparrayrQ   rR   rP   rO   lenshapescatterrT   ranger   r   r   rN   r   r   r   )r   nr   p0DPFPs         r   UpdateDataVisualizationMainGUI.UpdateDataVisualization  s   TWW%CAEEG$--*4::67B$//!,TZZ89B$++A.tzz:;B288B< A%		"QqS'"QqS'DNNS	A		"QqS'"QqS'DNNS	Arxx|$)IIb1gb1gs2aPQc7|ATIUFF5MLL!JJqq)*JJqq)* & 	r   c                 b    U R                   R                  5       U l        U R                  5         g N)r   valuerR   r   rU   s    r   r   MainGUI.Index_changed$  s"    [[&&(
$$&r   c                    U R                   R                  5       (       a  U R                  R                  U R                  U R
                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  5        g U R                  R!                  5         g r   )ra   	isCheckedr(   rX   rB   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   StoprU   s    r   rX   MainGUI.Run(  s    >>##%%JJNN4;;tzz$**T]]4??[_[a[abfbkbklplvlvw{  xF  xF  GK  GR  GR  SW  Sc  Sc  dh  dq  dq  rJJOOr   c                    Xl         U R                   S:X  aR  U R                  R                  S5        U R                  R                  S5        U R                  R	                  S5        g U R                   S:X  a  U R                  R                  S5        U R                  R                  S5        U R                  R	                  S5        U R
                  R                  SS5        U R
                  R                  S5        / / / /U l        / / / /U l	        / / / /U l
        g U R                   S:X  aR  U R                  R                  S5        U R                  R                  S5        U R                  R	                  S5        g g )Nr   rX   FTr=   r   )CalcTStatusra   setTextrj   
setEnabledr   r   r   rO   rP   rQ   r   ts     r   r-   MainGUI.CalcTStatus_changed.  s'   q NN""5)NN%%e,NN%%d+"NN""6*NN%%d+NN%%d+KK  1%KK  #!#Br
D!"RjDO2JDM#NN""5)NN%%d+NN%%e, $r   c                 l   U R                   R                  5       [        U R                  S   5      S-
  :H  n[	        S5       Ho  nU R                  U   R                  US   U   5        U R                  U   R                  US   U   5        U R                  U   R                  US   U   5        Mq     U R                   R                  S[        U R                  S   5      S-
  5        U(       a4  U R                   R                  [        U R                  S   5      S-
  5        U R                  5         g Nr   r=      r<   )r   r   r   rO   r   extendrP   rQ   r   r   r   )r   r   indexMaxr   s       r   r+   MainGUI.CalcTPoints_changedB  s    KK%%'3t/@/@/C+DQ+FFqAa ''!Q0OOA%%ad1g.MM!##AaDG, 
 	Qs4#4#4Q#78:;KK  T%6%6q%9!:1!<=$$&r   c                 R     [        SR                  U5      5      U l        g !    g = f)Nz[{}])evalformatrB   r   s     r   r   MainGUI.p0ListInput_changedN  s&    	v}}Q/0DK	s   " &c                 B    US;  a  [        U5      U R                  S'   g g )N .-z-.r   floatrD   r   s     r   r   MainGUI.Driftx_changedT  !    %%!!HDJJqM &r   c                 B    US;  a  [        U5      U R                  S'   g g )Nr  r=   r  r   s     r   r   MainGUI.Drifty_changedX  r
  r   c                 B    US;  a  [        U5      U R                  S'   g g )Nr  r  r<   r  r   s     r   r   MainGUI.DriftRadial_changed\  s     H!!HDJJqM r   c                 2    US;  a  [        U5      U l        g g )Nr  )r  rE   r   s     r   r   MainGUI.Noise_changed`  s    HqDJ r   c                 2    US:w  a  [        U5      U l        g g Nr  )intrG   r   s     r   r   MainGUI.Threshold2_changedd  s    7!!fDO r   c                 2    US:w  a  [        U5      U l        g g r  )r  rH   r   s     r   r   MainGUI.N_changedh  s    7VDF r   c                 2    US:w  a  [        U5      U l        g g r  )r  rI   r   s     r   r   MainGUI.Nmin_changedl  s    7ADI r   c                 2    US:w  a  [        U5      U l        g g r  )r  rJ   r   s     r   r   MainGUI.NIter_changedp  s    7QDJ r   c                 B    US:w  a  [        U5      U R                  S'   g g )Nr  r   r  rN   r   s     r   r   MainGUI.GridSizex_changedt       7"1vDMM! r   c                 B    US:w  a  [        U5      U R                  S'   g g )Nr  r=   r  r   s     r   r   MainGUI.GridSizey_changedx  r  r   c                     US;  a>  [        U5      U l        [        U R                  S   5      S:  a  U R	                  5         g g g )Nr  r   )r  rT   r   rO   r   r   s     r   r   MainGUI.PointSize_changed|  sC    H"1XDN4$$Q'(1,,,. - r   c                 2    U R                   S-   S-  U l         g Nr=   r<   )rL   rU   s    r   r   MainGUI.UpdateRandp0  s    {{A~q(r   c                 2    U R                   S-   S-  U l         g r%  )rK   rU   s    r   r   MainGUI.UpdateRandDrift  s    ..!+Q.r   c                 |   UR                  5       [        R                  R                  :X  az  [	        U R
                  S   5      S:  a]  U R                  U R                  -   [	        U R
                  S   5      -  U l        U R                  R                  U R                  5        g g UR                  5       [        R                  R                  :X  az  [	        U R
                  S   5      S:  a]  U R                  U R                  -
  [	        U R
                  S   5      -  U l        U R                  R                  U R                  5        g g UR                  5       [        R                  R                  :X  d,  UR                  5       [        R                  R                  :X  a.  U R                  S:X  a  SU l        g U =R                  S-  sl        g UR                  5       [        R                  R                  :X  a>  U R                  S:  a  U =R                  S-  sl        U R                  S:X  a  SU l        g g g )Nr   r=   rA   )keyr   Key
Key_Periodr   rO   rR   rS   r   r   	Key_CommaKey_Plus	Key_Equal	Key_Minus)r   es     r   keyPressEventMainGUI.keyPressEvent  s   557bff'''4$$Q'(1,"jj$//93t?P?PQR?S;TT
$$TZZ0 - UUW(((4$$Q'(1,"jj$//93t?P?PQR?S;TT
$$TZZ0 - eeg(AEEGrvv7G7G,G!#"#1$UUW(((!#1$!#"# $ )r   ),rr   ri   r(   r   r4   rF   rP   rD   rq   rm   rp   rO   rN   rx   ry   r"   rH   rv   rJ   rz   rI   rw   rE   rs   r0   rT   r{   rK   rL   rM   ra   r   rS   rG   rt   r   r   r   rR   r   rB   rC   rf   rQ   r   )__name__
__module____qualname____firstlineno__r   r   r&   r.   r/   r   r   rX   r-   r+   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r2  __static_attributes__ r   r   r   r      s    &.*HGT$TF'-(
'%%%"% &&/)/$r   r   c                   V    \ rS rSr\" \5      r\" \5      rS	S jr	S r
S rS rS rSrg)
r'   i  Nc                 .    [         R                  X5        g r   )QThreadr   r   s     r   r   CalcThread.__init__  s    %r   c                     XU/U l         X l        X0l        X@l        XPl        X`l        Xpl        Xl        Xl        Xl	        Xl
        Xl        U R                  5         g r   )rQ   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   start)r   rB   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   s                r   rX   CalcThread.Run  sO    v.

 $	
"& 

r   c                 2   SU l         U R                  R                  S5        / / / /U l        [	        U R
                  S   5      S:  aL  U R
                   Vs/ s H/  n[        [        R                  " U5      U R                  -  5      PM1     snU l        [        S5       Vs/ s H2  n[        R                  R                  SSS5      U R                  -  /PM4     snU l        U R                  5         U R                  R                  S5        g s  snf s  snf r   )stopr,   emitrO   r   rQ   listr   r   rN   r   randomuniformrP   Calc)r   ks     r   runCalcThread.run  s    	Q2Jt}}Q 1$FJmmTmT"((1+dmm";<mTDMMRSTXVXBII--a!4T]]BCXV		Q UVs   6D"9Dc                 H    SU l         U R                  R                  S5        g )Nr=   r   )rB  r,   rC  rU   s    r   r   CalcThread.Stop  s    	R r   c                    [        5       nUR                  [        [        U R                  U R
                  U R                  [        U R                  5      [        U R                  5      [        U R                  5      [        U R                  5      [        U R                  5      [        U R                  5      5	      5      nU Vs/ s H  o3S   PM	     snU l        U Vs/ s H  o3S   PM	     snU l        [        U R                  S   5      S:X  aD  [        S5       Vs/ s H(  nSU R                  S   -  SU R                  S   -  //PM*     snU l        / / / /n/ / / /n/ / / /n[        U R                   5       GH  nU R"                  (       a    GOUR                  [$        [        U R                  U R
                  [        U R&                  5      [        U R(                  5      [        U R*                  5      [        U R                  5      [        U R                  5      5      5      U l        UR                  [,        [        U R                  U R
                  U R                  [        U R                  5      [        U R                  5      [        U R                  5      [        U R                  5      [        U R                  5      [        U R                  5      [        U R.                  5      5
      5      nU Vs/ s H  o3S   PM	     snU l        U Vs/ s H  o3S   PM	     snU l        [        S5       H  nXH   R1                  [2        R4                  " U R                  U   5      5        XX   R1                  [2        R4                  " U R
                  U   5      5        Xh   R1                  [2        R4                  " U R                  U   5      5        M     US-  S:X  d  XpR                   S-
  :X  d  GM  U R6                  R9                  XEU/5        / / / /n/ / / /n/ / / /nGM     UR;                  5         g s  snf s  snf s  snf s  snf s  snf )Nr   r=   r         ?r@   )r   starmapReFillDiffPointsziprQ   rP   rO   r   rN   rH   rG   rL   rM   rF   r   r   rJ   rB  DiffusePointsrD   rE   rK   DLALooprI   appendr   r   r)   rC  close)	r   pooldatarH  FPEDPEp0Eiir   s	            r   rG  CalcThread.Calc  s   v||,c$--PTPaPabhimivivbwx~  @D  @F  @F  yG  HN  OS  O^  O^  H_  `f  gk  gr  gr  `s  tz  {  {K  {K  tL  MS  TX  Ta  Ta  Mb  /c  d'+,t!1t,)-.AQ4.t}}Q A%RWXYRZ[RZQr$--"222dmmA6F3FGHRZ[DM"Rj"Rj"Rj

#Byy"ll=#dmmDOO\bcgcmcm\nouvz  wA  wA  pB  CI  JN  JX  JX  CY  Z`  ae  an  an  Zo  pv  w{  wD  wD  pE  ;F  GDO<<T]]4??4K\K\]cdhdsds]tu{  }A  }H  }H  vI  JP  QU  Qa  Qa  Jb  ci  jn  jw  jw  cx  y  @D  @M  @M  yN  OU  VZ  V\  V\  O]  ^d  ei  en  en  ^o  *p  qD-12TtT2DO/3 4t!1t 4D1Xbhht'8'8';<=bhhtq'9:;bhht}}Q'789  "uzR::q=0$$cc]3"Rj"Rj"Rj# $& 	

9 -. \ 3 4s   P< Q/Q>QQ)rF   rP   rD   rO   rN   rH   rJ   rI   rE   rK   rL   rM   rG   rQ   rB  r   )r4  r5  r6  r7  
pyqtSignalrD  r)   r  r,   r   rX   rI  r   rG  r8  r9  r   r   r'   r'     s.    D!JCJ&	 !r   r'   c           
      |   [         R                  " U S5      n[        [        U5      5       GH  n US   S:w  a  [	        US   X   S   -
  US   X   S   -
  5      n	X   S   [         R
                  R                  U* U5      -   US   -   US   [         R                  " U	5      -  -   n
X   S   [         R
                  R                  U* U5      -   US   -   US   [         R                  " U	5      -  -   nO^X   S   [         R
                  R                  U* U5      -   US   -   n
X   S   [         R
                  R                  U* U5      -   US   -   nU(       aV  XS   :  a#  [         R
                  R                  SUS   5      nXS   :  a#  [         R
                  R                  SUS   5      n
XS   -  n
XS   -  n[         R                  " [        U5       VVs/ s H,  u  pX:w  d  M  US   U
-
  S-  US   U-
  S-  -   SU-  U-  :  PM.     snn5      R                  5       S:X  a  X/X'   GM  GM     U$ s  snnf )Nr   Tr<   r=      )r   meanr   r   
atan2NumbarE  rF  cossinr   r   all)rQ   rP   rD   rE   rK   rN   rF   p0meanindangnxnynnpps                 r   rR  rR    sK   WWXa FS_%Qx1} :?1+=!=fQi
XYHZ>Z[_Q'		(9(95&(GGaPQVWXQYZ\Z`Z`adZeQee_Q'		(9(95&(GGaPQVWXQYZ\Z`Z`adZeQee_Q'		(9(95&(GGaP_Q'		(9(95&(GGaP#**1Xa[9B#**1Xa[9Bqk!Bqk!BxxXablXm{XmurqsqzJ"Q%(Q1b1}4qz(7JJXm{|  A  A  C  GK  K#%'
%  &(  |s   H8+$H8c	                     [        U5      U:  aG  [        XU -   [        R                  R	                  SSS5      U-  XXgX85	      u  p[        U5      U:  a  MG  X4$ )Nr   r=   r<   )r   AddDiffPointr   rE  rF  )	rQ   rP   rO   rN   rH   rG   rL   rM   rF   s	            r   rP  rP    si    
j/A
*:86KBIIL]L]^_`abcLdemLmnv  EK  X`  j j/A
r   c	           	         [         R                  " U  V	s/ s H  oS   US   -
  S-  U	S   US   -
  S-  -   PM!     sn	5      n
[         R                  " U V	s/ s H  oS   US   -
  S-  U	S   US   -
  S-  -   PM!     sn	5      nU
SU-  U-  :  R                  5       S:X  a1  USU-  U-  :  R                  5       S:X  a  U R                  U5        X04$ U(       al  [	        U5      S:X  a]  [        SUS   US   -  -
  5      S:  aB  [        SUS   US   -  -
  5      S:  a'  X:  R                  5       S:X  a  UR                  U5        X04$ s  sn	f s  sn	f )	Nr   r<   r=   r_  TrY   rN  g333333?)r   r   rd  rT  r   absany)ppApnewrQ   rO   rL   rM   rN   rF   rk  A1A2s               r   rm  rm     sy   	1E1RqE$q'MA%r!uT!W}q&881E	FB	2F2RqE$q'MA%r!uT!W}q&882F	GB
QxZ  %%'4/R#h,x:O5O4T4T4VZ^4^	 ; 
C%*s2d1ghqk6I3I/J2/MRUVXY]^_Y`aijkalYlVlRmnpRpvx  wG  vL  vL  vN  RV  vV; FFs   &E&Ec           	         X-   n[         R                  " U Vs/ s H  ofS   US   -
  S-  US   US   -
  S-  -   PM!     sn5      n[         R                  " U5      U::  ax  U[         R                  " U5         n[	        US   US   -
  US   US   -
  5      n	XS   U[         R
                  " U	5      -  -   US   U[         R                  " U	5      -  -   //-   $ U $ s  snf )Nr   r<   r=   )r   r   minargminra  rb  rc  )
rq  rr  rs  rG   rF   Prk  Ap1rg  s
             r   AddFrozenPointr|  	  s    	A
!D!Ba5a=1$beDGma%77!DEA	vvayJryy|_aAtAwr!u}5qE(266#;..r!uXbffSk5I/IJKKKH Es   &Cc
                 
   / n
[        U5       H?  u  p[        U5      n[        X XU5      n[        U5      U:  d  M.  U
R                  U5        MA     U
S S S2    H  nX	 M     [        U5      U	:  a  [	        XX&XXEU5	      u  pX4$ )Nr   )r   r   r|  rT  rP  )rQ   rP   rO   rG   rL   rM   rN   rF   rH   rI   NNrj  dpl0rH  s                  r   rS  rS    s    	B:&%lB(S|r!IIbM	 ' "XM 
:.x<YZfl  zB  C""r   T)fastmathc                     [        X5      $ r   r   )yxs     r   ra  ra     s    :r   __main__r  zUsage: %prog [options] files)descriptionusage)9ossysnumpyr   
matplotlibPyQt6.QtGuiPyQt6.QtCorePyQt6.QtWidgets!matplotlib.backends.backend_qtaggr   r   r   r   matplotlib.figurer   matplotlib.pyplotpyplotrk  multiprocessingr   	itertoolsr   argparser	   datetimer
   numbanbmathr   r   warningsfilterwarningsrcParamsupdater   r   r<  r'   rR  rP  rm  r|  rS  njitra  r4  rq  
parse_argsargsQApplicationargvappformshowexitexecr9  r   r   <module>r     s         | $      #         !   y9`gw~  OV  W  XA$k A$HD DL0
# $  z3-KLA<<>D
sxx
 C9DIIKHHSXXZ r   