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
55ba57f3
Commit
55ba57f3
authored
Feb 05, 2014
by
Daniel Brown
Browse files
adding amplitude detector
parent
8d0567f5
Changes
3
Hide whitespace changes
Inline
Side-by-side
pykat/components.py
View file @
55ba57f3
...
...
@@ -158,14 +158,14 @@ class AbstractMirrorComponent(Component):
def
__init__
(
self
,
name
,
R
=
None
,
T
=
None
,
L
=
None
,
phi
=
0
,
Rcx
=
0
,
Rcy
=
0
,
xbeta
=
0
,
ybeta
=
0
,
mass
=
0
,
r_ap
=
0
):
super
(
AbstractMirrorComponent
,
self
).
__init__
(
name
)
if
(
L
!=
None
and
R
!=
None
and
T
!=
None
)
and
R
+
T
+
L
!=
1
:
if
(
L
!=
None
and
R
!=
None
and
T
!=
None
)
and
SIfloat
(
R
)
+
SIfloat
(
T
)
+
SIfloat
(
L
)
!=
1
:
raise
pkex
.
BasePyKatException
(
'L+R+T must equal 1 if all are specified'
)
elif
(
R
!=
None
and
L
is
None
and
T
!=
None
):
L
=
1
-
(
R
+
T
)
L
=
1
-
(
SIfloat
(
R
)
+
SIfloat
(
T
)
)
elif
(
R
is
None
and
L
!=
None
and
T
!=
None
):
R
=
1
-
(
L
+
T
)
R
=
1
-
(
SIfloat
(
L
)
+
SIfloat
(
T
)
)
elif
(
R
!=
None
and
L
!=
None
and
T
is
None
):
T
=
1
-
(
L
+
R
)
T
=
1
-
(
SIfloat
(
L
)
+
SIfloat
(
R
)
)
else
:
raise
pkex
.
BasePyKatException
(
'Must specify at least two of L, R or T'
)
...
...
@@ -244,8 +244,8 @@ class AbstractMirrorComponent(Component):
self
.
Rcy
.
value
=
SIfloat
(
value
)
class
mirror
(
AbstractMirrorComponent
):
def
__init__
(
self
,
name
,
node1
,
node2
,
R
=
0
,
T
=
0
,
phi
=
0
,
Rcx
=
0
,
Rcy
=
0
,
xbeta
=
0
,
ybeta
=
0
,
mass
=
0
,
r_ap
=
0
):
super
(
mirror
,
self
).
__init__
(
name
,
R
,
T
,
phi
,
Rcx
,
Rcy
,
xbeta
,
ybeta
,
mass
,
r_ap
)
def
__init__
(
self
,
name
,
node1
,
node2
,
R
=
None
,
T
=
None
,
L
=
None
,
phi
=
0
,
Rcx
=
0
,
Rcy
=
0
,
xbeta
=
0
,
ybeta
=
0
,
mass
=
0
,
r_ap
=
0
):
super
(
mirror
,
self
).
__init__
(
name
,
R
,
T
,
L
,
phi
,
Rcx
,
Rcy
,
xbeta
,
ybeta
,
mass
,
r_ap
)
self
.
_requested_node_names
.
append
(
node1
)
self
.
_requested_node_names
.
append
(
node2
)
...
...
@@ -262,17 +262,17 @@ class mirror(AbstractMirrorComponent):
if
len
(
values
[
0
])
==
1
:
values
.
pop
(
0
)
# remove initial value
return
mirror
(
values
[
0
],
values
[
4
],
values
[
5
],
R
=
values
[
1
],
T
=
values
[
2
],
phi
=
values
[
3
])
return
mirror
(
values
[
0
],
values
[
4
],
values
[
5
],
L
=
None
,
R
=
values
[
1
],
T
=
values
[
2
],
phi
=
values
[
3
])
else
:
if
values
[
0
][
1
]
==
"1"
:
values
.
pop
(
0
)
# remove initial value
return
mirror
(
values
[
0
],
values
[
4
],
values
[
5
],
L
=
values
[
2
],
T
=
values
[
1
],
phi
=
values
[
3
])
return
mirror
(
values
[
0
],
values
[
4
],
values
[
5
],
R
=
None
,
L
=
values
[
2
],
T
=
values
[
1
],
phi
=
values
[
3
])
else
:
values
.
pop
(
0
)
# remove initial value
return
mirror
(
values
[
0
],
values
[
4
],
values
[
5
],
R
=
values
[
1
],
L
=
values
[
2
],
phi
=
values
[
3
])
return
mirror
(
values
[
0
],
values
[
4
],
values
[
5
],
T
=
None
,
R
=
values
[
1
],
L
=
values
[
2
],
phi
=
values
[
3
])
def
getFinesseText
(
self
):
if
R
+
T
+
L
>
1
:
if
self
.
R
+
self
.
T
+
self
.
L
>
1
:
raise
pkex
.
BasePyKatException
(
"Mirror {0} has R+T+L > 1"
.
format
(
self
.
name
))
rtn
=
[]
...
...
@@ -335,6 +335,9 @@ class beamSplitter(AbstractMirrorComponent):
values
[
4
])
def
getFinesseText
(
self
):
if
self
.
R
+
self
.
T
+
self
.
L
>
1
:
raise
pkex
.
BasePyKatException
(
"Beamsplitter {0} has R+T+L > 1"
.
format
(
self
.
name
))
rtn
=
[]
rtn
.
append
(
'bs {0} {1} {2} {3} {4} {5} {6} {7} {8}'
.
format
(
...
...
pykat/detectors.py
View file @
55ba57f3
# -*- coding: utf-8 -*-
"""
Created on Fri Feb 01 09:09:10 2013
Created on Fri Feb 01 0
split()
9:09:10 2013
@author: Daniel
"""
...
...
@@ -80,7 +80,65 @@ class Detector(object) :
del
self
.
_mask
[
id
]
self
.
_mask
[
id
]
=
factor
class
ad
(
Detector
):
def
__init__
(
self
,
name
,
frequency
,
node_name
,
mode
=
None
,
alternate_beam
=
False
):
Detector
.
__init__
(
self
,
name
,
node_name
)
self
.
mode
=
mode
self
.
alternate_beam
=
alternate_beam
self
.
__f
=
Param
(
"f"
,
self
,
frequency
)
@
property
def
mode
(
self
):
return
self
.
__mode
@
mode
.
setter
def
mode
(
self
,
value
):
if
value
!=
None
and
len
(
value
)
!=
2
:
raise
pkex
.
BasePyKatException
(
'Mode must be a container of length 2, first element the x mode and second the y mode'
)
self
.
__mode
=
value
@
property
def
f
(
self
):
return
self
.
__f
@
f
.
setter
def
f
(
self
,
value
):
self
.
__f
.
value
=
value
@
staticmethod
def
parseFinesseText
(
text
):
values
=
text
.
split
()
if
values
[
-
1
].
endswith
(
'*'
):
altbeam
=
True
else
:
altbeam
=
False
if
len
(
values
)
==
6
:
return
ad
(
values
[
1
],
values
[
4
],
values
[
5
],
mode
=
[
int
(
values
[
2
]),
int
(
values
[
3
])],
alternate_beam
=
alt_beam
)
elif
len
(
values
)
==
4
:
return
ad
(
values
[
1
],
values
[
2
],
values
[
3
],
alternate_beam
=
altbeam
)
else
:
raise
pkex
.
BasePyKatException
(
'Amplitude detector code "{0}" is not a valid FINESSE command'
.
format
(
text
))
def
getFinesseText
(
self
)
:
rtn
=
[]
if
self
.
alternate_beam
:
alt
=
'*'
else
:
alt
=
''
if
self
.
mode
==
None
:
rtn
.
append
(
"ad {name} {f} {node}{alt}"
.
format
(
name
=
self
.
name
,
f
=
str
(
self
.
f
.
value
),
node
=
self
.
node
.
name
,
alt
=
alt
))
else
:
rtn
.
append
(
"ad {name} {n} {m} {f} {node}{alt}"
.
fomat
(
name
=
self
.
name
,
n
=
str
(
self
.
mode
[
0
]),
m
=
str
(
self
.
mode
[
1
]),
f
=
str
(
self
.
f
.
value
),
node
=
self
.
node
.
name
,
alt
=
alt
))
for
p
in
self
.
_params
:
rtn
.
extend
(
p
.
getFinesseText
())
return
rtn
class
pd
(
Detector
):
def
__init__
(
self
,
name
,
num_demods
,
node_name
,
senstype
=
None
,
alternate_beam
=
False
,
pdtype
=
None
,
**
kwargs
):
...
...
@@ -88,7 +146,7 @@ class pd(Detector):
self
.
__num_demods
=
num_demods
self
.
__senstype
=
senstype
self
.
__
alternate_beam
=
alternate_beam
self
.
alternate_beam
=
alternate_beam
self
.
__pdtype
=
pdtype
# create the parameters for all 5 demodulations regardless
...
...
@@ -204,7 +262,7 @@ class pd(Detector):
@
staticmethod
def
parseFinesseText
(
text
):
values
=
text
.
split
(
" "
)
values
=
text
.
split
()
demods
=
0
senstype
=
None
...
...
@@ -253,7 +311,7 @@ class pd(Detector):
alt_str
=
""
fphi_str
=
""
if
self
.
__
alternate_beam
:
if
self
.
alternate_beam
:
alt_str
=
"*"
for
n
in
range
(
1
,
1
+
self
.
num_demods
):
...
...
@@ -337,7 +395,7 @@ class photodiode(Detector):
@
staticmethod
def
parseFinesseText
(
text
):
values
=
text
.
split
(
" "
)
values
=
text
.
split
()
if
values
[
0
][
0
:
2
]
!=
"pd"
:
raise
exceptions
.
FinesseParse
(
"'{0}' not a valid photodiode command"
.
format
(
text
))
...
...
pykat/finesse.py
View file @
55ba57f3
...
...
@@ -438,6 +438,8 @@ class kat(object):
obj
=
pykat
.
components
.
lens
.
parseFinesseText
(
line
)
elif
(
first
[
0
:
3
]
==
"mod"
):
obj
=
pykat
.
components
.
modulator
.
parseFinesseText
(
line
)
elif
(
first
[
0
:
2
]
==
"ad"
):
obj
=
pykat
.
detectors
.
ad
.
parseFinesseText
(
line
)
elif
(
first
[
0
:
2
]
==
"pd"
and
first
!=
"pdtype"
):
obj
=
pykat
.
detectors
.
pd
.
parseFinesseText
(
line
)
elif
(
first
==
"xaxis"
or
first
==
"xaxis*"
):
...
...
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