Source code for toor.Optimizer.GaussianFileGenarator
import numpy as np
[docs]
class GaussianParameters:
def __init__(self, voxelSize=None, shiftInvariant=True, deviceObject=None, radioIsotope=None):
if voxelSize is None:
print("Voxel size not provided. Using default value of [1, 1, 1]. Could lead to incorrect results.")
voxelSize = [1, 1, 1]
self.shiftInvariant = shiftInvariant
self.deviceObject = deviceObject
self.radioIsotope = radioIsotope
self.filename = None
self.sigma_y = 0.42
self.sigma_z = 0.42
self._sigma_y_square = np.float32(self.sigma_y**2/voxelSize[1])
self._sigma_z_square = np.float32(self.sigma_z**2/voxelSize[2])
self._acceptableYDistance = None
self._acceptableZDistance = None
self._gaussian_y_fix_term = None
self._gaussian_z_fix_term = None
self._invert2timesigma_z_square = None
self._invert2timesigma_y_square = None
print("Voxel size: ", voxelSize)
print("Sigma y square: ", self._sigma_y_square)
print("Sigma z square: ", self._sigma_z_square)
[docs]
def setShiftInvariantParameters(self):
self._acceptableYDistance = np.float32(11.09205 * self._sigma_y_square)
self._acceptableZDistance = np.float32(11.09205 * self._sigma_z_square)
self._gaussian_y_fix_term = np.float32(1/(np.sqrt(2*np.pi*self._sigma_y_square)))
self._gaussian_z_fix_term = np.float32(1/(np.sqrt(2*np.pi*self._sigma_z_square)))
self._invert2timesigma_z_square = np.float32(1 / (2 * self._sigma_z_square))
self._invert2timesigma_y_square = np.float32(1 / (2 * self._sigma_y_square))
print("Acceptable Y distance: ", self._acceptableYDistance)
print("Acceptable Z distance: ", self._acceptableZDistance)
print("Gaussian y fix term: ", self._gaussian_y_fix_term)
print("Gaussian z fix term: ", self._gaussian_z_fix_term)
print("Invert 2 times sigma z square: ", self._invert2timesigma_z_square)
print("Invert 2 times sigma y square: ", self._invert2timesigma_y_square)
[docs]
def setShiftVariantParameters(self, FWHM_tangential, FWHM_axial):
sigma_y = FWHM_tangential / 2.355
sigma_z = FWHM_axial / 2.355
self._sigma_y_square = np.ascontiguousarray(sigma_y**2, dtype=np.float32)
self._sigma_z_square = np.ascontiguousarray(sigma_z**2, dtype=np.float32)
self._acceptableYDistance = np.ascontiguousarray(11.09205 * self._sigma_y_square, dtype=np.float32)
self._acceptableZDistance = np.ascontiguousarray(11.09205 * self._sigma_z_square, dtype=np.float32)
self._gaussian_y_fix_term = np.ascontiguousarray(1/(np.sqrt(2*np.pi*self._sigma_y_square)), dtype=np.float32)
self._gaussian_z_fix_term = np.ascontiguousarray(1/(np.sqrt(2*np.pi*self._sigma_z_square)), dtype=np.float32)
self._invert2timesigma_z_square = np.ascontiguousarray(1 / (2 * self._sigma_z_square), dtype=np.float32)
self._invert2timesigma_y_square = np.ascontiguousarray(1 / (2 * self._sigma_y_square), dtype=np.float32)
@property
def sigma_y_square(self):
return self._sigma_y_square
@property
def sigma_z_square(self):
return self._sigma_z_square
@property
def acceptableYDistance(self):
return self._acceptableYDistance
@property
def acceptableZDistance(self):
return self._acceptableZDistance
@property
def gaussian_y_fix_term(self):
return self._gaussian_y_fix_term
@property
def gaussian_z_fix_term(self):
return self._gaussian_z_fix_term
@property
def invert2timesigma_z_square(self):
return self._invert2timesigma_z_square
@property
def invert2timesigma_y_square(self):
return self._invert2timesigma_y_square