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
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Sebastian Steinlechner
pykat
Commits
d75cff35
Commit
d75cff35
authored
10 years ago
by
Daniel Brown
Browse files
Options
Downloads
Patches
Plain Diff
adding in qhd detectors fixing some other bits
parent
f284c167
No related branches found
No related tags found
No related merge requests found
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
bin/test_hom.py
+12
-5
12 additions, 5 deletions
bin/test_hom.py
pykat/detectors.py
+79
-12
79 additions, 12 deletions
pykat/detectors.py
pykat/finesse.py
+2
-0
2 additions, 0 deletions
pykat/finesse.py
with
93 additions
and
17 deletions
bin/test_hom.py
+
12
−
5
View file @
d75cff35
...
...
@@ -3,14 +3,21 @@ import pykat
kat
=
pykat
.
finesse
.
kat
()
kat
.
parseCommands
(
"""
l l1 1 0
8
0 n1
l
l2 1
0
9
0 n4
l l1 1 0 0 n1
sq
l2
0
10 0 n4
bs bs1 0.5 0.5 0 0 n1 n2 n3 n4
fsig noise l1 amp 1 0 1
hd hd1 0 n2 n3
qhd qhd180 180 n2 n3
qhd qhd0 0 n2 n3
xaxis
hd
1 phase lin 0 360
100
0
xaxis
l
1 phase lin 0 360
36
0
"""
)
out
=
kat
.
run
()
#out.plot()
print
kat
.
qhd180
This diff is collapsed.
Click to expand it.
pykat/detectors.py
+
79
−
12
View file @
d75cff35
...
...
@@ -17,6 +17,10 @@ import warnings
import
copy
class
BaseDetector
(
object
)
:
"""
This is a base class for all detectors. Classes Detector1 and Detector2 should be used directly.
This base class can handled detectors connected to multiple nodes.
"""
def
__init__
(
self
,
name
,
nodes
=
None
,
max_nodes
=
1
):
...
...
@@ -36,7 +40,8 @@ class BaseDetector(object) :
self
.
_requested_nodes
=
[]
if
nodes
!=
None
:
if
isinstance
(
nodes
,
collections
.
Iterable
):
if
isinstance
(
nodes
,
(
list
,
tuple
)):
if
len
(
nodes
)
>
max_nodes
:
raise
pkex
.
BasePyKatException
(
"
Tried to set too many nodes, %s, maximum number is %i.
"
%
(
str
(
nodes
),
max_nodes
))
...
...
@@ -48,7 +53,7 @@ class BaseDetector(object) :
self
.
_alternate_beam
.
append
(
False
)
self
.
_requested_nodes
.
append
(
n
)
el
se
:
el
if
isinstance
(
nodes
,
str
)
:
# if we don't have a collection
if
nodes
[
-
1
]
==
'
*
'
:
self
.
_alternate_beam
.
append
(
True
)
...
...
@@ -57,6 +62,8 @@ class BaseDetector(object) :
self
.
_alternate_beam
.
append
(
False
)
self
.
_requested_nodes
.
append
(
nodes
)
else
:
raise
pkex
.
BasePyKatException
(
"
Nodes should be a list or tuple of node names or a singular node name as a string.
"
)
def
_register_param
(
self
,
param
):
self
.
_params
.
append
(
param
)
...
...
@@ -127,24 +134,29 @@ class BaseDetector(object) :
raise
pkex
.
BasePyKatException
(
"
There is no node called
"
+
value
+
"
in the kat object this detector is attached to.
"
)
class
Detector1
(
BaseDetector
):
"""
A detector that attaches to one node.
"""
@property
def
node
(
self
):
return
self
.
_
_
nodes
[
0
]
def
node
(
self
):
return
self
.
_nodes
[
0
]
@node.setter
def
node
(
self
,
value
):
self
.
_set_node
(
value
,
0
)
class
Detector2
(
BaseDetector
):
"""
A detector that attaches to two node.
"""
@property
def
node1
(
self
):
return
self
.
_
_
nodes
[
0
]
def
node1
(
self
):
return
self
.
_nodes
[
0
]
@node1.setter
def
node
(
self
,
value
):
self
.
_set_node
(
value
,
0
)
@property
def
node2
(
self
):
return
self
.
_
_
nodes
[
1
]
def
node2
(
self
):
return
self
.
_nodes
[
1
]
@node2.setter
def
node
(
self
,
value
):
self
.
_set_node
(
value
,
1
)
...
...
@@ -754,7 +766,7 @@ class hd(Detector2):
def
__init__
(
self
,
name
,
phase
,
node1_name
,
node2_name
):
BaseDetector
.
__init__
(
self
,
name
,
(
node1_name
,
node2_name
),
max_nodes
=
2
)
self
.
__
homangl
e
=
Param
(
"
phase
"
,
self
,
None
)
self
.
__
phas
e
=
Param
(
"
phase
"
,
self
,
0
)
@property
def
phase
(
self
):
return
self
.
__phase
...
...
@@ -774,11 +786,11 @@ class hd(Detector2):
rtn
=
[]
if
self
.
enabled
:
n1
=
self
.
node
s
[
0
]
.
name
n2
=
self
.
node
s
[
1
]
.
name
n1
=
self
.
node
1
.
name
n2
=
self
.
node
2
.
name
if
self
.
_
_
alternate_beam
1
[
0
]:
n1
+=
"
*
"
if
self
.
_
_
alternate_beam
2
[
1
]:
n2
+=
"
*
"
if
self
.
_alternate_beam
[
0
]:
n1
+=
"
*
"
if
self
.
_alternate_beam
[
1
]:
n2
+=
"
*
"
rtn
.
append
(
"
hd {0} {1} {2} {3}
"
.
format
(
self
.
name
,
self
.
phase
,
n1
,
n2
))
...
...
@@ -789,3 +801,58 @@ class hd(Detector2):
rtn
.
extend
(
p
.
getFinesseText
())
return
rtn
class
qhd
(
Detector2
):
def
__init__
(
self
,
name
,
phase
,
node1_name
,
node2_name
,
sensitivity
=
""
):
BaseDetector
.
__init__
(
self
,
name
,
(
node1_name
,
node2_name
),
max_nodes
=
2
)
self
.
__phase
=
Param
(
"
phase
"
,
self
,
phase
)
self
.
sensitivity
=
sensitivity
@property
def
phase
(
self
):
return
self
.
__phase
@phase.setter
def
phase
(
self
,
value
):
self
.
__phase
.
value
=
value
@property
def
sensitivity
(
self
):
return
self
.
__sensitivity
@sensitivity.setter
def
sensitivity
(
self
,
value
):
if
value
==
'
S
'
or
value
==
'
N
'
:
self
.
__sensitivity
=
value
elif
value
==
None
or
value
==
''
:
self
.
__sensitivity
=
""
else
:
raise
pkex
.
BasePyKatException
(
"
qhd (%s) sensitivity option
'
%s
'
is not available, use either
'
S
'
or
'
N
'
.
"
%
(
self
.
name
,
value
))
def
parseAttributes
(
self
,
values
):
raise
pkex
.
BasePyKatException
(
"
hd detector %s has no attributes to set
"
%
self
.
name
)
@staticmethod
def
parseFinesseText
(
text
):
values
=
text
.
split
()
return
qhd
(
values
[
1
],
float
(
values
[
2
]),
str
(
values
[
3
]),
str
(
values
[
4
]))
def
getFinesseText
(
self
):
rtn
=
[]
if
self
.
enabled
:
n1
=
self
.
node1
.
name
n2
=
self
.
node2
.
name
if
self
.
_alternate_beam
[
0
]:
n1
+=
"
*
"
if
self
.
_alternate_beam
[
1
]:
n2
+=
"
*
"
rtn
.
append
(
"
qhd{4} {0} {1} {2} {3}
"
.
format
(
self
.
name
,
self
.
phase
,
n1
,
n2
,
self
.
sensitivity
))
if
self
.
scale
!=
None
:
rtn
.
append
(
"
scale {1} {0}
"
.
format
(
self
.
name
,
self
.
scale
))
for
p
in
self
.
_params
:
rtn
.
extend
(
p
.
getFinesseText
())
return
rtn
\ No newline at end of file
This diff is collapsed.
Click to expand it.
pykat/finesse.py
+
2
−
0
View file @
d75cff35
...
...
@@ -636,6 +636,8 @@ class kat(object):
obj
=
pykat
.
commands
.
xaxis
.
parseFinesseText
(
line
)
elif
(
first
[
0
:
2
]
==
"
hd
"
):
obj
=
pykat
.
detectors
.
hd
.
parseFinesseText
(
line
)
elif
(
first
.
startswith
(
"
qhd
"
)):
obj
=
pykat
.
detectors
.
qhd
.
parseFinesseText
(
line
)
elif
(
first
==
"
x2axis
"
or
first
==
"
x2axis*
"
):
obj
=
pykat
.
commands
.
x2axis
.
parseFinesseText
(
line
)
elif
(
first
==
"
gauss
"
or
first
==
"
gauss*
"
or
first
==
"
gauss**
"
):
...
...
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