Source code for crikit.cri.merge_nrbs
"""
Created on Wed Nov 2 11:04:43 2016
@author: chc
"""
import copy as _copy
if __name__ == '__main__':
import matplotlib.pyplot as _plt
import numpy as _np
[docs]class MergeNRBs:
"""
Merge two NRBs: a left-side and a right-side
"""
def __init__(self, nrb_left, nrb_right, pix, left_side_scale=True):
"""
Attributes
----------
pix : int
Pixel number to make the merge
left_side_scale : bool
Scale the left-side to match the right-side. If FALSE, scales the
right-side. If None, scales neither.
Note
-----
If left_side_scale is None (no scaling). The output will match the nrb_left from [0:pix),
and nrb_right from [pix:].
"""
self.nrb_left = nrb_left
self.nrb_right = nrb_right
self.nrb_merge = None
self.pix = pix
self.scale_left = left_side_scale
[docs] def calculate(self):
"""
"""
if self.nrb_left.size != self.nrb_right.size:
print('NRB size mismatch')
return None
else:
pass
self.nrb_merge = _copy.deepcopy(0*self.nrb_left)
success = self._calc(self.nrb_merge, ret_obj=self.nrb_merge)
if success:
return self.nrb_merge
else:
return None
[docs] def _calc(self, data, ret_obj):
try:
ret_obj *= 0
scaler = self.nrb_left[self.pix]/self.nrb_right[self.pix]
if self.scale_left == True:
ret_obj += self.nrb_left/scaler
ret_obj[self.pix::] = self.nrb_right[self.pix::]
elif self.scale_left == False:
ret_obj += self.nrb_left
ret_obj[self.pix::] = self.nrb_right[self.pix::]*scaler
elif self.scale_left is None:
ret_obj[0:self.pix] = self.nrb_left[0:self.pix]
ret_obj[self.pix::] = self.nrb_right[self.pix::]
else:
raise ValueError('self.scale_left must be True, False, or None')
except:
return False
else:
return True
if __name__ == '__main__': # pragma: no cover
x = _np.arange(0,1000)
nrb_left = _np.exp(-(x-500)**2/(100**2))
nrb_right = _np.exp(-(x-700)**2/(120**2))
pix = 625
_plt.plot(x, nrb_left, label='left')
_plt.plot(x, nrb_right, label='right')
_plt.title('Raw NRBs')
merge = MergeNRBs(nrb_left, nrb_right, pix, left_side_scale=True)
out_scaled_left = merge.calculate()
_plt.plot(x, out_scaled_left, ls='--', label='Left Scaled')
merge = MergeNRBs(nrb_left, nrb_right, pix, left_side_scale=False)
out_scaled_right = merge.calculate()
_plt.plot(x, out_scaled_right, ls='--', label='Right Scaled')
merge = MergeNRBs(nrb_left, nrb_right, pix, left_side_scale=None)
out_scaled_none = merge.calculate()
_plt.plot(x, out_scaled_none, ls='--', lw=3, label='NOT Scaled')
_plt.legend(loc='best')
_plt.show()