Skip to content
GitLab
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
ed7f6c2a
Commit
ed7f6c2a
authored
Dec 13, 2013
by
Daniel Brown
Browse files
fixing output from kat binary so correctly displays the percentage done. Added in x2axis
parent
1487f402
Changes
5
Hide whitespace changes
Inline
Side-by-side
bin/test_plot.py
View file @
ed7f6c2a
...
...
@@ -39,7 +39,7 @@ kat.maxtem = 0
out
=
kat
.
run
(
printout
=
0
,
printerr
=
0
)
pl
.
figure
()
pl
.
plot
(
out
.
x
,
out
.
y
)
pl
.
plot
(
out
.
x
,
out
[
"pd_cav"
]
)
pl
.
xlabel
(
out
.
xlabel
)
pl
.
ylabel
(
"Intensity [W]"
)
pl
.
legend
(
out
.
ylabels
)
...
...
pykat/commands.py
View file @
ed7f6c2a
...
...
@@ -74,10 +74,11 @@ class attr():
if
comp
==
None
:
raise
# can list multiple attributes per command
class
xaxis
(
Command
):
def
__init__
(
self
,
scale
,
limits
,
comp
,
param
,
steps
):
def
__init__
(
self
,
scale
,
limits
,
comp
,
param
,
steps
,
axis_type
=
"xaxis"
):
self
.
_axis_type
=
axis_type
if
scale
==
"lin"
:
scale
=
Scale
.
linear
...
...
@@ -121,23 +122,43 @@ class xaxis(Command):
def
parseFinesseText
(
text
):
values
=
text
.
split
(
" "
)
if
values
[
0
]
!=
"xaxis"
and
values
[
0
]
!=
"xaxis*"
and
values
[
0
]
!=
"x2axis"
and
values
[
0
]
!=
"x2axis*"
:
if
values
[
0
]
!=
"xaxis"
and
values
[
0
]
!=
"xaxis*"
:
raise
exceptions
.
RuntimeError
(
"'{0}' not a valid Finesse xaxis command"
.
format
(
text
))
axis_type
=
values
[
0
]
values
.
pop
(
0
)
# remove initial value
if
len
(
values
)
!=
6
:
raise
exceptions
.
RuntimeError
(
"xaxis Finesse code format incorrect '{0}'"
.
format
(
text
))
return
xaxis
(
values
[
2
],
[
values
[
3
],
values
[
4
]],
values
[
0
],
values
[
1
],
values
[
5
])
return
xaxis
(
values
[
2
],
[
values
[
3
],
values
[
4
]],
values
[
0
],
values
[
1
],
values
[
5
]
,
axis_type
=
axis_type
)
def
getFinesseText
(
self
):
# store either the component name of the string provided
comp_name
=
self
.
__comp
.
name
if
isinstance
(
self
.
__comp
,
Component
)
else
self
.
__comp
param_name
=
self
.
__param
.
name
if
isinstance
(
self
.
__param
,
Param
)
else
self
.
__param
return
'
x
axis {0} {1} {2} {3} {4} {5}'
.
format
(
return
'
{
axis
_type}
{0} {1} {2} {3} {4} {5}'
.
format
(
comp_name
,
param_name
,
self
.
scale
,
min
(
self
.
limits
),
max
(
self
.
limits
),
self
.
steps
);
min
(
self
.
limits
),
max
(
self
.
limits
),
self
.
steps
,
axis_type
=
self
.
_axis_type
);
class
x2axis
(
xaxis
):
def
__init__
(
self
,
scale
,
limits
,
comp
,
param
,
steps
):
xaxis
.
__init__
(
self
,
scale
,
limits
,
comp
,
param
,
steps
,
axis_type
=
"x2axis"
)
@
staticmethod
def
parseFinesseText
(
text
):
values
=
text
.
split
(
" "
)
if
values
[
0
]
!=
"x2axis"
and
values
[
0
]
!=
"x2axis*"
:
raise
exceptions
.
RuntimeError
(
"'{0}' not a valid Finesse xaxis command"
.
format
(
text
))
axis_type
=
values
[
0
]
values
.
pop
(
0
)
# remove initial value
if
len
(
values
)
!=
6
:
raise
exceptions
.
RuntimeError
(
"xaxis Finesse code format incorrect '{0}'"
.
format
(
text
))
return
x2axis
(
values
[
2
],
[
values
[
3
],
values
[
4
]],
values
[
0
],
values
[
1
],
values
[
5
])
\ No newline at end of file
pykat/components.py
View file @
ed7f6c2a
...
...
@@ -345,7 +345,7 @@ class space(Component):
self
.
_requested_node_names
.
append
(
node1
)
self
.
_requested_node_names
.
append
(
node2
)
self
.
_QItem
=
None
self
.
__L
=
SIfloat
(
L
)
self
.
__n
=
SIfloat
(
n
)
...
...
pykat/finesse.py
View file @
ed7f6c2a
...
...
@@ -66,8 +66,19 @@ class katRun(object):
def
loadKatRun
(
filename
):
with
open
(
filename
,
'r'
)
as
infile
:
return
pickle
.
load
(
infile
)
def
get
(
self
,
value
):
return
self
[
value
]
def
__getitem__
(
self
,
value
):
if
value
in
self
.
ylabels
:
idx
=
self
.
ylabels
.
index
(
value
)
if
len
(
self
.
y
.
shape
)
==
1
:
return
self
.
y
else
:
return
self
.
y
[:,
idx
]
else
:
raise
pkex
.
BasePyKatExeception
(
"No output by the name {0} found"
,
value
)
class
Block
:
def
__init__
(
self
,
name
):
self
.
__name
=
name
...
...
@@ -213,8 +224,10 @@ class kat(object):
obj
=
pykat
.
components
.
lens
.
parseFinesseText
(
line
)
elif
(
first
[
0
:
2
]
==
"pd"
):
obj
=
pykat
.
detectors
.
photodiode
.
parseFinesseText
(
line
)
elif
(
first
==
"xaxis"
or
first
==
"x
2axis"
or
first
==
"xaxis*"
or
first
==
"x2
axis*"
):
elif
(
first
==
"xaxis"
or
first
==
"xaxis*"
):
obj
=
pykat
.
commands
.
xaxis
.
parseFinesseText
(
line
)
elif
(
first
==
"x2axis"
or
first
==
"x2axis*"
):
obj
=
pykat
.
commands
.
x2axis
.
parseFinesseText
(
line
)
elif
(
first
==
"gauss"
or
first
==
"gauss*"
or
first
==
"gauss**"
):
after_process
.
append
(
line
)
else
:
...
...
@@ -251,13 +264,17 @@ class kat(object):
except
BasePyKatException
as
ex
:
print
ex
def
run
(
self
,
printout
=
1
,
printerr
=
1
,
save_output
=
False
,
save_kat
=
False
,
kat_name
=
None
)
:
def
run
(
self
,
printout
=
0
,
printerr
=
0
,
save_output
=
False
,
save_kat
=
False
,
kat_name
=
None
)
:
"""
Runs the current simulation setup that has been built thus far.
It returns a katRun object which is populated with the various
data from the simulation run.
"""
try
:
print
"--------------------------------------------------------------"
start
=
datetime
.
datetime
.
now
()
print
"Running kat - Started at "
+
str
(
start
)
r
=
katRun
()
r
.
katScript
=
""
.
join
(
self
.
generateKatScript
())
...
...
@@ -295,28 +312,37 @@ class kat(object):
katfile
.
flush
()
cmd
=
[
kat_exec
,
'--perl1'
]
if
self
.
__time_code
:
cmd
.
append
(
'--perf-timing'
)
cmd
.
append
(
'--no-backspace'
)
cmd
.
append
(
'--no-backspace'
)
# set default format so that less repeated numbers are printed to the
# output file, should speed up running and parsing of output files
cmd
.
append
(
'-format=%.15g'
)
cmd
.
append
(
katfile
.
name
)
if
self
.
verbose
:
print
cmd
#if self.verbose:
#print cmd
p
=
subprocess
.
Popen
(
cmd
,
shell
=
False
,
stdout
=
subprocess
.
PIPE
,
stderr
=
subprocess
.
PIPE
)
err
=
""
print
"Finesse binary output:"
for
line
in
iter
(
p
.
stderr
.
readline
,
""
):
err
+=
line
vals
=
line
.
split
(
"-"
)
if
len
(
vals
)
==
2
:
action
=
vals
[
0
].
strip
()
prc
=
vals
[
1
].
strip
()[:
-
1
]
#sys.stdout.write("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b")
sys
.
stdout
.
write
(
"
\r
{0} {1}%"
.
format
(
action
,
prc
))
sys
.
stdout
.
flush
()
#err += line
if
len
(
line
)
>
0
:
if
line
.
rstrip
().
endswith
(
'%'
):
vals
=
line
.
split
(
"-"
)
action
=
vals
[
0
].
strip
()
prc
=
vals
[
1
].
strip
()[:
-
1
]
sys
.
stdout
.
write
(
"
\r
{0} {1}%"
.
format
(
action
,
prc
))
elif
line
[
0
]
==
'*'
:
sys
.
stdout
.
write
(
line
)
[
out
,
errpipe
]
=
p
.
communicate
()
# get the version number
...
...
@@ -339,7 +365,7 @@ class kat(object):
[
r
.
x
,
r
.
y
,
hdr
]
=
self
.
readOutFile
(
outfile
)
r
.
xlabel
=
hdr
[
0
]
r
.
ylabels
=
hdr
[
1
:]
r
.
ylabels
=
map
(
str
.
strip
,
hdr
[
1
:]
)
if
save_output
:
newoutfile
=
"{0}.out"
.
format
(
base
)
...
...
@@ -382,9 +408,12 @@ class kat(object):
return
[
r
,
perfData
]
else
:
return
r
except
FinesseRunError
as
fe
:
print
fe
finally
:
print
""
print
"Finished in "
+
str
(
datetime
.
datetime
.
now
()
-
start
)
def
add
(
self
,
obj
):
...
...
pykat/utilities/optics/gaussian_beams.py
View file @
ed7f6c2a
import
pykat.exceptions
as
pkex
import
numpy
import
math
import
copy
class
gauss_param
(
object
):
"""
...
...
@@ -141,4 +142,49 @@ class gauss_param(object):
@
property
def
imag
(
self
):
return
self
.
__q
.
imag
@
imag
.
setter
def
imag
(
self
,
value
):
self
.
__q
.
imag
=
SIfloat
(
value
)
\ No newline at end of file
def
imag
(
self
,
value
):
self
.
__q
.
imag
=
SIfloat
(
value
)
class
HG_gauss_beam
(
object
):
def
__init__
(
self
,
qx
,
qy
=
None
,
n
=
0
,
m
=
0
):
self
.
_qx
=
copy
.
deepcopy
(
qx
)
self
.
_2pi_qrt
=
math
.
pow
(
2.0
/
math
.
pi
,
0.25
)
if
qy
==
None
:
self
.
_q0
=
copy
.
deepcopy
(
qx
)
else
:
self
.
_q0
=
copy
.
deepcopy
(
qy
)
self
.
n
=
n
self
.
m
=
m
self
.
_calc_constants
()
@
property
def
n
(
self
):
return
self
.
_n
@
n
.
setter
def
n
(
self
,
value
):
self
.
_n
=
float
(
value
)
self
.
_calc_constants
()
@
property
def
m
(
self
):
return
self
.
_m
@
m
.
setter
def
m
(
self
,
value
):
self
.
_m
=
float
(
value
)
self
.
_calc_constants
()
def
_calc_constants
(
self
):
self
.
__xpre_const
=
math
.
pow
(
2.0
/
math
.
pi
,
0.25
)
self
.
__xpre_const
*=
math
.
sqrt
(
1
/
(
2
**
self
.
_n
*
math
.
factorial
(
self
.
_n
)))
self
.
__xpre_const
*=
math
.
sqrt
(
1j
*
self
.
_qx
.
imag
/
self
.
_qx
)
self
.
__xpre_const
*=
math
.
pow
((
1j
*
self
.
_qx
.
imag
*
self
.
_qx
.
conjugate
)
/
(
-
1j
*
self
.
_qx
.
imag
*
self
.
_qx
),
self
.
_n
/
2.0
)
self
.
__ypre_const
=
math
.
pow
(
2.0
/
math
.
pi
,
0.25
)
self
.
__ypre_const
*=
math
.
sqrt
(
1
/
(
2
**
self
.
_m
*
math
.
factorial
(
self
.
_m
)))
self
.
__ypre_const
*=
math
.
sqrt
(
1j
*
self
.
_qy
.
imag
/
self
.
_qy
)
self
.
__ypre_const
*=
math
.
pow
((
1j
*
self
.
_qy
.
imag
*
self
.
_qy
.
conjugate
)
/
(
-
1j
*
self
.
_qy
.
imag
*
self
.
_qy
),
self
.
_m
/
2.0
)
def
Unm
(
self
,
n
,
m
,
x
,
y
):
return
self
.
__xpre_const
*
special
\ No newline at end of file
Write
Preview
Supports
Markdown
0%
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!
Cancel
Please
register
or
sign in
to comment