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
Wu Jin
CSST simulation
Commits
64c00169
Commit
64c00169
authored
Dec 18, 2021
by
Fang Yuedong
Browse files
add unittest script for detect effects
parent
e0fa93a6
Changes
2
Show whitespace changes
Inline
Side-by-side
Catalog/Catalog_example.py
View file @
64c00169
...
@@ -41,7 +41,7 @@ class Catalog_example(CatalogBase):
...
@@ -41,7 +41,7 @@ class Catalog_example(CatalogBase):
config : dict
config : dict
configuration dictionary which is parsed from the input YAML file
configuration dictionary which is parsed from the input YAML file
chip: ObservationSim.Instrument.Chip
chip: ObservationSim.Instrument.Chip
a ObservationSim.Instrument.Chip
object
, can be used to identify the band etc.
a ObservationSim.Instrument.Chip
instance
, can be used to identify the band etc.
**kwargs : dict
**kwargs : dict
other needed input parameters (in key-value pairs), please modify corresponding
other needed input parameters (in key-value pairs), please modify corresponding
initialization call in "ObservationSim.py" as you need.
initialization call in "ObservationSim.py" as you need.
...
...
tests/det_effect_unit_test.py
0 → 100644
View file @
64c00169
import
unittest
import
numpy
as
np
from
ObservationSim.Instrument.Chip
import
Effects
import
galsim
import
matplotlib.pyplot
as
plt
import
os
,
sys
,
math
,
copy
from
numpy.random
import
Generator
,
PCG64
import
warnings
warnings
.
filterwarnings
(
"ignore"
,
'.*Numba.*'
,)
width
=
9216
height
=
9232
if
os
.
path
.
isdir
(
'./output/'
):
pass
else
:
os
.
mkdir
(
'./output/'
)
class
DetTest
(
unittest
.
TestCase
):
def
test_prnu
(
self
):
'''
Unit test for PRNU. Expected result: a randomized GS image contains PRNU with sigma=0.01, mean=1.
'''
print
(
'PRNU Test:'
)
sigma
=
0.01
seed
=
20210911
prnuimg
=
Effects
.
PRNU_Img
(
width
,
height
,
sigma
=
sigma
,
seed
=
seed
)
meanval
,
stdval
=
np
.
mean
(
prnuimg
.
array
),
np
.
std
(
prnuimg
.
array
)
print
(
' Mean & STDDEV of PRNU image are %6.4f & %6.4f.'
%
(
meanval
,
stdval
))
print
(
' PRNU Image Array:'
)
print
(
' '
,
prnuimg
.
array
)
self
.
assertTrue
(
np
.
abs
(
meanval
-
1
)
<
1e-6
)
self
.
assertTrue
(
np
.
abs
(
stdval
-
sigma
)
<
0.002
)
print
(
'
\n
Unit test for PRNU has been passed.'
)
del
prnuimg
def
test_dark
(
self
):
'''
Test add dark current to image. Expected result: an image with dark current 3.4 e- and noise=1.844 e-.
'''
rng_poisson
=
galsim
.
BaseDeviate
(
20210911
)
dark_noise
=
galsim
.
DeviateNoise
(
galsim
.
PoissonDeviate
(
rng_poisson
,
0.02
*
(
150
+
0.5
*
40
)))
img
=
galsim
.
Image
(
200
,
200
,
dtype
=
np
.
float32
,
init_value
=
0
)
print
(
'Initial Mean & STD = %6.3f & %6.3f'
%
(
np
.
mean
(
img
.
array
),
np
.
std
(
img
.
array
)))
img
.
addNoise
(
dark_noise
)
meanval
=
np
.
mean
(
img
.
array
)
stdval
=
np
.
std
(
img
.
array
)
print
(
'Dark added Mean & STD = %6.3f & %6.3f'
%
(
meanval
,
stdval
))
self
.
assertTrue
(
np
.
abs
(
meanval
-
3.4
)
<
0.05
)
self
.
assertTrue
(
np
.
abs
(
stdval
-
1.844
)
<
0.02
)
print
(
'
\n
Unit test for dark current has been passed.'
)
del
img
def
test_satu
(
self
):
'''
Test saturation and bleeding. Expected result: an image with bleeding effect.
'''
img
=
galsim
.
Image
(
500
,
500
,
dtype
=
np
.
float32
)
star
=
galsim
.
Gaussian
(
flux
=
60e5
,
fwhm
=
3
)
img
=
star
.
drawImage
(
image
=
img
,
center
=
(
150
,
200
))
# gal = galsim.Sersic(n=1, half_light_radius=3,flux=50e5)
# img = gal.drawImage(image=img,center=(350,300))
img
.
addNoise
(
galsim
.
GaussianNoise
(
sigma
=
7
))
# plt.imshow(img.array)
# plt.show()
filename1
=
os
.
path
.
join
(
'output'
,
'test_satu_initimg.fits'
)
img
.
write
(
filename1
)
newimg
=
Effects
.
SaturBloom
(
img
,
fullwell
=
9e4
)
# plt.imshow(newimg.array)
# plt.show()
filename2
=
os
.
path
.
join
(
'output'
,
'test_satu_bleedimg.fits'
)
newimg
.
write
(
filename2
)
del
img
,
newimg
,
star
def
test_nonlinear
(
self
):
'''
Test non-linear effect. Expected result: an image with non-linearity effect.
'''
imgarr
=
np
.
arange
(
1
,
9e4
,
4
).
reshape
((
150
,
150
))
img
=
galsim
.
Image
(
copy
.
deepcopy
(
imgarr
))
filename1
=
os
.
path
.
join
(
'output'
,
'test_nonlinear_initimg.fits'
)
img
.
write
(
filename1
)
newimg
=
Effects
.
NonLinearity
(
img
,
beta1
=
5E-7
,
beta2
=
0
)
filename2
=
os
.
path
.
join
(
'output'
,
'test_nonlinear_finalimg.fits'
)
newimg
.
write
(
filename2
)
plt
.
scatter
(
imgarr
.
flatten
(),
newimg
.
array
.
flatten
(),
s
=
2
,
alpha
=
0.5
)
plt
.
plot
([
-
1e3
,
9e4
],[
-
1e3
,
9e4
],
color
=
'black'
,
lw
=
1
,
ls
=
'--'
)
plt
.
xlabel
(
'input (e-)'
)
plt
.
ylabel
(
'output (e-)'
)
plt
.
savefig
(
'./output/test_nonlinearity.png'
,
dpi
=
200
)
plt
.
show
()
del
img
,
newimg
,
imgarr
def
test_badpixel_HtrDtr
(
self
):
img
=
galsim
.
Image
(
500
,
500
,
init_value
=
1000
)
rgbadpix
=
Generator
(
PCG64
(
20210911
))
badfraction
=
5E-5
*
(
rgbadpix
.
random
()
*
0.5
+
0.7
)
img
=
Effects
.
DefectivePixels
(
img
,
IfHotPix
=
True
,
IfDeadPix
=
True
,
fraction
=
badfraction
,
seed
=
20210911
,
biaslevel
=
0
)
img
.
write
(
'./output/test_badpixel_HtrDtr.fits'
)
del
img
def
test_badpixel_HfsDtr
(
self
):
img
=
galsim
.
Image
(
500
,
500
,
init_value
=
1000
)
rgbadpix
=
Generator
(
PCG64
(
20210911
))
badfraction
=
5E-5
*
(
rgbadpix
.
random
()
*
0.5
+
0.7
)
img
=
Effects
.
DefectivePixels
(
img
,
IfHotPix
=
False
,
IfDeadPix
=
True
,
fraction
=
badfraction
,
seed
=
20210911
,
biaslevel
=
0
)
img
.
write
(
'./output/test_badpixel_HfsDtr.fits'
)
del
img
def
test_badpixel_HtrDfs
(
self
):
img
=
galsim
.
Image
(
500
,
500
,
init_value
=
1000
)
rgbadpix
=
Generator
(
PCG64
(
20210911
))
badfraction
=
5E-5
*
(
rgbadpix
.
random
()
*
0.5
+
0.7
)
img
=
Effects
.
DefectivePixels
(
img
,
IfHotPix
=
True
,
IfDeadPix
=
False
,
fraction
=
badfraction
,
seed
=
20210911
,
biaslevel
=
0
)
img
.
write
(
'./output/test_badpixel_HtrDfs.fits'
)
del
img
def
test_badpixel_HfsDfs
(
self
):
img
=
galsim
.
Image
(
500
,
500
,
init_value
=
1000
)
rgbadpix
=
Generator
(
PCG64
(
20210911
))
badfraction
=
5E-5
*
(
rgbadpix
.
random
()
*
0.5
+
0.7
)
img
=
Effects
.
DefectivePixels
(
img
,
IfHotPix
=
False
,
IfDeadPix
=
False
,
fraction
=
badfraction
,
seed
=
20210911
,
biaslevel
=
0
)
img
.
write
(
'./output/test_badpixel_HfsDfs.fits'
)
del
img
def
test_badlines
(
self
):
img
=
galsim
.
Image
(
500
,
500
,
init_value
=-
1000
)
img
.
addNoise
(
galsim
.
GaussianNoise
(
sigma
=
7
))
newimg
=
Effects
.
BadColumns
(
copy
.
deepcopy
(
img
),
seed
=
20210911
)
newimg
.
write
(
'./output/test_badlines.fits'
)
del
newimg
,
img
def
test_cte
(
self
):
img
=
galsim
.
Image
(
200
,
200
,
init_value
=
1000
)
img
.
array
[
50
,
80
]
=
1e4
img
.
array
[
150
,
150
]
=
3e4
newimgcol
=
Effects
.
CTE_Effect
(
copy
.
deepcopy
(
img
),
direction
=
'column'
)
newimgrow
=
Effects
.
CTE_Effect
(
copy
.
deepcopy
(
img
),
direction
=
'row'
)
newimgcol
.
write
(
'./output/test_ctecol.fits'
)
newimgrow
.
write
(
'./output/test_cterow.fits'
)
del
img
,
newimgcol
,
newimgrow
def
test_readnoise
(
self
):
img
=
galsim
.
Image
(
200
,
200
,
init_value
=
1000
)
seed
=
20210911
rng_readout
=
galsim
.
BaseDeviate
(
seed
)
readout_noise
=
galsim
.
GaussianNoise
(
rng
=
rng_readout
,
sigma
=
5
)
img
.
addNoise
(
readout_noise
)
img
.
write
(
'./output/test_readnoise.fits'
)
stdval
=
np
.
std
(
img
.
array
)
self
.
assertTrue
(
np
.
abs
(
stdval
-
5
)
<
0.01
*
5
)
print
(
'
\n
Unit test for readout noise has been passed.'
)
del
img
def
test_addbias
(
self
):
img
=
galsim
.
Image
(
200
,
200
,
init_value
=
0
)
img
=
Effects
.
AddBiasNonUniform16
(
img
,
bias_level
=
500
,
nsecy
=
2
,
nsecx
=
8
,
seed
=
20210911
)
img
.
write
(
'./output/test_addbias.fits'
)
del
img
def
test_apply16gains
(
self
):
img
=
galsim
.
Image
(
500
,
500
,
init_value
=
100
)
img
=
Effects
.
ApplyGainNonUniform16
(
img
,
gain
=
1.5
,
nsecy
=
2
,
nsecx
=
8
,
seed
=
202102
)
img
.
write
(
"./output/test_apply16gains.fits"
)
rightedge
=
int
(
500
/
8
)
*
8
print
(
'gain=%6.2f'
%
1.5
)
meanimg
=
np
.
mean
(
img
.
array
[:,:
rightedge
])
sigmaimg
=
np
.
std
(
img
.
array
[:,:
rightedge
])
print
(
'mean, sigma = %6.2f, %6.2f'
%
(
meanimg
,
sigmaimg
))
self
.
assertTrue
(
np
.
abs
(
meanimg
-
100
/
1.5
)
<
1
)
self
.
assertTrue
(
np
.
abs
(
sigmaimg
/
meanimg
-
0.01
)
<
0.001
)
print
(
'
\n
Unit test for applying 16 channel gains has been passed.'
)
del
img
def
test_cosmicray
(
self
):
attachedSizes
=
np
.
loadtxt
(
'../ObservationSim/Instrument/Chip/wfc-cr-attachpixel.dat'
)
cr_map
=
Effects
.
produceCR_Map
(
xLen
=
500
,
yLen
=
500
,
exTime
=
150
+
0.5
*
40
,
cr_pixelRatio
=
0.003
*
(
1
+
0.5
*
40
/
150
),
gain
=
1
,
attachedSizes
=
attachedSizes
,
seed
=
20210911
)
crimg
=
galsim
.
Image
(
cr_map
)
crimg
.
write
(
'./output/test_cosmicray.fits'
)
del
cr_map
,
crimg
def
test_shutter
(
self
):
img
=
galsim
.
Image
(
5000
,
5000
,
init_value
=
1000
)
shuttimg
=
Effects
.
ShutterEffectArr
(
img
,
t_exp
=
150
,
t_shutter
=
1.3
,
dist_bearing
=
735
,
dt
=
1E-3
)
# shutter effect normalized image for this chip
img
*=
shuttimg
img
.
write
(
'./output/test_shutter.fits'
)
del
img
def
test_vignette
(
self
):
img
=
galsim
.
Image
(
2000
,
2000
,
init_value
=
1000
)
print
(
img
.
bounds
)
# # img.bounds = galsim.BoundsI(1, width, 1, height)
img
.
setOrigin
(
10000
,
10000
)
flat_img
=
Effects
.
MakeFlatSmooth
(
img
.
bounds
,
20210911
)
flat_normal
=
flat_img
/
np
.
mean
(
flat_img
.
array
)
flat_normal
.
write
(
'./output/test_vignette.fits'
)
del
flat_img
,
img
,
flat_normal
if
__name__
==
'__main__'
:
unittest
.
main
()
\ No newline at end of file
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