Changeset 160


Ignore:
Timestamp:
Sep 7, 2007 4:11:17 PM (15 years ago)
Author:
srkline
Message:

Added a more graceful abort if the user cancels from the "GetSlope?" prompt

Added a report generator to the WrapperPanel?. If checked, it will generate a notebook with useful information and graph. If save is also checked, two files will be saved, the notebook, and a PNG of the graph. If save is generated without selecting "Report", nothing happens.

No changes to GaussUtils? (removed ThreadSafe? declarations from prototypes)

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/GaussUtils.ipf

    r157 r160  
    8888                str = RemoveFromList("myGlobals", str , ";" ) 
    8989                str = RemoveFromList("Packages", str, ";") 
     90                str = RemoveFromList("AutoFit", str, ";") 
    9091        endif 
    9192         
  • sans/Analysis/branches/ajj_23APR07/IGOR_Package_Files/Put in User Procedures/SANS_Models_v3.00/Packages/Wrapper.ipf

    r157 r160  
    3636        CheckBox check_2,pos={400,65},size={95,14},title="Use Constraints?",value= 0 
    3737        CheckBox check_3,pos={280,24},size={72,14},title="From target",value= 0 
     38        CheckBox check_4,pos={400,85},size={72,14},title="Report?",value= 0 
     39        CheckBox check_5,pos={414,100},size={72,14},title="Save it?",value= 0 
    3840        Edit/W=(20,174,634,435)/HOST=#   
    3941        ModifyTable width(Point)=0 
     
    456458                WAVE fs.resW =  crsrResW                 
    457459        endif 
    458 //      if(useCursors)          //make a mask wave instead (this DOES NOT work due to the internal workings of FuncFit trimming the wave) 
    459 //              if(pcsr(A) > pcsr(B)) 
    460 //                      pt1 = pcsr(B) 
    461 //                      pt2 = pcsr(A) 
    462 //              else 
    463 //                      pt1 = pcsr(A) 
    464 //                      pt2 = pcsr(B) 
    465 //              endif 
    466 //              Duplicate/O yw $(DF+"maskW") 
    467 //              Wave maskW = $(DF+"maskW") 
    468 //              maskW = ((p < pt2) && (p > pt1)) ? 1 : 0                //0 = unused points, 1= keepers 
    469 //      Endif 
    470 //// 
    471  
    472 //don't use the auto-destination with no flag, it doesn't appear to work correctly 
     460 
     461// create these variables so that FuncFit will set them on exit 
     462        Variable/G V_FitError=0                         //0=no err, 1=error,(2^1+2^0)=3=singular matrix 
     463        Variable/G V_FitQuitReason=0            //0=ok,1=maxiter,2=user stop,3=no chisq decrease 
     464         
     465// don't use the auto-destination with no flag, it doesn't appear to work correctly 
     466// dispatch the fit 
    473467        do 
    474468                if(useRes && useEps && useCursors && useConstr)         //do it all 
     
    569563        print w_sigma 
    570564         
     565 
     566        Variable yesSave=0,yesReport=0 
     567        ControlInfo check_4 
     568        yesReport = V_Value 
     569        ControlInfo check_5 
     570        yesSave = V_Value 
     571         
     572         
     573        if(yesReport) 
     574                String parStr=GetWavesDataFolder(cw,1)+ WaveList("*param*"+suffix, "", "TEXT:1," )              //this is *hopefully* one wave 
     575                String topGraph= WinName(0,1)   //this is the topmost graph 
     576         
     577                W_GenerateReport(funcStr,folderStr,$parStr,cw,yesSave,V_chisq,W_sigma,V_npnts,V_FitError,V_FitQuitReason,V_startRow,V_endRow,topGraph) 
     578        endif 
     579         
    571580        SetDataFolder root: 
    572581        return(0) 
     
    591600End 
    592601 
     602//taken from SRK Auto_Fit, and modified to work better with FitWrapper 
     603//must have AutoGraph as the name of the graph window (any size) 
     604// func is the name of the function (for print only) 
     605//par and coef are the exact names of the waves 
     606//yesSave==1 will save the file(name=func+time) 
     607// 
     608Function W_GenerateReport(func,dataname,param,ans,yesSave,chiSq,sigWave,npts,fitErr,fitQuit,fitStart,fitEnd,topGraph) 
     609        String func,dataname 
     610        Wave/T param 
     611        Wave ans 
     612        Variable yesSave,chiSq 
     613        Wave sigWave 
     614        Variable npts,fitErr,fitQuit,fitStart,fitEnd 
     615        String topGraph 
     616         
     617        String str,pictStr="P_" 
     618        String nb="Report" 
     619                 
     620        // bring report up 
     621        DoWindow/F Report 
     622        if (V_flag == 0)                // Report notebook doesn't exist ? 
     623                NewNotebook/W=(10,45,550,620)/F=1/N=Report as "Report" 
     624        endif 
     625        // delete old stuff 
     626        Notebook $nb selection={startOfFile, endOfFile}, text="\r", selection={startOfFile, startOfFile} 
     627         
     628        //setup 
     629        Notebook $nb defaultTab=36, statusWidth=252, pageMargins={72,72,72,72} 
     630        Notebook $nb showRuler=1, rulerUnits=1, updating={1, 60} 
     631        Notebook $nb newRuler=Normal, justification=0, margins={0,0,468}, spacing={0,0,0}, tabs={}, rulerDefaults={"Geneva",10,0,(0,0,0)} 
     632//       
     633        // insert title 
     634        Notebook $nb newRuler=Title, justification=1, rulerDefaults={"Times", 16, 1, (0, 0, 0)} 
     635        sprintf str, "Fit to %s, %s, %s\r\r", func,Secs2Date(datetime, 0), time() 
     636        Notebook $nb ruler=Title, text=str 
     637         
     638        // insert fit results 
     639        Variable num=numpnts(ans),ii=0 
     640        Notebook $nb ruler=Normal 
     641        Notebook Report  margins={18,18,504}, tabs={63 + 3*8192} 
     642        str = "Data file: " + dataname + "\r\r" 
     643        Notebook $nb text=str 
     644        Notebook $nb ruler=Normal 
     645        Notebook $nb margins={18,18,504}, tabs={144,234,252} 
     646        do 
     647                sprintf str, "%s = \t%g\t±\t%g\r", param[ii],ans[ii],sigwave[ii] 
     648                Notebook $nb text=str 
     649                ii+=1 
     650        while(ii<num) 
     651         
     652        // 
     653        Wave dataXw = $("root:"+dataname+":"+dataname+"_q")      
     654        // 
     655        Notebook $nb ruler=Normal 
     656        Notebook $nb  margins={18,18,504}, tabs={63+3*8192}, fStyle=1, textRGB=(65000,0,0) 
     657         
     658        sprintf str,"chisq = %g\r",chisq 
     659        Notebook $nb textRGB=(65000,0,0),fstyle=1,text=str 
     660        sprintf str,"Npnts = %g \t\t Sqrt(X^2/N) = %g\r",npts,sqrt(chiSq/npts) 
     661        Notebook $nb textRGB=(0,0,0),fstyle=0, text=str 
     662        sprintf str "Fitted range = [%d,%d] = %g < Q < %g\r",fitStart,fitEnd,dataXw(fitStart),dataXw(fitEnd) 
     663        Notebook $nb textRGB=(0,0,0),fstyle=0, text=str 
     664        sprintf str,"FitError = %s\t\tFitQuitReason = %s\r",W_ErrorMessage(FitErr),W_QuitMessage(FitQuit) 
     665        Notebook $nb textRGB=(65000,0,0),fstyle=1,text=str 
     666        Notebook $nb ruler=Normal 
     667         
     668        // insert graphs 
     669        Notebook $nb picture={$topGraph(0, 0, 400, 300), 0, 1}, text="\r" 
     670         
     671 
     672        //Notebook Report picture={Table1, 0, 0}, text="\r" 
     673         
     674        // show the top of the report 
     675        Notebook $nb  selection= {startOfFile, startOfFile},  findText={"", 1} 
     676         
     677        //save the notebook and the graphic file 
     678        if(yesSave) 
     679                String nameStr=CleanupName(func,0) 
     680                nameStr = nameStr[0,8]  //shorten the name 
     681                nameStr += "_"+dataname 
     682                //make sure the name is no more than 31 characters 
     683                namestr = namestr[0,30]         //if shorter than 31, this will NOT pad to 31 characters 
     684                Print "file saved as ",nameStr 
     685                SaveNotebook /O/P=home/S=2 $nb as nameStr 
     686                //save the graph separately as a PICT file, 2x screen 
     687                pictStr += nameStr 
     688                pictStr = pictStr[0,28]         //need a shorter name - why? 
     689//              DoWindow/F $topGraph 
     690                // E=-5 is png @screen resolution 
     691                // E=2 is PICT @2x screen resolution 
     692///             SavePICT /E=-5/O/P=home /I/W=(0,0,3,3) as pictStr 
     693                SavePICT /E=-5/O/P=home/WIN=$topGraph /W=(0,0,400,300) as pictStr 
     694        Endif 
     695         
     696        // ???maybe print the notebook too? 
     697End 
     698 
     699static Function/S W_ErrorMessage(code) 
     700        Variable code 
     701         
     702        switch (code) 
     703                case 0: 
     704                        return "No Error" 
     705                        break 
     706                case 3: //2^0 + 2^1 
     707                        return "Singular Matrix" 
     708                        break 
     709                case 5:         //(2^0 + 2^2) 
     710                        return "Out of Memory" 
     711                        break 
     712                case 9:         //(2^0 + 2^3) 
     713                        return "Func= NaN or Inf" 
     714                        break 
     715                default: 
     716                        return "Unknown error code "+num2str(code) 
     717        endswitch 
     718end 
     719 
     720static Function/S W_QuitMessage(code) 
     721        Variable code 
     722         
     723        switch (code) 
     724                case 0: 
     725                        return "No Error" 
     726                        break 
     727                case 1: 
     728                        return "Max iterations - re-run fit" 
     729                        break 
     730                case 2: 
     731                        return "User terminated fit" 
     732                        break 
     733                case 3: 
     734                        return "No decrease in chi-squared" 
     735                        break 
     736                default: 
     737                        return "Unknown Quit code "+num2str(code) 
     738        endswitch 
     739end 
     740 
  • sans/Analysis/branches/ajj_23APR07/IGOR_Package_Files/Put in User Procedures/SANS_Models_v3.00/USANS_SlitSmearing.ipf

    r145 r160  
    3838 
    3939        Variable/G USANS_m = EnterSlope() 
    40  
     40        if(USANS_m == 999) 
     41                Killwaves/Z $(basestr+"_res") 
     42                return(1)               //error 
     43        endif 
    4144        Variable tref = startMSTimer 
    4245        print "Calculating W1..." 
     
    6265        DoPrompt "Enter Slope", slope 
    6366                If (V_Flag)  
    64                         return -1 
     67                        return (999)            //return a bogus slope if the user canceled 
    6568                Endif    
    6669        print "slope=", slope 
Note: See TracChangeset for help on using the changeset viewer.