Ignore:
Timestamp:
Apr 11, 2014 2:16:12 PM (9 years ago)
Author:
srkline
Message:

fixed incorrect units in Beaucage model (B) in model and help file. Calculation was and still is correct.

Changed some of the FFT examples so that they are more easily used.

Added a FFT "GenericModel?" that can be used with the simulator. Whatever is drawn in the matrix is used for the simulatin. There are limitations -- since FFT is used for the calculation, the q-points are interpolated and may not be sufficient for the instrumental q-range. Also, since the FFT q-range is finite, the random deviate calculation is generally unreliable. So scattering power, multiple scattering, are unreliable. Don't expect anything reasonable from the 2D Monte carlo for this reason.

The FFT panel now shows the (real) Qmin and Qmax that you'll get out.

Fixed some issues with updating the 1D graphs in the VCALC panel. Now the SlitSmeared? calculations are plotting properly, although I'd like to now remove the T/B detectors since there's not enough data there.

Location:
sans/Dev/trunk/NCNR_User_Procedures
Files:
1 added
13 edited

Legend:

Unmodified
Added
Removed
  • sans/Dev/trunk/NCNR_User_Procedures/Analysis/Alpha/Tinker/FFT_ConcentratedSpheres.ipf

    r840 r936  
    221221                // spheres have been placed, do the calculation  
    222222                ParseMatrix3D_rho(m)     
    223                  
    224                 Execute "DoFFT()" 
     223 
     224                Calc_IQ_FFT()            
     225//              Execute "DoFFT()" 
    225226                sprintf printStr,"completed pass %d of %d \r",ii+1,npass 
    226227                Print printStr 
  • sans/Dev/trunk/NCNR_User_Procedures/Analysis/Alpha/Tinker/FFT_ConnectedRods.ipf

    r840 r936  
    11#pragma rtGlobals=1             // Use modern global access method. 
    22 
     3// 
     4// 
    35// I should be able to calculate the average number of connections from a search of the  
    46// connXYZ table. I might have other counting routines elsewhere for this too. 
     
    911// 
    1012 
    11 Proc Overnight() 
    12         mTestConnRods() 
    13 End 
    14  
    15  
    16 Proc mTestConnRods() 
    17  
    18         String suffix = "" 
    19         Variable ranType = 1 
     13// npts is the number of nodes 
     14// diam is the diameter of the rods 
     15// nPass is the number of averaging passes 
     16// tagStr is the identifying tag for the files 
     17// ranType selects the RNG => 1 = Sobol, other = enoise 
     18// 
     19//              Function CalculateTriangulated(nPts,fill,diam,nPass,tagStr,ranType) 
     20 
     21 
     22 
     23Proc ConnectTriangulatedRods(nPts,fill,diam,nPass,tagStr,ranType) 
     24        Variable nPts=10,fill=20,diam=40,nPass=10 
     25        String tagStr="_tri_" 
     26        Variable ranType=1 
     27        Prompt nPts,"number of nodes" 
     28        Prompt fill,"fill value" 
     29        Prompt diam,"real diameter of cylinders" 
     30        Prompt nPass,"number of averaging passes" 
     31        Prompt tagStr,"tag for I(q) and for saved matrix" 
     32        Prompt ranType," 1 = Sobol, other = enoise" 
     33 
     34 
     35 
     36// start fresh, slower but always correct 
     37        FFT_MakeMatrixButtonProc("") 
     38        FFTEraseMatrixButtonProc("") 
     39         
     40        CalculateTriangulated(nPts,fill,diam,nPass,tagStr+num2str(nPts),ranType) 
     41 
     42        SaveMyMatrix("mat_Triang_"+num2str(nPts)+tagStr+".ibw") 
     43 
     44 
     45End 
     46 
     47 
     48Proc ConnectedTriangulatedRodLoop() 
     49 
     50        String suffix = "",tagStr 
     51        Variable ranType 
     52        Variable nPts,fill,diam,nPass 
    2053        Variable t1 = ticks 
     54         
     55        ranType = 1             //1==Sobol 
     56        npts = 6 
     57        fill = 10 
     58        diam = 40 
     59        nPass = 5 
     60        tagStr = "_CR" 
    2161         
    2262// constant for all steps 
     
    2868//      FFT_MakeMatrixButtonProc("") 
    2969//      FFTEraseMatrixButtonProc("") 
    30          
     70//       
    3171//      DoWindow/F Gizmo_VoxelMat 
    32          
     72//       
    3373//      suffix = "a" 
    34 //      CalculateTriangulated(40,40,20,"_CR"+suffix,ranType) 
    35 //      DoUpdate/W=Gizmo_VoxelMat 
    36 //      ExportGizmo wave as "p_connRod_"+suffix 
     74//      nPts = 40 
     75//      CalculateTriangulated(nPts,fill,diam,nPass,tagStr+suffix,ranType) 
     76//      SaveMyMatrix("mat_Triang_"+num2str(nPts)+tagStr+suffix+".ibw") 
    3777//       
    3878//      suffix = "b" 
    39 //      CalculateTriangulated(100,40,20,"_CR"+suffix,ranType) 
    40 //      DoUpdate/W=Gizmo_VoxelMat 
    41 //      ExportGizmo wave as "p_connRod_"+suffix 
     79//      nPts = 100 
     80//      CalculateTriangulated(nPts,fill,diam,nPass,tagStr+suffix,ranType) 
     81//      SaveMyMatrix("mat_Triang_"+num2str(nPts)+tagStr+suffix+".ibw") 
    4282//       
    4383//      suffix = "c" 
    44 //      CalculateTriangulated(200,40,20,"_CR"+suffix,ranType) 
    45 //      DoUpdate/W=Gizmo_VoxelMat 
    46 //      ExportGizmo wave as "p_connRod_"+suffix 
     84//      nPts = 200 
     85//      CalculateTriangulated(nPts,fill,diam,nPass,tagStr+suffix,ranType) 
     86//      SaveMyMatrix("mat_Triang_"+num2str(nPts)+tagStr+suffix+".ibw") 
    4787//       
    4888//      suffix = "d" 
    49 //      CalculateTriangulated(300,40,20,"_CR"+suffix,ranType) 
    50 //      DoUpdate/W=Gizmo_VoxelMat 
    51 //      ExportGizmo wave as "p_connRod_"+suffix 
     89//      nPts = 300 
     90//      CalculateTriangulated(nPts,fill,diam,nPass,tagStr+suffix,ranType) 
     91//      SaveMyMatrix("mat_Triang_"+num2str(nPts)+tagStr+suffix+".ibw") 
    5292//       
    5393//      suffix = "e" 
    54 //      CalculateTriangulated(400,40,20,"_CR"+suffix,ranType) 
    55 //      DoUpdate/W=Gizmo_VoxelMat 
    56 //      ExportGizmo wave as "p_connRod_"+suffix 
     94//      nPts = 400 
     95//      CalculateTriangulated(nPts,fill,diam,nPass,tagStr+suffix,ranType) 
     96//      SaveMyMatrix("mat_Triang_"+num2str(nPts)+tagStr+suffix+".ibw") 
    5797//       
    5898//      suffix = "f" 
    59 //      CalculateTriangulated(500,40,20,"_CR"+suffix,ranType) 
    60 //      DoUpdate/W=Gizmo_VoxelMat 
    61 //      ExportGizmo wave as "p_connRod_"+suffix 
    62 //       
    63 //       
     99//      nPts = 500 
     100//      CalculateTriangulated(nPts,fill,diam,nPass,tagStr+suffix,ranType) 
     101//      SaveMyMatrix("mat_Triang_"+num2str(nPts)+tagStr+suffix+".ibw") 
     102//       
     103//       
     104         
     105// always start fresh when changing dimensions 
     106        root:FFT_T = 10 
     107        root:FFT_N = 256 
     108        FFT_MakeMatrixButtonProc("") 
     109        FFTEraseMatrixButtonProc("") 
     110         
     111        suffix = "gg" 
     112        nPts = 40 
     113//      CalculateTriangulated(6,40,20,"_CR"+suffix,ranType) 
     114        CalculateTriangulated(nPts,fill,diam,nPass,tagStr+suffix,ranType) 
     115        SaveMyMatrix("mat_Triang_"+num2str(nPts)+tagStr+suffix+".ibw") 
     116                         
     117        suffix = "hh" 
     118        nPts = 7 
     119        CalculateTriangulated(nPts,fill,diam,nPass,tagStr+suffix,ranType) 
     120        SaveMyMatrix("mat_Triang_"+num2str(nPts)+tagStr+suffix+".ibw") 
     121         
     122        suffix = "ii" 
     123        nPts = 9 
     124        CalculateTriangulated(nPts,fill,diam,nPass,tagStr+suffix,ranType) 
     125        SaveMyMatrix("mat_Triang_"+num2str(nPts)+tagStr+suffix+".ibw") 
     126         
     127        suffix = "jj" 
     128        nPts = 10 
     129        CalculateTriangulated(nPts,fill,diam,nPass,tagStr+suffix,ranType) 
     130        SaveMyMatrix("mat_Triang_"+num2str(nPts)+tagStr+suffix+".ibw") 
     131         
     132        suffix = "kk" 
     133        nPts = 20 
     134        CalculateTriangulated(nPts,fill,diam,nPass,tagStr+suffix,ranType) 
     135        SaveMyMatrix("mat_Triang_"+num2str(nPts)+tagStr+suffix+".ibw") 
     136         
     137        suffix = "ll" 
     138        nPts = 30 
     139        CalculateTriangulated(nPts,fill,diam,nPass,tagStr+suffix,ranType) 
     140        SaveMyMatrix("mat_Triang_"+num2str(nPts)+tagStr+suffix+".ibw") 
     141         
     142         
     143        // then repeat everything with the random sequence 
     144        ranType = 0 
     145         
    64146         
    65147// always start fresh when changing dimensions 
     
    69151        FFTEraseMatrixButtonProc("") 
    70152         
    71         suffix = "gg" 
    72         CalculateTriangulated(6,40,20,"_CR"+suffix,ranType) 
    73         DoUpdate/W=Gizmo_VoxelMat 
    74         ExportGizmo wave as "p_connRod_"+suffix 
    75          
    76         suffix = "hh" 
    77         CalculateTriangulated(7,40,20,"_CR"+suffix,ranType) 
    78         DoUpdate/W=Gizmo_VoxelMat 
    79         ExportGizmo wave as "p_connRod_"+suffix 
    80          
    81         suffix = "ii" 
    82         CalculateTriangulated(9,40,20,"_CR"+suffix,ranType) 
    83         DoUpdate/W=Gizmo_VoxelMat 
    84         ExportGizmo wave as "p_connRod_"+suffix 
    85          
    86         suffix = "jj" 
    87         CalculateTriangulated(10,40,20,"_CR"+suffix,ranType) 
    88         DoUpdate/W=Gizmo_VoxelMat 
    89         ExportGizmo wave as "p_connRod_"+suffix 
    90          
    91         suffix = "kk" 
    92         CalculateTriangulated(20,40,20,"_CR"+suffix,ranType) 
    93         DoUpdate/W=Gizmo_VoxelMat 
    94         ExportGizmo wave as "p_connRod_"+suffix 
    95          
    96         suffix = "ll" 
    97         CalculateTriangulated(30,40,20,"_CR"+suffix,ranType) 
    98         DoUpdate/W=Gizmo_VoxelMat 
    99         ExportGizmo wave as "p_connRod_"+suffix 
    100          
    101          
    102         // then repeat everything with the random sequence 
    103         ranType = 0 
    104          
    105         // always start fresh when changing dimensions 
    106 //      root:FFT_T = 40 
    107 //      root:FFT_N = 256 
    108 //      FFT_MakeMatrixButtonProc("") 
    109 //      FFTEraseMatrixButtonProc("") 
    110          
    111 //      DoWindow/F Gizmo_VoxelMat 
    112          
    113 //      suffix = "m" 
    114 //      CalculateTriangulated(40,40,20,"_CR"+suffix,ranType) 
    115 //      DoUpdate/W=Gizmo_VoxelMat 
    116 //      ExportGizmo wave as "p_connRod_"+suffix 
    117 //       
    118 //      suffix = "n" 
    119 //      CalculateTriangulated(100,40,20,"_CR"+suffix,ranType) 
    120 //      DoUpdate/W=Gizmo_VoxelMat 
    121 //      ExportGizmo wave as "p_connRod_"+suffix 
    122 //       
    123 //      suffix = "o" 
    124 //      CalculateTriangulated(200,40,20,"_CR"+suffix,ranType) 
    125 //      DoUpdate/W=Gizmo_VoxelMat 
    126 //      ExportGizmo wave as "p_connRod_"+suffix 
    127 //       
    128 //      suffix = "p" 
    129 //      CalculateTriangulated(300,40,20,"_CR"+suffix,ranType) 
    130 //      DoUpdate/W=Gizmo_VoxelMat 
    131 //      ExportGizmo wave as "p_connRod_"+suffix 
    132 //       
    133 //      suffix = "q" 
    134 //      CalculateTriangulated(400,40,20,"_CR"+suffix,ranType) 
    135 //      DoUpdate/W=Gizmo_VoxelMat 
    136 //      ExportGizmo wave as "p_connRod_"+suffix 
    137 //       
    138 //      suffix = "r" 
    139 //      CalculateTriangulated(500,40,20,"_CR"+suffix,ranType) 
    140 //      DoUpdate/W=Gizmo_VoxelMat 
    141 //      ExportGizmo wave as "p_connRod_"+suffix 
    142          
    143          
    144          
    145 // always start fresh when changing dimensions 
    146         root:FFT_T = 5 
    147         root:FFT_N = 256 
    148         FFT_MakeMatrixButtonProc("") 
    149         FFTEraseMatrixButtonProc("") 
    150          
    151153        suffix = "ss" 
    152         CalculateTriangulated(6,40,20,"_CR"+suffix,ranType) 
    153         DoUpdate/W=Gizmo_VoxelMat 
    154         ExportGizmo wave as "p_connRod_"+suffix 
     154        nPts = 6 
     155        CalculateTriangulated(nPts,fill,diam,nPass,tagStr+suffix,ranType) 
     156        SaveMyMatrix("mat_Triang_"+num2str(nPts)+tagStr+suffix+".ibw") 
    155157         
    156158        suffix = "tt" 
    157         CalculateTriangulated(7,40,20,"_CR"+suffix,ranType) 
    158         DoUpdate/W=Gizmo_VoxelMat 
    159         ExportGizmo wave as "p_connRod_"+suffix 
     159        nPts = 7 
     160        CalculateTriangulated(nPts,fill,diam,nPass,tagStr+suffix,ranType) 
     161        SaveMyMatrix("mat_Triang_"+num2str(nPts)+tagStr+suffix+".ibw") 
    160162         
    161163        suffix = "uu" 
    162         CalculateTriangulated(9,40,20,"_CR"+suffix,ranType) 
    163         DoUpdate/W=Gizmo_VoxelMat 
    164         ExportGizmo wave as "p_connRod_"+suffix 
     164        nPts = 9 
     165        CalculateTriangulated(nPts,fill,diam,nPass,tagStr+suffix,ranType) 
     166        SaveMyMatrix("mat_Triang_"+num2str(nPts)+tagStr+suffix+".ibw") 
    165167         
    166168        suffix = "vv" 
    167         CalculateTriangulated(10,40,20,"_CR"+suffix,ranType) 
    168         DoUpdate/W=Gizmo_VoxelMat 
    169         ExportGizmo wave as "p_connRod_"+suffix 
     169        nPts = 10 
     170        CalculateTriangulated(nPts,fill,diam,nPass,tagStr+suffix,ranType) 
     171        SaveMyMatrix("mat_Triang_"+num2str(nPts)+tagStr+suffix+".ibw") 
    170172         
    171173        suffix = "ww" 
    172         CalculateTriangulated(20,40,20,"_CR"+suffix,ranType) 
    173         DoUpdate/W=Gizmo_VoxelMat 
    174         ExportGizmo wave as "p_connRod_"+suffix 
     174        nPts = 20 
     175        CalculateTriangulated(nPts,fill,diam,nPass,tagStr+suffix,ranType) 
     176        SaveMyMatrix("mat_Triang_"+num2str(nPts)+tagStr+suffix+".ibw") 
    175177         
    176178        suffix = "xx" 
    177         CalculateTriangulated(30,40,20,"_CR"+suffix,ranType) 
    178         DoUpdate/W=Gizmo_VoxelMat 
    179         ExportGizmo wave as "p_connRod_"+suffix 
     179        nPts = 30 
     180        CalculateTriangulated(nPts,fill,diam,nPass,tagStr+suffix,ranType) 
     181        SaveMyMatrix("mat_Triang_"+num2str(nPts)+tagStr+suffix+".ibw") 
    180182         
    181183         
     
    187189end 
    188190 
    189 Function PrintWaveNote(kwStr) 
    190         String kwStr 
    191          
    192         String alph="abcdefghijklmnopqrstuvwxyz" 
    193         String str="" 
    194         Variable ii 
    195          
    196         for(ii=1;ii<12;ii+=1) 
    197                 Wave w = $("root:iBin_"+alph[ii]+"p") 
    198                 str = note(w) 
    199                 if(strlen(kwStr) > 0) 
    200                         Print NumberByKey(kwStr, Str ,"=",";") 
    201                 else 
    202                         Print str 
    203                 endif 
    204         endfor 
    205          
    206         return(0) 
    207 End 
     191 
    208192 
    209193// npts is the number of nodes 
     
    212196// tagStr is the identifying tag for the files 
    213197// ranType selects the RNG => 1 = Sobol, other = enoise 
    214 Function CalculateTriangulated(nPts,diam,nPass,tagStr,ranType) 
    215         Variable nPts,diam,nPass 
     198Function CalculateTriangulated(nPts,fill,diam,nPass,tagStr,ranType) 
     199        Variable nPts,fill,diam,nPass 
    216200        String tagStr 
    217201        Variable ranType 
    218202         
    219         Variable ii,np,frac,nocc,fill 
     203        Variable ii,np,frac,nocc 
    220204        Wave m=root:mat 
    221205        NVAR grid=root:FFT_T 
     
    224208        np = 0 
    225209        frac = 0 
    226         fill = 10 
     210 
    227211        for(ii=0;ii<nPass;ii+=1)                //number of averaging passes 
    228212                m=0 
     
    236220                 
    237221                Print "connecting" 
    238                 ConnectTriangulated(diam) 
    239                  
    240                 Execute "DoFFT()" 
     222                ConnectTriangulated(diam,fill) 
     223 
     224                Calc_IQ_FFT()            
     225//              Execute "DoFFT()" 
    241226                Print "step ii=",ii 
    242227                if(ii==0) 
     
    289274// and parsed to 3 xyz waves with ParseMatrix3D_rho() 
    290275// 
    291 Function ConnectTriangulated(diam) 
    292         Variable diam 
    293  
    294         Variable ii,num,thick,fill 
     276Function ConnectTriangulated(diam,fill) 
     277        Variable diam,fill 
     278 
     279        Variable ii,num,thick 
    295280        Variable x1,x2,y1,y2,z1,z2 
    296281        String testStr="" 
     
    315300 
    316301        num = DimSize(M_TetraPath,0) 
    317         fill = 1 
    318302         
    319303        // make the list of connected points (to save time) 
     
    419403 
    420404 
    421 /// this does not work --- 
    422 // 
    423 // the fCOnnectDots3D function does not work - and I  
    424 // don't know what's wronk with it - so I switched to the 
    425 // Triangulate3D operation 
    426 // Jan 2011 
    427 // 
    428 //Function TestConnRods(nPts,nConn,nPass,tagStr) 
    429 //      Variable nPts,nConn,nPass 
    430 //      String tagStr 
    431 //       
    432 //      Variable ii,np,frac,num 
    433 //      Variable row,col,lay,xt,yt,zt,err 
    434 //       
    435 //      Wave m=mat 
    436 //      NVAR grid=root:FFT_T 
    437 //      NVAR Nedge = root:FFT_N 
    438 //      WAVE/Z x3d=root:x3d 
    439 //       
    440 //      for(ii=0;ii<nPass;ii+=1)                //number of averaging passes 
    441 //              //fill the spheres into the box 
    442 //              m=0 
    443 //              RandomFill3DMat(m,nPts) 
    444 //              ParseMatrix3D_rho(m)                            // get the triplets of points to connect 
    445 //               
    446 //              num=numpnts(x3d) 
    447 //              Make/O/N=(num) numConnection3D=0 
    448 //              Make/O/T/N=(num) connectedTo3D="" 
    449 //              fConnectDots3D(nConn) 
    450 //               
    451 //              Execute "DoFFT()" 
    452 //              Print "step ii=",ii 
    453 //              if(ii==0) 
    454 //                      Duplicate/O iBin, $("iBin"+tagStr),$("qBin"+tagStr),$("i2"+tagStr),$("eBin"+tagStr) 
    455 //                      wave ib=$("iBin"+tagStr) 
    456 //                      wave qb=$("qBin"+tagStr) 
    457 //                      wave i2=$("i2"+tagStr) 
    458 //                      wave eb=$("eBin"+tagStr) 
    459 //                      Wave iBin=iBin 
    460 //                      Wave qbin=qBin 
    461 //                      qb = qBin 
    462 //                      ib = iBin 
    463 //                      i2 = iBin*iBin 
    464 //                      eb = 0 
    465 //              else 
    466 //                      ib += iBin 
    467 //                      i2 += iBin*iBin 
    468 //              endif 
    469 //      endfor 
    470 // 
    471 //      ib /= npass 
    472 //      i2 /= npass 
    473 //      if(nPass > 1) 
    474 //              eb = sqrt((i2-ib^2)/(npass-1)) 
    475 //      else 
    476 //              eb = 1e-10 
    477 //      endif 
    478 //       
    479 //      np = NonZeroValues(m) 
    480 //      frac = np/DimSize(m,0)^3 
    481 //      String nStr 
    482 //      sprintf nstr,"T=%d;N=%d;Npass=%d;NNodes=%d;NConn=%d;VolFrac=%g;",grid,Nedge,nPass,nPts,nConn,frac 
    483 //      Note ib, nStr 
    484 // 
    485 //       
    486 //End 
    487  
     405Function PrintWaveNote(kwStr) 
     406        String kwStr 
     407         
     408        String alph="abcdefghijklmnopqrstuvwxyz" 
     409        String str="" 
     410        Variable ii 
     411         
     412        for(ii=1;ii<12;ii+=1) 
     413                Wave w = $("root:iBin_"+alph[ii]+"p") 
     414                str = note(w) 
     415                if(strlen(kwStr) > 0) 
     416                        Print NumberByKey(kwStr, Str ,"=",";") 
     417                else 
     418                        Print str 
     419                endif 
     420        endfor 
     421         
     422        return(0) 
     423End 
  • sans/Dev/trunk/NCNR_User_Procedures/Analysis/Alpha/Tinker/FFT_Cubes.ipf

    r934 r936  
    2121//              -- this function takes the 2D slice and interpolates the q-values to the experimental data for comparison (or a fit!) 
    2222// 
    23 Proc DoFFT() 
     23Function Calc_IQ_FFT() 
     24//Proc DoFFT() 
    2425         
    2526        Variable t0=ticks,t1=ticks 
     
    4445         
    4546        //normalize the data 
    46         Variable Tscale=root:FFT_T 
    47  
    48         Variable delRho,vol,nx,phi 
    49          
    50         delRho = root:FFT_delRho                                        //simply the units of SLD, not the absolute value 
     47        NVAR Tscale=root:FFT_T 
     48        NVAR FFT_N = root:FFT_N 
     49        NVAR delRho = root:FFT_delRho                                   //simply the units of SLD, not the absolute value 
     50 
     51        WAVE iBin = root:iBin 
     52 
     53        Variable vol,nx,phi 
     54         
    5155         
    5256//      WaveStats/Q mat 
    5357// must do this to get the number of non-zero voxels 
    54         Variable FFT_N = root:FFT_N 
    5558//      nx = NonZeroValues(mat) 
    5659//      phi = nx/FFT_N^3 
     
    7578         
    7679end 
     80 
    7781 
    7882// for future speedups... 
     
    583587 
    584588// 
    585 // This is for when an anisotropic 2D result is desired. That is, you have a sample that is 
    586 // oriented in the beam, and then the detection plane matters. If you have any other structure that 
    587 // is orientationally averaged, use the Isotropic calculation (say, if you have a dispersion of cylinders, 
    588 // you only need to draw one, and do the isotropic average) 
     589// This is for when an anisotropic 2D result is desired 
    589590// 
    590591// these steps calculate the slit-smeared USANS from the FFT 
     
    627628 
    628629// do the FFT 
    629         Execute "DoFFT()" 
     630        Calc_IQ_FFT() 
     631//      Execute "DoFFT()" 
    630632// get the detector slice -- the slice is already on absolute scale 
    631633        FFT_Get2DSlice("") 
     
    661663// 
    662664//// this is for when an isotropic 2D result is desired 
    663 // 
    664 // This is for when an ISOTROPIC 2D result is desired. If you have a structure that 
    665 // is orientationally averaged, use this Isotropic calculation (say, if you have a dispersion of cylinders, 
    666 // you only need to draw one, and do the isotropic average). If you have a sample that is 
    667 // oriented in the beam, and then the detection plane matters, and use the ANISOTROPIC calculation. 
    668665// 
    669666// FIRST -- do the FFT - this calculates the 1D averaged result 
     
    679676// --then to plot -- DisplayFFT_to2DAverage() 
    680677// 
     678// 
    681679// finally, you can use the 2D result to either interpolate to a real 2D range, or more useful, convert 
    682680// the 2D results to a USANS result. Then the case of an oddly shaped object can be converted to USANS. Previously 
     
    710708 
    711709// do the FFT 
    712         Execute "DoFFT()" 
     710        Calc_IQ_FFT() 
     711//      Execute "DoFFT()" 
    713712// get the detector slice -- the slice is already on absolute scale 
    714713        FFT_Get2DSlice("") 
    715714 
     715 
     716         
    716717// now get the isotropically averaged I(Q) = iBin        
    717718 
     
    737738        Duplicate/O avg2d logAvg2d 
    738739        logAvg2d = log(avg2d) 
     740 
     741         
    739742 
    740743         
     
    798801                ModifyGraph btLen=3 
    799802                ModifyGraph tlOffset=-2 
    800 //              SetAxis/A/R left 
     803                SetAxis/A/R left 
    801804        endif 
    802805End 
     
    820823                ModifyGraph btLen=3 
    821824                ModifyGraph tlOffset=-2 
    822 //              SetAxis/A/R left 
     825                SetAxis/A/R left 
    823826        endif 
    824827         
     
    838841                ModifyGraph btLen=3 
    839842                ModifyGraph tlOffset=-2 
    840 //              SetAxis/A/R left 
    841         endif 
    842          
    843 End 
     843                SetAxis/A/R left 
     844        endif 
     845         
     846End 
  • sans/Dev/trunk/NCNR_User_Procedures/Analysis/Alpha/Tinker/FFT_Cubes_Includes.ipf

    r934 r936  
    3434        Submenu "3D Examples" 
    3535                "Polydisperse Spheres" 
    36                 "Connect Dots 3D" 
     36                "-" 
     37                "Connect Points With Cylinders",ConnectDots3D() 
     38                "Connect Triangulated Points",ConnectTriangulatedRods() 
     39                "-" 
    3740                "Put Random Cylinders at Points" 
    3841                "Put X-axis Cylinders at Points" 
  • sans/Dev/trunk/NCNR_User_Procedures/Analysis/Alpha/Tinker/FFT_Cylinder_Fills.ipf

    r849 r936  
    11#pragma rtGlobals=1             // Use modern global access method. 
    22 
    3 // VERY incomplete methods for filling volumes with connected cylinders 
    4 // 
    5 // most is still being worked out and verified in 2D 
    6 // 
    7 /// search for "crude core-shell cylinder" for an example of how this can be done 
    8 // -- maybe the same filling, but no mat=0 (ask) 
    93 
    104 
     
    148 
    159         
    16 Proc ConnectDots3D(w,np,maxNumConn,sobol,fill) 
     10Proc ConnectDots3D(w,np,maxNumConn,thick,sobol,fill) 
    1711        String w="mat" 
    18         Variable np=100,maxNumConn=2,sobol=1,fill=10 
     12        Variable np=100,maxNumConn=2,thick=2,sobol=1,fill=10 
    1913        Prompt w,"matrix" 
    2014        Prompt np,"number of points" 
    2115        prompt maxNumConn,"number of connections per point" 
     16        prompt thick,"cylinder radius (voxels)" 
    2217        Prompt sobol,"1=Sobol, 0=random" 
    2318        Prompt fill,"fill SLD value" 
     
    3631        Make/O/N=(num) numConnection3D=0 
    3732        Make/O/T/N=(num) connectedTo3D="" 
    38         fConnectDots3D(maxNumConn,fill) 
     33        fConnectDots3D(maxNumConn,fill,thick) 
    3934end 
    4035 
    4136// connect the dots, no periodic boundary conditions 
    4237//thickness is set to 1 
    43 Function fConnectDots3D(maxNumConn,fill) 
    44         Variable maxNumConn,fill 
     38// 
     39// the radius of the cylinder is set as thick*FFT_T 
     40// 
     41Function fConnectDots3D(maxNumConn,fill,thick) 
     42        Variable maxNumConn,fill,thick 
    4543         
    4644         
     
    5553 
    5654        Variable nnX,nnY,nnZ,nnInd,nnDist               //return values of the nearest neighbor 
    57         Variable thick = 1 
     55         
    5856        do 
    5957                for(ii=0;ii<num;ii+=1) 
     
    715713////    len = meanLen + gnoise(pd*meanLen) 
    716714//      FillZCylinder(mat,grid,rad,xc,yc,zc,len,1) 
    717 //      Execute "DoFFT()" 
     715//      Calc_IQ_FFT() 
     716//      //Execute "DoFFT()" 
    718717//      Duplicate/O iBin iBin_1g_128 
    719718//      iBin_1g_128 *= x1 
     
    723722////    len = meanLen + gnoise(pd*meanLen) 
    724723//      FillZCylinder(mat,grid,rad,xc,yc,zc,len,1) 
    725 //      Execute "DoFFT()" 
     724//      Calc_IQ_FFT() 
     725////    Execute "DoFFT()" 
    726726//      iBin_1g_128 += x2*iBin 
    727727//       
     
    730730////    len = meanLen + gnoise(pd*meanLen) 
    731731//      FillZCylinder(mat,grid,rad,xc,yc,zc,len,1) 
    732 //      Execute "DoFFT()" 
     732//      Calc_IQ_FFT() 
     733////    Execute "DoFFT()" 
    733734//      iBin_1g_128 += x3*iBin 
    734735//       
     
    746747//      FillZCylinder(mat,grid,rad,xc,yc,zc,len,1) 
    747748//      FillZCylinder(mat,grid,rad,xc,yc+aa,zc,len,1)   //cylinder 2 
    748 //      Execute "DoFFT()" 
     749//      Calc_IQ_FFT() 
     750////    Execute "DoFFT()" 
    749751//      Duplicate/O iBin iBin_2g_256_sep40 
    750752//      iBin_2g_256_sep40 *= x1 
     
    755757//      FillZCylinder(mat,grid,rad,xc,yc,zc,len,1) 
    756758//      FillZCylinder(mat,grid,rad,xc,yc+aa,zc,len,1)   //cylinder 2 
    757 //      Execute "DoFFT()" 
     759//      Calc_IQ_FFT() 
     760////    Execute "DoFFT()" 
    758761//      iBin_2g_256_sep40 += x2*iBin 
    759762//       
     
    763766//      FillZCylinder(mat,grid,rad,xc,yc,zc,len,1) 
    764767//      FillZCylinder(mat,grid,rad,xc,yc+aa,zc,len,1)   //cylinder 2 
    765 //      Execute "DoFFT()" 
     768//      Calc_IQ_FFT() 
     769////    Execute "DoFFT()" 
    766770//      iBin_2g_256_sep40 += x3*iBin 
    767771//       
     
    778782//              print ii,rad 
    779783//              FillZCylinder(mat,grid,rad,xc,yc,zc,len,1) 
    780 //              Execute "DoFFT()" 
     784//                      Calc_IQ_FFT() 
     785////            Execute "DoFFT()" 
    781786//              if(ii==0)        
    782787//                      Duplicate/O iBin iBin_1g_256 
     
    799804//              print ii,rad 
    800805//              FillZCylinder(mat,grid,rad,xc,yc+aa,zc,len,1)   //cylinder 2 
    801 //              Execute "DoFFT()" 
     806//                      Calc_IQ_FFT() 
     807////            Execute "DoFFT()" 
    802808//              if(ii==0)        
    803809//                      Duplicate/O iBin iBin_2g_256 
     
    822828                print ii,rad 
    823829                FillZCylinder(mat,grid,rad,xc+sina,yc+cosa,zc,len,10)           //cylinder 3 
    824                 Execute "DoFFT()" 
     830                Calc_IQ_FFT() 
     831//              Execute "DoFFT()" 
    825832                if(ii==0)        
    826833                        Duplicate/O iBin iBin_3g_256 
     
    835842        print rad 
    836843        FillZCylinder(mat,grid,rad,xc,yc+aa,zc,len,10) 
    837         Execute "DoFFT()" 
     844        Calc_IQ_FFT() 
     845//      Execute "DoFFT()" 
    838846        Duplicate/O iBin iBin_2 
    839847///      
     
    841849        print rad 
    842850        FillZCylinder(mat,grid,rad,xc+sina,yc+cosa,zc,len,10) 
    843         Execute "DoFFT()" 
     851        Calc_IQ_FFT() 
     852//      Execute "DoFFT()" 
    844853        Duplicate/O iBin iBin_3 
    845854///      
     
    847856        print rad 
    848857        FillZCylinder(mat,grid,rad,xc+sina,yc-cosa,zc,len,10) 
    849         Execute "DoFFT()" 
     858        Calc_IQ_FFT() 
     859//      Execute "DoFFT()" 
    850860        Duplicate/O iBin iBin_4 
    851861///      
     
    853863        print rad 
    854864        FillZCylinder(mat,grid,rad,xc,yc-aa,zc,len,10) 
    855         Execute "DoFFT()" 
     865        Calc_IQ_FFT() 
     866//      Execute "DoFFT()" 
    856867        Duplicate/O iBin iBin_5 
    857868///      
     
    859870        print rad 
    860871        FillZCylinder(mat,grid,rad,xc-sina,yc-cosa,zc,len,10) 
    861         Execute "DoFFT()" 
     872        Calc_IQ_FFT() 
     873//      Execute "DoFFT()" 
    862874        Duplicate/O iBin iBin_6 
    863875///      
     
    865877        print rad 
    866878        FillZCylinder(mat,grid,rad,xc-sina,yc+cosa,zc,len,10) 
    867         Execute "DoFFT()" 
     879        Calc_IQ_FFT() 
     880//      Execute "DoFFT()" 
    868881        Duplicate/O iBin iBin_7 
    869882 
     
    871884 
    872885 
     886Proc Vary_N_BigFFT() 
     887 
     888        Variable fill=10 
     889        Variable ii 
     890 
     891 
     892        Variable npt=root:FFT_N 
     893        Variable grid=root:FFT_T 
     894                 
     895        npt = 128 
     896        root:FFT_N = npt                //to actually change the global 
     897 
     898 
     899//// for the binned calculation 
     900        String qStr="qval_XOP",iStr="ival_XOP"          //default wave names, always overwritten 
     901        Variable num=500,qmin=0.0001,qmax=0.7 
     902 
     903        Make/O/D/N=(num) $qStr,$iStr 
     904        $qStr = alog(log(qmin) + x*((log(qmax)-log(qmin))/num))          
     905///// 
     906 
     907 
     908        FFT_MakeMatrixButtonProc("") 
     909         
     910        ii=2 
     911        do       
     912         
     913                FFTFillSolventMatrixProc("") 
     914                ConnectedRodFill(mat,ii,30000,1,fill) 
     915                Calc_IQ_FFT() 
     916//              Execute "DoFFT()" 
     917                Duplicate/O iBin $("iBin_"+num2str(npt)+"_"+num2str(ii)) 
     918                Duplicate/O qBin $("qBin_"+num2str(npt)+"_"+num2str(ii)) 
     919 
     920// do the binned calculation ONLY for the smallest number of spheres (30k ~ 5 s) 
     921                fDoCalc($qStr,$iStr,grid,2,1)                   //this way will not ask if the time is OK 
     922                Duplicate/O ival_XOP $("ival_XOP_"+num2str(npt)+"_"+num2str(ii)) 
     923                Duplicate/O qval_XOP $("qval_XOP_"+num2str(npt)+"_"+num2str(ii)) 
     924                 
     925//              DoUpdate/W=Gizmo_VoxelMat 
     926//              ModifyGizmo outputResFactor=2 
     927//              ExportGizmo/P=home EPS as "p_connRod_"+num2Str(ii)+".eps" 
     928                 
     929                // Gizmo doesn't seem to update for export 
     930                // so just save to draw later 
     931                SaveMyMatrix("mat_"+num2str(npt)+"_"+num2Str(ii)+".ibw") 
     932                 
     933                ii+=1 
     934        while(ii<21) 
     935 
     936 
     937 
     938 
     939        npt = 256 
     940        root:FFT_N = npt 
     941 
     942        FFT_MakeMatrixButtonProc("") 
     943         
     944        ii=2 
     945        do       
     946         
     947                FFTFillSolventMatrixProc("") 
     948                ConnectedRodFill(mat,ii,30000*8,1,fill) 
     949                Calc_IQ_FFT() 
     950//              Execute "DoFFT()" 
     951                Duplicate/O iBin $("iBin_"+num2str(npt)+"_"+num2str(ii)) 
     952                Duplicate/O qBin $("qBin_"+num2str(npt)+"_"+num2str(ii)) 
     953 
     954// do the binned calculation ONLY for the smallest number of spheres (240k ~ 5 min) 
     955//              fDoCalc($qStr,$iStr,grid,2,1) 
     956//              Duplicate/O ival_XOP $("ival_XOP_"+num2str(npt)+"_"+num2str(ii)) 
     957//              Duplicate/O qval_XOP $("qval_XOP_"+num2str(npt)+"_"+num2str(ii)) 
     958                                 
     959//              DoUpdate/W=Gizmo_VoxelMat 
     960//              ModifyGizmo outputResFactor=2 
     961//              ExportGizmo/P=home EPS as "p_connRod_"+num2Str(ii)+".eps" 
     962                 
     963                // Gizmo doesn't seem to update for export 
     964                // so just save to draw later 
     965                SaveMyMatrix("mat_"+num2str(npt)+"_"+num2Str(ii)+".ibw") 
     966                 
     967                ii+=1 
     968        while(ii<21) 
     969 
     970 
     971 
     972         
     973        npt = 510 
     974        root:FFT_N = npt 
     975 
     976        FFT_MakeMatrixButtonProc("") 
     977         
     978        ii=2 
     979        do       
     980         
     981                FFTFillSolventMatrixProc("") 
     982                ConnectedRodFill(mat,ii,30000*8*8,1,fill) 
     983                Calc_IQ_FFT() 
     984//              Execute "DoFFT()" 
     985                Duplicate/O iBin $("iBin_"+num2str(npt)+"_"+num2str(ii)) 
     986                Duplicate/O qBin $("qBin_"+num2str(npt)+"_"+num2str(ii)) 
     987                 
     988//              DoUpdate/W=Gizmo_VoxelMat 
     989//              ModifyGizmo outputResFactor=2 
     990//              ExportGizmo/P=home EPS as "p_connRod_"+num2Str(ii)+".eps" 
     991                 
     992                // Gizmo doesn't seem to update for export 
     993                // so just save to draw later 
     994                SaveMyMatrix("mat_"+num2str(npt)+"_"+num2Str(ii)+".ibw") 
     995                 
     996                ii+=1 
     997        while(ii<21) 
     998         
     999                 
     1000End 
     1001 
     1002         
    8731003Proc Vary_N_In_Direction() 
    8741004 
  • sans/Dev/trunk/NCNR_User_Procedures/Analysis/Alpha/Tinker/FFT_FillTests.ipf

    r849 r936  
     1#pragma rtGlobals=3             // Use modern global access method and strict wave access. 
     2 
     3 
    14Function MixTest() 
    25 
     
    4750         
    4851        Variable rho1,rho2,rhos,radius1,radius2,ctr,separation,fill1,fill2 
    49         rho1=1e-6 
    50         rho2=3e-6 
    51         rhos=6e-6 
     52        rho1=6.5e-6 
     53        rho2=4.7e-6 
     54        rhos=5e-6 
    5255         
    5356//      rho1 += 3e-6 
     
    352355         
    353356         
     357        Wave/Z iBin=root:iBin 
     358        Wave/Z qBin=root:qBin 
     359         
    354360        ReloadMatrix("mat_R40C25_L400_S100_N512.ibw") 
    355         Execute "DoFFT()" 
     361        Calc_IQ_FFT() 
     362//      Execute "DoFFT()" 
    356363        Duplicate/O iBin iBin_R40C25_L400_S100_N512 
    357364        Duplicate/O qBin qBin_R40C25_L400_S100_N512 
     
    363370         
    364371        ReloadMatrix("mat_R40C25_L400_S120_N512.ibw") 
    365         Execute "DoFFT()" 
     372        Calc_IQ_FFT() 
     373//      Execute "DoFFT()" 
    366374        Duplicate/O iBin iBin_R40C25_L400_S120_N512 
    367375        Duplicate/O qBin qBin_R40C25_L400_S120_N512 
     
    373381         
    374382        ReloadMatrix("mat_R40C25_L400_S140_N512.ibw") 
    375         Execute "DoFFT()" 
     383        Calc_IQ_FFT() 
     384//      Execute "DoFFT()" 
    376385        Duplicate/O iBin iBin_R40C25_L400_S140_N512 
    377386        Duplicate/O qBin qBin_R40C25_L400_S140_N512 
     
    383392         
    384393        ReloadMatrix("mat_R40C25_L400_S160_N512.ibw") 
    385         Execute "DoFFT()" 
     394        Calc_IQ_FFT() 
     395//      Execute "DoFFT()" 
    386396        Duplicate/O iBin iBin_R40C25_L400_S160_N512 
    387397        Duplicate/O qBin qBin_R40C25_L400_S160_N512 
     
    393403         
    394404        ReloadMatrix("mat_R40C25_L400_S180_N512.ibw") 
    395         Execute "DoFFT()" 
     405        Calc_IQ_FFT() 
     406//      Execute "DoFFT()" 
    396407        Duplicate/O iBin iBin_R40C25_L400_S180_N512 
    397408        Duplicate/O qBin qBin_R40C25_L400_S180_N512 
     
    403414 
    404415        ReloadMatrix("mat_R40C25_L400_S200_N512.ibw") 
    405         Execute "DoFFT()" 
     416        Calc_IQ_FFT() 
     417//      Execute "DoFFT()" 
    406418        Duplicate/O iBin iBin_R40C25_L400_S200_N512 
    407419        Duplicate/O qBin qBin_R40C25_L400_S200_N512 
     
    413425         
    414426        ReloadMatrix("mat_R40C25_L400_S220_N512.ibw") 
    415         Execute "DoFFT()" 
     427        Calc_IQ_FFT() 
     428//      Execute "DoFFT()" 
    416429        Duplicate/O iBin iBin_R40C25_L400_S220_N512 
    417430        Duplicate/O qBin qBin_R40C25_L400_S220_N512 
     
    501514        qval_SLD = alog(log(qmin) + x*((log(qmax)-log(qmin))/num))               
    502515 
    503  
     516        Wave/Z iBin=root:iBin 
     517        Wave/Z qBin=root:qBin 
    504518 
    505519        ReloadMatrix("mat_R40_L400_S100_N512.ibw") 
    506         Execute "DoFFT()" 
     520        Calc_IQ_FFT() 
     521//      Execute "DoFFT()" 
    507522        Duplicate/O iBin iBin_R40_L400_S100_N512 
    508523        Duplicate/O qBin qBin_R40_L400_S100_N512 
     
    514529         
    515530        ReloadMatrix("mat_R40_L400_S120_N512.ibw") 
    516         Execute "DoFFT()" 
     531        Calc_IQ_FFT() 
     532//      Execute "DoFFT()" 
    517533        Duplicate/O iBin iBin_R40_L400_S120_N512 
    518534        Duplicate/O qBin qBin_R40_L400_S120_N512 
     
    524540         
    525541        ReloadMatrix("mat_R40_L400_S140_N512.ibw") 
    526         Execute "DoFFT()" 
     542        Calc_IQ_FFT() 
     543//      Execute "DoFFT()" 
    527544        Duplicate/O iBin iBin_R40_L400_S140_N512 
    528545        Duplicate/O qBin qBin_R40_L400_S140_N512 
     
    534551         
    535552        ReloadMatrix("mat_R40_L400_S160_N512.ibw") 
    536         Execute "DoFFT()" 
     553        Calc_IQ_FFT() 
     554//      Execute "DoFFT()" 
    537555        Duplicate/O iBin iBin_R40_L400_S160_N512 
    538556        Duplicate/O qBin qBin_R40_L400_S160_N512 
     
    544562         
    545563        ReloadMatrix("mat_R40_L400_S180_N512.ibw") 
    546         Execute "DoFFT()" 
     564        Calc_IQ_FFT() 
     565//      Execute "DoFFT()" 
    547566        Duplicate/O iBin iBin_R40_L400_S180_N512 
    548567        Duplicate/O qBin qBin_R40_L400_S180_N512 
     
    553572        SaveExperiment 
    554573         
     574 
    555575        ReloadMatrix("mat_R40_L400_S200_N512.ibw") 
    556         Execute "DoFFT()" 
     576        Calc_IQ_FFT() 
     577//      Execute "DoFFT()" 
    557578        Duplicate/O iBin iBin_R40_L400_S200_N512 
    558579        Duplicate/O qBin qBin_R40_L400_S200_N512 
     
    564585 
    565586        ReloadMatrix("mat_R40_L400_S220_N512.ibw") 
    566         Execute "DoFFT()" 
     587        Calc_IQ_FFT() 
     588//      Execute "DoFFT()" 
    567589        Duplicate/O iBin iBin_R40_L400_S220_N512 
    568590        Duplicate/O qBin qBin_R40_L400_S220_N512 
  • sans/Dev/trunk/NCNR_User_Procedures/Analysis/Alpha/Tinker/FFT_Fit_Includes.ipf

    r843 r936  
    1010#include "FFT_KR_Parser" 
    1111#include "FFT_Fit_3Cyl_KR" 
     12 
     13// a dummy model to use with SASCALC 
     14#include "FFT_GenericModel" 
  • sans/Dev/trunk/NCNR_User_Procedures/Analysis/Alpha/Tinker/FFT_Panel.ipf

    r934 r936  
    5151                Variable/G root:FFT_QmaxReal = 0 
    5252                Variable/G root:FFT_DQ=0 
     53                Variable/G root:FFT_Qmin=0 
    5354                Variable/G root:FFT_estTime = 0 
    5455                 
     
    5960                FFT_QmaxReal := FFT_Qmax/2 
    6061                FFT_DQ := pi/(FFT_N*FFT_T) 
     62                FFT_Qmin := 2*pi/(FFT_N*FFT_T) 
    6163                //empirical fit (cubic) of time vs N=50 to N=256 
    6264                FFT_estTime := 0.56 - 0.0156*FFT_N + 0.000116*FFT_N^2 + 8e-7*FFT_N^3 
     
    7880        SetVariable FFTSetVar_0,pos={7,7},size={150,15},title="Cells per edge (N)" 
    7981        SetVariable FFTSetVar_0,limits={50,512,2},value= FFT_N,live= 1 
    80         SetVariable FFTSetVar_1,pos={7,33},size={150,15},title="Length per Cell (T)" 
     82        SetVariable FFTSetVar_1,pos={7,27},size={150,15},title="Length per Cell (T)" 
    8183        SetVariable FFTSetVar_1,limits={1,5000,0.2},value= FFT_T,live= 1 
    82         SetVariable FFTSetVar_2,pos={183,26},size={120,15},title="Real Qmax" 
     84        SetVariable FFTSetVar_2,pos={183,7},size={120,15},title="Real Qmax" 
    8385        SetVariable FFTSetVar_2,limits={0,0,0},value= FFT_QmaxReal,noedit= 1,live= 1 
    84         SetVariable FFTSetVar_3,pos={183,48},size={120,15},title="delta Q (A)" 
     86        SetVariable FFTSetVar_3,pos={183,47},size={120,15},title="delta Q (A)" 
    8587        SetVariable FFTSetVar_3,limits={0,0,0},value= FFT_DQ,noedit= 1,live= 1 
     88        SetVariable FFTSetVar_6,pos={183,27},size={120,15},title="Real Qmin (A)" 
     89        SetVariable FFTSetVar_6,limits={0,0,0},value= FFT_Qmin,noedit= 1,live= 1 
    8690        Button FFTButton_0,pos={15,79},size={90,20},proc=FFT_MakeMatrixButtonProc,title="Make Matrix" 
    8791        Button FFTButton_1,pos={14,157},size={90,20},proc=FFTMakeGizmoButtonProc,title="Make Gizmo" 
     
    103107        Button FFTButton_14a,pos={180,360},size={130,20},proc=FFT_PlotResultsButtonProc,title="Plot SLD Results" 
    104108 
    105         SetVariable FFTSetVar_4,pos={201,4},size={100,15},title="FFT time(s)" 
     109        SetVariable FFTSetVar_4,pos={7,47},size={100,15},title="FFT time(s)" 
    106110        SetVariable FFTSetVar_4,limits={0,0,0},value= FFT_estTime,noedit= 1,live= 1,format="%d" 
    107111        Button FFTButton_9,pos={200,400},size={100,20},proc=FFT_Get2DSlice,title="Get 2D Slice" 
     
    152156        sprintf str,"FFT_T=%g;FFT_N=%d;FFT_SolventSLD=%d;",FFT_T,FFT_N,FFT_SolventSLD 
    153157        Note mat,str 
    154         Save/C/I/P=home mat as fileStr  //will ask for a file name, save as Igor Binary 
     158        Save/C/P=home mat as fileStr    //will ask for a file name if fileStr="" save as Igor Binary 
    155159        Note/K mat                      //kill wave note on exiting since I don't properly update this anywhere else 
    156160                         
     
    720724        String ctrlName 
    721725 
    722         Execute "DoFFT()" 
     726        Calc_IQ_FFT() 
     727//      Execute "DoFFT()" 
    723728End 
    724729 
  • sans/Dev/trunk/NCNR_User_Procedures/Analysis/Alpha/Tinker/FFT_Sphere_Fills.ipf

    r798 r936  
    11#pragma rtGlobals=1             // Use modern global access method. 
     2 
     3 
     4 
     5// -- APRIL 2014 -- see the function: 
     6// Function FillSphereRadiusNoOverlap(mat,grid,rad,xc,yc,zc,fill) 
     7// and where it is called to get a handle on how to re-do the sphere filling calls 
     8// - string of pearls 
     9// - random walk of beads (restricted angles, or simply self-avoiding) 
     10// - others?? 
     11// 
     12// 
     13// 
     14// 
     15 
    216 
    317// currently a bunch of commented out, old, untested macros that  
     
    721// the calls to the actual calculation must be updated, plus lots of other stuff, 
    822// but it's a good start 
     23 
    924 
    1025 
  • sans/Dev/trunk/NCNR_User_Procedures/Analysis/Models/NewModels_2006/Beaucage_v40.ipf

    r633 r936  
    2323        xwave_b1 = alog(log(qmin) + x*((log(qmax)-log(qmin))/num)) 
    2424        make/o/d coef_b1 = {1,3,21,6e-4,2,0} 
    25         make/o/t parameters_b1 = {"scale","G1 (cm-1 sr-1)","Rg1  (A)","B1 (cm-1 sr-1)","Pow1","bkg (cm-1 sr-1)"} 
     25        make/o/t parameters_b1 = {"scale","G1 (cm-1 sr-1)","Rg1  (A)","B1 (cm-1 sr-1 A^-Pow)","Pow1","bkg (cm-1 sr-1)"} 
    2626        Edit parameters_b1,coef_b1 
    2727         
     
    4646        xwave_b2 = alog(log(qmin) + x*((log(qmax)-log(qmin))/num)) 
    4747        make/o/d coef_b2 = {1,400,200,5e-6,4,3,21,6e-4,2,0} 
    48         make/o/t parameters_b2 = {"scale","G1 (cm-1 sr-1)","Rg1  (A)","B1 (cm-1 sr-1)","Pow1","G2 (cm-1 sr-1)","Rg2  (A)","B2 (cm-1 sr-1)","Pow2","bkg (cm-1 sr-1)"} 
     48        make/o/t parameters_b2 = {"scale","G1 (cm-1 sr-1)","Rg1  (A)","B1 (cm-1 sr-1 A^-Pow)","Pow1","G2 (cm-1 sr-1)","Rg2  (A)","B2 (cm-1 sr-1 A^-Pow)","Pow2","bkg (cm-1 sr-1)"} 
    4949        Edit parameters_b2,coef_b2 
    5050         
     
    6969        xwave_b3 = alog(log(qmin) + x*((log(qmax)-log(qmin))/num)) 
    7070        make/o/d coef_b3 = {1,4000,600,2e-7,4,400,200,5e-6,4,3,21,6e-4,2,0} 
    71         make/o/t parameters_b3 = {"scale","G1 (cm-1 sr-1)","Rg1  (A)","B1 (cm-1 sr-1)","Pow1","G2 (cm-1 sr-1)","Rg2  (A)","B2 (cm-1 sr-1)","Pow2","G3 (cm-1 sr-1)","Rg3  (A)","B3 (cm-1 sr-1)","Pow3","bkg (cm-1)"} 
     71        make/o/t parameters_b3 = {"scale","G1 (cm-1 sr-1)","Rg1  (A)","B1 (cm-1 sr-1 A^-Pow)","Pow1","G2 (cm-1 sr-1)","Rg2  (A)","B2 (cm-1 sr-1 A^-Pow)","Pow2","G3 (cm-1 sr-1)","Rg3  (A)","B3 (cm-1 sr-1 A^-Pow)","Pow3","bkg (cm-1)"} 
    7272        Edit parameters_b3,coef_b3 
    7373         
     
    9292        xwave_b4 = alog(log(qmin) + x*((log(qmax)-log(qmin))/num)) 
    9393        make/o/d coef_b4 = {1,40000,2000,1e-8,4,4000,600,2e-7,4,400,200,5e-6,4,3,21,6e-4,2,0} 
    94         make/o/t parameters_b4 = {"scale","G1 (cm-1 sr-1)","Rg1  (A)","B1 (cm-1 sr-1)","Pow1","G2 (cm-1 sr-1)","Rg2  (A)","B2 (cm-1 sr-1)","Pow2","G3 (cm-1 sr-1)","Rg3  (A)","B3 (cm-1 sr-1)","Pow3","G4 (cm-1 sr-1)","Rg4  (A)","B4 (cm-1 sr-1)","Pow4","bkg (cm-1)"} 
     94        make/o/t parameters_b4 = {"scale","G1 (cm-1 sr-1)","Rg1  (A)","B1 (cm-1 sr-1 A^-Pow)","Pow1","G2 (cm-1 sr-1)","Rg2  (A)","B2 (cm-1 sr-1 A^-Pow)","Pow2","G3 (cm-1 sr-1)","Rg3  (A)","B3 (cm-1 sr-1 A^-Pow)","Pow3","G4 (cm-1 sr-1)","Rg4  (A)","B4 (cm-1 sr-1 A^-Pow)","Pow4","bkg (cm-1)"} 
    9595        Edit parameters_b4,coef_b4 
    9696         
     
    122122        // Setup parameter table for model function 
    123123        Make/O/D smear_coef_b1 ={1,3,21,6e-4,2,0}                                        
    124         make/o/t smear_parameters_b1 = {"scale","G1 (cm-1 sr-1)","Rg1  (A)","B1 (cm-1 sr-1)","Pow1","bkg (cm-1 sr-1)"}   
     124        make/o/t smear_parameters_b1 = {"scale","G1 (cm-1 sr-1)","Rg1  (A)","B1 (cm-1 sr-1 A^-Pow)","Pow1","bkg (cm-1 sr-1)"}    
    125125        Edit smear_parameters_b1,smear_coef_b1                                   
    126126         
     
    157157        // Setup parameter table for model function 
    158158        Make/O/D smear_coef_b2 = {1,400,200,5e-6,4,3,21,6e-4,2,0}                                
    159         make/o/t smear_parameters_b2 = {"scale","G1 (cm-1 sr-1)","Rg1  (A)","B1 (cm-1 sr-1)","Pow1","G2 (cm-1 sr-1)","Rg2  (A)","B2 (cm-1 sr-1)","Pow2","bkg (cm-1 sr-1)"}       
     159        make/o/t smear_parameters_b2 = {"scale","G1 (cm-1 sr-1)","Rg1  (A)","B1 (cm-1 sr-1 A^-Pow)","Pow1","G2 (cm-1 sr-1)","Rg2  (A)","B2 (cm-1 sr-1 A^-Pow)","Pow2","bkg (cm-1 sr-1)"}         
    160160        Edit smear_parameters_b2,smear_coef_b2                                   
    161161         
     
    192192        // Setup parameter table for model function 
    193193        Make/O/D smear_coef_b3 = {1,4000,600,2e-7,4,400,200,5e-6,4,3,21,6e-4,2,0} 
    194         make/o/t smear_parameters_b3 = {"scale","G1 (cm-1 sr-1)","Rg1  (A)","B1 (cm-1 sr-1)","Pow1","G2 (cm-1 sr-1)","Rg2  (A)","B2 (cm-1 sr-1)","Pow2","G3 (cm-1 sr-1)","Rg3  (A)","B3 (cm-1 sr-1)","Pow3","bkg (cm-1)"} 
     194        make/o/t smear_parameters_b3 = {"scale","G1 (cm-1 sr-1)","Rg1  (A)","B1 (cm-1 sr-1 A^-Pow)","Pow1","G2 (cm-1 sr-1)","Rg2  (A)","B2 (cm-1 sr-1 A^-Pow)","Pow2","G3 (cm-1 sr-1)","Rg3  (A)","B3 (cm-1 sr-1 A^-Pow)","Pow3","bkg (cm-1)"} 
    195195        Edit smear_parameters_b3,smear_coef_b3                                   
    196196         
     
    227227        // Setup parameter table for model function 
    228228        Make/O/D smear_coef_b4 = {1,40000,2000,1e-8,4,4000,600,2e-7,4,400,200,5e-6,4,3,21,6e-4,2,0} 
    229         Make/o/t smear_parameters_b4 = {"scale","G1 (cm-1 sr-1)","Rg1  (A)","B1 (cm-1 sr-1)","Pow1","G2 (cm-1 sr-1)","Rg2  (A)","B2 (cm-1 sr-1)","Pow2","G3 (cm-1 sr-1)","Rg3  (A)","B3 (cm-1 sr-1)","Pow3","G4 (cm-1 sr-1)","Rg4  (A)","B4 (cm-1 sr-1)","Pow4","bkg (cm-1)"} 
     229        Make/o/t smear_parameters_b4 = {"scale","G1 (cm-1 sr-1)","Rg1  (A)","B1 (cm-1 sr-1 A^-Pow)","Pow1","G2 (cm-1 sr-1)","Rg2  (A)","B2 (cm-1 sr-1 A^-Pow)","Pow2","G3 (cm-1 sr-1)","Rg3  (A)","B3 (cm-1 sr-1 A^-Pow)","Pow3","G4 (cm-1 sr-1)","Rg4  (A)","B4 (cm-1 sr-1 A^-Pow)","Pow4","bkg (cm-1)"} 
    230230        Edit smear_parameters_b4,smear_coef_b4                                   
    231231         
  • sans/Dev/trunk/NCNR_User_Procedures/Reduction/VSANS/VCALC_PanelMockUp.ipf

    r935 r936  
    4747        STRUCT WMSetVariableAction sva 
    4848        sva.eventCode = 3 
    49         sva.dval = 0.3 
     49//      sva.dval = 0.3 
    5050 
    5151        V_BDet_SDD_SetVarProc(sva)               
  • sans/Dev/trunk/NCNR_User_Procedures/Reduction/VSANS/V_DetectorBin_Middle.ipf

    r935 r936  
    370370        endif 
    371371 
     372        if(binType==4)          // slit aperture binning - Mt, ML, MR, MB are averaged 
     373                ClearIQIfDisplayed("MLRTB") 
     374                ClearIQIfDisplayed("MLR") 
     375                ClearIQIfDisplayed("MTB") 
     376                 
     377                SetDataFolder root:Packages:NIST:VSANS:VCALC 
     378                CheckDisplayed/W=VCALC#Panels_IQ iBin_qxqy_ML 
     379                 
     380                if(V_flag==0) 
     381                        AppendtoGraph/W=VCALC#Panels_IQ iBin_qxqy_ML vs qBin_qxqy_ML 
     382                        AppendToGraph/W=VCALC#Panels_IQ iBin_qxqy_MR vs qBin_qxqy_MR 
     383                        AppendToGraph/W=VCALC#Panels_IQ iBin_qxqy_MT vs qBin_qxqy_MT 
     384                        AppendToGraph/W=VCALC#Panels_IQ iBin_qxqy_MB vs qBin_qxqy_MB 
     385                        ModifyGraph/W=VCALC#Panels_IQ mode=4 
     386                        ModifyGraph/W=VCALC#Panels_IQ marker=19 
     387                        ModifyGraph/W=VCALC#Panels_IQ rgb(iBin_qxqy_ML)=(65535,0,0),rgb(iBin_qxqy_MB)=(1,16019,65535),rgb(iBin_qxqy_MR)=(65535,0,0),rgb(iBin_qxqy_MT)=(1,16019,65535) 
     388                        ModifyGraph/W=VCALC#Panels_IQ msize=2 
     389                        ModifyGraph/W=VCALC#Panels_IQ muloffset(iBin_qxqy_ML)={0,4},muloffset(iBin_qxqy_MB)={0,2},muloffset(iBin_qxqy_MR)={0,8} 
     390                        ModifyGraph/W=VCALC#Panels_IQ grid=1 
     391                        ModifyGraph/W=VCALC#Panels_IQ log=1 
     392                        ModifyGraph/W=VCALC#Panels_IQ mirror=2 
     393                endif            
     394                         
     395        endif 
    372396        SetDataFolder root: 
    373397EndMacro 
     
    543567        SetDataFolder root:Packages:NIST:VSANS:VCALC 
    544568 
    545         CheckDisplayed/W=VCALC#Panels_IQ iBin_qxqy_B 
    546          
    547         if(V_flag==0) 
    548                 AppendtoGraph/W=VCALC#Panels_IQ iBin_qxqy_B vs qBin_qxqy_B 
    549                 ModifyGraph/W=VCALC#Panels_IQ mode=4 
    550                 ModifyGraph/W=VCALC#Panels_IQ marker=19 
    551                 ModifyGraph/W=VCALC#Panels_IQ rgb(iBin_qxqy_B)=(1,52428,52428) 
    552                 ModifyGraph/W=VCALC#Panels_IQ msize=2 
    553                 ModifyGraph/W=VCALC#Panels_IQ grid=1 
    554                 ModifyGraph/W=VCALC#Panels_IQ log=1 
    555                 ModifyGraph/W=VCALC#Panels_IQ mirror=2 
    556         endif 
     569        Variable binType 
     570         
     571        ControlInfo/W=VCALC popup_b 
     572        binType = V_Value               // V_value counts menu items from 1, so 1=1, 2=2, 3=4 
     573         
     574 
     575        if(binType==1 || binType==2 || binType==3) 
     576                 
     577                SetDataFolder root:Packages:NIST:VSANS:VCALC 
     578                CheckDisplayed/W=VCALC#Panels_IQ iBin_qxqy_B 
     579                 
     580                if(V_flag==0) 
     581                        AppendtoGraph/W=VCALC#Panels_IQ iBin_qxqy_B vs qBin_qxqy_B 
     582                        ModifyGraph/W=VCALC#Panels_IQ mode=4 
     583                        ModifyGraph/W=VCALC#Panels_IQ marker=19 
     584                        ModifyGraph/W=VCALC#Panels_IQ rgb(iBin_qxqy_B)=(1,52428,52428) 
     585                        ModifyGraph/W=VCALC#Panels_IQ msize=2 
     586                        ModifyGraph/W=VCALC#Panels_IQ grid=1 
     587                        ModifyGraph/W=VCALC#Panels_IQ log=1 
     588                        ModifyGraph/W=VCALC#Panels_IQ mirror=2 
     589                endif 
     590        endif 
     591 
     592        //nothing different here since there is ony a single detector to display, but for the future... 
     593        if(binType==4) 
     594                 
     595                SetDataFolder root:Packages:NIST:VSANS:VCALC 
     596                CheckDisplayed/W=VCALC#Panels_IQ iBin_qxqy_B 
     597                 
     598                if(V_flag==0) 
     599                        AppendtoGraph/W=VCALC#Panels_IQ iBin_qxqy_B vs qBin_qxqy_B 
     600                        ModifyGraph/W=VCALC#Panels_IQ mode=4 
     601                        ModifyGraph/W=VCALC#Panels_IQ marker=19 
     602                        ModifyGraph/W=VCALC#Panels_IQ rgb(iBin_qxqy_B)=(1,52428,52428) 
     603                        ModifyGraph/W=VCALC#Panels_IQ msize=2 
     604                        ModifyGraph/W=VCALC#Panels_IQ grid=1 
     605                        ModifyGraph/W=VCALC#Panels_IQ log=1 
     606                        ModifyGraph/W=VCALC#Panels_IQ mirror=2 
     607                endif 
     608        endif 
     609 
     610         
     611 
    557612         
    558613        SetDataFolder root: 
  • sans/Dev/trunk/NCNR_User_Procedures/Reduction/VSANS/V_DetectorBinning.ipf

    r935 r936  
    12681268                         
    12691269        endif 
     1270 
     1271 
     1272        if(binType==4)          //slit mode 
     1273                ClearIQIfDisplayed("FLRTB") 
     1274                ClearIQIfDisplayed("FLR") 
     1275                ClearIQIfDisplayed("FTB") 
     1276                 
     1277                SetDataFolder root:Packages:NIST:VSANS:VCALC 
     1278                CheckDisplayed/W=VCALC#Panels_IQ iBin_qxqy_FL 
     1279                 
     1280                if(V_flag==0) 
     1281                        AppendtoGraph/W=VCALC#Panels_IQ iBin_qxqy_FL vs qBin_qxqy_FL 
     1282                        AppendToGraph/W=VCALC#Panels_IQ iBin_qxqy_FR vs qBin_qxqy_FR 
     1283                        AppendToGraph/W=VCALC#Panels_IQ iBin_qxqy_FT vs qBin_qxqy_FT 
     1284                        AppendToGraph/W=VCALC#Panels_IQ iBin_qxqy_FB vs qBin_qxqy_FB 
     1285                        ModifyGraph/W=VCALC#Panels_IQ mode=4 
     1286                        ModifyGraph/W=VCALC#Panels_IQ marker=19 
     1287                        ModifyGraph/W=VCALC#Panels_IQ rgb(iBin_qxqy_FL)=(39321,26208,1),rgb(iBin_qxqy_FB)=(2,39321,1),rgb(iBin_qxqy_FR)=(39321,26208,1),rgb(iBin_qxqy_FT)=(2,39321,1) 
     1288                        ModifyGraph/W=VCALC#Panels_IQ msize=2 
     1289                        ModifyGraph/W=VCALC#Panels_IQ muloffset(iBin_qxqy_FL)={0,4},muloffset(iBin_qxqy_FB)={0,2},muloffset(iBin_qxqy_FR)={0,8} 
     1290                        ModifyGraph/W=VCALC#Panels_IQ grid=1 
     1291                        ModifyGraph/W=VCALC#Panels_IQ log=1 
     1292                        ModifyGraph/W=VCALC#Panels_IQ mirror=2 
     1293                        Label/W=VCALC#Panels_IQ left "Intensity (1/cm)" 
     1294                        Label/W=VCALC#Panels_IQ bottom "Q (1/A)" 
     1295                endif    
     1296                                 
     1297        endif 
     1298 
    12701299         
    12711300        SetDataFolder root: 
Note: See TracChangeset for help on using the changeset viewer.