Source code for sas.sascalc.corfunc.transform_thread
from sas.sascalc.data_util.calcthread import CalcThread
from sas.sascalc.dataloader.data_info import Data1D
from scipy.fftpack import dct
import numpy as np
from time import sleep
[docs]class FourierThread(CalcThread):
def __init__(self, raw_data, extrapolated_data, bg, updatefn=None,
completefn=None):
CalcThread.__init__(self, updatefn=updatefn, completefn=completefn)
self.data = raw_data
self.background = bg
self.extrapolation = extrapolated_data
[docs] def compute(self):
qs = self.extrapolation.x
iqs = self.extrapolation.y
q = self.data.x
background = self.background
self.ready(delay=0.0)
self.update(msg="Starting Fourier transform.")
self.ready(delay=0.0)
if self.isquit():
return
try:
gamma = dct((iqs-background)*qs**2)
gamma = gamma / gamma.max()
except:
self.update(msg="Fourier transform failed.")
self.complete(transform=None)
return
if self.isquit():
return
self.update(msg="Fourier transform completed.")
xs = np.pi*np.arange(len(qs),dtype=np.float32)/(q[1]-q[0])/len(qs)
transform = Data1D(xs, gamma)
self.complete(transform=transform)
[docs]class HilbertThread(CalcThread):
def __init__(self, raw_data, extrapolated_data, bg, updatefn=None,
completefn=None):
CalcThread.__init__(self, updatefn=updatefn, completefn=completefn)
self.data = raw_data
self.background = bg
self.extrapolation = extrapolated_data
[docs] def compute(self):
qs = self.extrapolation.x
iqs = self.extrapolation.y
q = self.data.x
background = self.background
self.ready(delay=0.0)
self.update(msg="Starting Hilbert transform.")
self.ready(delay=0.0)
if self.isquit():
return
# TODO: Implement hilbert transform
self.update(msg="Hilbert transform completed.")
self.complete(transform=None)