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
...
@@ -6,7 +6,7 @@ import numpy as np
code
=
"""
code
=
"""
l l1 1 0 0 n1
l l1 1 0 0 n1
s s1 10 1 n1 n2
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
gauss g1 m1 n2 1e-3 0
...
...
bin/test_pykat_gui.py
View file @
64810bc8
...
@@ -10,52 +10,12 @@ from pykat.structs import *
...
@@ -10,52 +10,12 @@ from pykat.structs import *
import
numpy
as
np
import
numpy
as
np
import
pylab
as
pl
import
pylab
as
pl
kat
=
finesse
.
kat
()
code
=
"""
l l1 1 0 0 n1
"""
laser
(
kat
,
'l1'
,
'n1'
,
1
)
kat
=
finesse
.
kat
(
kat_code
=
code
)
space
(
kat
,
's1'
,
'n1'
,
'n2'
,
1
)
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
()
kat
.
openGUI
()
...
...
pykat/components.py
View file @
64810bc8
...
@@ -17,7 +17,7 @@ class Component(object) :
...
@@ -17,7 +17,7 @@ class Component(object) :
def
__init__
(
self
,
name
):
def
__init__
(
self
,
name
):
self
.
__name
=
name
self
.
__name
=
name
self
.
_svgItem
=
None
self
.
_svgItem
=
None
self
.
_
_
nodes
=
[]
self
.
_nodes
=
[]
self
.
_requested_node_names
=
[]
self
.
_requested_node_names
=
[]
self
.
_kat
=
None
self
.
_kat
=
None
...
@@ -52,13 +52,13 @@ class Component(object) :
...
@@ -52,13 +52,13 @@ class Component(object) :
else
:
else
:
n
.
connect
(
self
)
n
.
connect
(
self
)
self
.
_
_
nodes
.
append
(
n
)
self
.
_nodes
.
append
(
n
)
return
n
return
n
def
getNodes
(
self
):
def
getNodes
(
self
):
""" Returns a copy of the nodes the component has """
""" Returns a copy of the nodes the component has """
return
self
.
_
_
nodes
[:]
return
self
.
_nodes
[:]
def
__getname
(
self
):
def
__getname
(
self
):
return
self
.
__name
return
self
.
__name
...
@@ -235,11 +235,11 @@ class space(Component):
...
@@ -235,11 +235,11 @@ class space(Component):
node_new
.
connect
(
self
)
node_new
.
connect
(
self
)
node_old
.
disconnect
(
self
)
node_old
.
disconnect
(
self
)
if
self
.
node
1
==
node_old
:
if
self
.
_
node
s
[
0
]
==
node_old
:
self
.
node
1
=
node_new
self
.
_
node
s
[
0
]
=
node_new
if
self
.
node
2
==
node_old
:
if
self
.
_
node
s
[
1
]
==
node_old
:
self
.
node
2
=
node_new
self
.
_
node
s
[
1
]
=
node_new
class
laser
(
Component
):
class
laser
(
Component
):
...
...
pykat/gui/graphics.py
View file @
64810bc8
...
@@ -60,11 +60,16 @@ class SpaceQGraphicsItem(QGraphicsLineItem):
...
@@ -60,11 +60,16 @@ class SpaceQGraphicsItem(QGraphicsLineItem):
conn
=
nodes
[
0
].
amIConnected
(
self
.
__space
)
conn
=
nodes
[
0
].
amIConnected
(
self
.
__space
)
x1
=
0
y1
=
0
x2
=
0
y2
=
0
if
conn
[
0
]:
if
conn
[
0
]:
if
conn
[
1
]
!=
None
:
if
conn
[
1
]
!=
None
:
if
self
.
__n1
is
not
None
:
if
self
.
__n1
is
not
None
:
# i.e. we have a node graphic item but now it is connected to something
# 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
self
.
__n1
=
None
# now check if a connected component was returned too
# now check if a connected component was returned too
...
@@ -170,7 +175,7 @@ class ComponentQGraphicsItem(QGraphicsSvgItem):
...
@@ -170,7 +175,7 @@ class ComponentQGraphicsItem(QGraphicsSvgItem):
n
.
refresh
()
n
.
refresh
()
def
itemChange
(
self
,
change
,
value
):
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
:
if
change
==
QGraphicsItem
.
ItemPositionHasChanged
:
nodes
=
self
.
__component
.
getNodes
()
nodes
=
self
.
__component
.
getNodes
()
...
...
pykat/gui/gui.py
View file @
64810bc8
...
@@ -99,10 +99,27 @@ class pyKatGUI(QtGui.QMainWindow, qt_gui.Ui_MainWindow):
...
@@ -99,10 +99,27 @@ class pyKatGUI(QtGui.QMainWindow, qt_gui.Ui_MainWindow):
def
addMirror
(
self
,
x
,
y
):
def
addMirror
(
self
,
x
,
y
):
name
=
self
.
kat
.
getNewComponentName
(
'm'
)
name
=
self
.
kat
.
getNewComponentName
(
'm'
)
n
=
self
.
kat
.
getNewNodeNames
(
'n'
,
2
)
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
)
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
):
class
pyKatGraphicsScene
(
QGraphicsScene
):
def
drawBackground
(
self
,
painter
,
rect
):
def
drawBackground
(
self
,
painter
,
rect
):
size
=
10
size
=
10
...
@@ -148,10 +165,15 @@ class pyKatGraphicsView(QGraphicsView):
...
@@ -148,10 +165,15 @@ class pyKatGraphicsView(QGraphicsView):
menu
=
QMenu
(
self
)
menu
=
QMenu
(
self
)
addmenu
=
menu
.
addMenu
(
"Add..."
)
addmenu
=
menu
.
addMenu
(
"Add..."
)
action
=
addmenu
.
addAction
(
"Space"
)
action
.
triggered
.
connect
(
functools
.
partial
(
gui
.
addSpace
,
pt
.
x
(),
pt
.
y
()))
action
=
addmenu
.
addAction
(
"Mirror"
)
action
=
addmenu
.
addAction
(
"Mirror"
)
action
.
triggered
.
connect
(
functools
.
partial
(
gui
.
addMirror
,
pt
.
x
(),
pt
.
y
()))
action
.
triggered
.
connect
(
functools
.
partial
(
gui
.
addMirror
,
pt
.
x
(),
pt
.
y
()))
addmenu
.
addAction
(
"Laser"
)
action
=
addmenu
.
addAction
(
"Laser"
)
action
.
triggered
.
connect
(
functools
.
partial
(
gui
.
addLaser
,
pt
.
x
(),
pt
.
y
()))
addmenu
.
addAction
(
"Beamsplitter"
)
addmenu
.
addAction
(
"Beamsplitter"
)
addmenu
.
addAction
(
"Photodiode"
)
addmenu
.
addAction
(
"Photodiode"
)
...
@@ -204,6 +226,7 @@ class pyKatGraphicsView(QGraphicsView):
...
@@ -204,6 +226,7 @@ class pyKatGraphicsView(QGraphicsView):
def
mouseReleaseEvent
(
self
,
ev
):
def
mouseReleaseEvent
(
self
,
ev
):
# if we have dragged a node and marked another to connect it too
# 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
:
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 attached to space which needs to be removed
node_s
=
self
.
__selected_item
.
node
node_s
=
self
.
__selected_item
.
node
...
@@ -217,13 +240,16 @@ class pyKatGraphicsView(QGraphicsView):
...
@@ -217,13 +240,16 @@ class pyKatGraphicsView(QGraphicsView):
qcomp
=
self
.
__marked
.
parentItem
()
qcomp
=
self
.
__marked
.
parentItem
()
# connect space of node dragged to the component node
# connect space of node dragged to the component node
space
.
changeNode
(
node_s
,
node_c
)
# the space node that has been dragged gets deleted and we
node_s
.
remove
()
# 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
# then refresh the graphical items
qspace
.
refresh
()
qspace
.
refresh
()
qcomp
.
refresh
()
qcomp
.
refresh
()
if
self
.
__marked
is
not
None
:
if
self
.
__marked
is
not
None
:
self
.
__marked
.
marked
=
False
self
.
__marked
.
marked
=
False
self
.
__marked
.
refresh
()
self
.
__marked
.
refresh
()
...
...
pykat/node_network.py
View file @
64810bc8
...
@@ -22,7 +22,7 @@ class NodeNetwork(object):
...
@@ -22,7 +22,7 @@ class NodeNetwork(object):
# then this node already exists
# then this node already exists
return
self
.
_nodes
[
node_name
]
return
self
.
_nodes
[
node_name
]
else
:
else
:
n
=
Node
(
node_name
,
self
)
n
=
Node
(
node_name
,
self
)
self
.
_nodes
[
node_name
]
=
n
self
.
_nodes
[
node_name
]
=
n
return
n
return
n
...
@@ -30,7 +30,7 @@ class NodeNetwork(object):
...
@@ -30,7 +30,7 @@ class NodeNetwork(object):
if
not
isinstance
(
node
,
Node
):
if
not
isinstance
(
node
,
Node
):
raise
exceptions
.
ValueError
(
"node argument is not of type 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
))
raise
exceptions
.
RuntimeError
(
"Trying to remove node {0} when it has not been added"
.
format
(
node
.
name
))
C
=
node
.
getComponents
()
C
=
node
.
getComponents
()
...
@@ -87,7 +87,7 @@ class Node(object):
...
@@ -87,7 +87,7 @@ class Node(object):
self
.
_detectors
=
[]
self
.
_detectors
=
[]
self
.
__name
=
name
self
.
__name
=
name
self
.
_item
=
None
self
.
_item
=
None
self
.
_network
=
No
ne
self
.
_network
=
ne
twork
@
property
@
property
def
network
(
self
):
return
self
.
_network
def
network
(
self
):
return
self
.
_network
...
@@ -100,8 +100,33 @@ class Node(object):
...
@@ -100,8 +100,33 @@ class Node(object):
def
remove
(
self
):
def
remove
(
self
):
self
.
_network
.
removeNode
(
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
):
def
connect
(
self
,
obj
):
if
not
(
isinstance
(
obj
,
Component
)
or
isinstance
(
obj
,
Detector
)):
if
not
(
isinstance
(
obj
,
Component
)
or
isinstance
(
obj
,
Detector
)):
...
@@ -143,7 +168,7 @@ class Node(object):
...
@@ -143,7 +168,7 @@ class Node(object):
def
amIConnected
(
self
,
obj
):
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
with None or the other object and the node index which it is attached to
"""
"""
if
obj
==
self
.
_comp1
:
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