Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
ift
vlbi_resolve
Commits
d2f5d6a2
Commit
d2f5d6a2
authored
Feb 13, 2020
by
Philipp Arras
Browse files
Simplifications
parent
6fdbf96c
Changes
7
Hide whitespace changes
Inline
Side-by-side
config.py
View file @
d2f5d6a2
...
@@ -15,75 +15,56 @@
...
@@ -15,75 +15,56 @@
# Author: Philipp Arras, Philipp Frank, Philipp Haim, Reimar Leike,
# Author: Philipp Arras, Philipp Frank, Philipp Haim, Reimar Leike,
# Jakob Knollmueller
# Jakob Knollmueller
import
os
import
nifty6
as
ift
import
nifty6
as
ift
import
util
as
vres
import
util
as
vres
oversampling_factor
=
2
ift
.
fft
.
set_nthreads
(
1
)
nthreads
=
int
(
os
.
getenv
(
'OMP_NUM_THREADS'
,
1
))
ift
.
fft
.
set_nthreads
(
nthreads
)
eps
=
1e-7
eps
=
1e-7
npix
=
128
npix
=
128
dt
=
6
# hours
dt
=
6
# hours
fov
=
256
*
vres
.
MUAS2RAD
# RAD
fov
=
256
*
vres
.
MUAS2RAD
doms
=
ift
.
RGSpace
(
2
*
(
npix
,),
2
*
(
fov
/
npix
,))
npixt
=
7
*
24
//
dt
startt
=
0
if
dt
is
not
None
:
cfm
=
ift
.
CorrelatedFieldMaker
.
make
(
0.2
,
1e-1
,
''
)
dt
=
int
(
dt
)
cfm
.
add_fluctuations
(
ift
.
RGSpace
(
int
(
2
*
npixt
),
dt
),
fluctuations_mean
=
.
2
,
fluctuations_stddev
=
1.
,
flexibility_mean
=
0.1
,
flexibility_stddev
=
0.001
,
asperity_mean
=
0.01
,
asperity_stddev
=
0.001
,
loglogavgslope_mean
=-
4
,
loglogavgslope_stddev
=
0.5
,
prefix
=
'time'
)
cfm
.
add_fluctuations
(
doms
,
fluctuations_mean
=
cfm
.
moment_slice_to_average
(
1.5
),
fluctuations_stddev
=
1.
,
flexibility_mean
=
0.3
,
flexibility_stddev
=
0.001
,
asperity_mean
=
0.01
,
asperity_stddev
=
0.001
,
loglogavgslope_mean
=-
1.5
,
loglogavgslope_stddev
=
0.5
,
prefix
=
'space'
)
logsky
=
cfm
.
finalize
(
prior_info
=
0
)
_fm
,
_fs
,
_flm
,
_fls
=
1.5
,
1.
,
0.3
,
0.001
FA_lo
=
ift
.
FieldAdapter
(
logsky
.
target
,
'lo'
)
_am
,
_as
,
_lm
,
_ls
=
0.01
,
0.001
,
-
1.5
,
0.5
FA_hi
=
ift
.
FieldAdapter
(
logsky
.
target
,
'hi'
)
xi_hi
=
ift
.
FieldAdapter
(
logsky
.
domain
[
'xi'
],
'xi_hi'
)
id_hi
=
ift
.
FieldAdapter
(
logsky
.
domain
[
'xi'
],
'xi'
).
adjoint
@
xi_hi
xi_lo
=
ift
.
FieldAdapter
(
logsky
.
domain
[
'xi'
],
'xi_lo'
)
id_lo
=
ift
.
FieldAdapter
(
logsky
.
domain
[
'xi'
],
'xi'
).
adjoint
@
xi_lo
if
npix
is
not
None
and
dt
is
not
None
:
logsky_1
=
(
FA_hi
.
adjoint
@
logsky
).
partial_insert
(
id_hi
)
npix
=
int
(
npix
)
logsky_2
=
(
FA_lo
.
adjoint
@
logsky
).
partial_insert
(
id_lo
).
scale
(
0.01
)
doms
=
ift
.
RGSpace
(
2
*
(
npix
,),
2
*
(
fov
/
npix
,)
)
logsky_lo
=
FA_lo
.
adjoint
@
(
FA_hi
+
FA_lo
)
npixt
=
7
*
24
//
dt
logsky_hi
=
FA_hi
.
adjoint
@
(
FA_hi
-
FA_lo
)
startt
=
0
logsky_mf
=
(
logsky_hi
+
logsky_lo
)
@
(
logsky_1
+
logsky_2
)
domt
=
ift
.
RGSpace
(
npixt
,
dt
)
sky_movie_mf
=
vres
.
normalize
(
logsky_mf
.
target
)
@
logsky_mf
.
exp
()
dom
=
ift
.
makeDomain
((
domt
,
doms
))
pspec_movie
=
cfm
.
normalized_amplitudes
print
(
'Sky domain:'
)
print
(
dom
)
domt_zeropadded
=
ift
.
RGSpace
(
int
(
oversampling_factor
*
npixt
),
dt
)
cfm
=
ift
.
CorrelatedFieldMaker
.
make
(
0.2
,
1e-1
,
''
)
cfm
.
add_fluctuations
(
domt_zeropadded
,
fluctuations_mean
=
.
2
,
fluctuations_stddev
=
1.
,
flexibility_mean
=
0.1
,
flexibility_stddev
=
0.001
,
asperity_mean
=
0.01
,
asperity_stddev
=
0.001
,
loglogavgslope_mean
=-
4
,
loglogavgslope_stddev
=
0.5
,
prefix
=
'time'
)
cfm
.
add_fluctuations
(
doms
,
fluctuations_mean
=
cfm
.
moment_slice_to_average
(
_fm
),
fluctuations_stddev
=
_fs
,
flexibility_mean
=
_flm
,
flexibility_stddev
=
_fls
,
asperity_mean
=
_am
,
asperity_stddev
=
_as
,
loglogavgslope_mean
=
_lm
,
loglogavgslope_stddev
=
_ls
,
prefix
=
'space'
)
logsky
=
cfm
.
finalize
(
prior_info
=
0
)
FA_lo
=
ift
.
FieldAdapter
(
logsky
.
target
,
'lo'
)
FA_hi
=
ift
.
FieldAdapter
(
logsky
.
target
,
'hi'
)
xi_hi
=
ift
.
FieldAdapter
(
logsky
.
domain
[
'xi'
],
'xi_hi'
)
id_hi
=
ift
.
FieldAdapter
(
logsky
.
domain
[
'xi'
],
'xi'
).
adjoint
@
xi_hi
xi_lo
=
ift
.
FieldAdapter
(
logsky
.
domain
[
'xi'
],
'xi_lo'
)
id_lo
=
ift
.
FieldAdapter
(
logsky
.
domain
[
'xi'
],
'xi'
).
adjoint
@
xi_lo
expected_difference
=
1e-2
logsky_1
=
(
FA_hi
.
adjoint
@
logsky
).
partial_insert
(
id_hi
)
logsky_2
=
(
FA_lo
.
adjoint
@
logsky
).
partial_insert
(
id_lo
).
scale
(
expected_difference
)
logsky_lo
=
FA_lo
.
adjoint
@
(
FA_hi
+
FA_lo
)
logsky_hi
=
FA_hi
.
adjoint
@
(
FA_hi
-
FA_lo
)
logsky_mf
=
(
logsky_hi
+
logsky_lo
)
@
(
logsky_1
+
logsky_2
)
sky_movie_mf
=
vres
.
normalize
(
logsky_mf
.
target
)
@
logsky_mf
.
exp
()
pspec_movie
=
cfm
.
normalized_amplitudes
reconstruction.py
View file @
d2f5d6a2
...
@@ -21,13 +21,12 @@ os.environ["OMP_NUM_THREADS"] = "1"
...
@@ -21,13 +21,12 @@ os.environ["OMP_NUM_THREADS"] = "1"
import
sys
import
sys
from
functools
import
reduce
from
functools
import
reduce
from
operator
import
add
from
operator
import
add
from
time
import
time
import
numpy
as
np
import
numpy
as
np
import
nifty6
as
ift
import
nifty6
as
ift
import
util
as
vres
import
util
as
vres
from
config
import
doms
,
dt
,
eps
,
npixt
,
nthreads
from
config
import
doms
,
dt
,
eps
,
npixt
from
config
import
sky_movie_mf
as
sky
from
config
import
sky_movie_mf
as
sky
from
config
import
startt
from
config
import
startt
...
@@ -40,42 +39,35 @@ if __name__ == '__main__':
...
@@ -40,42 +39,35 @@ if __name__ == '__main__':
raise
RuntimeError
raise
RuntimeError
path
=
f
'data/
{
pre
}
'
path
=
f
'data/
{
pre
}
'
lh
=
[]
# Build data model
active_inds
=
[]
lh
,
active_inds
=
[]
,
[]
for
freq
in
vres
.
data
.
FREQS
:
for
freq
in
vres
.
data
.
FREQS
:
rawd
=
vres
.
combined_data
(
path
,
[
freq
],
identify_short_baselines
=
[
'APAA'
,
'SMJC'
])
rawd
=
vres
.
combined_data
(
path
,
[
freq
],
identify_short_baselines
=
[
'APAA'
,
'SMJC'
])
args
=
{
'tmin'
:
startt
,
'tmax'
:
npixt
*
dt
,
'delta_t'
:
dt
}
for
ii
,
dd
in
enumerate
(
vres
.
time_binning
(
rawd
,
dt
,
startt
,
npixt
*
dt
)):
for
ii
,
dd
in
enumerate
(
vres
.
time_binning
(
rawd
,
**
args
)):
if
len
(
dd
)
==
0
:
if
len
(
dd
)
==
0
:
continue
continue
ind
=
str
(
ii
)
+
"_"
+
freq
ind
=
str
(
ii
)
+
"_"
+
freq
active_inds
.
append
(
ind
)
active_inds
.
append
(
ind
)
v2ph
,
icovph
=
vres
.
Visibilities2ClosurePhases
(
dd
)
v2ampl
,
icovampl
=
vres
.
Visibilities2ClosureAmplitudes
(
dd
)
R
=
vres
.
RadioResponse
(
doms
,
dd
[
'uv'
],
eps
).
ducktape
(
ind
)
vis
=
ift
.
makeField
(
R
.
target
,
dd
[
'vis'
])
ll_ph
=
ift
.
GaussianEnergy
(
v2ph
(
vis
),
icovph
)
@
v2ph
ll_ampl
=
ift
.
GaussianEnergy
(
v2ampl
(
vis
),
icovampl
)
@
v2ampl
lh
.
append
((
ll_ph
+
ll_ampl
)
@
R
)
lh
=
reduce
(
add
,
lh
)
@
vres
.
DomainTuple2MultiField
(
sky
.
target
,
active_inds
)
pb
=
vres
.
gaussian_profile
(
sky
.
target
[
'hi'
][
1
],
50
*
vres
.
MUAS2RAD
)
pb
=
ift
.
ContractionOperator
(
sky
.
target
[
'hi'
],
0
).
adjoint
(
pb
)
pb
=
ift
.
makeOp
(
ift
.
MultiField
.
from_dict
({
'hi'
:
pb
,
'lo'
:
pb
}))
vis2closph
,
invcov_ph
=
vres
.
Visibilities2ClosurePhases
(
dd
)
# Plot prior samples
vis2closampl
,
invcov_ampl
=
vres
.
Visibilities2ClosureAmplitudes
(
dd
)
nfft
=
vres
.
RadioResponse
(
doms
,
dd
[
'uv'
],
eps
,
nthreads
)
vis
=
ift
.
makeField
(
nfft
.
target
,
dd
[
'vis'
])
ll
=
ift
.
GaussianEnergy
(
mean
=
vis2closph
(
vis
),
inverse_covariance
=
invcov_ph
)
@
vis2closph
ll
=
ll
+
ift
.
GaussianEnergy
(
mean
=
vis2closampl
(
vis
),
inverse_covariance
=
invcov_ampl
)
@
vis2closampl
lh
.
append
(
ll
@
nfft
.
ducktape
(
ind
))
conv
=
vres
.
DomainTuple2MultiField
(
sky
.
target
,
active_inds
)
lh
=
reduce
(
add
,
lh
)
@
conv
for
ii
in
range
(
4
):
for
ii
in
range
(
4
):
pp
=
ift
.
from_random
(
'normal'
,
sky
.
domain
)
pp
=
ift
.
from_random
(
'normal'
,
sky
.
domain
)
vres
.
save_state
(
sky
,
pp
,
pre
,
f
'prior
{
ii
}
'
,
samples
=
[
0
*
pp
,
0
*
pp
])
vres
.
save_state
(
sky
,
pp
,
pre
,
f
'prior
{
ii
}
'
,
[
])
# Minimization
pos
=
0.1
*
ift
.
from_random
(
'normal'
,
sky
.
domain
)
pos
=
0.1
*
ift
.
from_random
(
'normal'
,
sky
.
domain
)
vres
.
save_state
(
sky
,
pos
,
pre
,
'initial'
,
samples
=
[
0
*
pos
,
0
*
pos
])
vres
.
save_state
(
sky
,
pos
,
pre
,
'initial'
,
[])
ic
=
ift
.
GradientNormController
(
iteration_limit
=
40
,
name
=
'Sampling'
)
pb
=
vres
.
gaussian_profile
(
sky
.
target
[
'hi'
][
1
],
50
*
vres
.
MUAS2RAD
)
pb
=
ift
.
ContractionOperator
(
sky
.
target
[
'hi'
],
0
).
adjoint
(
pb
)
pb
=
ift
.
MultiField
.
from_dict
({
'hi'
:
pb
,
'lo'
:
pb
})
t0
=
time
()
(
lh
@
ift
.
makeOp
(
pb
)
@
sky
)(
pos
)
print
(
f
'Likelihood call:
{
1000
*
(
time
()
-
t0
):.
0
f
}
ms'
)
for
ii
in
range
(
30
):
for
ii
in
range
(
30
):
if
ii
<
10
:
if
ii
<
10
:
N_samples
=
1
N_samples
=
1
...
@@ -93,23 +85,16 @@ if __name__ == '__main__':
...
@@ -93,23 +85,16 @@ if __name__ == '__main__':
N_samples
=
20
N_samples
=
20
N_iterations
=
30
N_iterations
=
30
print
(
f
'Iter:
{
ii
}
, N_samples:
{
N_samples
}
, N_iter:
{
N_iterations
}
'
)
print
(
f
'Iter:
{
ii
}
, N_samples:
{
N_samples
}
, N_iter:
{
N_iterations
}
'
)
if
ii
<
15
:
cstkeys
=
set
(
pos
.
domain
.
keys
())
-
set
([
'xi_lo'
,
'xi_hi'
])
print
(
'Primary beam hack active'
)
ll
=
lh
@
ift
.
makeOp
(
pb
)
@
sky
else
:
print
(
'No primary beam anymore'
)
ll
=
lh
@
sky
cstkeys
=
(
'spaceasperity'
,
'spaceflexibility'
,
'spacefluctuations'
,
'spaceloglogavgslope'
,
'spacespectrum'
,
'timeasperity'
,
'timeflexibility'
,
'timefluctuations'
,
'timeloglogavgslope'
,
'timespectrum'
,
'zeromode'
)
pe
=
cstkeys
if
ii
<
20
else
[]
cst
=
cstkeys
if
ii
<
20
else
[]
cst
=
cstkeys
if
ii
<
20
else
[]
H
=
ift
.
StandardHamiltonian
(
ll
,
ic
)
H
=
ift
.
StandardHamiltonian
(
lh
@
pb
@
sky
if
ii
<
15
else
lh
@
sky
,
ift
.
GradientNormController
(
iteration_limit
=
40
))
KL
=
ift
.
MetricGaussianKL
(
pos
,
H
,
N_samples
,
mirror_samples
=
True
,
KL
=
ift
.
MetricGaussianKL
(
pos
,
H
,
N_samples
,
mirror_samples
=
True
,
lh_sampling_dtype
=
np
.
complex128
,
point_estimates
=
pe
,
constants
=
cst
)
lh_sampling_dtype
=
np
.
complex128
,
ic_newton
=
ift
.
AbsDeltaEnergyController
(
0.1
,
point_estimates
=
cst
,
constants
=
cst
)
iteration_limit
=
N_iterations
,
dct
=
{
'deltaE'
:
0.1
,
'iteration_limit'
:
N_iterations
,
name
=
f
'it_
{
ii
}
'
,
'name'
:
f
'it_
{
ii
}
'
,
'convergence_level'
:
2
}
convergence_level
=
2
)
minimizer
=
ift
.
NewtonCG
(
ift
.
AbsDeltaEnergyController
(
**
dct
))
minimizer
=
ift
.
NewtonCG
(
ic_newton
)
KL
,
_
=
minimizer
(
KL
)
KL
,
_
=
minimizer
(
KL
)
pos
=
KL
.
position
pos
=
KL
.
position
vres
.
save_state
(
sky
,
pos
,
pre
,
ii
,
samples
=
KL
.
samples
)
vres
.
save_state
(
sky
,
pos
,
pre
,
ii
,
KL
.
samples
)
test.py
View file @
d2f5d6a2
...
@@ -23,10 +23,8 @@ import nifty6 as ift
...
@@ -23,10 +23,8 @@ import nifty6 as ift
import
util
as
eht
import
util
as
eht
pmp
=
pytest
.
mark
.
parametrize
pmp
=
pytest
.
mark
.
parametrize
bools
=
[
False
,
True
]
cb
=
[[],
[
'APAA'
,
'SMJC'
]]
# cb = [[], ['APAA'], ['SMJC'], ['APAA', 'SMJC']]
ds
=
[{
cb
=
[[
'APAA'
,
'SMJC'
]]
d3
=
{
'uv'
:
np
.
random
.
randn
(
11
,
2
)
*
1e7
,
'uv'
:
np
.
random
.
randn
(
11
,
2
)
*
1e7
,
'vis'
:
np
.
random
.
randn
(
11
)
+
1j
*
np
.
random
.
rand
(
11
),
'vis'
:
np
.
random
.
randn
(
11
)
+
1j
*
np
.
random
.
rand
(
11
),
'sigma'
:
np
.
random
.
randn
(
11
)
**
2
,
'sigma'
:
np
.
random
.
randn
(
11
)
**
2
,
...
@@ -34,12 +32,9 @@ d3 = {
...
@@ -34,12 +32,9 @@ d3 = {
'time'
:
np
.
array
(
5
*
[
7.24027777
]
+
6
*
[
7.4236114
]),
'time'
:
np
.
array
(
5
*
[
7.24027777
]
+
6
*
[
7.4236114
]),
'ant1'
:
np
.
array
([
0
,
0
,
0
,
1
,
1
,
0
,
0
,
0
,
1
,
1
,
2
]),
'ant1'
:
np
.
array
([
0
,
0
,
0
,
1
,
1
,
0
,
0
,
0
,
1
,
1
,
2
]),
'ant2'
:
np
.
array
([
1
,
2
,
3
,
2
,
3
,
1
,
2
,
3
,
2
,
3
,
3
])
'ant2'
:
np
.
array
([
1
,
2
,
3
,
2
,
3
,
1
,
2
,
3
,
2
,
3
,
3
])
}
}]
ds
=
[
ds
+=
[
eht
.
read_data
(
'data/disk'
,
dd
,
ff
,
o2
)
for
dd
,
ff
,
o2
in
product
(
eht
.
DAYS
,
eht
.
FREQS
,
cb
)]
eht
.
read_data
(
dd
,
ff
,
o2
)
ds
+=
[
eht
.
combined_data
(
'data/disk'
,
eht
.
FREQS
,
identify_short_baselines
=
o2
)
for
o2
in
cb
]
for
dd
,
ff
,
o2
in
product
(
eht
.
DAYS
,
eht
.
FREQS
,
cb
)
]
+
[
eht
.
combined_data
(
eht
.
FREQS
,
identify_short_baselines
=
o2
)
for
o2
in
cb
]
+
[
d3
]
seeds
=
[
189
,
4938
]
seeds
=
[
189
,
4938
]
dtypes
=
[
np
.
complex128
,
np
.
float64
]
dtypes
=
[
np
.
complex128
,
np
.
float64
]
...
@@ -82,8 +77,9 @@ def test_visibility_closure_matrices(n):
...
@@ -82,8 +77,9 @@ def test_visibility_closure_matrices(n):
Psi
=
eht
.
closure
.
closure_phase_design_matrix
(
n
)
Psi
=
eht
.
closure
.
closure_phase_design_matrix
(
n
)
np
.
testing
.
assert_allclose
(
Psi
@
Phi
,
0
)
np
.
testing
.
assert_allclose
(
Psi
@
Phi
,
0
)
@
pmp
(
'seed'
,
seeds
)
@
pmp
(
'seed'
,
seeds
)
@
pmp
(
'shape'
,
[(
3
,
4
),
(
10
,
20
)])
@
pmp
(
'shape'
,
[(
3
,
4
),
(
10
,
20
)])
def
test_normalize
(
seed
,
shape
):
def
test_normalize
(
seed
,
shape
):
np
.
random
.
seed
(
seed
)
np
.
random
.
seed
(
seed
)
sp
=
ift
.
RGSpace
(
shape
,
distances
=
np
.
exp
(
np
.
random
.
randn
(
len
(
shape
))))
sp
=
ift
.
RGSpace
(
shape
,
distances
=
np
.
exp
(
np
.
random
.
randn
(
len
(
shape
))))
...
@@ -92,7 +88,6 @@ def test_normalize(seed, shape):
...
@@ -92,7 +88,6 @@ def test_normalize(seed, shape):
np
.
testing
.
assert_allclose
(
s_normalized
.
integrate
(),
1.
)
np
.
testing
.
assert_allclose
(
s_normalized
.
integrate
(),
1.
)
@
pmp
(
'seed'
,
seeds
)
@
pmp
(
'seed'
,
seeds
)
@
pmp
(
'd'
,
ds
)
@
pmp
(
'd'
,
ds
)
@
pmp
(
'mode'
,
[
'ph'
,
'ampl'
])
@
pmp
(
'mode'
,
[
'ph'
,
'ampl'
])
...
@@ -105,16 +100,19 @@ def test_closure_consistency(seed, d, mode):
...
@@ -105,16 +100,19 @@ def test_closure_consistency(seed, d, mode):
pos
=
ift
.
from_random
(
'normal'
,
op
.
domain
,
dtype
=
np
.
complex128
)
pos
=
ift
.
from_random
(
'normal'
,
op
.
domain
,
dtype
=
np
.
complex128
)
ift
.
extra
.
check_jacobian_consistency
(
op
,
pos
)
ift
.
extra
.
check_jacobian_consistency
(
op
,
pos
)
@
pmp
(
'seed'
,
seeds
)
@
pmp
(
'seed'
,
seeds
)
@
pmp
(
'shape'
,
[(
3
,
4
),
(
10
,
20
)])
@
pmp
(
'shape'
,
[(
3
,
4
),
(
10
,
20
)])
def
test_sparse_cov
(
seed
,
shape
):
def
test_sparse_cov
(
seed
,
shape
):
np
.
random
.
seed
(
seed
)
np
.
random
.
seed
(
seed
)
matrix
=
np
.
random
.
randn
(
*
shape
)
matrix
=
np
.
random
.
randn
(
*
shape
)
sigma_sq
=
np
.
exp
(
np
.
random
.
randn
(
shape
[
1
]))
sigma_sq
=
np
.
exp
(
np
.
random
.
randn
(
shape
[
1
]))
d
,
r
,
c
=
eht
.
closure
.
sparse_cov
(
matrix
,
sigma_sq
)
d
,
r
,
c
=
eht
.
closure
.
sparse_cov
(
matrix
,
sigma_sq
)
mat
=
np
.
zeros
((
shape
[
0
],)
*
2
)
mat
=
np
.
zeros
((
shape
[
0
],)
*
2
)
mat
[(
r
,
c
)]
=
d
mat
[(
r
,
c
)]
=
d
np
.
testing
.
assert_allclose
(
mat
.
T
@
mat
@
matrix
@
np
.
diag
(
sigma_sq
)
@
matrix
.
T
,
np
.
eye
(
shape
[
0
]),
rtol
=
1e-7
,
atol
=
1e-7
)
res0
=
mat
.
T
@
mat
@
matrix
@
np
.
diag
(
sigma_sq
)
@
matrix
.
T
res1
=
np
.
eye
(
shape
[
0
])
np
.
testing
.
assert_allclose
(
res0
,
res1
,
rtol
=
1e-7
,
atol
=
1e-7
)
@
pmp
(
'seed'
,
seeds
)
@
pmp
(
'seed'
,
seeds
)
...
@@ -179,24 +177,18 @@ def test_nfft(npix, epsilon, dd):
...
@@ -179,24 +177,18 @@ def test_nfft(npix, epsilon, dd):
only_r_linear
=
True
)
only_r_linear
=
True
)
def
_vis2closure
(
d
,
ind
):
ind
=
np
.
sort
(
ind
)
i
,
j
,
k
=
ind
vis_ind
=
tuple
(
np
.
where
(
np
.
logical_and
(
d
[
'ant1'
]
==
a
,
d
[
'ant2'
]
==
b
)
==
1
)[
0
]
for
a
,
b
in
((
i
,
j
),
(
j
,
k
),
(
i
,
k
)))
phase
=
d
[
'vis'
]
/
abs
(
d
[
'vis'
])
return
phase
[
vis_ind
[
0
]]
*
phase
[
vis_ind
[
1
]]
*
phase
[
vis_ind
[
2
]].
conjugate
()
def
test_closure
():
def
test_closure
():
np
.
random
.
seed
(
42
)
np
.
random
.
seed
(
42
)
def
vis2closure
(
d
,
ind
):
ind
=
np
.
sort
(
ind
)
i
,
j
,
k
=
ind
vis_ind
=
tuple
(
np
.
where
(
np
.
logical_and
(
d
[
'ant1'
]
==
a
,
d
[
'ant2'
]
==
b
)
==
1
)[
0
]
for
a
,
b
in
((
i
,
j
),
(
j
,
k
),
(
i
,
k
)))
phase
=
d
[
'vis'
]
/
abs
(
d
[
'vis'
])
return
phase
[
vis_ind
[
0
]]
*
phase
[
vis_ind
[
1
]]
*
phase
[
vis_ind
[
2
]].
conjugate
()
# Antenna setup
# 0 -- 3 -- 4
# | \/ |
# | /\ |
# 1 -- 2
ant1
=
[]
ant1
=
[]
ant2
=
[]
ant2
=
[]
for
ii
in
range
(
4
):
for
ii
in
range
(
4
):
...
@@ -217,9 +209,9 @@ def test_closure():
...
@@ -217,9 +209,9 @@ def test_closure():
d
[
'sigma'
]
=
abs
(
d
[
'vis'
])
/
np
.
sqrt
(
ww
)
d
[
'sigma'
]
=
abs
(
d
[
'vis'
])
/
np
.
sqrt
(
ww
)
closure
=
np
.
empty
(
3
,
dtype
=
np
.
complex128
)
closure
=
np
.
empty
(
3
,
dtype
=
np
.
complex128
)
closure
[
0
]
=
vis2closure
(
d
,
[
1
,
2
,
3
])[
0
]
closure
[
0
]
=
_
vis2closure
(
d
,
[
1
,
2
,
3
])[
0
]
closure
[
1
]
=
vis2closure
(
d
,
[
0
,
2
,
3
])[
0
]
closure
[
1
]
=
_
vis2closure
(
d
,
[
0
,
2
,
3
])[
0
]
closure
[
2
]
=
vis2closure
(
d
,
[
0
,
1
,
3
])[
0
]
closure
[
2
]
=
_
vis2closure
(
d
,
[
0
,
1
,
3
])[
0
]
closure_op
=
eht
.
Visibilities2ClosurePhases
(
d
)[
0
]
closure_op
=
eht
.
Visibilities2ClosurePhases
(
d
)[
0
]
vis
=
ift
.
makeField
(
ift
.
UnstructuredDomain
(
len
(
ant1
)),
d
[
'vis'
])
vis
=
ift
.
makeField
(
ift
.
UnstructuredDomain
(
len
(
ant1
)),
d
[
'vis'
])
...
...
util/constants.py
View file @
d2f5d6a2
...
@@ -15,13 +15,8 @@
...
@@ -15,13 +15,8 @@
import
numpy
as
np
import
numpy
as
np
DEG2RAD
=
np
.
pi
/
180.
SPEEDOFLIGHT
=
299792458.
SPEEDOFLIGHT
=
299792458.
MUAS2RAD
=
1e-6
/
3600
*
np
.
pi
/
180
ARCMIN2RAD
=
1
/
60
*
DEG2RAD
AS2RAD
=
1
/
3600
*
DEG2RAD
MUAS2RAD
=
1
/
1e6
/
3600
*
DEG2RAD
MAXSHORTBASELINE
=
2000000
MAXSHORTBASELINE
=
2000000
KEYS
=
[
'time'
,
'ant1'
,
'ant2'
,
'uv'
,
'vis'
,
'sigma'
]
KEYS
=
[
'time'
,
'ant1'
,
'ant2'
,
'uv'
,
'vis'
,
'sigma'
]
FREQS
=
[
'lo'
,
'hi'
]
FREQS
=
[
'lo'
,
'hi'
]
...
...
util/data.py
View file @
d2f5d6a2
...
@@ -65,17 +65,16 @@ def read_data(prefix, day, freq, identify_short_baselines):
...
@@ -65,17 +65,16 @@ def read_data(prefix, day, freq, identify_short_baselines):
assert
day
in
DAYS
assert
day
in
DAYS
fname
=
f
'
{
prefix
}
_
{
day
}
_
{
freq
}
.csv'
fname
=
f
'
{
prefix
}
_
{
day
}
_
{
freq
}
.csv'
d
=
read_data_raw
(
fname
)
d
=
read_data_raw
(
fname
)
ant1
,
ant2
=
d
[
'ant1'
],
d
[
'ant2'
]
all_antennas
=
list
(
set
(
d
[
'
ant1
'
]
)
|
set
(
d
[
'
ant2
'
]
))
all_antennas
=
list
(
set
(
ant1
)
|
set
(
ant2
))
if
len
(
identify_short_baselines
)
>
0
:
if
len
(
identify_short_baselines
)
>
0
:
dct
=
{
aa
:
ii
for
ii
,
aa
in
enumerate
(
all_antennas
)}
dct
=
{
aa
:
ii
for
ii
,
aa
in
enumerate
(
all_antennas
)}
if
'APAA'
in
identify_short_baselines
:
if
'APAA'
in
identify_short_baselines
:
dct
[
'AP'
]
=
dct
[
'AA'
]
dct
[
'AP'
]
=
dct
[
'AA'
]
if
'SMJC'
in
identify_short_baselines
:
if
'SMJC'
in
identify_short_baselines
:
dct
[
'SM'
]
=
dct
[
'JC'
]
dct
[
'SM'
]
=
dct
[
'JC'
]
ant1
=
[
dct
[
ele
]
for
ele
in
d
[
'ant1'
]]
ant1
=
[
dct
[
ele
]
for
ele
in
ant1
]
ant2
=
[
dct
[
ele
]
for
ele
in
d
[
'ant2'
]]
ant2
=
[
dct
[
ele
]
for
ele
in
ant2
]
ddct
=
defaultdict
(
lambda
:
len
(
ddct
))
ddct
=
defaultdict
(
lambda
:
len
(
ddct
))
d
[
'ant1'
]
=
np
.
array
([
ddct
[
ele
]
for
ele
in
ant1
])
d
[
'ant1'
]
=
np
.
array
([
ddct
[
ele
]
for
ele
in
ant1
])
d
[
'ant2'
]
=
np
.
array
([
ddct
[
ele
]
for
ele
in
ant2
])
d
[
'ant2'
]
=
np
.
array
([
ddct
[
ele
]
for
ele
in
ant2
])
...
...
util/response.py
View file @
d2f5d6a2
...
@@ -23,11 +23,10 @@ from .constants import SPEEDOFLIGHT
...
@@ -23,11 +23,10 @@ from .constants import SPEEDOFLIGHT
class
RadioResponse
(
ift
.
LinearOperator
):
class
RadioResponse
(
ift
.
LinearOperator
):
def
__init__
(
self
,
domain
,
uv
,
epsilon
,
j
=
1
):
def
__init__
(
self
,
domain
,
uv
,
epsilon
):
ndata
=
uv
.
shape
[
0
]
ndata
=
uv
.
shape
[
0
]
self
.
_uvw
=
np
.
zeros
((
ndata
,
3
),
dtype
=
uv
.
dtype
)
self
.
_uvw
=
np
.
zeros
((
ndata
,
3
),
dtype
=
uv
.
dtype
)
self
.
_uvw
[:,
0
:
2
]
=
uv
self
.
_uvw
[:,
0
:
2
]
=
uv
self
.
_j
=
int
(
j
)
self
.
_eps
=
float
(
epsilon
)
self
.
_eps
=
float
(
epsilon
)
self
.
_domain
=
ift
.
makeDomain
(
domain
)
self
.
_domain
=
ift
.
makeDomain
(
domain
)
self
.
_target
=
ift
.
makeDomain
(
ift
.
UnstructuredDomain
(
ndata
))
self
.
_target
=
ift
.
makeDomain
(
ift
.
UnstructuredDomain
(
ndata
))
...
@@ -40,8 +39,8 @@ class RadioResponse(ift.LinearOperator):
...
@@ -40,8 +39,8 @@ class RadioResponse(ift.LinearOperator):
nx
,
ny
=
self
.
_domain
[
0
].
shape
nx
,
ny
=
self
.
_domain
[
0
].
shape
f
=
np
.
array
([
SPEEDOFLIGHT
])
f
=
np
.
array
([
SPEEDOFLIGHT
])
if
mode
==
self
.
TIMES
:
if
mode
==
self
.
TIMES
:
res
=
ng
.
dirty2ms
(
self
.
_uvw
,
f
,
x
,
None
,
dx
,
dy
,
self
.
_eps
,
False
,
res
=
ng
.
dirty2ms
(
self
.
_uvw
,
f
,
x
,
None
,
dx
,
dy
,
self
.
_eps
,
nthreads
=
1
)
False
,
nthreads
=
1
)
res
=
res
[:,
0
]
res
=
res
[:,
0
]
else
:
else
:
x
=
x
[:,
None
]
x
=
x
[:,
None
]
...
...
util/sugar.py
View file @
d2f5d6a2
...
@@ -38,25 +38,27 @@ def save_state(sky, pos, pre, name, samples):
...
@@ -38,25 +38,27 @@ def save_state(sky, pos, pre, name, samples):
dom
=
sky
.
target
[
'hi'
]
dom
=
sky
.
target
[
'hi'
]
dt
=
dom
[
0
].
distances
[
0
]
dt
=
dom
[
0
].
distances
[
0
]
sc
=
ift
.
StatCalculator
()
sc
=
ift
.
StatCalculator
()
if
len
(
samples
)
==
0
:
samples
=
2
*
(
0
*
pos
,)
if
len
(
samples
)
==
1
:
samples
.
append
(
samples
[
0
])
for
sam
in
samples
:
for
sam
in
samples
:
sk
=
sky
(
pos
+
sam
)
sk
=
sky
(
pos
+
sam
)
sk
=
0.5
*
(
sk
[
'hi'
]
+
sk
[
'lo'
])
sk
=
0.5
*
(
sk
[
'hi'
]
+
sk
[
'lo'
])
sc
.
add
(
sk
)
sc
.
add
(
sk
)
vlim
=
[
0.
,
np
.
max
(
sc
.
mean
.
val
)]
vlim
=
[
0.
,
np
.
max
(
sc
.
mean
.
val
)]
rel
=
sc
.
var
.
sqrt
()
/
sc
.
mean
rel
=
sc
.
var
.
sqrt
()
/
sc
.
mean
varlim
=
[
0.
,
np
.
max
(
rel
.
val
)]
varlim
=
[
0.
,
np
.
max
(
rel
.
val
)]
for
ii
in
range
(
7
):
for
i
in
range
(
7
):
fi
=
ift
.
DomainTupleFieldInserter
(
dom
,
0
,
(
int
(
ii
*
24
/
dt
),)).
adjoint
fi
=
ift
.
DomainTupleFieldInserter
(
dom
,
0
,
(
int
(
i
*
24
/
dt
),)).
adjoint
p
.
add
(
fi
(
sc
.
mean
),
zmin
=
vlim
[
0
],
zmax
=
vlim
[
1
])
p
.
add
(
fi
(
sc
.
mean
),
zmin
=
vlim
[
0
],
zmax
=
vlim
[
1
])
for
i
in
range
(
7
):
for
i
i
in
range
(
7
):
fi
=
ift
.
DomainTupleFieldInserter
(
dom
,
0
,
(
int
(
i
*
24
/
dt
),)).
adjoint
fi
=
ift
.
DomainTupleFieldInserter
(
dom
,
0
,
(
int
(
i
i
*
24
/
dt
),)).
adjoint
p
.
add
(
fi
(
rel
),
zmin
=
varlim
[
0
],
zmax
=
varlim
[
1
])
p
.
add
(
fi
(
rel
),
zmin
=
varlim
[
0
],
zmax
=
varlim
[
1
])
for
i
in
range
(
7
):
for
i
i
in
range
(
7
):
fi
=
ift
.
DomainTupleFieldInserter
(
dom
,
0
,
(
int
(
i
*
24
/
dt
),)).
adjoint
fi
=
ift
.
DomainTupleFieldInserter
(
dom
,
0
,
(
int
(
i
i
*
24
/
dt
),)).
adjoint
p
.
add
(
fi
(
sk
),
zmin
=
vlim
[
0
],
zmax
=
vlim
[
1
])
p
.
add
(
fi
(
sk
),
zmin
=
vlim
[
0
],
zmax
=
vlim
[
1
])
p
.
output
(
nx
=
7
,
ny
=
3
,
name
=
f
'
{
pre
}{
name
}
.png'
,
xsize
=
15
,
ysize
=
5
)
p
.
output
(
nx
=
7
,
ny
=
3
,
name
=
f
'
{
pre
}{
name
}
.png'
,
xsize
=
20
,
ysize
=
8
)
def
baselines
(
alst
):
def
baselines
(
alst
):
...
...
Write
Preview
Markdown
is supported
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