
    ]ziD                     .   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Jr  S SKJs  Jr  S SKJr  S SKJr  S SKrS SKr\R>                  " S5        S SK r S S	K!J"r"J#r#J$r$  S S
K%J&r&  \RN                  RQ                  SSSSSS.5         " S S\)5      r*\+S:X  aa  \" SSS9r,\,R[                  5       r.\/" \R`                  5      r1\*" 5       r2\2Rg                  5         \Rh                  " \1Rk                  5       5        gg)    N)*)FigureCanvasQTAggNavigationToolbar2QT)Figure)odeint)ArgumentParser)dateignore)PALETTES	SEQUENCEScolor_palette)set_palettez#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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g)MainGUI   Nc                     [         R                  X5        [        R                  " 5       S:  a  [        S5        [        eU R                  5         U R                  5         g )Ni `kzKPlease download a new version from https://streubel.unl.edu/STARTSMART.html)QMainWindow__init__timeprint
SystemExitinitUIUpdateDataVisualization)selfparents     SphericalPendulum.pyr   MainGUI.__init__   sB    T*99;#_`$$&    c                 v   [        5       U l        U R                  [        S5      5        U R	                  S5        U R                  5         U R                  5         U R                  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; }i,  u'   ⌘ Streubel Lab Spherical Pendulum ⌘  i  )QWidgetMainsetWindowIconQIconsetStyleSheetinitParametersCreateParameterTabCalcCartesianCoordindexCreateDataVisualizationParameterTabsetFixedWidthQHBoxLayout	addWidgetDataVisualization	setLayoutsetWindowTitlesetCentralWidgetsetMinimumSize)r   hboxs     r   r   MainGUI.initUI!   s    I	5,-  H  	I!

+$$&'',}t(()t--.		D!EFdii(D%r   c                 :   SS/U l         [        R                  " SU R                   S   U R                   S   -   U R                   S   5      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        / U l        / U l        / U l        / U l        SU l        SU l        SU l        SS	/U l        SS	/SS	/SS/S
S	//U l        / SQU l        [,        S   S   [/        [        R0                  R3                  S5      S-  5         U l        g )N   gMbP?r      
   Z   d   g&1#@   )zSelect viewzTop-down (xy)z	Side (xz)z	Side (yz)PerspectiveSpectral   )Xnparangetr*   lmctheta0phi0momentumPhi0momentumTheta0t1t2p1p2g
SliderSteptrailviewviewListComboViewListr   intrandomrandcolorr   s    r   r'   MainGUI.initParameters5   s	   d1TVVAYtvvay0;
	
H	S1S'1Q%C9bz*2.s299>>!3DR3G/HI
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                  S   5      5      U l        U R                  R                  [        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                  S	   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                  [        SS5      5        U R&                  R                  S5        UR                  U5        UR                  U R&                  5        [        5       n[        S5      n	[)        [*        R,                  R.                  5      U l        U R0                  R3                  S[5        U R6                  5      S	-
  5        U R0                  R9                  S5        U R0                  R;                  S	5        UR                  U	5        UR                  U R0                  5        [        5       n
[=        5       U l        U R>                  RA                  U RB                  5        U R>                  R                  S5        U R>                  RE                  S5        [        [        U RF                  S   5      5      U l$        U RH                  R                  [        SS5      5        U RH                  R                  S5        [        [        U RF                  S	   5      5      U l%        U RJ                  R                  [        SS5      5        U RJ                  R                  S5        U
R                  U R>                  5        U
R                  U RH                  5        U
R                  U RJ                  5        [        5       n[        S5      n[)        [*        R,                  R.                  5      U l&        U RL                  R3                  SS5        U RL                  R9                  U RN                  5        U RL                  R;                  S	5        UR                  U5        UR                  U RL                  5        [        5       n[        S5      n[)        [*        R,                  R.                  5      U l(        U RP                  R3                  SS5        U RP                  R9                  U RR                  5        U RP                  R;                  S	5        UR                  U5        UR                  U RP                  5        [        5       n[        S5      n[        [        U RT                  5      5      U l+        U RV                  R                  [        SS5      5        U RV                  R                  S5        UR                  U5        UR                  U RV                  5        [        5       n[        S5      n[        [        U RX                  5      5      U l-        U RZ                  R                  [        SS5      5        U RZ                  R                  S5        UR                  U5        UR                  U RZ                  5        [        5       n[        S5      n[        [        U R\                  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 l1        U Rb                  R                  [#        SSS5      5        U Rb                  R                  S5        UR                  U5        UR                  U Rb                  5        [e        U R                  5      nURg                  U5        [        5       n[e        5       nURg                  U5        URg                  U5        URg                  U5        URg                  U5        URg                  U
5        URi                  U5        UR                  U5        [        5       n[e        5       nURg                  U5        URg                  U5        URi                  U5        UR                  U5        [        S5      n[e        5       nURg                  U5        URg                  U5        URg                  U5        URg                  U5        URi                  U5        UR                  U5        URk                  [m        SS[n        Rp                  Rr                  [n        Rp                  Rt                  5      5        U R                  Rv                  Ry                  U Rz                  5        U R                  R|                  Ry                  U R~                  5        U R                   R|                  Ry                  U R                  5        U R&                  R|                  Ry                  U R                  5        U R>                  R                  Ry                  U R                  5        U RH                  R|                  Ry                  U R                  5        U RJ                  R|                  Ry                  U R                  5        U R0                  R                  Ry                  U R                  5        U RL                  R                  Ry                  U R                  5        U RP                  R                  Ry                  U R                  5        U RV                  R|                  Ry                  U R                  5        U RZ                  R|                  Ry                  U R                  5        U R^                  R|                  Ry                  U R                  5        U Rb                  R|                  Ry                  U R                  5        g )N	Calculater<   TzSimulation time [s]:r   r!   (   zResolution [s]:r9      z
Trail [s]:zTime step [s]:   r=   r;   zLength:   zResistance:r:   zPolar angle [deg.]:   zAzimuthal angle [deg.]:ih  zPolar momentum:   zAzimuthal momentum:zInitial values)N	QGroupBoxr,   r.   QPushButton	RunButtonsetMaximumWidthsetCheckabler/   QLabel	QLineEditstrrB   X1EditsetValidatorQIntValidatorr-   dXEditQDoubleValidatorrS   	TrailEditQSliderQtOrientation
HorizontalSlidersetRangelenrE   setValuesetSingleStep	QComboBox	ComboViewaddItemsrV   setCurrentIndexrT   	View0Edit	View1EditSliderLrF   SliderCrH   rI   
Theta0EditrJ   Phi0EditrL   MomentumTheta0EditrK   MomentumPhi0EditQVBoxLayout	addLayoutr1   addSpacerItemQSpacerItemQSizePolicyPolicyMinimum	ExpandingclickedconnectRuntextChanged
X1_changed
dX_changedTrail_changedcurrentIndexChangedComboView_changedView0_changedView1_changedvalueChangedIndex_changed	L_changed	C_changedTheta0_changedPhi0_changedMomentumTheta0_changedMomentumPhi0_changed)r   hbox0hbox2X1Labelhbox3dXLabelhbox4
TrailLabelhbox5TLabelhbox6hbox00LLabelhbox02CLabelhbox03Theta0Labelhbox04	Phi0Labelhbox05momentumTheta0Labelhbox06momentumPhi0LabelvboxG00ghbox00G0ghbox0G1ghbox1s                                 r   r(   MainGUI.CreateParameterTabL   s	   %K$[1&&s+##D)'/0DFF1I/  q!67!!"% $*+DFF1I/  !1!Aa!89!!"% $L)
"3tzz?3##M!D$9:$$R(
#'()bnn778Qs466{1}-Q!!!$$" 2 23&&s+&&q)"3tyy|#45##M#b$9:$$R("3tyy|#45##M#b$9:$$R('''	"r~~889a#dff%""1% & &r~~889a#dff%""1% &23#C$45$$]1S%9:%%b)%)45	!#dii.1""=3#78##B'#'$%67"+C0C0C,D"E,,-=c"Q-GH--b1,-001"#89 )#d.?.?*@ A**+;C1+EF++B/*+../4,,-u k-% % % % % gs[  
Vr'(    
Vr;r#{/A/A/I/I;K]K]KgKghi&&txx0''8''8""**4+=+=>**2243I3IJ""**4+=+=>""**4+=+=>  ((););<!!))$..9!!))$..9##++D,?,?@!!))$*;*;<++33D4O4OP))11$2K2KLr   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QSS9U l        U R                  R                  S5        U R                  R                  S5        U R                  R                  S	5        U R                  R                  5         U R!                  5         U R                  R#                  5         [%        U R                  5      nUR'                  U R                  5        g )
Nr   r9   leftbottomrighttopwspacehspacez#000)333333ӿr   ?r   3d)
projectionoffequal)rf   r0   r"   r   figsubplots_adjustpatchset_facecolorFigureCanvascanvas	setParentadd_axesaxaxis
set_aspecttight_layoutr   drawr   r/   )r   dVr   s      r   r+   MainGUI.CreateDataVisualization   s   !*Y8  a!TU V$$V,"488,b!((##$74#Hf%U7#$$&4112t{{#r   c                    US:X  a  U R                   nU R                  R                   H  nUR                  5         M     U R                  R                   H  nUR                  5         M     US:  a  [        U R                  U R                  S   -  5      nSnX4-  n[        U5       Hp  nXU-
  U-  -
  nUS:  a  M  Xu-   S-   nXd-  S-  n	U R                  R                  U R                  Xx U R                  Xx U R                  Xx U R                  SSU	S9  Mr     U R                  R                  U R                  * U R                  5        U R                  R!                  U R                  * U R                  5        U R                  R#                  U R                  * U R                  5        U R                  R%                  U R&                  S   U R&                  S   S9  U R(                  R+                  5         g )	Nr   r9   r8   re   butt)rH   solid_capstylelwalpha)elevazim)r*   r   linesremovepatchesrW   rS   rB   rangeplotxyzrZ   set_xlimrF   set_ylimset_zlim	view_initrT   r   r   )
r   r*   prailMaxNsji0i1r   s
             r   r   MainGUI.UpdateDataVisualization  s   B;JJEAHHJ AHHJ ! 19$**TVVAY./GA
A1XqS!G^6T!VqTVVB]466"=$**ekopx}~  	$&&($&&($&&(tyy|1>r   c                 l   US:X  aC  U R                   S-  [        R                  -  /nU R                  S-  [        R                  -  /nOU R                  nU R
                  n[        R                  " U5      n[        R                  " U5      nU R                  [        R                  " U5      -  [        R                  " U5      -  U l
        U R                  [        R                  " U5      -  [        R                  " U5      -  U l        U R                  * [        R                  " U5      -  U l        g )Nr   rc   )rI   rC   pirJ   rM   rN   arrayrF   sincosr   r   r   )r   irM   rN   s       r   r)   MainGUI.CalcCartesianCoord!  s    6++c/"%%'(B))C-%&BBBXXb\XXb\r
"266":-r
"266":-&&#r   c                    S n[         R                  " U R                  S-  [         R                  -  U R                  U R
                  S-  [         R                  -  U R                  /5      n[        XU R                  U R                  U R                  S-  U R                  -  U R                  4S9nUS S 2S4   U l        US S 2S4   U l        US S 2S4   U l        US S 2S4   U l        g )	Nc                 $   U u  pVpxUn	Un
U* U-  [        U5      -  U[        R                  " U5      -  U-  -
  S[        R                  " SU-  5      -  US-  -  -   nU* U-  [        U5      -  SU-  U-  [        R                  " U5      -  -
  nXX4$ )Ng      ?re   )absrC   r   tan)r   rE   rF   rH   rQ   rM   z1rN   z2dt1dt2dz1dz2s                r   DerivativesSP-MainGUI.CalcTrajectory.<locals>.DerivativesSP/  s    KB"CC"R%B-266":a/BFF1R4LQ1FFC"R%B-2b!33C3?"r   rc   r<   )argsr   re   r9      )rC   r   rI   r   rL   rJ   rK   r   rE   rF   rH   rG   rQ   rM   rN   rO   rP   )r   r  y0r   s       r   CalcTrajectoryMainGUI.CalcTrajectory.  s    	# XXt{{3ruu,T-@-@3ruuATUYUfUfgh=DFFs
4668I$&&0QRAaC&AaC&AaC&AaC&r   c           	         [        5       nUR                  SSSSSSS9  UR                  / SQ5      nUR                  S5        [        R
                  " U R                  [        R                  -  S-
  S-  S-
  S-  U R                  SS	S
S9  [        R
                  " U R                  [        R                  -  S-  U R                  SSSS9  [        R                  " SS/5        [        R                  " S5        [        R                  " S5        [        R                  " 5         [        R                   " 5         [        R"                  " 5         g )Nr   r9   r   )r   r   r9   r9   r   re   rc   .r	Azimuthal)rH   labelbPolariLzAngular momentum [radians]zAngular coordinate [degrees])r   r   r   r   ppr   rN   rC   r   rP   rM   rO   xlimylabelxlabellegendr   show)r   r   r   s      r   PlotPhaseSpaceMainGUI.PlotPhaseSpace>  s    h1A1QqQ\\)$
g
$''"%%-/1$Q&+DGGC#KP
c!$''#'B
c

		./
		01
		

	r   c                 R   U R                   R                  5       (       a  U R                  R                  S5        U R	                  5         U R                   R                  S5        U R                  R                  [        U R                  5      S-
  5        U R                  5         g g )Nr   Fr9   )	rh   	isCheckedrx   r{   r  
setCheckedrz   rE   r   r[   s    r   r   MainGUI.RunL  st    >>##%%KK  #!NN%%e,KK  TVVQ/! &r   c                    [        U5      U R                  S'   [        R                  " SU R                  S   U R                  S   -   U R                  S   5      U l        U R
                  R                  S[        U R                  5      S-
  5        U R
                  R                  S5        / U l	        U R                  U R                  5        U R                  5         g Nr   r9   )rW   rB   rC   rD   rE   rx   ry   rz   r{   rM   r)   r*   r   r   rE   s     r   r   MainGUI.X1_changedT  s    Fq	1TVVAYtvvay0;Qs466{1}-Q

+$$&r   c                    US;  a  [        U5      U R                  S'   [        R                  " SU R                  S   U R                  S   -   U R                  S   5      U l        U R
                  R                  S[        U R                  5      S-
  5        U R
                  R                  S5        / U l	        U R                  U R                  5        U R                  5         g N -r  r9   r   )floatrB   rC   rD   rE   rx   ry   rz   r{   rM   r)   r*   r   r(  s     r   r   MainGUI.dX_changed]  s    L aDFF1IYYq466!9!4TVVAY?DFKK  3tvv;q=1KK  #

+$$&r   c                 D    [        U5      U l        U R                  5         g N)rW   rS   r   r(  s     r   r   MainGUI.Trail_changedg  s    V
$$&r   c                 P   US;  a  [        U5      U R                  S'   U R                  U R                  ;  a  U R                  R	                  S5        OAU R                  R	                  U R                  R                  U R                  5      S-   5        U R                  5         g g )Nr,  r   r9   r/  rT   rU   r~   r   r*   r   r(  s     r   r   MainGUI.View0_changedk  x    L  8DIIaLyy-..q1..t}}/B/B499/Ma/OP((* !r   c                 P   US;  a  [        U5      U R                  S'   U R                  U R                  ;  a  U R                  R	                  S5        OAU R                  R	                  U R                  R                  U R                  5      S-   5        U R                  5         g g r+  r5  r(  s     r   r   MainGUI.View1_changedt  r7  r   c                 J   U R                   R                  5       U l        U R                  S:  aE  [        U R                  5      S:X  a  U R                  5         U R                  U R                  5        OU R                  U R                  5        U R                  R                  [        [        U R                  R                  S5      5      5        U R                  R                  [        [        U R                  R                  S5      5      5        U R                  5         g )Nr   re   )rx   valuer*   rz   rM   r  r)   r   setTextrm   roundr   r   r   r   r   r[   s    r   r   MainGUI.Index_changed}  s    [[&&(
::>477|q ##%##DJJ/##DJJ/s5a#89:s5a#89:$$&r   c                 *   US:  a  U R                   US-
     S S  U l        U R                  R                  [	        U R                  S   5      5        U R
                  R                  [	        U R                  S   5      5        U R                  5         g g r'  )rU   rT   r   r<  rm   r   r   r(  s     r   r   MainGUI.ComboView_changed  sq    q5ac*1-DINN""3tyy|#45NN""3tyy|#45((*	 r   c                 P    U R                   R                  5       U l        / U l        g r2  )r   r;  rF   rM   r[   s    r   r   MainGUI.L_changed  s    ##%r   c                 B    U R                   R                  5       U l        g r2  )r   r;  rH   r[   s    r   r   MainGUI.C_changed  s    ##%r   c                     US;  aM  [        U5      S:  a&  U R                  R                  [        S5      5        Sn[        U5      U l        / U l        g g )Nr,  rc   )r/  r   r<  rm   rI   rM   r(  s     r   r   MainGUI.Theta0_changed  sG    L Qx#~''C1(DKDG !r   c                 @    US;  a  [        U5      U l        / U l        g g )Nr,  )r/  rJ   rM   r(  s     r   r   MainGUI.Phi0_changed  s!    L aDIDG !r   c                    US;  a{  [        U5      S:  a'  U R                  R                  [        S5      5        SnO5[        U5      S:  a&  U R                  R                  [        S5      5        Sn[        U5      U l        / U l        g N)r-  r.  r  z-.r:   rd   )r/  r   r<  rm   rL   rM   r(  s     r   r   MainGUI.MomentumTheta0_changed  sn    %%Qx"}''//B8qC''//C9"'(Dr   c                    US;  a{  [        U5      S:  a'  U R                  R                  [        S5      5        SnO5[        U5      S:  a&  U R                  R                  [        S5      5        Sn[        U5      U l        / U l        g rJ  )r/  r   r<  rm   rK   rM   r(  s     r   r   MainGUI.MomentumPhi0_changed  sn    %%Qx"}%%--c"g6qC%%--c#h7 %aDr   c                 d   UR                  5       [        R                  R                  :X  aw  [	        U R
                  5      S:  a]  U R                  U R                  -   [	        U R                  5      S-
  -  U l        U R                  R                  U R                  5        g g UR                  5       [        R                  R                  :X  aw  [	        U R
                  5      S:  a]  U R                  U R                  -
  [	        U R                  5      S-
  -  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 UR                  5       [        R                  R                  :X  aN  [         S   S   [#        [$        R&                  R)                  S5      S-  5         U l        U R-                  5         g g )Nr   r9      r@   rA   )keyru   Key
Key_Periodrz   rM   r*   rR   rE   rx   r{   	Key_CommaKey_Plus	Key_Equal	Key_MinusKey_Cr   rW   rC   rX   rY   rZ   r   )r   es     r   keyPressEventMainGUI.keyPressEvent  s   557bff'''477|a"jj$//9CKMJ
$$TZZ0   UUW(((477|a"jj$//9CKMJ
$$TZZ0   eeg(AEEGrvv7G7G,G!#"#1$UUW(((!#1$!#"# $UUW$":.r23ryy~~a7H7K3LMDJ((* %r   ),r~   rV   r0   r#   r   r   r,   r   rh   rx   r   r   rR   r   rs   r   r   rB   rn   r   rH   r   rZ   rq   r   rQ   r*   rF   rG   rK   rL   rO   rP   rJ   rE   rM   rN   rI   rS   rT   rU   r   r   r   r2  )r   )__name__
__module____qualname____firstlineno__r   r   r'   r(   r+   r   r)   r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rY  __static_attributes__ r   r   r   r      s~    '&(J.bMH$(:$ "'''++
'+&
		+r   r   __main__r  zUsage: %prog [options] files)descriptionusage)6ossysnumpyrC   
matplotlibPyQt6.QtGuiPyQt6.QtCorePyQt6.QtWidgets!matplotlib.backends.backend_qtaggr   r   r   NavigationToolbarmatplotlib.figurer   matplotlib.pyplotpyplotr  scipy.integrater   matplotlib.patchesr   mpl_toolkits.mplot3d.art3dmplot3dart3dargparser   datetimer	   r   warningsfilterwarnings	itertoolsyellowbrick.style.palettesr   r   r   yellowbrick.styler   rcParamsupdater   r   r[  r   
parse_argsr  QApplicationargvappformr  exitexecr`  r   r   <module>r     s          | $  " $ * * #       !  I I )   y9`gw~  OV  W  X{+k {+z z3-KLA<<>D
sxx
 C9DIIKHHSXXZ r   