Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
finesse
pykat
Commits
64810bc8
Commit
64810bc8
authored
Nov 26, 2013
by
Daniel Brown
Browse files
more gui fixes
parent
486eb5c5
Changes
6
Hide whitespace changes
Inline
Side-by-side
bin/test_aperture.py
View file @
64810bc8
...
...
@@ -6,7 +6,7 @@ import numpy as np
code
=
"""
l l1 1 0 0 n1
s s1 10 1 n1 n2
m m1 1 0 0 n2
dump
m m1 1 0 0 n2
n3
gauss g1 m1 n2 1e-3 0
...
...
bin/test_pykat_gui.py
View file @
64810bc8
...
...
@@ -10,52 +10,12 @@ from pykat.structs import *
import
numpy
as
np
import
pylab
as
pl
kat
=
finesse
.
kat
()
code
=
"""
l l1 1 0 0 n1
"""
laser
(
kat
,
'l1'
,
'n1'
,
1
)
space
(
kat
,
's1'
,
'n1'
,
'n2'
,
1
)
kat
=
finesse
.
kat
(
kat_code
=
code
)
mirror
(
kat
,
'm1'
,
'n2'
,
'n3'
,
R
=
0.8
,
T
=
0.2
)
space
(
kat
,
's2'
,
'n3'
,
'n4'
,
L
=
1
)
mirror
(
kat
,
'm2'
,
'n4'
,
'n5'
,
R
=
0.7
,
T
=
0.3
)
cavity
(
kat
,
'cav1'
,
'm1'
,
'n3'
,
'm2'
,
'n4'
)
space
(
kat
,
's3'
,
'n5'
,
'n6'
,
L
=
1
)
photodiode
(
kat
,
'pd_cav'
,
'n4'
)
photodiode
(
kat
,
'pd_ref'
,
'n2'
)
photodiode
(
kat
,
'pd_trs'
,
'n5'
)
kat
.
m1
.
Rcx
=
-
1000.0
kat
.
m1
.
Rcy
=
-
1000.0
kat
.
m2
.
Rcx
=
1000.0
kat
.
m2
.
Rcy
=
1000.0
xaxis
(
kat
,
Scale
.
linear
,
[
0
,
360
],
kat
.
m2
,
kat
.
m2
.
phi
,
1000
)
kat
.
maxtem
=
0
run
=
kat
.
run
(
printout
=
0
,
printerr
=
0
)
#pl.figure()
#pl.ion()
#pl.plot(run.x,run.y)
#pl.xlabel(run.xlabel)
#pl.ylabel("Intensity [W]")
#pl.legend(run.ylabels)
#pl.show()
kat
.
m1
.
R
=
0.5
kat
.
m1
.
T
=
0.5
kat
.
pd_cav
.
enabled
=
False
run
=
kat
.
run
(
printout
=
0
,
printerr
=
0
)
#pl.figure()
#pl.plot(run.x,run.y)
#pl.xlabel(run.xlabel)
#pl.ylabel("Intensity [W]")
#pl.legend(run.ylabels)
#pl.show()
kat
.
openGUI
()
...
...
pykat/components.py
View file @
64810bc8
...
...
@@ -17,7 +17,7 @@ class Component(object) :
def
__init__
(
self
,
name
):
self
.
__name
=
name
self
.
_svgItem
=
None
self
.
_
_
nodes
=
[]
self
.
_nodes
=
[]
self
.
_requested_node_names
=
[]
self
.
_kat
=
None
...
...
@@ -52,13 +52,13 @@ class Component(object) :
else
:
n
.
connect
(
self
)
self
.
_
_
nodes
.
append
(
n
)
self
.
_nodes
.
append
(
n
)
return
n
def
getNodes
(
self
):
""" Returns a copy of the nodes the component has """
return
self
.
_
_
nodes
[:]
return
self
.
_nodes
[:]
def
__getname
(
self
):
return
self
.
__name
...
...
@@ -235,11 +235,11 @@ class space(Component):
node_new
.
connect
(
self
)
node_old
.
disconnect
(
self
)
if
self
.
node
1
==
node_old
:
self
.
node
1
=
node_new
if
self
.
_
node
s
[
0
]
==
node_old
:
self
.
_
node
s
[
0
]
=
node_new
if
self
.
node
2
==
node_old
:
self
.
node
2
=
node_new
if
self
.
_
node
s
[
1
]
==
node_old
:
self
.
_
node
s
[
1
]
=
node_new
class
laser
(
Component
):
...
...
pykat/gui/graphics.py
View file @
64810bc8
...
...
@@ -60,11 +60,16 @@ class SpaceQGraphicsItem(QGraphicsLineItem):
conn
=
nodes
[
0
].
amIConnected
(
self
.
__space
)
x1
=
0
y1
=
0
x2
=
0
y2
=
0
if
conn
[
0
]:
if
conn
[
1
]
!=
None
:
if
self
.
__n1
is
not
None
:
# i.e. we have a node graphic item but now it is connected to something
self
.
__n1
.
scene
().
removeItem
(
self
.
__n
2
)
self
.
__n1
.
scene
().
removeItem
(
self
.
__n
1
)
self
.
__n1
=
None
# now check if a connected component was returned too
...
...
@@ -170,7 +175,7 @@ class ComponentQGraphicsItem(QGraphicsSvgItem):
n
.
refresh
()
def
itemChange
(
self
,
change
,
value
):
# if the item move then update any spaces
# if the item
is
move
d
then update any spaces
attached to it
if
change
==
QGraphicsItem
.
ItemPositionHasChanged
:
nodes
=
self
.
__component
.
getNodes
()
...
...
pykat/gui/gui.py
View file @
64810bc8
...
...
@@ -99,10 +99,27 @@ class pyKatGUI(QtGui.QMainWindow, qt_gui.Ui_MainWindow):
def
addMirror
(
self
,
x
,
y
):
name
=
self
.
kat
.
getNewComponentName
(
'm'
)
n
=
self
.
kat
.
getNewNodeNames
(
'n'
,
2
)
m
=
pykat
.
components
.
mirror
(
self
.
kat
,
name
,
n
[
0
],
n
[
1
])
m
=
pykat
.
components
.
mirror
(
name
,
n
[
0
],
n
[
1
])
self
.
kat
.
add
(
m
)
self
.
addComponentToScene
(
m
,
x
,
y
)
def
addSpace
(
self
,
x
,
y
):
name
=
self
.
kat
.
getNewComponentName
(
's'
)
n
=
self
.
kat
.
getNewNodeNames
(
'n'
,
2
)
s
=
pykat
.
components
.
space
(
name
,
n
[
0
],
n
[
1
])
self
.
kat
.
add
(
s
)
self
.
addComponentToScene
(
s
,
x
,
y
)
def
addLaser
(
self
,
x
,
y
):
name
=
self
.
kat
.
getNewComponentName
(
'l'
)
n
=
self
.
kat
.
getNewNodeNames
(
'n'
,
1
)
l
=
pykat
.
components
.
laser
(
name
,
n
[
0
])
self
.
kat
.
add
(
l
)
self
.
addComponentToScene
(
l
,
x
,
y
)
class
pyKatGraphicsScene
(
QGraphicsScene
):
def
drawBackground
(
self
,
painter
,
rect
):
size
=
10
...
...
@@ -148,10 +165,15 @@ class pyKatGraphicsView(QGraphicsView):
menu
=
QMenu
(
self
)
addmenu
=
menu
.
addMenu
(
"Add..."
)
action
=
addmenu
.
addAction
(
"Space"
)
action
.
triggered
.
connect
(
functools
.
partial
(
gui
.
addSpace
,
pt
.
x
(),
pt
.
y
()))
action
=
addmenu
.
addAction
(
"Mirror"
)
action
.
triggered
.
connect
(
functools
.
partial
(
gui
.
addMirror
,
pt
.
x
(),
pt
.
y
()))
addmenu
.
addAction
(
"Laser"
)
action
.
triggered
.
connect
(
functools
.
partial
(
gui
.
addMirror
,
pt
.
x
(),
pt
.
y
()))
action
=
addmenu
.
addAction
(
"Laser"
)
action
.
triggered
.
connect
(
functools
.
partial
(
gui
.
addLaser
,
pt
.
x
(),
pt
.
y
()))
addmenu
.
addAction
(
"Beamsplitter"
)
addmenu
.
addAction
(
"Photodiode"
)
...
...
@@ -204,6 +226,7 @@ class pyKatGraphicsView(QGraphicsView):
def
mouseReleaseEvent
(
self
,
ev
):
# if we have dragged a node and marked another to connect it too
if
self
.
__selected_item
is
not
None
and
isinstance
(
self
.
__selected_item
,
NodeQGraphicItem
)
and
self
.
__marked
is
not
None
:
# node attached to space which needs to be removed
node_s
=
self
.
__selected_item
.
node
...
...
@@ -217,13 +240,16 @@ class pyKatGraphicsView(QGraphicsView):
qcomp
=
self
.
__marked
.
parentItem
()
# connect space of node dragged to the component node
space
.
changeNode
(
node_s
,
node_c
)
node_s
.
remove
()
# the space node that has been dragged gets deleted and we
# replace it with the components
space
.
changeNode
(
node_s
,
node_c
)
node_s
.
remove
()
# now remove from node network completly
# then refresh the graphical items
qspace
.
refresh
()
qcomp
.
refresh
()
if
self
.
__marked
is
not
None
:
self
.
__marked
.
marked
=
False
self
.
__marked
.
refresh
()
...
...
pykat/node_network.py
View file @
64810bc8
...
...
@@ -22,7 +22,7 @@ class NodeNetwork(object):
# then this node already exists
return
self
.
_nodes
[
node_name
]
else
:
n
=
Node
(
node_name
,
self
)
n
=
Node
(
node_name
,
self
)
self
.
_nodes
[
node_name
]
=
n
return
n
...
...
@@ -30,7 +30,7 @@ class NodeNetwork(object):
if
not
isinstance
(
node
,
Node
):
raise
exceptions
.
ValueError
(
"node argument is not of type Node"
)
if
node
not
in
self
.
_nodes
:
if
node
.
name
not
in
self
.
_nodes
:
raise
exceptions
.
RuntimeError
(
"Trying to remove node {0} when it has not been added"
.
format
(
node
.
name
))
C
=
node
.
getComponents
()
...
...
@@ -87,7 +87,7 @@ class Node(object):
self
.
_detectors
=
[]
self
.
__name
=
name
self
.
_item
=
None
self
.
_network
=
No
ne
self
.
_network
=
ne
twork
@
property
def
network
(
self
):
return
self
.
_network
...
...
@@ -100,8 +100,33 @@ class Node(object):
def
remove
(
self
):
self
.
_network
.
removeNode
(
self
)
self
.
_item
.
scene
().
removeItem
(
self
.
_item
)
if
self
.
_item
!=
None
:
self
.
_item
.
scene
().
removeItem
(
self
.
_item
)
def
disconnect
(
self
,
obj
):
if
not
(
isinstance
(
obj
,
Component
)
or
isinstance
(
obj
,
Detector
)):
raise
exceptions
.
ValueError
(
"Object is not a component or detector"
)
if
isinstance
(
obj
,
Component
):
if
self
.
_comp1
==
obj
:
self
.
_comp1
=
None
elif
self
.
_comp2
==
obj
:
self
.
_comp2
=
None
else
:
raise
exceptions
.
RuntimeError
(
"Cannot dettach {0} from node {1}"
.
format
(
obj
.
name
,
self
.
__name
))
else
:
# we must have a detector as we check above
self
.
_detectors
.
remove
(
obj
)
if
self
.
_item
is
not
None
:
self
.
_item
.
refresh
()
def
connect
(
self
,
obj
):
if
not
(
isinstance
(
obj
,
Component
)
or
isinstance
(
obj
,
Detector
)):
...
...
@@ -143,7 +168,7 @@ class Node(object):
def
amIConnected
(
self
,
obj
):
"""
Checks if obj is connected
o
to the node. Returns true or false in tuple
Checks if obj is connected to the node. Returns true or false in tuple
with None or the other object and the node index which it is attached to
"""
if
obj
==
self
.
_comp1
:
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment