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
Sebastian Heimann
grond
Commits
a99867ad
Commit
a99867ad
authored
Mar 06, 2017
by
Sebastian Heimann
Browse files
wip...
parent
579da771
Changes
5
Hide whitespace changes
Inline
Side-by-side
src/core.py
View file @
a99867ad
...
...
@@ -260,7 +260,7 @@ def analyse(problem, niter=1000, show_progress=False):
wproblem
=
problem
.
copy
()
wproblem
.
targets
=
wtargets
xbounds
=
num
.
array
(
wproblem
.
bounds
(),
dtype
=
num
.
float
)
xbounds
=
num
.
array
(
wproblem
.
get_parameter_
bounds
(),
dtype
=
num
.
float
)
npar
=
xbounds
.
shape
[
0
]
mss
=
num
.
zeros
((
niter
,
wproblem
.
ntargets
))
...
...
@@ -358,7 +358,7 @@ def solve(problem,
compensate_excentricity
=
True
,
status
=
()):
xbounds
=
num
.
array
(
problem
.
bounds
(),
dtype
=
num
.
float
)
xbounds
=
num
.
array
(
problem
.
get_parameter_
bounds
(),
dtype
=
num
.
float
)
npar
=
xbounds
.
shape
[
0
]
nlinks_cap
=
int
(
round
(
chain_length_factor
*
npar
+
1
))
...
...
@@ -832,7 +832,7 @@ def check(
check_problem
(
problem
)
xbounds
=
num
.
array
(
problem
.
bounds
(),
dtype
=
num
.
float
)
xbounds
=
num
.
array
(
problem
.
get_parameter_
bounds
(),
dtype
=
num
.
float
)
results_list
=
[]
...
...
src/plot.py
View file @
a99867ad
...
...
@@ -168,7 +168,7 @@ def draw_sequence_figures(model, plt, misfit_cutoff=None, sort_by='iteration'):
problem
=
model
.
problem
imodels
=
num
.
arange
(
model
.
nmodels
)
bounds
=
problem
.
bounds
()
+
problem
.
dependant_bounds
()
bounds
=
problem
.
get_parameter_
bounds
()
+
problem
.
get_
dependant_bounds
()
xref
=
problem
.
pack
(
problem
.
base_source
)
...
...
@@ -337,7 +337,7 @@ def draw_jointpar_figures(
xs
=
model
.
xs
bounds
=
problem
.
bounds
()
+
problem
.
dependant_bounds
()
bounds
=
problem
.
get_parameter_
bounds
()
+
problem
.
get_
dependant_bounds
()
for
ipar
in
xrange
(
problem
.
ncombined
):
par
=
problem
.
combined
[
ipar
]
lo
,
hi
=
bounds
[
ipar
]
...
...
@@ -347,7 +347,7 @@ def draw_jointpar_figures(
exclude
.
append
(
par
.
name
)
xref
=
problem
.
pack
(
problem
.
base_source
)
xref
=
problem
.
get_xref
(
)
if
ibootstrap
is
not
None
:
gms
=
problem
.
bootstrap_misfits
(
model
.
misfits
,
ibootstrap
)
...
...
src/problems.py
View file @
a99867ad
...
...
@@ -30,6 +30,7 @@ class Parameter(Object):
kwargs
[
'name'
]
=
args
[
0
]
if
len
(
args
)
>=
2
:
kwargs
[
'unit'
]
=
args
[
1
]
self
.
target
=
kwargs
.
pop
(
'target'
,
None
)
Object
.
__init__
(
self
,
**
kwargs
)
...
...
@@ -85,9 +86,9 @@ class ProblemConfig(Object):
apply_balancing_weights
=
Bool
.
T
(
default
=
True
)
class
Problem
(
Object
):
name
=
String
.
T
()
parameters
=
List
.
T
(
Parameter
.
T
())
ranges
=
Dict
.
T
(
String
.
T
(),
gf
.
Range
.
T
())
dependants
=
List
.
T
(
Parameter
.
T
())
apply_balancing_weights
=
Bool
.
T
(
default
=
True
)
...
...
@@ -115,14 +116,25 @@ class Problem(Object):
o
.
_target_weights
=
None
return
o
def
parameter_dict
(
self
,
x
,
target
=
None
):
params
=
[]
for
ip
,
p
in
enumerate
(
self
.
parameters
):
if
p
.
target
is
target
:
params
.
append
((
p
.
name
,
x
[
ip
]))
return
ADict
(
params
)
@
property
def
parameters
(
self
):
ps
=
self
.
problem_parameters
for
target
in
self
.
targets
:
ps
.
extend
(
target
.
target_parameters
)
return
ps
def
set_target_parameter_values
(
self
,
x
):
i
=
len
(
self
.
problem_parameters
)
for
target
in
self
.
targets
:
n
=
len
(
target
.
target_parameters
)
target
.
set_parameter_values
(
x
[
i
:
i
+
n
])
i
+=
n
def
get_parameter_dict
(
self
,
x
):
return
ADict
((
p
.
name
,
v
)
for
for
p
,
v
in
zip
(
self
.
parameters
,
x
))
def
parameter_array
(
self
,
d
):
def
get_
parameter_array
(
self
,
d
):
return
num
.
array
([
d
[
p
.
name
]
for
p
in
self
.
parameters
],
dtype
=
num
.
float
)
@
property
...
...
@@ -195,39 +207,6 @@ class Problem(Object):
def
set_engine
(
self
,
engine
):
self
.
_engine
=
engine
def
init_satellite_target_leveling
(
self
):
for
t
in
self
.
satellite_targets
:
add
=
True
add_parameters
=
[
Parameter
(
'%s:waterlevel'
%
t
.
scene_id
.
lower
(),
'm'
,
label
=
'Waterlevel (%s)'
%
t
.
scene_id
,
target
=
t
),
Parameter
(
'%s:ramp_north'
%
t
.
scene_id
.
lower
(),
'm/m'
,
label
=
'Ramp North (%s)'
%
t
.
scene_id
,
target
=
t
),
Parameter
(
'%s:ramp_east'
%
t
.
scene_id
.
lower
(),
'm/m'
,
label
=
'Ramp East (%s)'
%
t
.
scene_id
,
target
=
t
),
]
add_ranges
=
t
.
inner_misfit_config
.
leveling_ranges
.
copy
()
for
k
in
add_ranges
.
keys
():
new_k
=
'%s:%s'
%
(
t
.
scene_id
.
lower
(),
k
)
if
new_k
in
self
.
parameter_names
:
add
=
False
add_ranges
[
new_k
]
=
add_ranges
.
pop
(
k
)
if
add
:
logger
.
info
(
'Adding waterlevel parameters for %s'
%
t
.
scene_id
)
self
.
parameters
+=
add_parameters
self
.
ranges
.
update
(
add_ranges
)
def
set_satellite_scene_levels
(
self
,
x
):
for
target
in
self
.
satellite_targets
:
levels
=
self
.
parameter_dict
(
x
,
target
=
target
)
for
k
in
levels
.
keys
():
new_k
=
k
.
split
(
':'
)[
-
1
]
levels
[
new_k
]
=
levels
.
pop
(
k
)
target
.
set_scene_levels
(
**
levels
)
def
make_bootstrap_weights
(
self
,
nbootstrap
):
ntargets
=
len
(
self
.
targets
)
ws
=
num
.
zeros
((
nbootstrap
,
ntargets
))
...
...
@@ -269,7 +248,6 @@ class Problem(Object):
return
ws
def
inter_group_weights2
(
self
,
ns
):
''' Deprecated? '''
group
,
ngroups
=
self
.
get_group_mask
()
ws
=
num
.
zeros
(
ns
.
shape
)
for
igroup
in
xrange
(
ngroups
):
...
...
@@ -279,14 +257,25 @@ class Problem(Object):
return
ws
def
bounds
(
self
):
def
get_xref
(
self
):
return
self
.
pack
(
self
.
base_source
)
def
get_parameter_bounds
(
self
):
out
=
[]
for
p
in
self
.
parameters
:
for
p
in
self
.
problem_
parameters
:
r
=
self
.
ranges
[
p
.
name
]
out
.
append
((
r
.
start
,
r
.
stop
))
for
target
in
self
.
targets
:
for
p
in
target
.
target_parameters
:
r
=
target
.
ranges
[
p
.
name
]
out
.
append
((
r
.
start
,
r
.
stop
))
return
out
def
get_dependant_bounds
(
self
):
return
[]
def
bootstrap_misfit
(
self
,
ms
,
ns
,
ibootstrap
=
None
):
w
=
self
.
get_bootstrap_weights
(
ibootstrap
)
*
\
self
.
get_target_weights
()
*
self
.
inter_group_weights
(
ns
)
...
...
@@ -376,7 +365,7 @@ class CMTProblem(Problem):
mt_type
=
StringChoice
.
T
(
default
=
'full'
,
choices
=
[
'full'
,
'deviatoric'
])
def
get_source
(
self
,
x
):
d
=
self
.
parameter_dict
(
x
)
d
=
self
.
get_
parameter_dict
(
x
)
rm6
=
num
.
array
([
d
.
rmnn
,
d
.
rmee
,
d
.
rmdd
,
d
.
rmne
,
d
.
rmnd
,
d
.
rmed
],
dtype
=
num
.
float
)
...
...
@@ -455,7 +444,7 @@ class CMTProblem(Problem):
def
preconstrain
(
self
,
x
):
d
=
self
.
parameter_dict
(
x
)
d
=
self
.
get_
parameter_dict
(
x
)
m6
=
num
.
array
([
d
.
rmnn
,
d
.
rmee
,
d
.
rmdd
,
d
.
rmne
,
d
.
rmnd
,
d
.
rmed
],
dtype
=
num
.
float
)
...
...
@@ -470,7 +459,7 @@ class CMTProblem(Problem):
m9
/=
m0_unscaled
m6
=
mtm
.
to6
(
m9
)
d
.
rmnn
,
d
.
rmee
,
d
.
rmdd
,
d
.
rmne
,
d
.
rmnd
,
d
.
rmed
=
m6
x
=
self
.
parameter_array
(
d
)
x
=
self
.
get_
parameter_array
(
d
)
source
=
self
.
get_source
(
x
)
if
any
(
self
.
distance_min
>
source
.
distance_to
(
t
)
...
...
@@ -479,7 +468,7 @@ class CMTProblem(Problem):
return
x
def
dependant_bounds
(
self
):
def
get_
dependant_bounds
(
self
):
out
=
[
(
-
1.
,
1.
),
(
-
1.
,
1.
)]
...
...
@@ -584,7 +573,7 @@ class CMTProblemConfig(ProblemConfig):
class
DoubleDCProblem
(
Problem
):
parameters
=
[
problem_
parameters
=
[
Parameter
(
'time'
,
's'
,
label
=
'Time'
),
Parameter
(
'north_shift'
,
'm'
,
label
=
'Northing'
,
**
as_km
),
Parameter
(
'east_shift'
,
'm'
,
label
=
'Easting'
,
**
as_km
),
...
...
@@ -609,7 +598,7 @@ class DoubleDCProblem(Problem):
nbootstrap
=
Int
.
T
(
default
=
100
)
def
get_source
(
self
,
x
):
d
=
self
.
parameter_dict
(
x
)
d
=
self
.
get_
parameter_dict
(
x
)
p
=
{}
for
k
in
self
.
base_source
.
keys
():
if
k
in
d
:
...
...
@@ -676,10 +665,6 @@ class DoubleDCProblem(Problem):
return
num
.
array
(
x
,
dtype
=
num
.
float
)
def
dependant_bounds
(
self
):
out
=
[]
return
out
def
evaluate
(
self
,
x
,
result_mode
=
'sparse'
):
source
=
self
.
get_source
(
x
)
engine
=
self
.
get_engine
()
...
...
@@ -758,7 +743,7 @@ class DoubleDCProblemConfig(ProblemConfig):
class
RectangularProblem
(
Problem
):
parameters
=
[
problem_
parameters
=
[
Parameter
(
'north_shift'
,
'm'
,
label
=
'Northing'
,
**
as_km
),
Parameter
(
'east_shift'
,
'm'
,
label
=
'Easting'
,
**
as_km
),
Parameter
(
'depth'
,
'm'
,
label
=
'Depth'
,
**
as_km
),
...
...
@@ -775,10 +760,10 @@ class RectangularProblem(Problem):
nbootstrap
=
0
def
pack
(
self
,
source
):
return
self
.
parameter_array
(
source
)
return
self
.
get_
parameter_array
(
source
)
def
get_source
(
self
,
x
):
source
=
self
.
base_source
.
clone
(
**
self
.
parameter_dict
(
x
))
source
=
self
.
base_source
.
clone
(
**
self
.
get_
parameter_dict
(
x
))
return
source
def
extract
(
self
,
xs
,
i
):
...
...
@@ -801,13 +786,6 @@ class RectangularProblem(Problem):
# raise Forbidden()
return
x
def
dependant_bounds
(
self
):
print
(
'dependent_bounds'
)
out
=
[
(
-
1.
,
1.
),
(
-
1.
,
1.
)]
return
out
def
evaluate
(
self
,
x
,
result_mode
=
'sparse'
,
mask
=
None
,
nprocs
=
0
):
source
=
self
.
get_source
(
x
)
engine
=
self
.
get_engine
()
...
...
src/synthetic_tests.py
View file @
a99867ad
...
...
@@ -42,7 +42,7 @@ class SyntheticTest(Object):
problem
=
self
.
get_problem
()
if
self
.
x
:
x
=
problem
.
preconstrain
(
problem
.
parameter_array
(
self
.
x
))
problem
.
get_
parameter_array
(
self
.
x
))
else
:
x
=
problem
.
preconstrain
(
...
...
src/targets.py
View file @
a99867ad
...
...
@@ -468,12 +468,13 @@ def _process(tr, tmin, tmax, taper, domain):
class
InnerSatelliteMisfitConfig
(
Object
):
use_weight_focal
=
Bool
.
T
(
default
=
False
)
leveling_
ranges
=
Dict
.
T
(
String
.
T
(),
gf
.
Range
.
T
(),
ranges
=
Dict
.
T
(
String
.
T
(),
gf
.
Range
.
T
(),
default
=
{
'waterlevel'
:
'-0.5 .. 0.5'
,
'ramp_north'
:
'-1e-4 .. 1e-4'
,
'ramp_east'
:
'-1e-4 .. 1e-4'
})
class
MisfitSatelliteTarget
(
gf
.
SatelliteTarget
):
scene_id
=
String
.
T
()
super_group
=
gf
.
StringID
.
T
()
...
...
@@ -481,6 +482,11 @@ class MisfitSatelliteTarget(gf.SatelliteTarget):
manual_weight
=
Float
.
T
(
default
=
1.0
)
group
=
gf
.
StringID
.
T
()
target_parameters
=
[
...]
ranges
=
Dict
.
T
(
String
.
T
(),
gf
.
Range
.
T
())
def
__init__
(
self
,
*
args
,
**
kwargs
):
gf
.
SatelliteTarget
.
__init__
(
self
,
*
args
,
**
kwargs
)
self
.
waterlevel
=
0.
...
...
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