Changeset 2de9a5e in sasmodels


Ignore:
Timestamp:
Jul 11, 2014 2:47:47 PM (10 years ago)
Author:
HMP1 <helen.park@…>
Branches:
master, core_shell_microgels, costrafo411, magnetic_model, release_v0.94, release_v0.95, ticket-1257-vesicle-product, ticket_1156, ticket_1265_superball, ticket_822_more_unit_tests
Children:
be5d7df
Parents:
8faffcd
Message:

Update for Aaron

Files:
3 added
5 edited
5 moved

Legend:

Unmodified
Added
Removed
  • Capcyl_Kfun.cpp

    r8faffcd r2de9a5e  
    1414        return(val); 
    1515} 
    16 const real Gauss76Z[76]={ 
     16/* 
     17real Gauss76Z[76]={ 
    1718         .999505948362153*(-1.0),               //0 
    1819         .997397786355355*(-1.0), 
     
    9293        -.999505948362153*(-1.0)                //75 
    9394}; 
    94 const real Gauss76Wt[76]={ 
     95real Gauss76Wt[76]={ 
    9596        .00126779163408536,             //0 
    9697        .00294910295364247, 
     
    170171        .00126779163408536              //75 (indexed from 0) 
    171172}; 
     173*/ 
  • Kernel-CapCyl.cpp

    r8faffcd r2de9a5e  
    1 __kernel void CapCylinderKernel(__global const float *qx, __global const float *qy, __global float *__ptvalue, __global float *vol_i 
     1__kernel void CapCylinderKernel(__global const float *qx, __global const float *qy, __global float *_ptvalue, __global float *vol_i, 
    22const float rad_cyl, const float rad_cap, const float length, const float thet, const float ph, const float sub, 
    33const float scale, const float phi_weight, const float theta_float, const float rad_cap_weight, const float rad_cyl_weight, 
    4 const float length_weight, const int total, const int size) 
     4const float length_weight, const int total, const int size, __const float Gauss76Wt, __const float Gauss76Z) 
    55//ph is phi, sub is sldc-slds, thet is theta 
    66{ 
     
    88    if(i < total) 
    99    { 
    10         float q = sqrt(qx[i]*qx[i] + qy[i]*qy[i]) 
     10        float q = sqrt(qx[i]*qx[i] + qy[i]*qy[i]); 
    1111        float pi = 4.0*atan(1.0); 
    1212        float theta = thet*pi/180.0; 
     
    1616        float cos_val = cyl_x*qx[i]/q + cyl_y*qy[i]/q; 
    1717        float alpha = acos(cos_val); 
    18         float yyy=0; float ans1=0; float ans2=0; float y=0; float xx=0; float ans=0; float zij=0; float be=0 
     18        float yyy=0; float ans1=0; float ans2=0; float y=0; float xx=0; float ans=0; float zij=0; float be=0; float summj=0; 
    1919 
    2020        float hDist = -1.0*sqrt(fabs(rad_cap*rad_cap-rad_cyl*rad_cyl)); 
    21         vol_i[i] = pi*rad_cyl*rad_cyl*len_cyl+2.0*pi/3.0*((rad_cap-hDist)*(rad_cap-hDist)*(2*rad_cap+hDist)); 
     21        vol_i[i] = pi*rad_cyl*rad_cyl*length+2.0*pi/3.0*((rad_cap-hDist)*(rad_cap-hDist)*(2*rad_cap+hDist)); 
    2222        float vaj = -1.0*hDist/rad_cap; 
    2323 
    24         for(j=0;j<76;j++) //the 76 corresponds to the Gauss constants 
     24        for(int j=0;j<76;j++) //the 76 corresponds to the Gauss constants 
    2525        { 
    2626            zij = (Gauss76Z[j]*(1.0-vaj)+vaj+1.0)/2.0; 
     
    4545        } 
    4646        float answer=yyy*yyy*1.0e8*sub*sub*scale/pi*rad_cyl*rad_cyl*length+2.0*pi*(2.0*rad_cap*rad_cap*rad_cap/3.0+rad_cap*rad_cap*hDist-hDist*hDist*hDist/3.0); 
    47         answer/=sin(alpha) 
     47        answer/=sin(alpha); 
    4848 
    4949        _ptvalue[i] = rad_cyl_weight*length_weight*rad_cap_weight*theta_weight*phi_weight*vol_i[i]*answer 
  • Kernel-CoreShellCylinder.cpp

    r8faffcd r2de9a5e  
    1111        float pi = 4.0*atan(1.0); 
    1212        float theta = axis_theta*pi/180.0; 
    13         float phi = axis_phi*pi/180.0; 
    14         float cyl_x = cos(theta)*cos(phi); 
     13        float cyl_x = cos(theta)*cos(axis_phi*pi/180.0); 
    1514        float cyl_y = sin(theta); 
    16         float cos_val = cyl_x*qx[i]/q + cyl_y*qx[i]/q; 
    17         float alpha = acos(cos_val); 
     15        float alpha = acos(cyl_x*qx[i]/q + cyl_y*qx[i]/q); 
    1816 
    1917        if (alpha == 0.0){ 
     
    2321        float si1=0; float si2=0; float be1=0; float be2=0; 
    2422 
    25         float dr1 = core_sld-shell_sld; 
    26         float dr2 = shell_sld-solvent_sld; 
    27         float vol1 = pi*radius*radius*(length); 
    2823        float vol2 = pi*(radius+thickness)*(radius+thickness)*(length+2.0*thickness); 
    2924 
     
    5449            si2 = sin(sinarg2)/sinarg2; 
    5550        } 
     51        float tt = 2.0*vol2*(shell_sld-solvent_sld)*si2*be2 + 2.0*(pi*radius*radius*(length))*(core_sld-shell_sld)*si1*be1; 
    5652 
    57         float t1 = 2.0*vol1*dr1*si1*be1; 
    58         float t2 = 2.0*vol2*dr2*si2*be2; 
    59  
    60         float answer = ((t1+t2)*(t1+t2))*sin(alpha)/fabs(sin(alpha)); 
     53        float answer = (tt*tt)*sin(alpha)/fabs(sin(alpha)); 
    6154        float vol=pi*(radius+thickness)*(radius+thickness)*(length+2.0*thickness); 
    6255        answer = answer/vol*1.0e8*scale; 
  • Kernel-Lamellar.cpp

    r8a20be5 r2de9a5e  
    1 #ifndef real 
    2 # define real float 
    3 #endif 
    41 
    52__kernel void LamellarKernel(__global const real *qx, global const real *qy, __global real *ret, const real bi_thick, 
    6  const real scale, const real sub, const real background, const int length) 
     3 const real scale, const real sub, const int length) 
    74{ 
    85    int i = get_global_id(0); 
     
    129        real pi = 4.0*atan(1.0); 
    1310        real Pq = 2.0*sub*(sub/q)/q*(1.0-cos(q*bi_thick)); 
    14         ret[i] = 2.0*pi*scale*Pq/(q*q)/bi_thick*1.0e8; 
    15         ret[i] += background; 
     11        ret[i] = 2.0*pi*scale*Pq/(q*q)/bi_thick*1.0e8 ; 
    1612    } 
    1713} 
  • code_capcyl.py

    r8faffcd r2de9a5e  
    77from weights import GaussianDispersion 
    88from sasmodel import card 
     9from Capcyl_Gauss import Gauss76Wt, Gauss76Z 
    910 
    1011def set_precision(src, qx, qy, dtype): 
     
    3435        trala = open('NR_BessJ1.cpp').read()+"\n"+open('Capcyl_Kfun.cpp').read()+"\n"+open('Kernel-Cylinder.cpp').read() 
    3536        src, qx, qy = set_precision(trala, qx, qy, dtype=dtype) 
     37        self.prg = cl.Program(ctx, src).build() 
     38        self.qx, self.qy = qx, qy 
    3639 
    37         self.prg = cl.Program(ctx, open('Kernel-CapCyl.cpp').read()).build() 
    3840 
    3941        #buffers 
     
    4143        self.qx_b = cl.Buffer(ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=self.qx) 
    4244        self.qy_b = cl.Buffer(ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=self.qy) 
     45        G, Z = Gauss76Wt, Gauss76Z 
     46        self.Gauss76W_b = cl.Buffer(ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=G) 
     47        self.Gauss76Z_b = cl.Buffer(ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=Z) 
    4348        self.res_b = cl.Buffer(ctx, mf.WRITE_ONLY, qx.nbytes) 
    4449        self.res = np.empty_like(self.qx) 
     
    7378                                        np.float32(theta.value[k]), np.float32(phi.value[l]), np.float32(sub), np.float32(pars['scale']), 
    7479                                        np.float32(phi.weight[l]), np.float32(theta.weight[k]), np.float32(rad_cap.weight[m]), 
    75                                         np.float32(rad_cyl.weight[i]), np.float32(length.weight[j]), np.uint32(self.qx.size), np.uint32(size)) 
     80                                        np.float32(rad_cyl.weight[i]), np.float32(length.weight[j]), np.uint32(self.qx.size), np.uint32(size), 
     81                                        self.Gauss76W_b, self.Gauss76Z_b) 
    7682 
    7783                            cl.enqueue_copy(queue, self.res, self.res_b) 
  • code_lamellar.py

    r8a20be5 r2de9a5e  
    1111    if dtype == 'double': 
    1212        header = """\ 
     13#define real float 
     14""" 
     15    else: 
     16        header = """\ 
    1317#pragma OPENCL EXTENSION cl_khr_fp64: enable 
    1418#define real double 
    1519""" 
    16         return header+src,qx,qy 
    17     else: 
    18         return src,qx,qy 
     20    return header+src, qx, qy 
    1921 
    2022 
     
    2325        'scale':1, 'bi_thick':1, 'sld_bi':1e-6, 'sld_sol':0, 'background':0, 
    2426    } 
    25  
    26     def __init__(self, qx, qy, dtype='float'): 
     27    PD_PARS = {'bi_thick'} 
     28    def __init__(self, qx, qy, dtype='float32'): 
    2729 
    2830        #create context, queue, and build program 
     
    5153        for i in xrange(len(bi_thick.weight)): 
    5254            self.prg.LamellarKernel(self.queue, self.qx.shape, None, self.qx_b, self.qy_b, self.res_b, real(bi_thick.value[i]), 
    53                                     real(pars['scale']), real(sub), real(pars['background']), np.uint32(self.qx.size)) 
     55                                    real(pars['scale']), real(sub), np.uint32(self.qx.size)) 
    5456            cl.enqueue_copy(self.queue, self.res, self.res_b) 
    5557 
  • fit.py

    r8faffcd r2de9a5e  
    33 
    44from bumps.names import * 
    5 from cylcode import GpuCylinder 
    6 from lamellarcode import GpuLamellar 
    7 from ellipsecode import GpuEllipse 
    8 from coreshellcylcode import GpuCoreShellCylinder 
     5from code_cylinder import GpuCylinder 
     6from code_lamellar import GpuLamellar 
     7from code_ellipse import GpuEllipse 
     8from code_coreshellcyl import GpuCoreShellCylinder 
     9from code_capcyl import GpuCapCylinder 
     10from code_triaxialellipse import GpuTriEllipse 
    911from sasmodel import SasModel, load_data, set_beam_stop 
    1012 
     
    2527                 axis_theta=0, axis_phi=90, radius_a_pd=0.1, radius_a_pd_n=10, radius_a_pd_nsigma=3, radius_b_pd=0.1, radius_b_pd_n=10, 
    2628                 radius_b_pd_nsigma=3, axis_theta_pd=0.1, axis_theta_pd_n=6, axis_theta_pd_nsigma=3, axis_phi_pd=0.1, 
    27                  axis_phi_pd_n=6, axis_phi_pd_nsigma=3, dtype='float') 
     29                 axis_phi_pd_n=6, axis_phi_pd_nsigma=3, dtype='float32') 
    2830 
    2931model = SasModel(data, GpuLamellar, scale=1, bi_thick=100, sld_bi=.291e-6, sld_sol=5.77e-6, background=0, 
    30                  bi_thick_pd=0.1, bi_thick_pd_n=35, bi_thick_pd_nsigma=3, dtype='float') 
     32                 bi_thick_pd=0.1, bi_thick_pd_n=35, bi_thick_pd_nsigma=3, dtype='float32') 
    3133 
    32 """ 
     34 
    3335model = SasModel(data, GpuCoreShellCylinder, scale=1, radius=64.1, thickness=1, length=266.96, core_sld=1e-6, shell_sld=4e-6, 
    3436                 solvent_sld=1e-6, background=0, axis_theta=0, axis_phi=0, radius_pd=0.1, radius_pd_n=10, radius_pd_nsigma=3, 
    3537                 length_pd=0.1, length_pd_n=10, length_pd_nsigma=3, thickness_pd=0.1, thickness_pd_n=2, thickness_pd_nsigma=3, 
    3638                 axis_theta_pd=0.1, axis_theta_pd_n=2, axis_theta_pd_nsigma=3, axis_phi_pd=0.1, axis_phi_pd_n=2, 
    37                  axis_phi_pd_nsigma=3, dtype='float') 
     39                 axis_phi_pd_nsigma=3, dtype='float32') 
    3840 
    39 model = SasModel(data, GpuCapCylinder, scale, rad_cyl, rad_cap, length, sld_capcyl, sld_solv, background, theta, phi, 
    40                  rad_cyl_pd, rad_cyl_pd_n, rad_cyl_nsigma, rad_cap_pd, rad_cap_pd_n, rad_cap_pd_nsigma, length_) 
     41model = SasModel(data, GpuCapCylinder, scale=1, rad_cyl=20, rad_cap=40, length=400, sld_capcyl=1e-6, sld_solv=6.3e-6, 
     42                 background=0, theta=0, phi=0, rad_cyl_pd=.1, rad_cyl_pd_n=10, rad_cyl_nsigma=3, rad_cap_pd=.1, rad_cap_pd_n=1, 
     43                 rad_cap_pd_nsigma=3, length_pd=.1, length_pd_n=10, length_pd_nsigma=3, theta_pd=.1, theta_pd_n=4, 
     44                 theta_pd_nsigma=3, phi_pd=.1, phi_pd_n=4, phi_pd_nsigma=3, dtype='float32') 
     45""" 
     46model = SasModel(data, GpuTriEllipse, scale=1, axisA=35, axisB=100, axisC=400, sldEll=1e-6, sldSolv=6.3e-6, 
     47                 background=0, theta=57, phi=57, psi=0, theta_pd=.1, theta_pd_n=4, 
     48                 theta_pd_nsigma=3, phi_pd=.1, phi_pd_n=4, phi_pd_nsigma=3, psi_pd=.1, psi_pd_n=4, psi_pd_nsigma=3, 
     49                 axisA_pd=.1, axisA_pd_n=4, axisA_pd_nsigma=3, axisB_pd=.1, axisB_pd_n=4, axisB_pd_nsigma=3, 
     50                 axisC_pd=.1, axisC_pd_n=4, axisC_pd_nsigma=3, dtype='float') 
    4151 
    42 model.scale.range(0,10) 
     52model.scale.range(0,1) 
    4353 
    4454problem = FitProblem(model) 
Note: See TracChangeset for help on using the changeset viewer.