Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
P
pykat
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Sebastian Steinlechner
pykat
Commits
c017f726
Commit
c017f726
authored
Nov 28, 2013
by
Daniel Brown
Browse files
Options
Downloads
Patches
Plain Diff
fixing some error statements, adding in base exception class
parent
7039d156
No related branches found
No related tags found
No related merge requests found
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
pykat/commands.py
+27
-1
27 additions, 1 deletion
pykat/commands.py
pykat/components.py
+13
-3
13 additions, 3 deletions
pykat/components.py
pykat/exceptions.py
+26
-0
26 additions, 0 deletions
pykat/exceptions.py
pykat/finesse.py
+47
-62
47 additions, 62 deletions
pykat/finesse.py
with
113 additions
and
66 deletions
pykat/commands.py
+
27
−
1
View file @
c017f726
...
...
@@ -37,6 +37,32 @@ class cavity(Command):
return
'
cav {0} {1} {2} {3} {4}
'
.
format
(
self
.
__name
,
self
.
__c1
,
self
.
__n1
,
self
.
__c2
,
self
.
__n2
);
class
attr
():
@staticmethod
def
parseFinesseText
(
text
,
kat
):
values
=
text
.
split
(
"
"
)
if
values
[
0
]
!=
"
attr
"
:
raise
exceptions
.
RuntimeError
(
"'
{0}
'
not a valid Finesse attr command
"
.
format
(
text
))
values
.
pop
(
0
)
# remove initial value
if
len
(
values
)
<
3
:
raise
exceptions
.
RuntimeError
(
"
attr Finesse code format incorrect
'
{0}
'"
.
format
(
text
))
comp
=
None
comp_name
=
values
[
0
]
values
.
pop
(
0
)
for
c
in
kat
.
getComponents
():
if
c
.
name
==
comp_name
:
comp
=
c
break
if
comp
==
None
:
raise
# can list multiple attributes per command
class
xaxis
(
Command
):
def
__init__
(
self
,
scale
,
limits
,
comp
,
param
,
steps
):
...
...
This diff is collapsed.
Click to expand it.
pykat/components.py
+
13
−
3
View file @
c017f726
...
...
@@ -33,6 +33,9 @@ class Component(object) :
def
parseFinesseText
(
text
):
raise
NotImplementedError
(
"
This function is not implemented
"
)
def
setAttr
(
name
,
value
):
raise
NotImplementedError
(
"
This function is not implemented
"
)
def
getFinesseText
(
self
):
"""
Base class for individual finesse optical components
"""
raise
NotImplementedError
(
"
This function is not implemented
"
)
...
...
@@ -74,13 +77,14 @@ class Param(float):
name
=
property
(
lambda
self
:
self
.
__name
)
class
mirror
(
Component
):
def
__init__
(
self
,
name
,
node1
,
node2
,
R
=
0
,
T
=
0
,
phi
=
0
,
Rcx
=
0
,
Rcy
=
0
,
xbeta
=
0
,
ybeta
=
0
):
def
__init__
(
self
,
name
,
node1
,
node2
,
R
=
0
,
T
=
0
,
phi
=
0
,
Rcx
=
0
,
Rcy
=
0
,
xbeta
=
0
,
ybeta
=
0
,
mass
=
0
):
Component
.
__init__
(
self
,
name
)
self
.
_requested_node_names
.
append
(
node1
)
self
.
_requested_node_names
.
append
(
node2
)
self
.
__mass
=
float
(
mass
)
self
.
__R
=
float
(
R
)
self
.
__T
=
float
(
T
)
self
.
__phi
=
float
(
phi
)
...
...
@@ -89,6 +93,11 @@ class mirror(Component):
self
.
__xbeta
=
float
(
xbeta
)
self
.
__ybeta
=
float
(
ybeta
)
@property
def
mass
(
self
):
return
Param
(
'
mass
'
,
self
.
__mass
)
@mass.setter
def
mass
(
self
,
value
):
self
.
__mass
=
float
(
value
)
@property
def
R
(
self
):
return
Param
(
'
R
'
,
self
.
__R
)
@R.setter
...
...
@@ -114,11 +123,11 @@ class mirror(Component):
@Rcy.setter
def
Rcy
(
self
,
value
):
self
.
__Rcy
=
float
(
value
)
@property
def
xbeta
(
self
):
return
Param
(
'
xbeta
'
,
self
.
__xbeta
)
@xbeta.setter
def
xbeta
(
self
,
value
):
self
.
__xbeta
=
float
(
value
)
@property
def
ybeta
(
self
):
return
Param
(
'
ybeta
'
,
self
.
__ybeta
)
@ybeta.setter
...
...
@@ -161,6 +170,7 @@ class mirror(Component):
self
.
name
,
self
.
__R
,
self
.
__T
,
self
.
__phi
,
nodes
[
0
].
name
,
nodes
[
1
].
name
))
if
self
.
mass
!=
0
:
rtn
.
append
(
"
attr {0} mass {1}
"
.
format
(
self
.
name
,
self
.
__mass
))
if
self
.
Rcx
!=
0
:
rtn
.
append
(
"
attr {0} Rcx {1}
"
.
format
(
self
.
name
,
self
.
__Rcx
))
if
self
.
Rcy
!=
0
:
rtn
.
append
(
"
attr {0} Rcy {1}
"
.
format
(
self
.
name
,
self
.
__Rcy
))
if
self
.
xbeta
!=
0
:
rtn
.
append
(
"
attr {0} xbeta {1}
"
.
format
(
self
.
name
,
self
.
__xbeta
))
...
...
This diff is collapsed.
Click to expand it.
pykat/exceptions.py
0 → 100644
+
26
−
0
View file @
c017f726
import
exceptions
class
BasePyKatException
:
def
__init__
(
self
,
msg
):
self
.
__msg
=
msg
def
__str__
(
self
):
return
"
PyKat Exception message:
"
,
self
.
__msg
class
MissingFinesseEnvVar
(
BasePyKatException
)
:
def
__init__
(
self
):
BasePyKatExeception
.
__init__
(
"
The environment variable FINESSE_DIR was not defined
"
)
class
MissingFinesse
(
BasePyKatException
)
:
def
__init__
(
self
):
BasePyKatExeception
.
__init__
(
"
Could not find the finesse executable
'
kat
'
in
'
{0}
'
,
"
\
"
or you do not have the permissions to run it.
"
\
.
format
(
os
.
environ
.
get
(
'
FINESSE_DIR
'
)))
class
FinesseRunError
(
BasePyKatException
)
:
def
__init__
(
self
,
err
,
kat
):
self
.
__err
=
err
self
.
__kat
=
kat
BasePyKatExeception
.
__init__
(
"
Finesse returned an error running {1}: {0}
"
.
format
(
self
.
__err
,
self
.
__kat
))
\ No newline at end of file
This diff is collapsed.
Click to expand it.
pykat/finesse.py
+
47
−
62
View file @
c017f726
...
...
@@ -25,7 +25,6 @@ Contact at ddb@star.sr.bham.ac.uk
"""
import
sys
import
os
import
exceptions
import
subprocess
import
tempfile
import
numpy
as
np
...
...
@@ -33,6 +32,8 @@ import datetime
import
pickle
import
pykat
import
pykat.exceptions
as
pkex
from
pykat.node_network
import
NodeNetwork
from
pykat.detectors
import
Detector
from
pykat.components
import
Component
...
...
@@ -41,24 +42,6 @@ from pykat.gui.gui import pyKatGUI
NO_GUI
=
False
class
MissingFinesseEnvVar
(
Exception
)
:
def
__str__
(
self
)
:
return
"
The environment variable FINESSE_DIR was not defined
"
class
MissingFinesse
(
Exception
)
:
def
__str__
(
self
)
:
return
"
Could not find the finesse executable
'
kat
'
in
'
{0}
'
,
"
\
"
or you do not have the permissions to run it.
"
\
.
format
(
os
.
environ
.
get
(
'
FINESSE_DIR
'
))
class
FinesseError
(
Exception
)
:
def
__init__
(
self
,
err
,
kat
):
self
.
__err
=
err
self
.
__kat
=
kat
def
__str__
(
self
):
return
"
Finesse returned an error running {1}: {0}
"
.
format
(
self
.
__err
,
self
.
__kat
)
class
katRun
(
object
):
def
__init__
(
self
):
self
.
runDateTime
=
datetime
.
datetime
.
now
()
...
...
@@ -71,7 +54,7 @@ class katRun(object):
def
saveKatRun
(
self
,
run
,
filename
):
if
not
isinstance
(
run
,
katRun
):
raise
RuntimeError
(
"
run object must be a katRun type
"
)
raise
pkex
.
BasePyKatException
(
"
run object must be a katRun type
"
)
with
open
(
filename
,
'
w
'
)
as
outfile
:
pickle
.
dump
(
run
,
outfile
,
pickle
.
HIGHEST_PROTOCOL
)
...
...
@@ -82,10 +65,9 @@ class katRun(object):
return
pickle
.
load
(
infile
)
class
kat
(
object
):
def
__init__
(
self
,
kat_file
=
None
,
kat_code
=
None
,
kat
ex
e
=
""
):
def
__init__
(
self
,
kat_file
=
None
,
kat_code
=
None
,
kat
dir
=
""
,
katnam
e
=
""
):
self
.
scene
=
None
# scene object for GUI
self
.
__components
=
{}
# dictionary of optical components
...
...
@@ -94,7 +76,8 @@ class kat(object):
self
.
__extra_lines
=
[]
# an array of strings which are just normal finesse code to include when running
self
.
__gui
=
None
self
.
nodes
=
NodeNetwork
(
self
)
self
.
__katexe
=
katexe
self
.
__katdir
=
katdir
self
.
__katname
=
katname
self
.
pykatgui
=
None
# Various
self
.
__phase
=
None
...
...
@@ -103,7 +86,7 @@ class kat(object):
self
.
__time_code
=
None
if
kat_code
!=
None
and
kat_file
!=
None
:
raise
exceptions
.
RuntimeError
(
"
Specify either a Kat file or some Kat code, not both.
"
)
raise
pkex
.
BasePyKatException
(
"
Specify either a Kat file or some Kat code, not both.
"
)
if
kat_code
!=
None
:
self
.
parseCommands
(
kat_code
)
...
...
@@ -164,7 +147,7 @@ class kat(object):
elif
(
first
==
"
xaxis
"
or
first
==
"
x2axis
"
or
first
==
"
xaxis*
"
or
first
==
"
x2axis*
"
):
self
.
add
(
pykat
.
commands
.
xaxis
.
parseFinesseText
(
line
))
else
:
print
"
Could not parse `{0}`
"
.
format
(
line
)
print
"
Parsing `{0}` into pykat object not implemented yet, added as extra line.
"
.
format
(
line
)
self
.
__extra_lines
.
append
(
line
+
"
\n
"
)
def
run
(
self
,
printout
=
1
,
printerr
=
1
,
save_output
=
False
,
save_kat
=
False
,
kat_name
=
None
)
:
...
...
@@ -177,26 +160,28 @@ class kat(object):
r
=
katRun
()
r
.
katScript
=
""
.
join
(
self
.
generateKatScript
())
if
len
(
self
.
__kat
exe
)
==
0
:
if
len
(
self
.
__kat
dir
)
==
0
:
# Get the environment variable for where Finesse is stored
self
.
__finesse_dir
=
os
.
environ
.
get
(
'
FINESSE_DIR
'
)
if
self
.
__finesse_dir
==
None
:
raise
pkex
.
MissingFinesseEnvVar
()
else
:
self
.
__finesse_dir
=
self
.
__katdir
if
len
(
self
.
__katname
)
==
0
:
katexe
=
"
kat
"
if
os
.
sys
.
platform
==
"
win32
"
:
katexe
+=
"
.exe
"
if
self
.
__finesse_dir
==
None
:
raise
MissingFinesseEnvVar
()
else
:
katexe
=
self
.
__katname
kat_exec
=
os
.
path
.
join
(
self
.
__finesse_dir
,
katexe
)
else
:
kat_exec
=
self
.
__katexe
# check if kat file exists and it is executable by user
if
not
(
os
.
path
.
isfile
(
kat_exec
)
and
os
.
access
(
kat_exec
,
os
.
X_OK
)):
raise
MissingFinesse
()
raise
pkex
.
MissingFinesse
()
# create a kat file which we will write the script into
katfile
=
tempfile
.
NamedTemporaryFile
(
suffix
=
"
.kat
"
)
...
...
@@ -226,8 +211,6 @@ class kat(object):
[
out
,
errpipe
]
=
p
.
communicate
()
print
out
# get the version number
ix
=
out
.
find
(
'
build
'
)
+
6
ix2
=
out
.
find
(
'
)
'
,
ix
)
...
...
@@ -236,7 +219,7 @@ class kat(object):
r
.
runDateTime
=
datetime
.
datetime
.
now
()
if
p
.
returncode
!=
0
:
raise
FinesseError
(
err
,
katfile
.
name
)
raise
pkex
.
Finesse
Run
Error
(
err
,
katfile
.
name
)
if
printout
==
1
:
print
out
if
printerr
==
1
:
print
err
...
...
@@ -297,11 +280,11 @@ class kat(object):
def
add
(
self
,
obj
)
:
try
:
if
isinstance
(
obj
,
Component
):
if
obj
.
name
in
self
.
__components
:
raise
exceptions
.
ValueError
(
"
A component with name
'
{0}
'
has already been added
"
.
format
([
obj
.
name
]))
raise
pkex
.
BasePyKatException
(
"
A component with name
'
{0}
'
has already been added
"
.
format
([
obj
.
name
]))
self
.
__components
[
obj
.
name
]
=
obj
self
.
__add_component
(
obj
)
...
...
@@ -309,7 +292,7 @@ class kat(object):
elif
isinstance
(
obj
,
Detector
):
if
obj
.
name
in
self
.
__detectors
:
raise
exceptions
.
ValueError
(
"
A detector
'
{0}
'
has already been added
"
.
format
(
obj
.
name
))
raise
pkex
.
BasePyKatException
(
"
A detector
'
{0}
'
has already been added
"
.
format
(
obj
.
name
))
self
.
__detectors
[
obj
.
name
]
=
obj
self
.
__add_detector
(
obj
)
...
...
@@ -320,10 +303,12 @@ class kat(object):
self
.
__add_command
(
obj
)
else
:
raise
exceptions
.
ValueError
(
"
Object {0} could not be added
"
.
format
(
obj
))
raise
pkex
.
BasePyKatException
(
"
Object {0} could not be added
"
.
format
(
obj
))
obj
.
_on_kat_add
(
self
)
except
pkex
.
BasePyKatException
as
ex
:
print
ex
def
readOutFile
(
self
,
filename
):
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment