Ignore:
Timestamp:
Jul 11, 2017 9:59:44 AM (7 years ago)
Author:
lewis
Branches:
master, ESS_GUI, ESS_GUI_Docs, ESS_GUI_batch_fitting, ESS_GUI_bumps_abstraction, ESS_GUI_iss1116, ESS_GUI_iss879, ESS_GUI_iss959, ESS_GUI_opencl, ESS_GUI_ordering, ESS_GUI_sync_sascalc, magnetic_scatt, release-4.2.2, ticket-1009, ticket-1094-headless, ticket-1242-2d-resolution, ticket-1243, ticket-1249, ticket885, unittest-saveload
Children:
2a54ba5
Parents:
457f735
git-author:
Lewis O'Driscoll <lewis.o'driscoll@…> (07/11/17 09:59:23)
git-committer:
Lewis O'Driscoll <lewis.o'driscoll@…> (07/11/17 09:59:44)
Message:

Compute 3D correlation function as well as 1D

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/sas/sascalc/corfunc/transform_thread.py

    r457f735 r412c509  
    22from sas.sascalc.dataloader.data_info import Data1D 
    33from scipy.fftpack import dct 
     4from scipy.integrate import simps, trapz 
    45import numpy as np 
    56from time import sleep 
    67 
    78class FourierThread(CalcThread): 
    8     def __init__(self, raw_data, extrapolated_data, bg, updatefn=None, 
    9         completefn=None): 
     9    def __init__(self, raw_data, extrapolated_data, bg, extrap_fn=None, 
     10        updatefn=None, completefn=None): 
    1011        CalcThread.__init__(self, updatefn=updatefn, completefn=completefn) 
    1112        self.data = raw_data 
    1213        self.background = bg 
    1314        self.extrapolation = extrapolated_data 
     15        self.extrap_fn = extrap_fn 
    1416 
    1517    def compute(self): 
     
    1921        background = self.background 
    2022 
     23        xs = np.pi*np.arange(len(qs),dtype=np.float32)/(q[1]-q[0])/len(qs) 
     24 
    2125        self.ready(delay=0.0) 
    22         self.update(msg="Starting Fourier transform.") 
     26        self.update(msg="Fourier transform in progress.") 
    2327        self.ready(delay=0.0) 
     28 
    2429        if self.isquit(): 
    2530            return 
     
    2732            gamma1 = dct((iqs-background)*qs**2) 
    2833            gamma1 = gamma1 / gamma1.max() 
    29         except: 
     34 
     35            # gamma3(R) = 1/R int_{0}^{R} gamma1(x) dx 
     36            # simps uses simpson's rule to calculate the integral 
     37            gamma3 = [trapz(gamma1[:n], xs[:n])/xs[n-1] for n in range(1, len(xs+1))] 
     38            gamma3 = np.array(gamma3) 
     39        except Exception as e: 
     40            import logging 
     41            logger = logging.getLogger(__name__) 
     42            logger.error(e) 
     43 
    3044            self.update(msg="Fourier transform failed.") 
    31             self.complete(transform=None) 
     45            self.complete(transforms=None) 
    3246            return 
    3347        if self.isquit(): 
     
    3549        self.update(msg="Fourier transform completed.") 
    3650 
    37         xs = np.pi*np.arange(len(qs),dtype=np.float32)/(q[1]-q[0])/len(qs) 
    3851        transform1 = Data1D(xs, gamma1) 
    39         transform3 = Data1D() 
     52        transform3 = Data1D(xs, gamma3) 
    4053 
    4154        transforms = (transform1, transform3) 
Note: See TracChangeset for help on using the changeset viewer.