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
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
Branches
Branches containing commit
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
...
@@ -3,14 +3,21 @@ import pykat
kat
=
pykat
.
finesse
.
kat
()
kat
=
pykat
.
finesse
.
kat
()
kat
.
parseCommands
(
"""
kat
.
parseCommands
(
"""
l l1 1 0
8
0 n1
l l1 1 0 0 n1
l
l2 1
0
9
0 n4
sq
l2
0
10 0 n4
bs bs1 0.5 0.5 0 0 n1 n2 n3 n4
bs bs1 0.5 0.5 0 0 n1 n2 n3 n4
fsig noise l1 amp 1 0 1
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
...
@@ -17,6 +17,10 @@ import warnings
import
copy
import
copy
class
BaseDetector
(
object
)
:
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
):
def
__init__
(
self
,
name
,
nodes
=
None
,
max_nodes
=
1
):
...
@@ -36,7 +40,8 @@ class BaseDetector(object) :
...
@@ -36,7 +40,8 @@ class BaseDetector(object) :
self
.
_requested_nodes
=
[]
self
.
_requested_nodes
=
[]
if
nodes
!=
None
:
if
nodes
!=
None
:
if
isinstance
(
nodes
,
collections
.
Iterable
):
if
isinstance
(
nodes
,
(
list
,
tuple
)):
if
len
(
nodes
)
>
max_nodes
:
if
len
(
nodes
)
>
max_nodes
:
raise
pkex
.
BasePyKatException
(
"
Tried to set too many nodes, %s, maximum number is %i.
"
%
(
str
(
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) :
...
@@ -48,7 +53,7 @@ class BaseDetector(object) :
self
.
_alternate_beam
.
append
(
False
)
self
.
_alternate_beam
.
append
(
False
)
self
.
_requested_nodes
.
append
(
n
)
self
.
_requested_nodes
.
append
(
n
)
el
se
:
el
if
isinstance
(
nodes
,
str
)
:
# if we don't have a collection
# if we don't have a collection
if
nodes
[
-
1
]
==
'
*
'
:
if
nodes
[
-
1
]
==
'
*
'
:
self
.
_alternate_beam
.
append
(
True
)
self
.
_alternate_beam
.
append
(
True
)
...
@@ -57,6 +62,8 @@ class BaseDetector(object) :
...
@@ -57,6 +62,8 @@ class BaseDetector(object) :
self
.
_alternate_beam
.
append
(
False
)
self
.
_alternate_beam
.
append
(
False
)
self
.
_requested_nodes
.
append
(
nodes
)
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
):
def
_register_param
(
self
,
param
):
self
.
_params
.
append
(
param
)
self
.
_params
.
append
(
param
)
...
@@ -127,24 +134,29 @@ class BaseDetector(object) :
...
@@ -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.
"
)
raise
pkex
.
BasePyKatException
(
"
There is no node called
"
+
value
+
"
in the kat object this detector is attached to.
"
)
class
Detector1
(
BaseDetector
):
class
Detector1
(
BaseDetector
):
"""
A detector that attaches to one node.
"""
@property
@property
def
node
(
self
):
return
self
.
_
_
nodes
[
0
]
def
node
(
self
):
return
self
.
_nodes
[
0
]
@node.setter
@node.setter
def
node
(
self
,
value
):
def
node
(
self
,
value
):
self
.
_set_node
(
value
,
0
)
self
.
_set_node
(
value
,
0
)
class
Detector2
(
BaseDetector
):
class
Detector2
(
BaseDetector
):
"""
A detector that attaches to two node.
"""
@property
@property
def
node1
(
self
):
return
self
.
_
_
nodes
[
0
]
def
node1
(
self
):
return
self
.
_nodes
[
0
]
@node1.setter
@node1.setter
def
node
(
self
,
value
):
def
node
(
self
,
value
):
self
.
_set_node
(
value
,
0
)
self
.
_set_node
(
value
,
0
)
@property
@property
def
node2
(
self
):
return
self
.
_
_
nodes
[
1
]
def
node2
(
self
):
return
self
.
_nodes
[
1
]
@node2.setter
@node2.setter
def
node
(
self
,
value
):
def
node
(
self
,
value
):
self
.
_set_node
(
value
,
1
)
self
.
_set_node
(
value
,
1
)
...
@@ -754,7 +766,7 @@ class hd(Detector2):
...
@@ -754,7 +766,7 @@ class hd(Detector2):
def
__init__
(
self
,
name
,
phase
,
node1_name
,
node2_name
):
def
__init__
(
self
,
name
,
phase
,
node1_name
,
node2_name
):
BaseDetector
.
__init__
(
self
,
name
,
(
node1_name
,
node2_name
),
max_nodes
=
2
)
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
@property
def
phase
(
self
):
return
self
.
__phase
def
phase
(
self
):
return
self
.
__phase
...
@@ -774,11 +786,11 @@ class hd(Detector2):
...
@@ -774,11 +786,11 @@ class hd(Detector2):
rtn
=
[]
rtn
=
[]
if
self
.
enabled
:
if
self
.
enabled
:
n1
=
self
.
node
s
[
0
]
.
name
n1
=
self
.
node
1
.
name
n2
=
self
.
node
s
[
1
]
.
name
n2
=
self
.
node
2
.
name
if
self
.
_
_
alternate_beam
1
[
0
]:
n1
+=
"
*
"
if
self
.
_alternate_beam
[
0
]:
n1
+=
"
*
"
if
self
.
_
_
alternate_beam
2
[
1
]:
n2
+=
"
*
"
if
self
.
_alternate_beam
[
1
]:
n2
+=
"
*
"
rtn
.
append
(
"
hd {0} {1} {2} {3}
"
.
format
(
self
.
name
,
self
.
phase
,
n1
,
n2
))
rtn
.
append
(
"
hd {0} {1} {2} {3}
"
.
format
(
self
.
name
,
self
.
phase
,
n1
,
n2
))
...
@@ -789,3 +801,58 @@ class hd(Detector2):
...
@@ -789,3 +801,58 @@ class hd(Detector2):
rtn
.
extend
(
p
.
getFinesseText
())
rtn
.
extend
(
p
.
getFinesseText
())
return
rtn
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):
...
@@ -636,6 +636,8 @@ class kat(object):
obj
=
pykat
.
commands
.
xaxis
.
parseFinesseText
(
line
)
obj
=
pykat
.
commands
.
xaxis
.
parseFinesseText
(
line
)
elif
(
first
[
0
:
2
]
==
"
hd
"
):
elif
(
first
[
0
:
2
]
==
"
hd
"
):
obj
=
pykat
.
detectors
.
hd
.
parseFinesseText
(
line
)
obj
=
pykat
.
detectors
.
hd
.
parseFinesseText
(
line
)
elif
(
first
.
startswith
(
"
qhd
"
)):
obj
=
pykat
.
detectors
.
qhd
.
parseFinesseText
(
line
)
elif
(
first
==
"
x2axis
"
or
first
==
"
x2axis*
"
):
elif
(
first
==
"
x2axis
"
or
first
==
"
x2axis*
"
):
obj
=
pykat
.
commands
.
x2axis
.
parseFinesseText
(
line
)
obj
=
pykat
.
commands
.
x2axis
.
parseFinesseText
(
line
)
elif
(
first
==
"
gauss
"
or
first
==
"
gauss*
"
or
first
==
"
gauss**
"
):
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