- Timestamp:
- Sep 12, 2008 9:25:36 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sans/Dev/trunk/NCNR_User_Procedures/USANS/LakeDesmearing_JB.ipf
r379 r404 54 54 // main entry routine 55 55 Proc Desmear() 56 57 SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder 58 56 59 //check for the correct data folder, initialize if necessary 57 60 // 58 if(DataFolderExists( "root:DSM") == 0)61 if(DataFolderExists($(USANSFolder+":DSM")) == 0) 59 62 Execute "Init_Desmearing()" 60 63 endif 61 64 62 65 //always initialize these 63 String/G root:DSM:gStr1= ""64 String/G root:DSM:gStr2= ""65 String/G root:DSM:gIterStr= ""66 String/G $(USANSFolder+":DSM:gStr1") = "" 67 String/G $(USANSFolder+":DSM:gStr2") = "" 68 String/G $(USANSFolder+":DSM:gIterStr") = "" 66 69 67 70 DoWindow/F Desmear_Graph … … 73 76 Proc Init_Desmearing() 74 77 //set up the folder(s) needed 75 NewDataFolder/O root:DSM76 NewDataFolder/O root:myGlobals//in case it wasn't created elsewhere77 78 String/G root:DSM:gCurFile=""79 80 Variable/G root:DSM:gMaxFastIter= 100 //max number of iter in Fast convergence81 Variable/G root:DSM:gMaxSlowIter= 1000082 83 Variable/G root:DSM:gNptsExtrap= 10 //points for high q extrapolation84 Variable/G root:DSM:gChi2Target= 1 //chi^2 target85 Variable/G root:DSM:gPowerM= -486 Variable/G root:DSM:gDqv= 0.117 //2005 measured slit height - see John87 Variable/G root:DSM:gNq= 188 Variable/G root:DSM:gS= 0 // global varaible for Midpnt()89 Variable/G root:DSM:gSmoothFac=0.0390 91 Variable/G root:DSM:gChi2Final= 0 //chi^2 final92 Variable/G root:DSM:gIterations= 0 //total number of iterations93 94 String/G root:DSM:gStr1= "" //information strings95 String/G root:DSM:gStr2= ""96 String/G root:DSM:gIterStr= ""97 Variable/G root:DSM:gChi2Smooth= 098 99 Variable/G root:DSM:gFreshMask=178 NewDataFolder/O $(USANSFolder+":DSM") 79 NewDataFolder/O $(USANSFolder+":myGlobals") //in case it wasn't created elsewhere 80 81 String/G $(USANSFolder+":DSM:gCurFile")="" 82 83 Variable/G $(USANSFolder+":DSM:gMaxFastIter") = 100 //max number of iter in Fast convergence 84 Variable/G $(USANSFolder+":DSM:gMaxSlowIter") = 10000 85 86 Variable/G $(USANSFolder+":DSM:gNptsExtrap") = 10 //points for high q extrapolation 87 Variable/G $(USANSFolder+":DSM:gChi2Target") = 1 //chi^2 target 88 Variable/G $(USANSFolder+":DSM:gPowerM") = -4 89 Variable/G $(USANSFolder+":DSM:gDqv") = 0.117 //2005 measured slit height - see John 90 Variable/G $(USANSFolder+":DSM:gNq") = 1 91 Variable/G $(USANSFolder+":DSM:gS") = 0 // global varaible for Midpnt() 92 Variable/G $(USANSFolder+":DSM:gSmoothFac")=0.03 93 94 Variable/G $(USANSFolder+":DSM:gChi2Final") = 0 //chi^2 final 95 Variable/G $(USANSFolder+":DSM:gIterations") = 0 //total number of iterations 96 97 String/G $(USANSFolder+":DSM:gStr1") = "" //information strings 98 String/G $(USANSFolder+":DSM:gStr2") = "" 99 String/G $(USANSFolder+":DSM:gIterStr") = "" 100 Variable/G $(USANSFolder+":DSM:gChi2Smooth") = 0 101 102 Variable/G $(USANSFolder+":DSM:gFreshMask")=1 100 103 End 101 104 … … 163 166 Variable m 164 167 Wave FW,Q_exp 165 166 NVAR dqv = root:DSM:gDqv 167 NVAR NN = root:DSM:gNq 168 169 SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder 170 171 NVAR dqv = $(USANSFolder+":DSM:gDqv") 172 NVAR NN = $(USANSFolder+":DSM:gNq") 168 173 169 174 // Calculate Remainder fractions and put into separate array. 170 175 Variable lower,ii,ss,jj 171 Duplicate/O Q_exp root:DSM:R_wave172 wave r_wave = root:DSM:R_wave176 Duplicate/O Q_exp $(USANSFolder+":DSM:R_wave") 177 wave r_wave = $(USANSFolder+":DSM:R_wave") 173 178 174 179 // Make/O/D/N=75 root:DSM:SS_save //debug … … 241 246 Function DU(ii,jj) 242 247 Variable ii,jj 243 244 Wave Q_exp = root:DSM:Q_exp 248 249 SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder 250 251 Wave Q_exp = $(USANSFolder+":DSM:Q_exp") 245 252 Variable DU 246 253 … … 259 266 Variable ii,jj 260 267 261 Wave Q_exp=root:DSM:Q_exp 268 SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder 269 270 Wave Q_exp=$(USANSFolder+":DSM:Q_exp") 262 271 Variable IG,UL,UU 263 272 … … 284 293 Variable ii,jj 285 294 295 SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder 296 286 297 Variable FF 287 NVAR dqv = root:DSM:gDqv298 NVAR dqv = $(USANSFolder+":DSM:gDqv") 288 299 289 300 FF = (1.0/dqv)*(0.5+HH(ii,jj)) … … 295 306 Variable ii,jj 296 307 308 SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder 309 297 310 Variable GG 298 NVAR dqv = root:DSM:gDqv311 NVAR dqv = $(USANSFolder+":DSM:gDqv") 299 312 300 313 GG = (1.0/dqv)*(0.5-HH(ii,jj)) … … 305 318 Variable ii,jj 306 319 307 Wave Q_exp=root:DSM:Q_exp 320 SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder 321 322 Wave Q_exp=$(USANSFolder+":DSM:Q_exp") 308 323 Variable HH 309 324 … … 316 331 Function CC(ii,jj) 317 332 Variable ii,jj 318 319 wave Q_exp = root:DSM:Q_exp 333 334 SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder 335 336 wave Q_exp = $(USANSFolder+":DSM:Q_exp") 320 337 Variable CC 321 338 … … 339 356 Function QROMO(A,B,qi,m) 340 357 Variable A,B,qi,m 358 359 SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder 341 360 342 361 Variable EPS,JMAX,JMAXP,KM,K … … 346 365 K=KM+1 347 366 348 Make/O/D/N=(JMAX) root:DSM:S_wave349 Make/O/D/N=(JMAX+1) root:DSM:H_wave350 wave S_wave= root:DSM:S_wave351 wave H_wave= root:DSM:H_wave367 Make/O/D/N=(JMAX) $(USANSFolder+":DSM:S_wave") 368 Make/O/D/N=(JMAX+1) $(USANSFolder+":DSM:H_wave") 369 wave S_wave=$(USANSFolder+":DSM:S_wave") 370 wave H_wave=$(USANSFolder+":DSM:H_wave") 352 371 S_wave=0 353 372 H_wave=0 … … 386 405 387 406 Variable ii,mm,nmax,ns,dif,den,ho,hp,wi,dift 407 408 SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder 388 409 389 410 NMAX=10 390 411 391 Make/O/D/N=(NMAX) root:DSM:Ci,root:DSM:Di392 wave Ci = root:DSM:Ci393 wave Di = root:DSM:Di412 Make/O/D/N=(NMAX) $(USANSFolder+":DSM:Ci"),$(USANSFolder+":DSM:Di") 413 wave Ci = $(USANSFolder+":DSM:Ci") 414 wave Di = $(USANSFolder+":DSM:Di") 394 415 395 416 NS=1 … … 438 459 439 460 Variable it,tnm,del,ddel,x,summ,jj 440 441 NVAR S_ret = root:DSM:gS 461 462 SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder 463 464 NVAR S_ret = $(USANSFolder+":DSM:gS") 442 465 443 466 IF (N == 0) … … 490 513 Variable lo,hi,dialog //=1 will present dialog for name 491 514 515 SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder 516 492 517 String termStr="\r\n" 493 String destStr = "root:DSM:"518 String destStr = USANSFolder+":DSM:" 494 519 String formatStr = "%15.6g %15.6g %15.6g %15.6g %15.6g %15.6g"+termStr 495 520 … … 543 568 String samStr="",dateStr="",str1,str2 544 569 545 NVAR m = root:DSM:gPowerM// power law exponent546 NVAR chiFinal = root:DSM:gChi2Final//chi^2 final547 NVAR iter = root:DSM:gIterations//total number of iterations570 NVAR m = $(USANSFolder+":DSM:gPowerM") // power law exponent 571 NVAR chiFinal = $(USANSFolder+":DSM:gChi2Final") //chi^2 final 572 NVAR iter = $(USANSFolder+":DSM:gIterations:") //total number of iterations 548 573 549 574 //get the number of spline passes from the wave note … … 584 609 Wave w 585 610 611 SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder 612 586 613 Variable num_extr=25 587 614 588 SetDataFolder root:DSM615 SetDataFolder $(USANSFolder+":DSM") 589 616 590 617 Make/O/D/N=(num_extr) extr_hqq,extr_hqi … … 614 641 Wave qw,iw,sw 615 642 Variable nbeg,nend,num_extr 643 644 SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder 616 645 617 646 Variable/G V_FitMaxIters=300 … … 624 653 // Print "num,num_new",num,num_new 625 654 626 SetDataFolder root:DSM655 SetDataFolder $(USANSFolder+":DSM") 627 656 Make/O/D/N=(num_new) Q_ext,I_ext,S_ext 628 657 … … 694 723 Wave qw,iw,sw 695 724 Variable nend 696 697 Setdatafolder root:DSM 725 726 SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder 727 728 Setdatafolder $(USANSFolder+":DSM") 698 729 699 730 // Wave extr_lqi=extr_lqi … … 742 773 743 774 Proc Desmear_Graph() 775 SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder 776 744 777 PauseUpdate; Silent 1 // building window... 745 778 Display /W=(5,44,408,558) /K=1 … … 770 803 CheckBox DSMControl_0b,help={"Toggle Log/Lin Q display"},value= 1 771 804 TitleBox DSMControl_0c,pos={120,37},size={104,19},font="Courier",fSize=10 772 TitleBox DSMControl_0c,variable= root:DSM:gStr1805 TitleBox DSMControl_0c,variable= $(USANSFolder+":DSM:gStr1") 773 806 //second message string not used currently 774 807 // TitleBox DSMControl_0d,pos={120,57},size={104,19},font="Courier",fSize=10 … … 797 830 SetVariable DSMControl_2b,pos={31,70},size={100,15},title="# of points" 798 831 SetVariable DSMControl_2b,help={"Set the number of points for the power-law extrapolation"} 799 SetVariable DSMControl_2b,limits={5,100,1},value= root:DSM:gNptsExtrap832 SetVariable DSMControl_2b,limits={5,100,1},value= $(USANSFolder+":DSM:gNptsExtrap") 800 833 SetVariable DSMControl_2b,disable=1 801 834 CheckBox DSMControl_2c,pos={157,45},size={105,14},proc=DSM_ExtrapolationCheckProc,title="Show Extrapolation" … … 805 838 SetVariable DSMControl_2d,help={"Power Law exponent from the fit = the DESMEARED slope - override as needed"} 806 839 SetVariable DSMControl_2d format="%5.2f" 807 SetVariable DSMControl_2d,limits={-inf,inf,0},value= root:DSM:gPowerM840 SetVariable DSMControl_2d,limits={-inf,inf,0},value= $(USANSFolder+":DSM:gPowerM") 808 841 SetVariable DSMControl_2d,disable=1 809 842 … … 830 863 SetVariable DSMControl_3f,help={"Smoothing factor for the smoothing spline"} 831 864 SetVariable DSMControl_3f format="%5.4f" 832 SetVariable DSMControl_3f,limits={0.01,2,0.01},value= root:DSM:gSmoothFac865 SetVariable DSMControl_3f,limits={0.01,2,0.01},value= $(USANSFolder+"DSM:gSmoothFac") 833 866 SetVariable DSMControl_3f,disable=1 834 867 CheckBox DSMControl_3g,pos={268,39},size={90,14},title="Log-scale smoothing?" … … 846 879 SetVariable DSMControl_4b,pos={35,63},size={120,15},title="Chi^2 target" 847 880 SetVariable DSMControl_4b,help={"Set the targetchi^2 for convergence (recommend chi^2=1)"} 848 SetVariable DSMControl_4b,limits={0,inf,0.1},value= root:DSM:gChi2Target881 SetVariable DSMControl_4b,limits={0,inf,0.1},value= $(USANSFolder+":DSM:gChi2Target") 849 882 SetVariable DSMControl_4b,disable=1 850 883 SetVariable DSMControl_4c,pos={35,35},size={80,15},title="dQv" 851 884 SetVariable DSMControl_4c,help={"Slit height as read in from the data file. 0.117 is the NIST value, override if necessary"} 852 SetVariable DSMControl_4c,limits={-inf,inf,0},value= root:DSM:gDqv885 SetVariable DSMControl_4c,limits={-inf,inf,0},value= $(USANSFolder+":DSM:gDqv") 853 886 SetVariable DSMControl_4c,disable=1 854 887 TitleBox DSMControl_4d,pos={160,37},size={104,19},font="Courier",fSize=10 855 TitleBox DSMControl_4d,variable= root:DSM:gIterStr888 TitleBox DSMControl_4d,variable= $(USANSFolder+":DSM:gIterStr") 856 889 TitleBox DSMControl_4d,disable=1 857 890 … … 912 945 913 946 Proc AppendSmeared() 914 SetDataFolder root:DSM 947 SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder 948 949 SetDataFolder $(USANSFolder+":DSM") 915 950 // if( strsearch(TraceNameList("Desmear_Graph", "", 1),"I_exp_orig",0,2) == -1) //Igor 5 916 951 if( strsearch(TraceNameList("Desmear_Graph", "", 1),"I_exp_orig",0) == -1) … … 927 962 TextBox/K/N=text1 928 963 // TextBox/C/N=text1/F=0/A=MT/E=2/X=5.50/Y=0.00 root:DSM:gCurFile //Igor 5 929 TextBox/C/N=text1/F=0/A=MT/E=1/X=5.50/Y=0.00 root:DSM:gCurFile964 TextBox/C/N=text1/F=0/A=MT/E=1/X=5.50/Y=0.00 $(USANSFolder+"DSM:gCurFile") 930 965 End 931 966 932 967 Proc AppendMask() 968 SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder 969 933 970 // if( strsearch(TraceNameList("Desmear_Graph", "", 1),"MaskData",0,2) == -1) //Igor 5 934 971 if( strsearch(TraceNameList("Desmear_Graph", "", 1),"MaskData",0) == -1) 935 SetDataFolder root:DSM:972 SetDataFolder $(USANSFolder+":DSM:") 936 973 AppendToGraph/W=Desmear_Graph MaskData vs Q_exp_orig 937 974 ModifyGraph mode(MaskData)=3,marker(MaskData)=8,msize(MaskData)=2.5,opaque(MaskData)=1 … … 942 979 943 980 Proc AppendSmoothed() 981 SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder 982 944 983 // if( strsearch(TraceNameList("Desmear_Graph", "", 1),"I_smth",0,2) == -1) //Igor 5 945 984 if( strsearch(TraceNameList("Desmear_Graph", "", 1),"I_smth",0) == -1) 946 SetDataFolder root:DSM:985 SetDataFolder $(USANSFolder+":DSM:") 947 986 AppendToGraph/W=Desmear_Graph I_smth vs Q_smth 948 987 ModifyGraph/W=Desmear_Graph rgb(I_smth)=(3,52428,1),lsize(I_smth)=2 … … 952 991 953 992 Function RemoveSmoothed() 954 SetDataFolder root:DSM: 993 SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder 994 995 SetDataFolder $(USANSFolder+":DSM:") 955 996 RemoveFromGraph/W=Desmear_Graph/Z I_smth 956 997 setdatafolder root: … … 958 999 959 1000 Function RemoveMask() 960 SetDataFolder root:DSM: 1001 SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder 1002 1003 SetDataFolder $(USANSFolder+":DSM:") 961 1004 RemoveFromGraph/W=Desmear_Graph/Z MaskData 962 1005 setdatafolder root: … … 964 1007 965 1008 Proc AppendDesmeared() 1009 SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder 1010 966 1011 // if( strsearch(TraceNameList("Desmear_Graph", "", 1),"I_dsm",0,2) == -1) //Igor 5 967 1012 if( strsearch(TraceNameList("Desmear_Graph", "", 1),"I_dsm",0) == -1) 968 SetDataFolder root:DSM:1013 SetDataFolder $(USANSFolder+":DSM:") 969 1014 AppendToGraph/W=Desmear_Graph I_dsm vs Q_dsm 970 1015 ModifyGraph mode(I_dsm)=3,marker(I_dsm)=19 … … 976 1021 977 1022 Function RemoveDesmeared() 978 SetDataFolder root:DSM: 1023 SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder 1024 1025 SetDataFolder $(USANSFolder+":DSM:") 979 1026 RemoveFromGraph/W=Desmear_Graph/Z I_dsm 980 1027 setdatafolder root: … … 982 1029 983 1030 Function AppendExtrapolation() 1031 SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder 1032 984 1033 // if( strsearch(TraceNameList("Desmear_Graph", "", 1),"extr_hqi",0,2) == -1) //Igor 5 985 1034 if( strsearch(TraceNameList("Desmear_Graph", "", 1),"extr_hqi",0) == -1) 986 SetDataFolder root:DSM:1035 SetDataFolder $(USANSFolder+":DSM:") 987 1036 AppendToGraph/W=Desmear_Graph extr_hqi vs extr_hqq 988 1037 ModifyGraph/W=Desmear_Graph lSize(extr_hqi)=2 … … 992 1041 993 1042 Function RemoveExtrapolation() 994 SetDataFolder root:DSM: 1043 SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder 1044 1045 SetDataFolder $(USANSFolder+":DSM:") 995 1046 RemoveFromGraph/W=Desmear_Graph/Z extr_hqi 996 1047 setdatafolder root: … … 1007 1058 String ctrlName 1008 1059 1060 SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder 1061 1009 1062 String qStr,iStr,sStr,sqStr 1010 1063 Variable nq,dqv,numBad,val … … 1016 1069 Execute "U_LoadOneDDataWithName(\"\")" 1017 1070 //define the waves that the smoothing will be looking for... 1018 SVAR fname = root:myGlobals:gLastFileName//this changes as any data is loaded1019 SVAR curFile = root:DSM:gCurFile//keep this for title, save1071 SVAR fname = $(USANSFolder+":myGlobals:gLastFileName") //this changes as any data is loaded 1072 SVAR curFile = $(USANSFolder+":DSM:gCurFile") //keep this for title, save 1020 1073 curFile = fname 1021 1074 … … 1025 1078 sqStr = CleanupName((fName + "sq"),0) //the sq-wave, which should have -dQv as the elements 1026 1079 1027 Duplicate/O $qStr root:DSM:Q_exp //root:DSM:Q_exp_orig1028 Duplicate/O $iStr root:DSM:I_exp //root:DSM:I_exp_orig1029 Duplicate/O $sStr root:DSM:S_exp //root:DSM:S_exp_orig1030 wave Q_exp = root:DSM:Q_exp1031 Wave I_exp = root:DSM:I_exp1032 Wave S_exp = root:DSM:S_exp1080 Duplicate/O $qStr $(USANSFolder+":DSM:Q_exp ") 1081 Duplicate/O $iStr $(USANSFolder+":DSM:I_exp") 1082 Duplicate/O $sStr $(USANSFolder+":DSM:S_exp ") 1083 wave Q_exp = $(USANSFolder+":DSM:Q_exp") 1084 Wave I_exp = $(USANSFolder+":DSM:I_exp") 1085 Wave S_exp = $(USANSFolder+":DSM:S_exp") 1033 1086 Wave/Z sigQ = $sqStr 1034 1087 … … 1036 1089 // ? and trim the low q to be >= 3.0e-5 (1/A), below this USANS is not reliable. 1037 1090 NumBad = RemoveBadQPoints(Q_exp,I_exp,S_exp,0) 1038 SVAR str1 = root:DSM:gStr11091 SVAR str1 = $(USANSFolder+":DSM:gStr1") 1039 1092 sprintf str1,"%d negative q-values were removed",numBad 1040 1093 … … 1045 1098 // sprintf str2,"%d q-values below q = %g were removed",numBad,val 1046 1099 1047 Duplicate/O root:DSM:Q_exp root:DSM:Q_exp_orig1048 Duplicate/O root:DSM:I_exp root:DSM:I_exp_orig1049 Duplicate/O root:DSM:S_exp root:DSM:S_exp_orig1050 wave I_exp_orig = root:DSM:I_exp_orig1051 1052 nq = numpnts( root:DSM:Q_exp)1100 Duplicate/O $(USANSFolder+":DSM:Q_exp") $(USANSFolder+":DSM:Q_exp_orig") 1101 Duplicate/O $(USANSFolder+":DSM:I_exp") $(USANSFolder+":DSM:I_exp_orig") 1102 Duplicate/O $(USANSFolder+":DSM:S_exp") $(USANSFolder+":DSM:S_exp_orig") 1103 wave I_exp_orig = $(USANSFolder+":DSM:I_exp_orig") 1104 1105 nq = numpnts($(USANSFolder+":DSM:Q_exp")) 1053 1106 1054 1107 if(WaveExists(sigQ)) //try to read dQv … … 1060 1113 DoAlert 0,"Could not find dQv in the data file - using " + num2str(dqv) 1061 1114 endif 1062 NVAR gDqv = root:DSM:gDqv//needs to be global for Weights_L()1063 NVAR gNq = root:DSM:gNq1115 NVAR gDqv = $(USANSFolder+":DSM:gDqv") //needs to be global for Weights_L() 1116 NVAR gNq = $(USANSFolder+":DSM:gNq") 1064 1117 //reset the globals 1065 1118 gDqv = dqv … … 1132 1185 String ctrlName 1133 1186 1187 SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder 1188 1134 1189 // Variable aExists= strlen(CsrInfo(A)) > 0 //Igor 5 1135 1190 Variable aExists= strlen(CsrWave(A)) > 0 //Igor 4 … … 1138 1193 endif 1139 1194 1140 Duplicate/O root:DSM:Q_exp_orig,root:DSM:Q_msk1141 Duplicate/O root:DSM:I_exp_orig,root:DSM:I_msk1142 Duplicate/O root:DSM:S_exp_orig,root:DSM:S_msk1143 Wave Q_msk= root:DSM:Q_msk1144 Wave I_msk= root:DSM:I_msk1145 Wave S_msk= root:DSM:S_msk1195 Duplicate/O $(USANSFolder+":DSM:Q_exp_orig"),$(USANSFolder+":DSM:Q_msk") 1196 Duplicate/O $(USANSFolder+":DSM:I_exp_orig"),$(USANSFolder+":DSM:I_msk") 1197 Duplicate/O $(USANSFolder+":DSM:S_exp_orig"),$(USANSFolder+":DSM:S_msk") 1198 Wave Q_msk=$(USANSFolder+":DSM:Q_msk") 1199 Wave I_msk=$(USANSFolder+":DSM:I_msk") 1200 Wave S_msk=$(USANSFolder+":DSM:S_msk") 1146 1201 1147 1202 //finish up - trim the data sets and reassign the working set 1148 Wave MaskData= root:DSM:MaskData1203 Wave MaskData=$(USANSFolder+":DSM:MaskData") 1149 1204 1150 1205 RemoveMaskedPoints(MaskData,Q_msk,I_msk,S_msk) 1151 1206 1152 1207 //reset the number of points 1153 NVAR gNq = root:DSM:gNq1208 NVAR gNq = $(USANSFolder+":DSM:gNq") 1154 1209 gNq = numpnts(Q_msk) 1155 1210 … … 1165 1220 String ctrlName 1166 1221 1167 Wave MaskData=root:DSM:MaskData 1222 SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder 1223 1224 Wave MaskData=$(USANSFolder+":DSM:MaskData") 1168 1225 MaskData = NaN 1169 1226 … … 1177 1234 String ctrlName 1178 1235 1179 Wave data=root:DSM:I_exp_orig 1236 SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder 1237 1238 Wave data=$(USANSFolder+":DSM:I_exp_orig") 1180 1239 1181 1240 // Variable aExists= strlen(CsrInfo(A)) > 0 //Igor 5 … … 1184 1243 // need to get rid of old smoothed data if data is re-masked 1185 1244 Execute "RemoveSmoothed()" 1186 SetDataFolder root:DSM1245 SetDataFolder $(USANSFolder+":DSM") 1187 1246 Killwaves/Z I_smth,Q_smth,S_smth 1188 SetDataFolder root:1189 1247 1190 1248 if(aExists) //mask the selected point 1191 1249 // toggle NaN (keep) or Data value (= masked) 1192 Wave MaskData =root:DSM:MaskData1250 Wave MaskData 1193 1251 MaskData[pcsr(A)] = (numType(MaskData[pcsr(A)])==0) ? NaN : data[pcsr(A)] //if NaN, doesn't plot 1194 1252 else … … 1196 1254 ShowInfo 1197 1255 //if the mask wave does not exist, make one 1198 if(exists("root:DSM:MaskData") != 1) 1199 Duplicate/O root:DSM:Q_exp_orig root:DSM:MaskData 1200 Wave MaskData=root:DSM:MaskData 1256 if(exists("MaskData") != 1) 1257 Duplicate/O Q_exp_orig MaskData 1201 1258 MaskData = NaN //use all data 1202 1259 endif 1203 1260 Execute "AppendMask()" 1204 1261 endif 1205 1262 1263 SetDataFolder root: 1264 1206 1265 return(0) 1207 1266 End … … 1212 1271 Function DSM_MaskLTCursor(ctrlName) : ButtonControl 1213 1272 String ctrlName 1214 1215 Wave data=root:DSM:I_exp_orig 1273 1274 SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder 1275 1276 // Variable aExists= strlen(CsrInfo(A)) > 0 //Igor 5 1277 Variable aExists= strlen(CsrWave(A)) > 0 //Igor 4 1278 1279 if(!aExists) 1280 return(1) 1281 endif 1282 // need to get rid of old smoothed data if data is re-masked 1283 Execute "RemoveSmoothed()" 1284 SetDataFolder $(USANSFolder+":DSM") 1285 Killwaves/Z I_smth,Q_smth,S_smth 1286 1287 Wave data=I_exp_orig 1288 1289 Variable pt,ii 1290 pt = pcsr(A) 1291 for(ii=pt;ii>=0;ii-=1) 1292 // toggle NaN (keep) or Data value (= masked) 1293 Wave MaskData 1294 MaskData[ii] = (numType(MaskData[ii])==0) ? NaN : data[ii] //if NaN, doesn't plot 1295 endfor 1296 1297 SetDataFolder root: 1298 return(0) 1299 End 1300 1301 // when the mask button is pressed, A must be on the graph 1302 // Displays MaskData wave on the graph 1303 // 1304 Function DSM_MaskGTCursor(ctrlName) : ButtonControl 1305 String ctrlName 1306 1307 SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder 1308 1216 1309 1217 1310 // Variable aExists= strlen(CsrInfo(A)) > 0 //Igor 5 … … 1225 1318 SetDataFolder root:DSM 1226 1319 Killwaves/Z I_smth,Q_smth,S_smth 1227 SetDataFolder root: 1228 1229 Wave MaskData=root:DSM:MaskData 1230 Variable pt,ii 1231 pt = pcsr(A) 1232 for(ii=pt;ii>=0;ii-=1) 1233 // toggle NaN (keep) or Data value (= masked) 1234 MaskData[ii] = (numType(MaskData[ii])==0) ? NaN : data[ii] //if NaN, doesn't plot 1235 endfor 1236 return(0) 1237 End 1238 1239 // when the mask button is pressed, A must be on the graph 1240 // Displays MaskData wave on the graph 1241 // 1242 Function DSM_MaskGTCursor(ctrlName) : ButtonControl 1243 String ctrlName 1244 1245 Wave data=root:DSM:I_exp_orig 1246 1247 // Variable aExists= strlen(CsrInfo(A)) > 0 //Igor 5 1248 Variable aExists= strlen(CsrWave(A)) > 0 //Igor 4 1249 1250 if(!aExists) 1251 return(1) 1252 endif 1253 // need to get rid of old smoothed data if data is re-masked 1254 Execute "RemoveSmoothed()" 1255 SetDataFolder root:DSM 1256 Killwaves/Z I_smth,Q_smth,S_smth 1257 SetDataFolder root: 1258 1259 Wave MaskData=root:DSM:MaskData 1320 1321 Wave data=I_exp_orig 1322 1260 1323 Variable pt,ii,endPt 1261 1324 endPt=numpnts(MaskData) … … 1263 1326 for(ii=pt;ii<endPt;ii+=1) 1264 1327 // toggle NaN (keep) or Data value (= masked) 1328 Wave MaskData 1265 1329 MaskData[ii] = (numType(MaskData[ii])==0) ? NaN : data[ii] //if NaN, doesn't plot 1266 1330 endfor 1331 1332 SetDataFolder root: 1333 1267 1334 return(0) 1268 1335 End 1269 1336 1270 1337 Function CleanUpJunk() 1338 SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder 1339 1271 1340 // clean up the old junk on the graph, /Z for no error 1272 1341 Execute "RemoveExtrapolation()" … … 1279 1348 1280 1349 //always initialize these 1281 String/G root:DSM:gStr1= ""1282 String/G root:DSM:gStr2= ""1283 String/G root:DSM:gIterStr= ""1350 String/G $(USANSFolder+":DSM:gStr1") = "" 1351 String/G $(USANSFolder+":DSM:gStr2") = "" 1352 String/G $(USANSFolder+":DSM:gIterStr") = "" 1284 1353 1285 1354 // clean up the old waves from smoothing and desmearing steps 1286 SetDataFolder root:DSM1355 SetDataFolder $(USANSFolder+":DSM") 1287 1356 Killwaves/Z I_smth,I_dsm,I_dsm_sm,Q_smth,Q_dsm,S_smth,S_dsm,Yi_SS,Yq_SS 1288 1357 Killwaves/Z Weights,FW,R_wave,S_wave,H_wave,Di,Ci … … 1302 1371 String ctrlName 1303 1372 1304 NVAR nend = root:DSM:gNptsExtrap 1305 NVAR m_pred = root:DSM:gPowerM 1306 1307 SetDataFolder root:DSM 1373 SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder 1374 1375 NVAR nend = $(USANSFolder+":DSM:gNptsExtrap") 1376 NVAR m_pred = $(USANSFolder+":DSM:gPowerM") 1377 1378 SetDataFolder $(USANSFolder+":DSM") 1308 1379 //use masked data if it exists 1309 1380 if(exists("I_msk")==1 && exists("Q_msk")==1 && exists("S_msk")==1) 1310 wave Qw = root:DSM:Q_msk1311 Wave Iw = root:DSM:I_msk1312 Wave Sw = root:DSM:S_msk1381 wave Qw = $(USANSFolder+":DSM:Q_msk") 1382 Wave Iw = $(USANSFolder+":DSM:I_msk") 1383 Wave Sw = $(USANSFolder+":DSM:S_msk") 1313 1384 else 1314 1385 //start from the "_exp" waves 1315 1386 if(exists("I_exp")==1 && exists("Q_exp")==1 && exists("S_exp")==1) 1316 wave Qw = root:DSM:Q_exp1317 Wave Iw = root:DSM:I_exp1318 Wave Sw = root:DSM:S_exp1387 wave Qw = $(USANSFolder+":DSM:Q_exp") 1388 Wave Iw = $(USANSFolder+":DSM:I_exp") 1389 Wave Sw = $(USANSFolder+":DSM:S_exp") 1319 1390 endif 1320 1391 endif … … 1347 1418 String ctrlName 1348 1419 1349 SetDataFolder root:DSM 1420 SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder 1421 1422 SetDataFolder $(USANSFolder+":DSM") 1350 1423 1351 1424 Variable ii,new_n,pass,nq_ext,offset,doLog=1 … … 1362 1435 //start from the "msk", creating smth waves 1363 1436 if(exists("I_msk")==1 && exists("Q_msk")==1 && exists("S_msk")==1) 1364 wave Q_msk = root:DSM:Q_msk 1365 Wave I_msk = root:DSM:I_msk 1366 Wave S_msk = root:DSM:S_msk 1437 wave Q_msk,I_msk,S_msk 1367 1438 Duplicate/O I_msk,I_smth,Q_smth,S_smth 1368 1439 I_smth = I_msk … … 1372 1443 //start from the "_exp" waves 1373 1444 if(exists("I_exp")==1 && exists("Q_exp")==1 && exists("S_exp")==1) 1374 wave Q_exp = root:DSM:Q_exp 1375 Wave I_exp = root:DSM:I_exp 1376 Wave S_exp = root:DSM:S_exp 1445 wave Q_exp,I_exp,S_exp 1377 1446 Duplicate/O I_exp,I_smth,Q_smth,S_smth 1378 1447 I_smth = I_exp … … 1383 1452 endif 1384 1453 1385 wave Q_smth = root:DSM:Q_smth 1386 Wave I_smth = root:DSM:I_smth 1387 Wave S_smth = root:DSM:S_smth 1454 wave Q_smth,I_smth,S_smth 1388 1455 1389 1456 // extend the data to avoid end effects … … 1399 1466 1400 1467 //whether extending or not, the working data is "_ext", set by ExtendToSmooth() 1401 setDataFolder root:DSM 1402 wave Q_ext = root:DSM:Q_ext 1403 Wave I_ext = root:DSM:I_ext 1404 Wave S_ext = root:DSM:S_ext 1468 SetDataFolder $(USANSFolder+":DSM") 1469 wave Q_ext,I_ext ,S_ext 1405 1470 1406 1471 noteStr=note(I_smth) … … 1415 1480 if(doLog) 1416 1481 //convert to log scale 1417 Duplicate/O I_ext root:DSM:I_log,root:DSM:I_log_err 1418 Wave I_log = root:DSM:I_log 1419 Wave I_log_err = root:DSM:I_log_err 1482 Duplicate/O I_ext I_log,I_log_err 1483 Wave I_log ,I_log_err 1420 1484 I_log = log(I_ext) 1421 1485 WaveStats/Q I_log … … 1441 1505 endif 1442 1506 1443 NVAR sParam = root:DSM:gSmoothFac1507 NVAR sParam = $(USANSFolder+":DSM:gSmoothFac") 1444 1508 1445 1509 ControlInfo/W=Desmear_Graph DSMControl_3c //SSCheck … … 1490 1554 1491 1555 //reset the global 1492 NVAR gNq = root:DSM:gNq1556 NVAR gNq = $(USANSFolder+":DSM:gNq") 1493 1557 gNq = nq 1494 1558 //report the chi^2 difference between the smoothed curve and the experimental data … … 1506 1570 Function DSM_SmoothUndoButtonProc(ctrlName) : ButtonControl 1507 1571 String ctrlName 1572 1573 SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder 1508 1574 1509 1575 Execute "RemoveSmoothed()" 1510 SetDataFolder root:DSM1576 SetDataFolder $(USANSFolder+":DSM") 1511 1577 Killwaves/Z I_smth,Q_smth,S_smth,Q_ext,I_ext,S_ext,Yi_SS,Yq_SS 1512 1578 SetDataFolder root: … … 1518 1584 Wave I_smth 1519 1585 1586 SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder 1587 1520 1588 //start from the "msk", if they exist 1521 1589 if(exists("I_msk")==1 && exists("Q_msk")==1 && exists("S_msk")==1) 1522 Wave iw = root:DSM:I_msk1523 Wave sw = root:DSM:S_msk1590 Wave iw = $(USANSFolder+":DSM:I_msk") 1591 Wave sw = $(USANSFolder+":DSM:S_msk") 1524 1592 else 1525 1593 //start from the "_exp" waves 1526 1594 if(exists("I_exp")==1 && exists("Q_exp")==1 && exists("S_exp")==1) 1527 Wave iw = root:DSM:I_exp1528 Wave sw = root:DSM:S_exp1595 Wave iw = $(USANSFolder+":DSM:I_exp") 1596 Wave sw = $(USANSFolder+":DSM:S_exp") 1529 1597 endif 1530 1598 endif … … 1547 1615 String ctrlName 1548 1616 1617 SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder 1618 1549 1619 String saveStr 1550 SVAR curFile = root:DSM:gCurFile1620 SVAR curFile = $(USANSFolder+":DSM:gCurFile") 1551 1621 saveStr = CleanupName((curFile),0) //the output filename 1552 1622 // … … 1600 1670 String ctrlName 1601 1671 1602 SetDataFolder root:DSM 1672 SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder 1673 1674 SetDataFolder $(USANSFolder+":DSM") 1603 1675 if(exists("I_smth")==1 && exists("Q_smth")==1 && exists("S_smth")==1) 1604 wave Q_smth = root:DSM:Q_smth 1605 Wave I_smth = root:DSM:I_smth 1606 Wave S_smth = root:DSM:S_smth 1676 wave Q_smth , I_smth ,S_smth 1607 1677 Duplicate/O I_smth,I_work,Q_work,S_work 1608 1678 I_work = I_smth … … 1612 1682 //start from the "msk", creating work waves 1613 1683 if(exists("I_msk")==1 && exists("Q_msk")==1 && exists("S_msk")==1) 1614 wave Q_msk = root:DSM:Q_msk 1615 Wave I_msk = root:DSM:I_msk 1616 Wave S_msk = root:DSM:S_msk 1684 wave Q_msk,I_msk,S_msk 1617 1685 Duplicate/O I_msk,I_work,Q_work,S_work 1618 1686 I_work = I_msk … … 1622 1690 //start from the "_exp" waves 1623 1691 if(exists("I_exp")==1 && exists("Q_exp")==1 && exists("S_exp")==1) 1624 wave Q_exp = root:DSM:Q_exp 1625 Wave I_exp = root:DSM:I_exp 1626 Wave S_exp = root:DSM:S_exp 1692 wave Q_exp,I_exp,S_exp 1627 1693 Duplicate/O I_exp,I_work,Q_work,S_work 1628 1694 I_work = I_exp … … 1632 1698 endif 1633 1699 endif 1634 SetDataFolder root:1635 1636 NVAR nq = root:DSM:gNq1637 NVAR m = root:DSM:gPowerM1638 NVAR chi2_target = root:DSM:gChi2Target1639 NVAR maxFastIter = root:DSM:gMaxFastIter1640 NVAR maxSlowIter = root:DSM:gMaxSlowIter1700 //SetDataFolder root: 1701 1702 NVAR nq = gNq 1703 NVAR m = gPowerM 1704 NVAR chi2_target = gChi2Target 1705 NVAR maxFastIter = gMaxFastIter 1706 NVAR maxSlowIter = gMaxSlowIter 1641 1707 1642 1708 // SET WEIGHTING OF EXPERIMENTAL DATA. 1643 Duplicate/O Q_work root:DSM:weights1644 Wave weights = root:DSM:weights1709 Duplicate/O Q_work weights 1710 Wave weights = weights 1645 1711 weights = 1/S_work^2 1646 1712 1647 1713 // calculate weighting array for smearing of data 1648 Make/O/D/N=(nq,nq) root:DSM:FW1649 Wave FW = root:DSM:FW1714 Make/O/D/N=(nq,nq) FW 1715 Wave FW 1650 1716 Weights_L(m,FW,Q_work) 1651 1717 … … 1655 1721 // y_old = I_old, y_new = I_dsm, I_dsm_sm = ys_new, 1656 1722 // duplicate preserves the wave note! 1657 Duplicate/O I_work root:DSM:I_old,root:DSM:Is_old,root:DSM:I_dsm,root:DSM:I_dsm_sm 1658 Duplicate/O Q_work root:DSM:Q_dsm,root:DSM:S_dsm //sets Q_dsm correctly 1659 wave S_dsm = root:DSM:S_dsm //set correctly at end of this function 1660 wave I_old = root:DSM:I_old 1661 wave Is_old = root:DSM:Is_old 1662 wave I_dsm = root:DSM:I_dsm 1663 wave I_dsm_sm = root:DSM:I_dsm_sm 1723 Duplicate/O I_work I_old,Is_old,root:DSM:I_dsm,root:DSM:I_dsm_sm 1724 Duplicate/O Q_work Q_dsm,S_dsm //sets Q_dsm correctly 1725 wave S_dsm,I_old,Is_old,I_dsm,I_dsm_sm 1664 1726 I_old = I_work 1665 1727 Is_old = 0 … … 1706 1768 Execute "AppendDesmeared()" 1707 1769 DoUpdate 1708 1770 SetDataFolder $(USANSFolder+":DSM") 1771 1772 1709 1773 // step (6) - refine the desmearing using slow convergence 1710 1774 Print "Starting slow convergence..... " … … 1745 1809 1746 1810 // adjust the error 1747 SetDataFolder root:DSM1811 SetDataFolder $(USANSFolder+":DSM") 1748 1812 Duplicate/O S_work err 1749 1813 S_dsm = abs(err/I_work*I_dsm) //proportional error … … 1751 1815 // S_dsm = S_Work 1752 1816 1753 NVAR gChi = root:DSM:gChi2Final //chi^2 final1754 NVAR gIter = root:DSM:gIterations //total number of iterations1817 NVAR gChi = gChi2Final //chi^2 final 1818 NVAR gIter = gIterations //total number of iterations 1755 1819 gChi = chi2_new 1756 1820 gIter = Iter 1757 1821 1758 SVAR str = root:DSM:gIterStr1822 SVAR str = gIterStr 1759 1823 sprintf str,"%d iterations required",iter 1760 1824 … … 1765 1829 Function DSM_RevertButtonProc(ctrlName) : ButtonControl 1766 1830 String ctrlName 1767 1831 1832 SVAR USANSFolder = root:Packages:NIST:USANS:Globals:gUSANSFolder 1833 1834 1768 1835 CleanUpJunk() 1769 1836 1837 SetDataFolder $(USANSFolder+":DSM") 1838 1770 1839 //reset the working waves to the original 1771 wave Q_exp_orig = root:DSM:Q_exp_orig 1772 wave I_exp_orig = root:DSM:I_exp_orig 1773 wave S_exp_orig = root:DSM:S_exp_orig 1774 1775 Duplicate/O Q_exp_orig root:DSM:Q_exp 1776 Duplicate/O I_exp_orig root:DSM:I_exp 1777 Duplicate/O S_exp_orig root:DSM:S_exp 1840 wave Q_exp_orig,I_exp_orig,S_exp_orig 1841 1842 Duplicate/O Q_exp_orig Q_exp 1843 Duplicate/O I_exp_orig I_exp 1844 Duplicate/O S_exp_orig S_exp 1778 1845 // kill the data folder 1779 1846 // re-initialize? 1780 1847 1848 SetDataFolder root: 1849 1781 1850 return(0) 1782 1851 End
Note: See TracChangeset
for help on using the changeset viewer.