Changeset 197


Ignore:
Timestamp:
Nov 8, 2007 11:15:58 AM (15 years ago)
Author:
srkline
Message:

Changes to PlotUtils2D here undo the previous changeset, now correctly setting upt the Qx and Qy waves in the call to FucFit?. 2D fit functions do need to have the parameters in the order specified in the function (cw,zw,xw,yw)

Cylinder2D has been REPLACED with a version that uses a MODIFIED version of the DANSE XOPs that is currently only on my computer... We will need to decide in the near future how we are going to include Mathieu's code into our XOPs.

GizmoCylinder? is a crude display of the cylinder angles as a function of theta and phi. Not automatically included, and needs to be tweaked (a lot) before prime time, but it's at least something.

Location:
sans/Analysis/branches/ajj_23APR07/IGOR_Package_Files/Put in User Procedures/SANS_Models_v3.00
Files:
1 added
2 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

    r196 r197  
    1212// in the same way the 2D SANS data matrix is handled. 
    1313// 
    14 // Nothing is threaded at this point, although I think it needs to be since upon 
    15 // reading of the WM documentation, it looks like only "basic" fit functions (meaning 
    16 // NOT AAO or Struct functions) are automatically threaded during curve fitting. 
    17 // 
    18 // 
    1914 
    20 //Cylinder_2D_Dist() 
    2115 
    22 // this is what Cylinder_2D_Dist() from our XOP is expecting 
    23 //double dist_cylinder_2D(double pars[], double q, double phi) { 
    24 //      SmearCylinderParameters danse_pars; 
    25 //      danse_pars.scale        = pars[0]; 
    26 //      danse_pars.radius       = pars[1]; 
    27 //      danse_pars.length       = pars[2]; 
    28 //      danse_pars.contrast     = pars[3]; 
    29 //      danse_pars.background   = pars[4]; 
    30 //      danse_pars.cyl_theta    = pars[5]; 
    31 //      danse_pars.cyl_phi      = pars[6]; 
    32 //      danse_pars.sigma_theta  = pars[7]; 
    33 //      danse_pars.sigma_phi    = pars[8]; 
    34 //      danse_pars.sigma_radius = pars[9]; 
    35 // 
    36 //      return smeared_cylinder_analytical_2D(&danse_pars, q, phi);      
    37 //       
    38 //}; 
     16///  REQUIRES DANSE XOP for 2D FUNCTIONS 
    3917 
    4018// 
     
    5331        SetDataFolder $("root:"+str) 
    5432         
     33         
     34        // NOTE THAT THE COEFFICIENTS [N] ARE IN A DIFFERENT ORDER !!! 
    5535        // Setup parameter table for model function 
    56         make/O/T/N=10 parameters_Cyl2D 
    57         Make/O/D/N=10 coef_Cyl2D 
     36        make/O/T/N=11 parameters_Cyl2D 
     37        Make/O/D/N=11 coef_Cyl2D 
    5838        coef_Cyl2D[0] = 1.0 
    5939        coef_Cyl2D[1] = 20.0 
     
    6646        coef_Cyl2D[8] = 0.0 
    6747        coef_Cyl2D[9] = 0.0 
    68         //NOT THE SAME ORDER AS MATHIEU'S CODE - POLYDISPERSITY OF RADIUS IS IN A DIFFERENT LOCATION FROM 
    69         // MATHIEU'S CylinderModel 
     48        coef_Cyl2D[10] = 25 
     49        // 
    7050        parameters_Cyl2D[0] = "Scale" 
    7151        parameters_Cyl2D[1] = "Radius" 
     
    7555        parameters_Cyl2D[5] = "Axis Theta" 
    7656        parameters_Cyl2D[6] = "Axis Phi" 
    77         parameters_Cyl2D[7] = "Sigma of polydisp in Theta [rad]" 
    78         parameters_Cyl2D[8] = "Sigma of polydisp in Phi [rad]" 
    79         parameters_Cyl2D[9] = "Sigma of polydisp in Radius [A]" 
     57         
     58        parameters_Cyl2D[8] = "Sigma of polydisp in Theta [rad]"                //***** 
     59        parameters_Cyl2D[9] = "Sigma of polydisp in Phi [rad]"                  //***** 
     60        parameters_Cyl2D[7] = "Sigma of polydisp in Radius [A]"         //***** 
     61         
     62        parameters_Cyl2D[10] = "number of integration points" 
    8063 
    8164        Edit parameters_Cyl2D,coef_Cyl2D                                         
     
    8669                 
    8770        Variable/G gs_Cyl2D=0 
    88         gs_Cyl2D := Cylinder2D(coef_Cyl2D,zwave_Cyl2D,ywave_Cyl2D,xwave_Cyl2D)  //AAO 2D calculation 
     71        gs_Cyl2D := Cylinder2D(coef_Cyl2D,zwave_Cyl2D,xwave_Cyl2D,ywave_Cyl2D)  //AAO 2D calculation 
    8972         
    9073        Display ywave_Cyl2D vs xwave_Cyl2D 
     
    11194End 
    11295 
    113  
    11496//AAO version, uses XOP if available 
    11597// simply calls the original single point calculation with 
     
    118100// NON-THREADED IMPLEMENTATION 
    119101// 
    120 //Function Cylinder2D(cw,zw,yw,xw) : FitFunc 
    121 //      Wave cw,zw,yw,xw 
     102//Function Cylinder2D(cw,zw,xw,yw) : FitFunc 
     103//      Wave cw,zw,xw,yw 
    122104//       
    123 //#if exists("Cylinder_2D_Dist") 
    124 //      zw = Cylinder_2D_Dist(cw,xw,yw) 
     105//#if exists("CylinderModel_D") 
     106//      zw = CylinderModel_D(cw,xw,yw) 
    125107//#else 
    126108//      Abort "You do not have the SANS Analysis XOP installed" 
     
    131113 
    132114//threaded version of the function 
    133 ThreadSafe Function Cylinder2D_T(cw,zw,yw,xw,p1,p2) 
    134         WAVE cw,zw,yw,xw 
     115ThreadSafe Function Cylinder2D_T(cw,zw,xw,yw,p1,p2) 
     116        WAVE cw,zw,xw,yw 
    135117        Variable p1,p2 
    136118         
    137 #if exists("Cylinder_2D_Dist")                  //to hide the function if XOP not installed 
    138         zw[p1,p2]= Cylinder_2D_Dist(cw,xw,yw) 
     119#if exists("CylinderModel_D")                   //to hide the function if XOP not installed 
     120        zw[p1,p2]= CylinderModel_D(cw,xw,yw) 
    139121#endif 
    140122 
     
    145127//function that is actually a wrapper to dispatch the calculation to N threads 
    146128// 
    147 Function Cylinder2D(cw,zw,yw,xw) : FitFunc 
    148         Wave cw,zw,yw,xw 
     129Function Cylinder2D(cw,zw,xw,yw) : FitFunc 
     130        Wave cw,zw,xw,yw 
    149131         
    150132        Variable npt=numpnts(yw) 
     
    154136        for(i=0;i<nthreads;i+=1) 
    155137//              Print (i*npt/nthreads),((i+1)*npt/nthreads-1) 
    156                 ThreadStart mt,i,Cylinder2D_T(cw,zw,yw,xw,(i*npt/nthreads),((i+1)*npt/nthreads-1)) 
     138                ThreadStart mt,i,Cylinder2D_T(cw,zw,xw,yw,(i*npt/nthreads),((i+1)*npt/nthreads-1)) 
    157139        endfor 
    158140 
  • sans/Analysis/branches/ajj_23APR07/IGOR_Package_Files/Put in User Procedures/SANS_Models_v3.00/Packages/PlotUtils2D.ipf

    r196 r197  
    598598        //      FuncFit/H="11110111111"/NTHR=0 Cylinder2D_D :cyl2d_c_txt:coef_Cyl2D_D  :cyl2d_c_txt:cyl2d_c_txt_i /X={:cyl2d_c_txt:cyl2d_c_txt_qy,:cyl2d_c_txt:cyl2d_c_txt_qx} /W=:cyl2d_c_txt:sw /I=1 /M=:cyl2d_c_txt:mask /D  
    599599 
    600 // !!! /X={Qy,Qx} is correct !!! using {Qx,Qy} return jibberish for the chi^2 from the fit 
    601  
    602600        do 
    603601                if(useRes && useEps && useCursors && useConstr)         //do it all 
    604                         FuncFit/H=getHStr(hold) /NTHR=0 $funcStr cw, inten[pcsr(A),pcsr(B)] /X={Qy,Qx} /M=mask /W=sw /I=1 /D /E=eps /C=constr 
     602                        FuncFit/H=getHStr(hold) /NTHR=0 $funcStr cw, inten[pcsr(A),pcsr(B)] /X={Qx,Qy} /M=mask /W=sw /I=1 /D /E=eps /C=constr 
    605603                        break 
    606604                endif 
    607605                 
    608606                if(useRes && useEps && useCursors)              //no constr 
    609                         FuncFit/H=getHStr(hold) /NTHR=0 $funcStr cw, inten[pcsr(A),pcsr(B)] /X={Qy,Qx} /M=mask /W=sw /I=1 /D /E=eps 
     607                        FuncFit/H=getHStr(hold) /NTHR=0 $funcStr cw, inten[pcsr(A),pcsr(B)] /X={Qx,Qy} /M=mask /W=sw /I=1 /D /E=eps 
    610608                        break 
    611609                endif 
    612610                 
    613611                if(useRes && useEps && useConstr)               //no crsr 
    614                         FuncFit/H=getHStr(hold) /NTHR=0 $funcStr cw, inten /X={Qy,Qx} /M=mask /W=sw /I=1 /D /E=eps /C=constr 
     612                        FuncFit/H=getHStr(hold) /NTHR=0 $funcStr cw, inten /X={Qx,Qy} /M=mask /W=sw /I=1 /D /E=eps /C=constr 
    615613                        break 
    616614                endif 
    617615                 
    618616                if(useRes && useCursors && useConstr)           //no eps 
    619                         FuncFit/H=getHStr(hold) /NTHR=0 $funcStr cw, inten[pcsr(A),pcsr(B)] /X={Qy,Qx} /M=mask /W=sw /I=1 /D /C=constr 
     617                        FuncFit/H=getHStr(hold) /NTHR=0 $funcStr cw, inten[pcsr(A),pcsr(B)] /X={Qx,Qy} /M=mask /W=sw /I=1 /D /C=constr 
    620618                        break 
    621619                endif 
    622620                 
    623621                if(useRes && useCursors)                //no eps, no constr 
    624                         FuncFit/H=getHStr(hold) /NTHR=0 $funcStr cw, inten[pcsr(A),pcsr(B)] /X={Qy,Qx} /M=mask /W=sw /I=1 /D 
     622                        FuncFit/H=getHStr(hold) /NTHR=0 $funcStr cw, inten[pcsr(A),pcsr(B)] /X={Qx,Qy} /M=mask /W=sw /I=1 /D 
    625623                        break 
    626624                endif 
    627625                 
    628626                if(useRes && useEps)            //no crsr, no constr 
    629                         FuncFit/H=getHStr(hold) /NTHR=0 $funcStr cw, inten /X={Qy,Qx} /M=mask /W=sw /I=1 /D /E=eps 
     627                        FuncFit/H=getHStr(hold) /NTHR=0 $funcStr cw, inten /X={Qx,Qy} /M=mask /W=sw /I=1 /D /E=eps 
    630628                        break 
    631629                endif 
    632630         
    633631                if(useRes && useConstr)         //no crsr, no eps 
    634                         FuncFit/H=getHStr(hold) /NTHR=0 $funcStr cw, inten /X={Qy,Qx} /M=mask /W=sw /I=1 /D /C=constr 
     632                        FuncFit/H=getHStr(hold) /NTHR=0 $funcStr cw, inten /X={Qx,Qy} /M=mask /W=sw /I=1 /D /C=constr 
    635633                        break 
    636634                endif 
    637635                 
    638636                if(useRes)              //just res 
    639                         FuncFit/H=getHStr(hold) /NTHR=0 $funcStr cw, inten /X={Qy,Qx} /M=mask /W=sw /I=1 /D 
     637                        FuncFit/H=getHStr(hold) /NTHR=0 $funcStr cw, inten /X={Qx,Qy} /M=mask /W=sw /I=1 /D 
    640638                        break 
    641639                endif 
     
    643641/////   same as above, but all without useRes (no /STRC flag) 
    644642                if(useEps && useCursors && useConstr)           //do it all 
    645                         FuncFit/H=getHStr(hold) /NTHR=0 $funcStr cw, inten[pcsr(A),pcsr(B)] /X={Qy,Qx} /M=mask /W=sw /I=1 /D /E=eps /C=constr 
     643                        FuncFit/H=getHStr(hold) /NTHR=0 $funcStr cw, inten[pcsr(A),pcsr(B)] /X={Qx,Qy} /M=mask /W=sw /I=1 /D /E=eps /C=constr 
    646644                        break 
    647645                endif 
    648646                 
    649647                if(useEps && useCursors)                //no constr 
    650                         FuncFit/H=getHStr(hold) /NTHR=0 $funcStr cw, inten[pcsr(A),pcsr(B)] /X={Qy,Qx} /M=mask /W=sw /I=1 /D /E=eps 
     648                        FuncFit/H=getHStr(hold) /NTHR=0 $funcStr cw, inten[pcsr(A),pcsr(B)] /X={Qx,Qy} /M=mask /W=sw /I=1 /D /E=eps 
    651649                        break 
    652650                endif 
     
    654652                 
    655653                if(useEps && useConstr)         //no crsr 
    656                         FuncFit/H=getHStr(hold) /NTHR=0 $funcStr cw, inten /X={Qy,Qx} /M=mask /W=sw /I=1 /D /E=eps /C=constr 
     654                        FuncFit/H=getHStr(hold) /NTHR=0 $funcStr cw, inten /X={Qx,Qy} /M=mask /W=sw /I=1 /D /E=eps /C=constr 
    657655                        break 
    658656                endif 
    659657                 
    660658                if(useCursors && useConstr)             //no eps 
    661                         FuncFit/H=getHStr(hold) /NTHR=0 $funcStr cw, inten[pcsr(A),pcsr(B)] /X={Qy,Qx} /M=mask /W=sw /I=1 /D /C=constr 
     659                        FuncFit/H=getHStr(hold) /NTHR=0 $funcStr cw, inten[pcsr(A),pcsr(B)] /X={Qx,Qy} /M=mask /W=sw /I=1 /D /C=constr 
    662660                        break 
    663661                endif 
    664662                 
    665663                if(useCursors)          //no eps, no constr 
    666                         FuncFit/H=getHStr(hold) /NTHR=0 $funcStr cw, inten[pcsr(A),pcsr(B)] /X={Qy,Qx} /M=mask /W=sw /I=1 /D 
     664                        FuncFit/H=getHStr(hold) /NTHR=0 $funcStr cw, inten[pcsr(A),pcsr(B)] /X={Qx,Qy} /M=mask /W=sw /I=1 /D 
    667665                        break 
    668666                endif 
    669667                 
    670668                if(useEps)              //no crsr, no constr 
    671                         FuncFit/H=getHStr(hold) /NTHR=0 $funcStr cw, inten /X={Qy,Qx} /M=mask /W=sw /I=1 /D /E=eps 
     669                        FuncFit/H=getHStr(hold) /NTHR=0 $funcStr cw, inten /X={Qx,Qy} /M=mask /W=sw /I=1 /D /E=eps 
    672670                        break 
    673671                endif 
    674672         
    675673                if(useConstr)           //no crsr, no eps 
    676                         FuncFit/H=getHStr(hold) /NTHR=0 $funcStr cw, inten /X={Qy,Qx} /M=mask /W=sw /I=1 /D /C=constr 
     674                        FuncFit/H=getHStr(hold) /NTHR=0 $funcStr cw, inten /X={Qx,Qy} /M=mask /W=sw /I=1 /D /C=constr 
    677675                        break 
    678676                endif 
    679677                 
    680678                //just a plain vanilla fit 
    681                         FuncFit/H=getHStr(hold) /NTHR=0 $funcStr cw, inten /X={Qy,Qx} /M=mask /W=sw /I=1 /D 
     679                        FuncFit/H=getHStr(hold) /NTHR=0 $funcStr cw, inten /X={Qx,Qy} /M=mask /W=sw /I=1 /D 
    682680         
    683681        while(0) 
     
    824822EndMacro 
    825823 
    826 Macro CalculateChiSquared(str) 
    827         String str 
    828         Prompt str,"Pick the data folder containing 2D data",popup,getAList(4) 
    829  
    830  
    831         String fldrSav0= GetDataFolder(1) 
    832         SetDataFolder $("root:"+str) 
    833  
    834         Duplicate/O $(str+"_i") chi 
    835         chi = ((zwave_cyl2D_D - $(str+"_i"))/sw )^2 
    836          
    837         chi = (mask == 1) ? chi : 0 
    838          
    839         Print sum(chi,-inf,inf) 
    840          
    841         SetDataFolder fldrSav0 
    842 EndMacro 
     824//Macro CalculateChiSquared(str) 
     825//      String str 
     826//      Prompt str,"Pick the data folder containing 2D data",popup,getAList(4) 
     827// 
     828// 
     829//      String fldrSav0= GetDataFolder(1) 
     830//      SetDataFolder $("root:"+str) 
     831// 
     832//      Duplicate/O $(str+"_i") chi 
     833//      chi = ((zwave_cyl2D_D - $(str+"_i"))/sw )^2 
     834//       
     835//      chi = (mask == 1) ? chi : 0 
     836//       
     837//      Print sum(chi,-inf,inf) 
     838//       
     839//      SetDataFolder fldrSav0 
     840//EndMacro 
Note: See TracChangeset for help on using the changeset viewer.