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
Hu Yi
CSST-COMMOM-CRMASK
Commits
0fce31a8
Commit
0fce31a8
authored
Apr 01, 2022
by
Hu Yi
Browse files
Update crmask.py, add numpy style docs to methods of cr_mask and cr_train.
parent
271ff743
Changes
1
Hide whitespace changes
Inline
Side-by-side
crmask.py
View file @
0fce31a8
...
@@ -9,7 +9,7 @@
...
@@ -9,7 +9,7 @@
#Software package dependencies, numpy, astropy, ccdproc and deepCR
#Software package dependencies, numpy, astropy, ccdproc and deepCR
#Installation dependencies on Ubuntu 20.04
#Installation dependencies on Ubuntu 20.04
#apt install python3-numpy python3-astropy python3-ccdproc python3-pip
#apt install python3-numpy python3-astropy python3-ccdproc python3-pip
#python3 -m pip install deepCR
#python3 -m pip install
pytorch
deepCR
#Version 0.2
#Version 0.2
#changelog
#changelog
...
@@ -66,7 +66,7 @@ class CRMask:
...
@@ -66,7 +66,7 @@ class CRMask:
gpu_flag : (optional) boolean
gpu_flag : (optional) boolean
whether use GPU, default is False
whether use GPU, default is False
config_path : (optional) string
config_path : (optional) string
configuration file path, default is ``.
/
crmask.ini``
configuration file path, default is ``.
./conf/MSC_
crmask.ini``
"""
"""
self
.
model
=
model
self
.
model
=
model
if
model
==
'deepCR_train'
:
if
model
==
'deepCR_train'
:
...
@@ -181,6 +181,9 @@ class CRMask:
...
@@ -181,6 +181,9 @@ class CRMask:
self
.
config
=
config
self
.
config
=
config
def
cr_mask_lacosmic
(
self
):
def
cr_mask_lacosmic
(
self
):
"""
This method is called by `cr_mask`, do NOT use it directly.
"""
config
=
self
.
config
config
=
self
.
config
...
@@ -315,6 +318,9 @@ class CRMask:
...
@@ -315,6 +318,9 @@ class CRMask:
return
masked_hdulist
return
masked_hdulist
def
cr_mask_deepCR
(
self
):
def
cr_mask_deepCR
(
self
):
"""
This method is called by `cr_mask`, do NOT use it directly.
"""
from
deepCR
import
deepCR
from
deepCR
import
deepCR
config
=
self
.
config
config
=
self
.
config
...
@@ -432,9 +438,24 @@ class CRMask:
...
@@ -432,9 +438,24 @@ class CRMask:
else
:
else
:
return
masked_hdulist
return
masked_hdulist
#return a hdulist of a masked image, and a hdulist of a cleaned image if fill_flag is set.
def
cr_mask
(
self
):
def
cr_mask
(
self
):
#here do cr mask task
"""
Cosmic ray detection and mask.
Returns
-------
masked : numpy.ndarray
cosmic ray masked image.
cleaned : numpy.ndarray, optional
Only returned if `fill_flag` is True
cosmic ray cleaned image.
Examples
-------
>>> from crmask import CRMask
>>> crobj = CRMask('xxxx.fits', 'deepCR')
>>> crobj.cr_mask()
"""
if
self
.
model
==
'lacosmic'
:
if
self
.
model
==
'lacosmic'
:
if
self
.
fill_flag
:
if
self
.
fill_flag
:
masked
,
cleaned
=
CRMask
.
cr_mask_lacosmic
(
self
)
masked
,
cleaned
=
CRMask
.
cr_mask_lacosmic
(
self
)
...
@@ -503,6 +524,9 @@ class CRMask:
...
@@ -503,6 +524,9 @@ class CRMask:
return
masked
return
masked
def
cr_train_deepCR_image_to_ndarray
(
self
,
image_sets
,
patch
):
def
cr_train_deepCR_image_to_ndarray
(
self
,
image_sets
,
patch
):
"""
This method is called by `cr_train`, do NOT use it directly.
"""
if
isinstance
(
image_sets
,
str
):
if
isinstance
(
image_sets
,
str
):
if
image_sets
[
-
4
:]
==
'.npy'
:
if
image_sets
[
-
4
:]
==
'.npy'
:
...
@@ -557,6 +581,9 @@ class CRMask:
...
@@ -557,6 +581,9 @@ class CRMask:
return
input_image
return
input_image
def
cr_train_deepCR_prepare_data
(
self
,
patch
):
def
cr_train_deepCR_prepare_data
(
self
,
patch
):
"""
This method is called by `cr_train`, do NOT use it directly.
"""
if
self
.
image_sets
!=
None
:
if
self
.
image_sets
!=
None
:
self
.
training_image
=
CRMask
.
cr_train_deepCR_image_to_ndarray
(
self
,
self
.
image_sets
,
patch
)
self
.
training_image
=
CRMask
.
cr_train_deepCR_image_to_ndarray
(
self
,
self
.
image_sets
,
patch
)
np
.
save
(
'image.npy'
,
self
.
training_image
)
np
.
save
(
'image.npy'
,
self
.
training_image
)
...
@@ -581,6 +608,9 @@ class CRMask:
...
@@ -581,6 +608,9 @@ class CRMask:
def
cr_train_deepCR
(
self
):
def
cr_train_deepCR
(
self
):
"""
This method is called by `cr_train`, do NOT use it directly.
"""
from
deepCR
import
train
from
deepCR
import
train
...
@@ -679,12 +709,31 @@ class CRMask:
...
@@ -679,12 +709,31 @@ class CRMask:
print
(
'Training completes!'
)
print
(
'Training completes!'
)
def
cr_train
(
self
):
def
cr_train
(
self
):
"""
Training models, only support ``deepCR_train``. It will generate pytorch's *.pth file.
The train is very painful and time consuming, do NOT use it in pipelines.
Returns
-------
No returns
Examples
-------
>>> from crmask import CRMask
>>> imglist = ['MSC_MS_210525170000_100000010_23_sci.fits', 'MSC_MS_210525171000_100000011_23_sci.fits', 'MSC_MS_210525172000_100000012_23_sci.fits', 'MSC_MS_210525173000_100000013_23_sci.fits', 'MSC_MS_210525174000_100000014_23_sci.fits', 'MSC_MS_210525175000_100000015_23_sci.fits', 'MSC_MS_210525180000_100000016_23_sci.fits', 'MSC_MS_210525181000_100000017_23_sci.fits', 'MSC_MS_210525182000_100000018_23_sci.fits', 'MSC_MS_210525183000_100000019_23_sci.fits']
>>> masklist = ['MSC_CRM_210525170000_100000010_23_raw.fits', 'MSC_CRM_210525171000_100000011_23_raw.fits', 'MSC_CRM_210525172000_100000012_23_raw.fits', 'MSC_CRM_210525173000_100000013_23_raw.fits', 'MSC_CRM_210525174000_100000014_23_raw.fits', 'MSC_CRM_210525175000_100000015_23_raw.fits', 'MSC_CRM_210525180000_100000016_23_raw.fits', 'MSC_CRM_210525181000_100000017_23_raw.fits', 'MSC_CRM_210525182000_100000018_23_raw.fits', 'MSC_CRM_210525183000_100000019_23_raw.fits']
>>> trainobj = CRMask(imglist, mask = masklist, model = 'deepCR_train')
>>> trainobj.cr_train()
"""
if
self
.
model
==
'deepCR_train'
:
if
self
.
model
==
'deepCR_train'
:
CRMask
.
cr_train_deepCR
(
self
)
CRMask
.
cr_train_deepCR
(
self
)
else
:
else
:
raise
ValueError
(
'Unsupported training model'
)
raise
ValueError
(
'Unsupported training model'
)
def
cr_benchmark
(
self
):
def
cr_benchmark
(
self
):
"""
Do NOT use this method, just for internal test.
"""
if
isinstance
(
self
.
res
,
str
)
or
isinstance
(
self
.
res
,
Path
):
if
isinstance
(
self
.
res
,
str
)
or
isinstance
(
self
.
res
,
Path
):
hdulist
=
pyfits
.
open
(
self
.
res
)
hdulist
=
pyfits
.
open
(
self
.
res
)
res
=
hdulist
[
1
].
data
res
=
hdulist
[
1
].
data
...
...
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