Changeset 185


Ignore:
Timestamp:
Oct 23, 2007 5:13:28 PM (15 years ago)
Author:
srkline
Message:

The Cylinder_2D calculation is now threaded (it's the only threaded function so far)

Plus a few interface tweaks on the Setup panel

Location:
sans/Analysis/branches/ajj_23APR07/IGOR_Package_Files/Put in User Procedures/SANS_Models_v3.00
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • sans/Analysis/branches/ajj_23APR07/IGOR_Package_Files/Put in User Procedures/SANS_Models_v3.00/Models_2D/Cylinder_2D.ipf

    r182 r185  
    7676        parameters_Cyl2D[7] = "Sigma of polydisp in Theta [rad]" 
    7777        parameters_Cyl2D[8] = "Sigma of polydisp in Phi [rad]" 
    78         parameters_Cyl2D[9] = "Sigma of polydisp in Radius [Angstroem]" 
     78        parameters_Cyl2D[9] = "Sigma of polydisp in Radius [A]" 
    7979 
    8080        Edit parameters_Cyl2D,coef_Cyl2D                                         
     
    114114// simply calls the original single point calculation with 
    115115// a wave assignment (this will behave nicely if given point ranges) 
     116// 
     117// NON-THREADED IMPLEMENTATION 
     118// 
     119//Function Cylinder2D(cw,zw,yw,xw) : FitFunc 
     120//      Wave cw,zw,yw,xw 
     121//       
     122//#if exists("Cylinder_2D_Dist") 
     123//      zw = Cylinder_2D_Dist(cw,yw,xw) 
     124//#else 
     125//      Abort "You do not have the SANS Analysis XOP installed" 
     126//#endif 
     127//      return(0) 
     128//End 
     129// 
     130 
     131//threaded version of the function 
     132ThreadSafe Function Cylinder2D_T(cw,zw,yw,xw,p1,p2) 
     133        WAVE cw,zw,yw,xw 
     134        Variable p1,p2 
     135         
     136        zw[p1,p2]= Cylinder_2D_Dist(cw,yw,xw) 
     137 
     138//      return stopMSTimer(-2)          // time when we finished 
     139        return 0 
     140End 
     141 
     142//function that is actually a wrapper to dispatch the calculation to N threads 
     143// 
    116144Function Cylinder2D(cw,zw,yw,xw) : FitFunc 
    117145        Wave cw,zw,yw,xw 
    118146         
    119 #if exists("Cylinder_2D_Dist") 
    120         zw = Cylinder_2D_Dist(cw,yw,xw) 
    121 #else 
    122         Abort "You do not have the SANS Analysis XOP installed" 
    123 #endif 
     147        Variable npt=numpnts(yw) 
     148        Variable i,nthreads= ThreadProcessorCount 
     149        variable mt= ThreadGroupCreate(nthreads) 
     150 
     151        for(i=0;i<nthreads;i+=1) 
     152//              Print (i*npt/nthreads),((i+1)*npt/nthreads-1) 
     153                ThreadStart mt,i,Cylinder2D_T(cw,zw,yw,xw,(i*npt/nthreads),((i+1)*npt/nthreads-1)) 
     154        endfor 
     155 
     156        do 
     157                variable tgs= ThreadGroupWait(mt,100) 
     158        while( tgs != 0 ) 
     159 
     160        variable dummy= ThreadGroupRelease(mt) 
     161         
    124162        return(0) 
    125163End 
  • sans/Analysis/branches/ajj_23APR07/IGOR_Package_Files/Put in User Procedures/SANS_Models_v3.00/Packages/PlotUtils2D.ipf

    r182 r185  
    198198        while(ii<numPix) 
    199199         
    200         $(baseStr+"_qx") = tmpX[mod(p,64)] 
     200        $(baseStr+"_qx") = tmpX[mod(p,numPix)] 
    201201         
    202202        Variable/G gIsLogScale = 0 
     
    651651                 
    652652                if(useEps && useConstr)         //no crsr 
    653                         FuncFit/H=getHStr(hold) /NTHR=0 $funcStr cw, inten /X={Qx,Qy} /M=mask /W=sw /I=1 /D /E=eps /C=constr 
     653                        Print "eps, constr, no /D, no NTHR, no mask" 
     654//                      FuncFit/H=getHStr(hold) /NTHR=0 $funcStr cw, inten /X={Qx,Qy} /M=mask /W=sw /I=1 /D /E=eps /C=constr 
     655                        FuncFit/H=getHStr(hold) $funcStr cw, inten /X={Qx,Qy} /W=sw /I=1 /E=eps /C=constr 
    654656                        break 
    655657                endif 
     
    821823EndMacro 
    822824 
     825Macro CalculateChiSquared(str) 
     826        String str 
     827        Prompt str,"Pick the data folder containing 2D data",popup,getAList(4) 
     828 
     829 
     830        String fldrSav0= GetDataFolder(1) 
     831        SetDataFolder $("root:"+str) 
     832 
     833        Duplicate/O $(str+"_i") chi 
     834        chi = ((zwave_cyl2D - $(str+"_i"))/sw )^2 
     835         
     836        chi = (mask == 1) ? chi : 0 
     837         
     838        Print sum(chi,-inf,inf) 
     839         
     840        SetDataFolder fldrSav0 
     841EndMacro 
  • sans/Analysis/branches/ajj_23APR07/IGOR_Package_Files/Put in User Procedures/SANS_Models_v3.00/Packages/Wrapper.ipf

    r181 r185  
    4444        GroupBox grpBox_2 title="No Fit",pos={10,130},size={620,1},frame=0,fSize=10,fstyle=1,fColor=(39321,1,1) 
    4545        GroupBox grpBox_3 title="",pos={10,150},size={620,1},frame=0,fSize=10,fstyle=1,fColor=(39321,1,1) 
    46         Button button_0,pos={523,93},size={100,20},proc=DoTheFitButton,title="Do The Fit" 
    47         Button button_1,pos={310,57},size={80,20},proc=PlotModelFunction,title="Plot" 
    48         Button button_2,pos={310,93},size={80,20},proc=AppendModelToTarget,title="Append" 
    49         Button button_3,pos={310,20},size={80,20},proc=W_LoadDataButtonProc,title="Load Data" 
     46 
     47        Button button_1,pos={280,57},size={120,20},proc=PlotModelFunction,title="Plot 1D Function" 
     48        Button button_2,pos={300,93},size={100,20},proc=AppendModelToTarget,title="Append 1D" 
     49        Button button_3,pos={300,20},size={100,20},proc=W_LoadDataButtonProc,title="Load 1D Data" 
    5050        PopupMenu popup_0,pos={30,21},size={218,20},title="Data Set" 
    5151        PopupMenu popup_0,mode=1,value= #"W_DataSetPopupList()" 
     
    6161        CheckBox check_4,pos={440,85},size={72,14},title="Report?",value= 0 
    6262        CheckBox check_5,pos={454,103},size={72,14},title="Save it?",value= 0 
     63        //change draw order to put button over text of checkbox 
     64        Button button_0,pos={520,93},size={100,20},proc=DoTheFitButton,title="Do 1D Fit" 
     65 
    6366        Edit/W=(20,174,634,435)/HOST=#   
    6467        ModifyTable width(Point)=0 
     
    667670                 
    668671                if(useRes && useEps)            //no crsr, no constr 
     672//                      Print "timing test for Cylinder_PolyRadius --- the supposedly threaded version ---" 
     673//                      Variable t0 = stopMStimer(-2) 
    669674                        FuncFit/H=getHStr(hold) /NTHR=0 $funcStr cw, yw /X=xw /W=sw /I=1 /E=eps /D=fitYw /STRC=fs 
     675//                      t0 = (stopMSTimer(-2) - t0)*1e-6 
     676//                      Printf  "CylPolyRad fit time using res and eps and /NTHR=0 time = %g seconds\r\r",t0 
     677                         
     678//                      cw[0] = .01 
     679//                      cw[1] = 20 
     680//                      cw[2] = 400 
     681//                      cw[3] = 0.2 
     682//                      cw[4] = 3e-6 
     683//                      cw[5] = 0.0 
     684//                       
     685//                      t0 = stopMSTimer(-2) 
     686//                      FuncFit/H=getHStr(hold) $funcStr cw, yw /X=xw /W=sw /I=1 /E=eps /D=fitYw /STRC=fs 
     687//                      t0 = (stopMSTimer(-2) - t0)*1e-6 
     688//                      Printf  "CylPolyRad fit time using res and eps and NO THREADING time = %g seconds\r\r",t0 
    670689                        break 
    671690                endif 
     
    956975                                Button button_3,size={100,20},proc=Load2DDataButtonProc,title="Load 2D Data" 
    957976                                 
    958                                 Button button_2D_0,pos={520,37},size={70,20},proc=LogToggle2DButtonProc,title="Log/Lin" 
    959                                 Button button_2D_1,pos={520,60},size={100,20},proc=Plot2DButtonProc,title="Plot 2D Data" 
     977                                Button button_2D_0,pos={550,60},size={70,20},proc=LogToggle2DButtonProc,title="Log/Lin" 
     978                                Button button_2D_1,pos={520,37},size={100,20},proc=Plot2DButtonProc,title="Plot 2D Data" 
    960979                                 
    961980                                Button button_2D_0,disable=0            //visible again, and enabled 
     
    964983                                //print "unchecked, change them back to 1D" 
    965984                                Button button_0,pos={520,93},size={100,20},proc=DoTheFitButton,title="Do 1D Fit" 
    966                                 Button button_1,pos={240,57},size={120,20},proc=PlotModelFunction,title="Plot 1D Function" 
    967                                 Button button_2,pos={240,93},size={100,20},proc=AppendModelToTarget,title="Append 1D" 
    968                                 Button button_3,pos={240,20},size={100,20},proc=W_LoadDataButtonProc,title="Load 1D Data" 
     985                                Button button_1,pos={280,57},size={120,20},proc=PlotModelFunction,title="Plot 1D Function" 
     986                                Button button_2,pos={300,93},size={100,20},proc=AppendModelToTarget,title="Append 1D" 
     987                                Button button_3,pos={300,20},size={100,20},proc=W_LoadDataButtonProc,title="Load 1D Data" 
    969988                                 
    970989                                Button button_2D_0,disable=3    //hide the extra 2D buttons, and disable 
Note: See TracChangeset for help on using the changeset viewer.