Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
bilby
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
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
lscsoft
bilby
Commits
502cc09c
Commit
502cc09c
authored
6 years ago
by
Colm Talbot
Browse files
Options
Downloads
Plain Diff
Merge branch 'Simplify_wg_redundant_code' into 'master'
Simplify wg redundant code See merge request Monash/tupak!124
parents
36793a8c
0e1cc4e5
No related branches found
Branches containing commit
No related tags found
Tags containing commit
1 merge request
!124
Simplify wg redundant code
Pipeline
#27342
passed with warnings
6 years ago
Stage: test
Stage: deploy
Changes
2
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
test/waveform_generator_tests.py
+67
-41
67 additions, 41 deletions
test/waveform_generator_tests.py
tupak/gw/waveform_generator.py
+60
-55
60 additions, 55 deletions
tupak/gw/waveform_generator.py
with
127 additions
and
96 deletions
test/waveform_generator_tests.py
+
67
−
41
View file @
502cc09c
...
@@ -6,21 +6,13 @@ import mock
...
@@ -6,21 +6,13 @@ import mock
from
mock
import
MagicMock
from
mock
import
MagicMock
def
gaussian_frequency_domain_strain
(
frequency_array
,
amplitude
,
mu
,
sigma
,
ra
,
dec
,
geocent_time
,
psi
,
**
kwargs
):
def
dummy_func_array_return_value
(
frequency_array
,
amplitude
,
mu
,
sigma
,
ra
,
dec
,
geocent_time
,
psi
,
**
kwargs
):
ht
=
{
'
plus
'
:
amplitude
*
np
.
exp
(
-
(
mu
-
frequency_array
)
**
2
/
sigma
**
2
/
2
),
return
amplitude
+
mu
+
frequency_array
+
sigma
+
ra
+
dec
+
geocent_time
+
psi
'
cross
'
:
amplitude
*
np
.
exp
(
-
(
mu
-
frequency_array
)
**
2
/
sigma
**
2
/
2
)}
return
ht
def
gaussian_frequency_domain_strain_2
(
frequency_array
,
a
,
m
,
s
,
ra
,
dec
,
geocent_time
,
psi
,
**
kwargs
):
ht
=
{
'
plus
'
:
a
*
np
.
exp
(
-
(
m
-
frequency_array
)
**
2
/
s
**
2
/
2
),
'
cross
'
:
a
*
np
.
exp
(
-
(
m
-
frequency_array
)
**
2
/
s
**
2
/
2
)}
return
ht
def
gaussian_time_domain_strain_2
(
time
_array
,
a
,
m
,
s
,
ra
,
dec
,
geocent_time
,
psi
,
**
kwargs
):
def
dummy_func_dict_return_value
(
frequency
_array
,
a
mplitude
,
m
u
,
s
igma
,
ra
,
dec
,
geocent_time
,
psi
,
**
kwargs
):
ht
=
{
'
plus
'
:
a
*
np
.
exp
(
-
(
m
-
time_array
)
**
2
/
s
**
2
/
2
)
,
ht
=
{
'
plus
'
:
a
mplitude
+
mu
+
frequency_array
+
sigma
+
ra
+
dec
+
geocent_time
+
psi
,
'
cross
'
:
a
*
np
.
exp
(
-
(
m
-
time_array
)
**
2
/
s
**
2
/
2
)
}
'
cross
'
:
a
mplitude
+
mu
+
frequency_array
+
sigma
+
ra
+
dec
+
geocent_time
+
psi
}
return
ht
return
ht
...
@@ -29,7 +21,7 @@ class TestWaveformGeneratorInstantiationWithoutOptionalParameters(unittest.TestC
...
@@ -29,7 +21,7 @@ class TestWaveformGeneratorInstantiationWithoutOptionalParameters(unittest.TestC
def
setUp
(
self
):
def
setUp
(
self
):
self
.
waveform_generator
=
\
self
.
waveform_generator
=
\
tupak
.
gw
.
waveform_generator
.
WaveformGenerator
(
1
,
4096
,
tupak
.
gw
.
waveform_generator
.
WaveformGenerator
(
1
,
4096
,
frequency_domain_source_model
=
gaussian_freque
nc
y
_d
omain_strain
)
frequency_domain_source_model
=
dummy_fu
nc_d
ict_return_value
)
self
.
simulation_parameters
=
dict
(
amplitude
=
1e-21
,
mu
=
100
,
sigma
=
1
,
self
.
simulation_parameters
=
dict
(
amplitude
=
1e-21
,
mu
=
100
,
sigma
=
1
,
ra
=
1.375
,
ra
=
1.375
,
dec
=-
1.2108
,
dec
=-
1.2108
,
...
@@ -47,7 +39,7 @@ class TestWaveformGeneratorInstantiationWithoutOptionalParameters(unittest.TestC
...
@@ -47,7 +39,7 @@ class TestWaveformGeneratorInstantiationWithoutOptionalParameters(unittest.TestC
self
.
assertEqual
(
self
.
waveform_generator
.
sampling_frequency
,
4096
)
self
.
assertEqual
(
self
.
waveform_generator
.
sampling_frequency
,
4096
)
def
test_source_model
(
self
):
def
test_source_model
(
self
):
self
.
assertEqual
(
self
.
waveform_generator
.
frequency_domain_source_model
,
gaussian_freque
nc
y
_d
omain_strain
)
self
.
assertEqual
(
self
.
waveform_generator
.
frequency_domain_source_model
,
dummy_fu
nc_d
ict_return_value
)
def
test_frequency_array_type
(
self
):
def
test_frequency_array_type
(
self
):
self
.
assertIsInstance
(
self
.
waveform_generator
.
frequency_array
,
np
.
ndarray
)
self
.
assertIsInstance
(
self
.
waveform_generator
.
frequency_array
,
np
.
ndarray
)
...
@@ -64,7 +56,7 @@ class TestWaveformArgumentsSetting(unittest.TestCase):
...
@@ -64,7 +56,7 @@ class TestWaveformArgumentsSetting(unittest.TestCase):
def
setUp
(
self
):
def
setUp
(
self
):
self
.
waveform_generator
=
\
self
.
waveform_generator
=
\
tupak
.
gw
.
waveform_generator
.
WaveformGenerator
(
1
,
4096
,
tupak
.
gw
.
waveform_generator
.
WaveformGenerator
(
1
,
4096
,
frequency_domain_source_model
=
gaussian_freque
nc
y
_d
omain_strain
,
frequency_domain_source_model
=
dummy_fu
nc_d
ict_return_value
,
waveform_arguments
=
dict
(
test
=
'
test
'
,
arguments
=
'
arguments
'
))
waveform_arguments
=
dict
(
test
=
'
test
'
,
arguments
=
'
arguments
'
))
def
tearDown
(
self
):
def
tearDown
(
self
):
...
@@ -80,7 +72,7 @@ class TestSetters(unittest.TestCase):
...
@@ -80,7 +72,7 @@ class TestSetters(unittest.TestCase):
def
setUp
(
self
):
def
setUp
(
self
):
self
.
waveform_generator
=
\
self
.
waveform_generator
=
\
tupak
.
gw
.
waveform_generator
.
WaveformGenerator
(
1
,
4096
,
tupak
.
gw
.
waveform_generator
.
WaveformGenerator
(
1
,
4096
,
frequency_domain_source_model
=
gaussian_freque
nc
y
_d
omain_strain
)
frequency_domain_source_model
=
dummy_fu
nc_d
ict_return_value
)
self
.
simulation_parameters
=
dict
(
amplitude
=
1e-21
,
mu
=
100
,
sigma
=
1
,
self
.
simulation_parameters
=
dict
(
amplitude
=
1e-21
,
mu
=
100
,
sigma
=
1
,
ra
=
1.375
,
ra
=
1.375
,
dec
=-
1.2108
,
dec
=-
1.2108
,
...
@@ -112,12 +104,12 @@ class TestSetters(unittest.TestCase):
...
@@ -112,12 +104,12 @@ class TestSetters(unittest.TestCase):
self
.
assertTrue
(
np
.
array_equal
(
new_time_array
,
self
.
waveform_generator
.
time_array
))
self
.
assertTrue
(
np
.
array_equal
(
new_time_array
,
self
.
waveform_generator
.
time_array
))
def
test_parameters_set_from_frequency_domain_source_model
(
self
):
def
test_parameters_set_from_frequency_domain_source_model
(
self
):
self
.
waveform_generator
.
frequency_domain_source_model
=
gaussian_freque
nc
y
_d
omain_strain_2
self
.
waveform_generator
.
frequency_domain_source_model
=
dummy_fu
nc_d
ict_return_value
self
.
assertListEqual
(
sorted
(
list
(
self
.
waveform_generator
.
parameters
.
keys
())),
self
.
assertListEqual
(
sorted
(
list
(
self
.
waveform_generator
.
parameters
.
keys
())),
sorted
(
list
(
self
.
simulation_parameters
.
keys
())))
sorted
(
list
(
self
.
simulation_parameters
.
keys
())))
def
test_parameters_set_from_time_domain_source_model
(
self
):
def
test_parameters_set_from_time_domain_source_model
(
self
):
self
.
waveform_generator
.
time_domain_source_model
=
gaussian_time_domain_strain_2
self
.
waveform_generator
.
time_domain_source_model
=
dummy_func_dict_return_value
self
.
assertListEqual
(
sorted
(
list
(
self
.
waveform_generator
.
parameters
.
keys
())),
self
.
assertListEqual
(
sorted
(
list
(
self
.
waveform_generator
.
parameters
.
keys
())),
sorted
(
list
(
self
.
simulation_parameters
.
keys
())))
sorted
(
list
(
self
.
simulation_parameters
.
keys
())))
...
@@ -126,9 +118,9 @@ class TestFrequencyDomainStrainMethod(unittest.TestCase):
...
@@ -126,9 +118,9 @@ class TestFrequencyDomainStrainMethod(unittest.TestCase):
def
setUp
(
self
):
def
setUp
(
self
):
self
.
waveform_generator
=
\
self
.
waveform_generator
=
\
tupak
.
gw
.
waveform_generator
.
WaveformGenerator
(
1
,
4096
,
tupak
.
gw
.
waveform_generator
.
WaveformGenerator
(
duration
=
1
,
sampling_frequency
=
4096
,
frequency_domain_source_model
=
gaussian_freque
nc
y
_d
omain_strain
)
frequency_domain_source_model
=
dummy_fu
nc_d
ict_return_value
)
self
.
simulation_parameters
=
dict
(
amplitude
=
1e-2
1
,
mu
=
100
,
sigma
=
1
,
self
.
simulation_parameters
=
dict
(
amplitude
=
1e-2
,
mu
=
100
,
sigma
=
1
,
ra
=
1.375
,
ra
=
1.375
,
dec
=-
1.2108
,
dec
=-
1.2108
,
geocent_time
=
1126259642.413
,
geocent_time
=
1126259642.413
,
...
@@ -144,30 +136,47 @@ class TestFrequencyDomainStrainMethod(unittest.TestCase):
...
@@ -144,30 +136,47 @@ class TestFrequencyDomainStrainMethod(unittest.TestCase):
self
.
waveform_generator
.
frequency_domain_strain
()
self
.
waveform_generator
.
frequency_domain_strain
()
def
test_frequency_domain_source_model_call
(
self
):
def
test_frequency_domain_source_model_call
(
self
):
self
.
waveform_generator
.
frequency_domain_source_model
=
MagicMock
(
return_value
=
3
)
self
.
waveform_generator
.
parameters
=
self
.
simulation_parameters
self
.
assertEqual
(
3
,
self
.
waveform_generator
.
frequency_domain_strain
())
expected
=
self
.
waveform_generator
.
frequency_domain_source_model
(
self
.
waveform_generator
.
frequency_array
,
self
.
simulation_parameters
[
'
amplitude
'
],
self
.
simulation_parameters
[
'
mu
'
],
self
.
simulation_parameters
[
'
sigma
'
],
self
.
simulation_parameters
[
'
ra
'
],
self
.
simulation_parameters
[
'
dec
'
],
self
.
simulation_parameters
[
'
geocent_time
'
],
self
.
simulation_parameters
[
'
psi
'
])
actual
=
self
.
waveform_generator
.
frequency_domain_strain
()
self
.
assertTrue
(
np
.
array_equal
(
expected
[
'
plus
'
],
actual
[
'
plus
'
]))
self
.
assertTrue
(
np
.
array_equal
(
expected
[
'
cross
'
],
actual
[
'
cross
'
]))
def
test_time_domain_source_model_call_with_ndarray
(
self
):
def
test_time_domain_source_model_call_with_ndarray
(
self
):
self
.
waveform_generator
.
frequency_domain_source_model
=
None
self
.
waveform_generator
.
frequency_domain_source_model
=
None
self
.
waveform_generator
.
time_domain_source_model
=
MagicMock
(
return_value
=
np
.
array
([
1
,
2
,
3
]))
self
.
waveform_generator
.
time_domain_source_model
=
dummy_func_array_return_value
self
.
waveform_generator
.
parameters
=
self
.
simulation_parameters
def
side_effect
(
value
,
value2
):
def
side_effect
(
value
,
value2
):
return
value
return
value
with
mock
.
patch
(
'
tupak.core.utils.nfft
'
)
as
m
:
with
mock
.
patch
(
'
tupak.core.utils.nfft
'
)
as
m
:
m
.
side_effect
=
side_effect
m
.
side_effect
=
side_effect
self
.
assertTrue
(
np
.
array_equal
(
np
.
array
([
1
,
2
,
3
]),
self
.
waveform_generator
.
frequency_domain_strain
()))
expected
=
self
.
waveform_generator
.
time_domain_strain
()
actual
=
self
.
waveform_generator
.
frequency_domain_strain
()
self
.
assertTrue
(
np
.
array_equal
(
expected
,
actual
))
def
test_time_domain_source_model_call_with_dict
(
self
):
def
test_time_domain_source_model_call_with_dict
(
self
):
self
.
waveform_generator
.
frequency_domain_source_model
=
None
self
.
waveform_generator
.
frequency_domain_source_model
=
None
self
.
waveform_generator
.
time_domain_source_model
=
MagicMock
(
return_value
=
dict
(
plus
=
1
,
cross
=
2
))
self
.
waveform_generator
.
time_domain_source_model
=
dummy_func_dict_return_value
self
.
waveform_generator
.
parameters
=
self
.
simulation_parameters
def
side_effect
(
value
,
value2
):
def
side_effect
(
value
,
value2
):
return
value
,
value2
return
value
,
self
.
waveform_generator
.
frequency_array
with
mock
.
patch
(
'
tupak.core.utils.nfft
'
)
as
m
:
with
mock
.
patch
(
'
tupak.core.utils.nfft
'
)
as
m
:
m
.
side_effect
=
side_effect
m
.
side_effect
=
side_effect
self
.
assertDictEqual
(
dict
(
plus
=
1
,
cross
=
2
),
self
.
waveform_generator
.
frequency_domain_strain
())
expected
=
self
.
waveform_generator
.
time_domain_strain
()
actual
=
self
.
waveform_generator
.
frequency_domain_strain
()
self
.
assertTrue
(
np
.
array_equal
(
expected
[
'
plus
'
],
actual
[
'
plus
'
]))
self
.
assertTrue
(
np
.
array_equal
(
expected
[
'
cross
'
],
actual
[
'
cross
'
]))
def
test_no_source_model_given
(
self
):
def
test_no_source_model_given
(
self
):
self
.
waveform_generator
.
time_domain_source_model
=
None
self
.
waveform_generator
.
time_domain_source_model
=
None
...
@@ -194,7 +203,7 @@ class TestTimeDomainStrainMethod(unittest.TestCase):
...
@@ -194,7 +203,7 @@ class TestTimeDomainStrainMethod(unittest.TestCase):
def
setUp
(
self
):
def
setUp
(
self
):
self
.
waveform_generator
=
\
self
.
waveform_generator
=
\
tupak
.
gw
.
waveform_generator
.
WaveformGenerator
(
1
,
4096
,
tupak
.
gw
.
waveform_generator
.
WaveformGenerator
(
1
,
4096
,
time_domain_source_model
=
gaussian_time_domain_strain_2
)
time_domain_source_model
=
dummy_func_dict_return_value
)
self
.
simulation_parameters
=
dict
(
amplitude
=
1e-21
,
mu
=
100
,
sigma
=
1
,
self
.
simulation_parameters
=
dict
(
amplitude
=
1e-21
,
mu
=
100
,
sigma
=
1
,
ra
=
1.375
,
ra
=
1.375
,
dec
=-
1.2108
,
dec
=-
1.2108
,
...
@@ -211,32 +220,47 @@ class TestTimeDomainStrainMethod(unittest.TestCase):
...
@@ -211,32 +220,47 @@ class TestTimeDomainStrainMethod(unittest.TestCase):
self
.
waveform_generator
.
time_domain_strain
()
self
.
waveform_generator
.
time_domain_strain
()
def
test_time_domain_source_model_call
(
self
):
def
test_time_domain_source_model_call
(
self
):
self
.
waveform_generator
.
time_domain_source_model
=
MagicMock
(
return_value
=
3
)
self
.
waveform_generator
.
parameters
=
self
.
simulation_parameters
self
.
assertEqual
(
3
,
self
.
waveform_generator
.
time_domain_strain
())
expected
=
self
.
waveform_generator
.
time_domain_source_model
(
self
.
waveform_generator
.
time_array
,
self
.
simulation_parameters
[
'
amplitude
'
],
self
.
simulation_parameters
[
'
mu
'
],
self
.
simulation_parameters
[
'
sigma
'
],
self
.
simulation_parameters
[
'
ra
'
],
self
.
simulation_parameters
[
'
dec
'
],
self
.
simulation_parameters
[
'
geocent_time
'
],
self
.
simulation_parameters
[
'
psi
'
])
actual
=
self
.
waveform_generator
.
time_domain_strain
()
self
.
assertTrue
(
np
.
array_equal
(
expected
[
'
plus
'
],
actual
[
'
plus
'
]))
self
.
assertTrue
(
np
.
array_equal
(
expected
[
'
cross
'
],
actual
[
'
cross
'
]))
def
test_frequency_domain_source_model_call_with_ndarray
(
self
):
def
test_frequency_domain_source_model_call_with_ndarray
(
self
):
self
.
waveform_generator
.
time_domain_source_model
=
None
self
.
waveform_generator
.
time_domain_source_model
=
None
self
.
waveform_generator
.
frequency_domain_source_model
=
MagicMock
(
return_value
=
np
.
array
([
1
,
2
,
3
]))
self
.
waveform_generator
.
frequency_domain_source_model
=
dummy_func_array_return_value
self
.
waveform_generator
.
parameters
=
self
.
simulation_parameters
def
side_effect
(
value
,
value2
):
def
side_effect
(
value
,
value2
):
return
value
return
value
with
mock
.
patch
(
'
tupak.core.utils.infft
'
)
as
m
:
with
mock
.
patch
(
'
tupak.core.utils.infft
'
)
as
m
:
m
.
side_effect
=
side_effect
m
.
side_effect
=
side_effect
self
.
assertTrue
(
np
.
array_equal
(
np
.
array
([
1
,
2
,
3
]),
self
.
waveform_generator
.
time_domain_strain
()))
expected
=
self
.
waveform_generator
.
frequency_domain_strain
()
actual
=
self
.
waveform_generator
.
time_domain_strain
()
self
.
assertTrue
(
np
.
array_equal
(
expected
,
actual
))
def
test_frequency_domain_source_model_call_with_dict
(
self
):
def
test_frequency_domain_source_model_call_with_dict
(
self
):
self
.
waveform_generator
.
time_domain_source_model
=
None
self
.
waveform_generator
.
time_domain_source_model
=
None
self
.
waveform_generator
.
frequency_domain_source_model
=
MagicMock
(
return_value
=
dict
(
plus
=
1
,
cross
=
2
))
self
.
waveform_generator
.
frequency_domain_source_model
=
dummy_func_dict_return_value
self
.
waveform_generator
.
parameters
=
self
.
simulation_parameters
def
side_effect
(
value
,
value2
):
def
side_effect
(
value
,
value2
):
return
value
,
value2
return
value
with
mock
.
patch
(
'
tupak.core.utils.infft
'
)
as
m
:
with
mock
.
patch
(
'
tupak.core.utils.infft
'
)
as
m
:
m
.
side_effect
=
side_effect
m
.
side_effect
=
side_effect
self
.
assertDictEqual
(
dict
(
plus
=
(
1
,
self
.
waveform_generator
.
sampling_frequency
),
expected
=
self
.
waveform_generator
.
frequency_domain_strain
()
cross
=
(
2
,
self
.
waveform_generator
.
sampling_frequency
)),
actual
=
self
.
waveform_generator
.
time_domain_strain
()
self
.
waveform_generator
.
time_domain_strain
())
self
.
assertTrue
(
np
.
array_equal
(
expected
[
'
plus
'
],
actual
[
'
plus
'
]))
self
.
assertTrue
(
np
.
array_equal
(
expected
[
'
cross
'
],
actual
[
'
cross
'
]))
def
test_no_source_model_given
(
self
):
def
test_no_source_model_given
(
self
):
self
.
waveform_generator
.
time_domain_source_model
=
None
self
.
waveform_generator
.
time_domain_source_model
=
None
...
@@ -245,7 +269,9 @@ class TestTimeDomainStrainMethod(unittest.TestCase):
...
@@ -245,7 +269,9 @@ class TestTimeDomainStrainMethod(unittest.TestCase):
self
.
waveform_generator
.
time_domain_strain
()
self
.
waveform_generator
.
time_domain_strain
()
def
test_key_popping
(
self
):
def
test_key_popping
(
self
):
self
.
waveform_generator
.
parameter_conversion
=
MagicMock
(
return_value
=
(
dict
(
a
=
1e-21
,
m
=
100
,
s
=
1
,
self
.
waveform_generator
.
parameter_conversion
=
MagicMock
(
return_value
=
(
dict
(
amplitude
=
1e-2
,
mu
=
100
,
sigma
=
1
,
ra
=
1.375
,
dec
=-
1.2108
,
ra
=
1.375
,
dec
=-
1.2108
,
geocent_time
=
1126259642.413
,
geocent_time
=
1126259642.413
,
psi
=
2.659
,
c
=
None
,
d
=
None
),
psi
=
2.659
,
c
=
None
,
d
=
None
),
...
@@ -255,7 +281,7 @@ class TestTimeDomainStrainMethod(unittest.TestCase):
...
@@ -255,7 +281,7 @@ class TestTimeDomainStrainMethod(unittest.TestCase):
except
RuntimeError
:
except
RuntimeError
:
pass
pass
self
.
assertListEqual
(
sorted
(
self
.
waveform_generator
.
parameters
.
keys
()),
self
.
assertListEqual
(
sorted
(
self
.
waveform_generator
.
parameters
.
keys
()),
sorted
([
'
a
'
,
'
m
'
,
'
s
'
,
'
ra
'
,
'
dec
'
,
'
geocent_time
'
,
'
psi
'
]))
sorted
([
'
a
mplitude
'
,
'
m
u
'
,
'
s
igma
'
,
'
ra
'
,
'
dec
'
,
'
geocent_time
'
,
'
psi
'
]))
if
__name__
==
'
__main__
'
:
if
__name__
==
'
__main__
'
:
...
...
This diff is collapsed.
Click to expand it.
tupak/gw/waveform_generator.py
+
60
−
55
View file @
502cc09c
...
@@ -7,7 +7,8 @@ import numpy as np
...
@@ -7,7 +7,8 @@ import numpy as np
class
WaveformGenerator
(
object
):
class
WaveformGenerator
(
object
):
def
__init__
(
self
,
duration
=
None
,
sampling_frequency
=
None
,
start_time
=
0
,
frequency_domain_source_model
=
None
,
def
__init__
(
self
,
duration
=
None
,
sampling_frequency
=
None
,
start_time
=
0
,
frequency_domain_source_model
=
None
,
time_domain_source_model
=
None
,
parameters
=
None
,
parameter_conversion
=
None
,
time_domain_source_model
=
None
,
parameters
=
None
,
parameter_conversion
=
lambda
parameters
,
search_keys
:
(
parameters
,
[]),
non_standard_sampling_parameter_keys
=
None
,
non_standard_sampling_parameter_keys
=
None
,
waveform_arguments
=
None
):
waveform_arguments
=
None
):
"""
A waveform generator
"""
A waveform generator
...
@@ -32,7 +33,8 @@ class WaveformGenerator(object):
...
@@ -32,7 +33,8 @@ class WaveformGenerator(object):
Initial values for the parameters
Initial values for the parameters
parameter_conversion: func, optional
parameter_conversion: func, optional
Function to convert from sampled parameters to parameters of the
Function to convert from sampled parameters to parameters of the
waveform generator
waveform generator. Default value is the identity, i.e. it leaves
the parameters unaffected.
non_standard_sampling_parameter_keys: list, optional
non_standard_sampling_parameter_keys: list, optional
List of parameter name for *non-standard* sampling parameters.
List of parameter name for *non-standard* sampling parameters.
waveform_arguments: dict, optional
waveform_arguments: dict, optional
...
@@ -62,6 +64,8 @@ class WaveformGenerator(object):
...
@@ -62,6 +64,8 @@ class WaveformGenerator(object):
self
.
__time_array_updated
=
False
self
.
__time_array_updated
=
False
self
.
__full_source_model_keyword_arguments
=
{}
self
.
__full_source_model_keyword_arguments
=
{}
self
.
__full_source_model_keyword_arguments
.
update
(
self
.
waveform_arguments
)
self
.
__full_source_model_keyword_arguments
.
update
(
self
.
waveform_arguments
)
self
.
__full_source_model_keyword_arguments
.
update
(
self
.
parameters
)
self
.
__added_keys
=
[]
def
frequency_domain_strain
(
self
):
def
frequency_domain_strain
(
self
):
"""
Rapper to source_model.
"""
Rapper to source_model.
...
@@ -78,32 +82,11 @@ class WaveformGenerator(object):
...
@@ -78,32 +82,11 @@ class WaveformGenerator(object):
RuntimeError: If no source model is given
RuntimeError: If no source model is given
"""
"""
added_keys
=
[]
return
self
.
_calculate_strain
(
model
=
self
.
frequency_domain_source_model
,
if
self
.
parameter_conversion
is
not
None
:
model_data_points
=
self
.
frequency_array
,
self
.
parameters
,
added_keys
=
self
.
parameter_conversion
(
self
.
parameters
,
transformation_function
=
utils
.
nfft
,
self
.
non_standard_sampling_parameter_keys
)
transformed_model
=
self
.
time_domain_source_model
,
transformed_model_data_points
=
self
.
time_array
)
if
self
.
frequency_domain_source_model
is
not
None
:
self
.
__full_source_model_keyword_arguments
.
update
(
self
.
parameters
)
model_frequency_strain
=
self
.
frequency_domain_source_model
(
self
.
frequency_array
,
**
self
.
__full_source_model_keyword_arguments
)
elif
self
.
time_domain_source_model
is
not
None
:
model_frequency_strain
=
dict
()
self
.
__full_source_model_keyword_arguments
.
update
(
self
.
parameters
)
time_domain_strain
=
self
.
time_domain_source_model
(
self
.
time_array
,
**
self
.
__full_source_model_keyword_arguments
)
if
isinstance
(
time_domain_strain
,
np
.
ndarray
):
return
utils
.
nfft
(
time_domain_strain
,
self
.
sampling_frequency
)
for
key
in
time_domain_strain
:
model_frequency_strain
[
key
],
self
.
frequency_array
=
utils
.
nfft
(
time_domain_strain
[
key
],
self
.
sampling_frequency
)
else
:
raise
RuntimeError
(
"
No source model given
"
)
for
key
in
added_keys
:
self
.
parameters
.
pop
(
key
)
return
model_frequency_strain
def
time_domain_strain
(
self
):
def
time_domain_strain
(
self
):
"""
Rapper to source_model.
"""
Rapper to source_model.
...
@@ -121,29 +104,51 @@ class WaveformGenerator(object):
...
@@ -121,29 +104,51 @@ class WaveformGenerator(object):
RuntimeError: If no source model is given
RuntimeError: If no source model is given
"""
"""
added_keys
=
[]
return
self
.
_calculate_strain
(
model
=
self
.
time_domain_source_model
,
if
self
.
parameter_conversion
is
not
None
:
model_data_points
=
self
.
time_array
,
self
.
parameters
,
added_keys
=
self
.
parameter_conversion
(
self
.
parameters
,
transformation_function
=
utils
.
infft
,
self
.
non_standard_sampling_parameter_keys
)
transformed_model
=
self
.
frequency_domain_source_model
,
if
self
.
time_domain_source_model
is
not
None
:
transformed_model_data_points
=
self
.
frequency_array
)
self
.
__full_source_model_keyword_arguments
.
update
(
self
.
parameters
)
model_time_series
=
self
.
time_domain_source_model
(
def
_calculate_strain
(
self
,
model
,
model_data_points
,
transformation_function
,
transformed_model
,
self
.
time_array
,
**
self
.
__full_source_model_keyword_arguments
)
transformed_model_data_points
):
elif
self
.
frequency_domain_source_model
is
not
None
:
self
.
_apply_parameter_conversion
()
model_time_series
=
dict
()
if
model
is
not
None
:
self
.
__full_source_model_keyword_arguments
.
update
(
self
.
parameters
)
model_strain
=
self
.
_strain_from_model
(
model_data_points
,
model
)
frequency_domain_strain
=
self
.
frequency_domain_source_model
(
elif
transformed_model
is
not
None
:
self
.
frequency_array
,
**
self
.
__full_source_model_keyword_arguments
)
model_strain
=
self
.
_strain_from_transformed_model
(
transformed_model_data_points
,
transformed_model
,
if
isinstance
(
frequency_domain_strain
,
np
.
ndarray
):
transformation_function
)
return
utils
.
infft
(
frequency_domain_strain
,
self
.
sampling_frequency
)
for
key
in
frequency_domain_strain
:
model_time_series
[
key
]
=
utils
.
infft
(
frequency_domain_strain
[
key
],
self
.
sampling_frequency
)
else
:
else
:
raise
RuntimeError
(
"
No source model given
"
)
raise
RuntimeError
(
"
No source model given
"
)
self
.
_remove_added_keys
()
for
key
in
added_keys
:
return
model_strain
def
_apply_parameter_conversion
(
self
):
self
.
parameters
,
self
.
__added_keys
=
self
.
parameter_conversion
(
self
.
parameters
,
self
.
non_standard_sampling_parameter_keys
)
self
.
__full_source_model_keyword_arguments
.
update
(
self
.
parameters
)
def
_strain_from_model
(
self
,
model_data_points
,
model
):
return
model
(
model_data_points
,
**
self
.
__full_source_model_keyword_arguments
)
def
_strain_from_transformed_model
(
self
,
transformed_model_data_points
,
transformed_model
,
transformation_function
):
transformed_model_strain
=
self
.
_strain_from_model
(
transformed_model_data_points
,
transformed_model
)
if
isinstance
(
transformed_model_strain
,
np
.
ndarray
):
return
transformation_function
(
transformed_model_strain
,
self
.
sampling_frequency
)
model_strain
=
dict
()
for
key
in
transformed_model_strain
:
if
transformation_function
==
utils
.
nfft
:
model_strain
[
key
],
self
.
frequency_array
=
\
transformation_function
(
transformed_model_strain
[
key
],
self
.
sampling_frequency
)
else
:
model_strain
[
key
]
=
transformation_function
(
transformed_model_strain
[
key
],
self
.
sampling_frequency
)
return
model_strain
def
_remove_added_keys
(
self
):
for
key
in
self
.
__added_keys
:
self
.
parameters
.
pop
(
key
)
self
.
parameters
.
pop
(
key
)
return
model_time_series
@property
@property
def
frequency_array
(
self
):
def
frequency_array
(
self
):
...
@@ -155,8 +160,8 @@ class WaveformGenerator(object):
...
@@ -155,8 +160,8 @@ class WaveformGenerator(object):
"""
"""
if
self
.
__frequency_array_updated
is
False
:
if
self
.
__frequency_array_updated
is
False
:
self
.
frequency_array
=
utils
.
create_frequency_series
(
self
.
frequency_array
=
utils
.
create_frequency_series
(
self
.
sampling_frequency
,
self
.
sampling_frequency
,
self
.
duration
)
self
.
duration
)
return
self
.
__frequency_array
return
self
.
__frequency_array
@frequency_array.setter
@frequency_array.setter
...
@@ -175,9 +180,9 @@ class WaveformGenerator(object):
...
@@ -175,9 +180,9 @@ class WaveformGenerator(object):
if
self
.
__time_array_updated
is
False
:
if
self
.
__time_array_updated
is
False
:
self
.
__time_array
=
utils
.
create_time_series
(
self
.
__time_array
=
utils
.
create_time_series
(
self
.
sampling_frequency
,
self
.
sampling_frequency
,
self
.
duration
,
self
.
duration
,
self
.
start_time
)
self
.
start_time
)
self
.
__time_array_updated
=
True
self
.
__time_array_updated
=
True
return
self
.
__time_array
return
self
.
__time_array
...
@@ -191,8 +196,6 @@ class WaveformGenerator(object):
...
@@ -191,8 +196,6 @@ class WaveformGenerator(object):
def
parameters
(
self
):
def
parameters
(
self
):
"""
The dictionary of parameters for source model.
"""
The dictionary of parameters for source model.
Does some introspection into the source_model to figure out the parameters if none are given.
Returns
Returns
-------
-------
dict: The dictionary of parameter key-value pairs
dict: The dictionary of parameter key-value pairs
...
@@ -202,6 +205,8 @@ class WaveformGenerator(object):
...
@@ -202,6 +205,8 @@ class WaveformGenerator(object):
@parameters.setter
@parameters.setter
def
parameters
(
self
,
parameters
):
def
parameters
(
self
,
parameters
):
"""
Does some introspection into the source_model to figure out the parameters if none are given.
"""
self
.
__parameters_from_source_model
()
self
.
__parameters_from_source_model
()
if
isinstance
(
parameters
,
dict
):
if
isinstance
(
parameters
,
dict
):
for
key
in
parameters
.
keys
():
for
key
in
parameters
.
keys
():
...
...
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