irfpy.imacommon.imascipac_util
¶
Utilities for science (raw count) matrix of IMA.
Introduction
Input matrix, irfpy.imacommon.imascipac.CntMatrix`
object, will be processed
using pre-defined processing functions. They include
noise reduction
interpolation
one count addition
How it works
The input matrix (attribute matrix
will be modified.
On the other hand, there is another matrix
without processing (raw data) remained as the name matrix_data
.
The matrix has two attribute of the count rate data.
matrix
: Processed matrixmatrix_data
: Matrix in the original data file (non-processed data)
See also
Functions dedicated to MEX/VEX are also implemented in irfpy.mima.scidata_util
and
irfpy.vima.scidata_util
.
- irfpy.imacommon.imascipac_util.noise_reduction_constant(cntmatrix, value=1)[source]¶
Remove the counts below the constant value as noise.
- Parameters
cntmatrix (
CntMatrix
) – Count matrix. The attributematrix
is changed.value – The background value.
- Returns
Nothing.
The counts in the matrix > value is unchanged. The counts in the matrix <= value will be set to zero.
>>> import numpy as np >>> matx = np.zeros([32, 16, 96, 16]) >>> matx[0, 0, 0, 0] = 1 >>> matx[0, 1, 2, 3] = 2 >>> matx[1, 2, 3, 4] = 4 >>> matx[:, :, 95, :] = -1 >>> matx = np.ma.masked_less(matx, 0) # Emulate the masked array >>> import datetime >>> from irfpy.imacommon.imascipac import CntMatrix >>> from irfpy.imacommon import imamode >>> cntmatrix = CntMatrix(datetime.datetime(1975, 1, 1, 0, 0, 0), matx, imamode.M24) >>> print(cntmatrix.matrix.sum()) 7.0 >>> print(cntmatrix.matrix[0, 0, 95, 0]) -- >>> noise_reduction_constant(cntmatrix) >>> print(cntmatrix.matrix.sum()) 6.0 >>> print(cntmatrix.matrix[0, 0, 95, 0]) -- >>> print(cntmatrix.matrix_data.sum()) 7.0
- irfpy.imacommon.imascipac_util.one_count_addition(cntmatrix)[source]¶
Add one count to all values >= 1 to counteract the one count reduction on board spacecraft.
codeauthor:: Moa Persson
- Parameters
cntmatrix (
CntMatrix
) – Count matrix. The attributematrix
is changed.- Returns
Nothing.
The counts in the matrix == 0 is unchanged. The counts in the matrix >= 1 will have one count added.
>>> import numpy as np >>> matx = np.zeros([32, 16, 96, 16]) >>> matx[0, 0, 0, 0] = 0 >>> matx[0, 1, 2, 3] = 2 >>> matx[1, 2, 3, 4] = 4 >>> matx[:, :, 95, :] = -1 # To emulate the masked array. >>> matx = np.ma.masked_less(matx, 0) # To emulate the masked array >>> import datetime >>> from irfpy.imacommon.imascipac import CntMatrix >>> from irfpy.imacommon import imamode >>> cntmatrix = CntMatrix(datetime.datetime(1975, 1, 1, 0, 0, 0), matx, imamode.M24) >>> print(cntmatrix.matrix.max()) 4.0 >>> print(cntmatrix.matrix[0, 0, 95, 0]) -- >>> print(cntmatrix.matrix[0, 0, 0, 0]) 0.0 >>> one_count_addition(cntmatrix) >>> print(cntmatrix.matrix.max()) 5.0 >>> print(cntmatrix.matrix[0, 0, 95, 0]) -- >>> print(cntmatrix.matrix[0, 0, 0, 0]) 0.0 >>> print(cntmatrix.matrix_data.max()) # matrix_data should not change. 4.0
- irfpy.imacommon.imascipac_util.noise_reduction_isolated_counts(cntmatrix, value=1)[source]¶
The counts isolated is considered as the noise.
- Parameters
cntmatrix (
CntMatrix
) – Count matrix. The attributematrix
is changed.value – The background value.
- Returns
Nothing.
>>> import numpy as np >>> matx = np.zeros([32, 16, 96, 16]) >>> matx[0, 0, 0, 0] = 1 # Isolated -> Removed >>> matx[3, 5, 8, 10:12] = 1 # Not isolated. >>> matx[0, 1, 2, 3] = 2 # Isolated, but more than value=1 >>> matx[1, 2, 3, 4] = 4 # Not isolated >>> matx[2, 2, 3, 4] = 1 # Not isolated >>> matx[:, :, 95, :] = -1 # Mask >>> matx = np.ma.masked_less(matx, 0) # Emulate the masked array >>> import datetime >>> from irfpy.imacommon.imascipac import CntMatrix >>> from irfpy.imacommon import imamode >>> cntmatrix = CntMatrix(datetime.datetime(1975, 1, 1, 0, 0, 0), matx, imamode.M24) >>> print(cntmatrix.matrix.sum()) 10.0 >>> print(cntmatrix.matrix[0, 0, 95, 0]) -- >>> noise_reduction_isolated_counts(cntmatrix) >>> print(cntmatrix.matrix.sum()) 9.0 >>> print(cntmatrix.matrix[0, 0, 95, 0]) -- >>> print(cntmatrix.matrix[0, 0, 0, 0]) # Originally 1, but removed. 0.0 >>> print(cntmatrix.matrix[2, 2, 3, 4]) # Originally 1, but not isolated so that not removed. 1.0 >>> print(cntmatrix.matrix_data.sum()) 10.0
- irfpy.imacommon.imascipac_util.interpolate_zero_azimuth(cntmatrix)[source]¶
Interpolate the 0-azimuth channel from 1- and 15-aziuth channels.
Sometimes, azimuth channel 0’s counts contain crosstalk over the other channels. Thus, it might need correction.
Here the processing of the following is provided.
\[C[iM, 0, iE, iP] = \frac{C[iM, 1, iE, iP] + C[iM, 15, iE, iP]}{2}\]Only valid for 16 azimuth channel mode (e.g. mode.M24, mode.M25).
Here an emulating data isp repared.
>>> import numpy as np >>> matx = np.random.randint(0, 50, [32, 16, 96, 16]) # Random counts. >>> matx[30, 0, 10, 5] = 100 >>> matx[30, 1, 10, 5] = 30 >>> matx[30, 15, 10, 5] = 20 >>> matx[:, :, 95, :] = -1 # Mask >>> matx = np.ma.masked_less(matx, 0) # Emulate the masked array >>> import datetime >>> from irfpy.imacommon.imascipac import CntMatrix >>> from irfpy.imacommon import imamode >>> cntmatrix = CntMatrix(datetime.datetime(1975, 1, 1, 0, 0, 0), matx, imamode.M24)
Now the processing.
>>> interpolate_zero_azimuth(cntmatrix) >>> print(cntmatrix.matrix[30, 0, 10, 5]) # to be replaced to 25 (=(30 + 20) / 2) 25 >>> print((cntmatrix.matrix[:, 1:, :, :] == cntmatrix.matrix_data[:, 1:, :, :]).all()) # All matrix except for az=0 is the same. True