//Dec. 3, 2006. // ================================================================== // ------------------------------------------------------------------------------------------------------------------------------------ // Jae-Hie J. Cho, Gregory S. Smith, and William A. Hamilton // -name: NRefleCal // -This program is for Low-Q nuetron reflectivity simulation and data fitting // -We are not responsible for any incorrections of this program. // ------------------------------------------------------------------------------------------------------------------------------------ // ================================================================== // ***Never remove or change the letters above. #pragma version = 4.1 #pragma rtGlobals=1 Picture nbutton ASCII85Begin M,6r;%14!\!!!!.8Ou6I!!!#8!!!!O#Qau+!$3o\S,`Nh&TgHDFAm*iFE_/6AH5;7DfQssEc39jTBQ =U+94u$5u`*!c$ae\PZ?H:F3]'ce4dtp;C@_T"9P8uV$SVPCtMf$=4(#lXfJ(2e^_(>Y&.7Z?;OM'@ fZ_s,m4L)O?VpX-WAlJcL6f:+tFGarI3XPnIJmnp!.p0rLBdX#Lji/K`;Mf`X#uQ!60+qr0Mlo^B]F B&:EuNPVPkas2XRg3ab8c63+e;a:5Q!lg$-`:Le9(ku/9]\VtnQllC+CL&ZZ3&WB.0+ruBsi?$^b`kS4tkcj2Qr6ar(F#LAopli4"@%Ypa$@SI>_qIJ_H.fCYk:RA+5oh]:)R!!($S=.nX;ds/O+YR"$pj Rm+>O2hUC.16$gTV!n]=;5l\nN_nRpU%,1LH<%g/=&gsV]5sc_JqJl3ik*&8jt=DhrJcTEM8ca10Mh #;5sPa=?m+.)9)q*TG2kNg#<9M,#WG([CKrId_669$[^.o1rC?jS-Ae<84$'p<3paQ^;@0 nqo&d=VNRj@#S&b9.&1k<0"pt=j[`Lg9i`\jf:8CKb&e",$P5u\;\BCZ+H_[PR$-_F"[XDG5%]3!0pA0=fh>6Pm ?b/0!$P_T54X448J4@GlFOe>KM`n`rgD@]KM7mM%E?umDgX.NUcG3`/?<5Xk/;Y;`rNtG\4?#Uf)q. W7&??j#nG)9iB5d=4,`]dSCB4dmg\^nG4\KQUQ4q>/+sb#<&T3NBB"1\MP-t!!5hp#jWDR$849=1!" _P)Ar?S/)NG@[8Z\o%kECr3hH@^?hD]>BGO/GDbD"AYg=rZPGO,5+E]gK+!2X)08M1gGPKi:PEGd_] J2B,PG44k\q6"Efn?L#Eg$Q4ig@uQR&X[eLWE:rU%W`Q9^@rBj8Pq1<(*LUK8r>/aMWug4mVidkT32ml@&sKc2n$o^ g_:F4Hj%>=n`c;JrA='`OI:RbQX=Y;_QrM2,3JQ]t@Z7o$rEY7f!!S1:j31bRB%^;XW3MZ9(>cJ_=M )&Qr^:Js$/Sgn$u9%3J+OO37TM%shr"1R4'cX9EF92Vs$7Pdg2lcIF,4Z+f01-XbTo)&I`tq`Ve'JP #1USR(c@_+=c%X4XS;.p63Xo0:7mk7E[2_8)XH"Q2f&clp;SLTn3Uk\R?3p$!WYsDRToYV&VrjZSo_ H4p(>j#WKYTW,HQ_)qs(4o?145+#![BRNiHPos7(Nt3F60(?$#s[I7ma,m3V#6lV"FiS#g`$1h.L9K UO!.b14rWX=3]>mbG\%+Y8m:NaQN+a&,]Ih6=.cUfeRt:"f?1p*a5m.g=dH<-59%ERBGn MjTOW#Y247CK),R%Si?88B5!!Ar&F$;nXRSP[pa^VSmBd$e$G+-Bf2;8q+*&EhIc$?mb@cm;WicdCf GQ1eX,k1UN!##;3JsAhm'N5$/c"YHbK;o\5>B_gcVdl4#!>nF_\&I[J9l4UfkTjImhE>ms`pmqFer'/9M*9 h@F"XOCX\Kb5_g",.G`:]Z5AP`?Ol46="T[3U;H_\a;5+g;=jih=FTJ&ASdrWAWkF=QX@#0:$6#B2-qrO02=fi06r;lF*@iK@Rl03Q$l+P-ScN MEY?jB6?NQp)155b[#;ue$fWU]f9l(;j7![If8o5`Wq>[)=$WEF,*3cOk&&0rul8FClrH0:YiX/@"S 46nG4kj]0JlMfq8/ul0Reb5EOif_0KWX@$f12#5O6?4QH:*a'mqI(4NSgOdP[qB=+Zd1kb20"f>h=m?QFk:cf'g!BnI8QpTmA^W_s9+L a;D9pVZt6f9C^(5rV&R``2\T=-V%&c5VM3W!Ds_.(8mDn%JPbdb6iOY?o/,)3aphZaQ_!ok1lgkFH= ZED0D)Tu?QD0FUq``YbJ0!Q#*c`:5rY87sIb$qFM!Ts*)>X4HA_Z=j"g=_F9?hc7GZRkOB:\>Wg-Lk B/i3J,K;QJ,Urs7dE1`d<=^!W[@pOS/-J'3%K2fk/bs7iPBs,NO4->gG[S?Bl(c`Qb2-G[3S6'5\gEo\FM"Ok"20W$=#d2PZ.#8'@(^LfYJpGM;WbSP+)<2\SNiI-OoZ:!+?: RY,i60Y1(8MaP<1rQ&s8(?mTiGi.Q3.5%-'n7ts7X%=hP&f`u C6>G#hun#,FTe%[e/*sE7LV)"1;TV'cgPdigV)g:nbqG;]C3Zu3B[m;Z=Uq_lID5%5&a T>Z'-rE(8P]"XAE3C(h6F9JcGk5"T\_R'\Q;?U`4K@jRqVHNZX[jY1s[ddqu_L[]PQm1Wmasn+c'=m =q'6?%j]gXd5cam!eBac>.;HhRKs-5QjUYF?24Z00``&F/k?pU]*M'@plPIJcJM>4\n;mprY*4OXL3 K%mE4R4EThaa\.(a-t2_D>Q38OdNGb?_Z*pF/2hf%kXnOXf[TpV-/)I]M/T##5."O90cim1Sg!X,8P\c7'a[&r/r=(h;E?CN!nAo@+0 CmIt\]"&8h.+9<#qo.p\.mF,-LUUg[P@^B\.W[^"cH9djNJcUB"N^Du/Qha!B#0eWr!<-qTJm VJ3nj8p(fQZ*qKQs(:o"_U3o\Y(p0Pt"X,EMWnmSR$:/_MrCaURAnn,PuZ#!a!KN?3;7pW@2];\YrS ])(kg!!$>gF@*RImFZR-_i?BOk5n`c!$DL(T06JhgIF1Z(HcY$`*s2MhNtt;XF_r==9[QCQ%M/M0iC uQG23Z%eU#R-Y6p+G*b)Q&)56#FY*\kA&@3/p2* !?9Pe4I!=AfTmI_coIo7+I/aTM;t3._*gV!BHV?9=+>W=hD'a]a8uVL4>_OS f-:eiina1-n]oms&,tCP1c[LWTSJCL`jicJTQIS@3ql1^UOWBT1&q=6"`+0S%YXdTYslC,)arWi.3+ ?m*2bsi=QA4]3DVW>i6d=.DgoCghVqZlWZ-&1I]*TT>_OdlDqLJ@>tetsT2#D0KSW2lX4kiXhV38;! u9cc!ItU*!)T6N)=kkdSD2ll[g0c_S60dmV-*[^Oq8k&P10*ipGi+KpX>2o/c3*<@dN\p5p/3mq4sQIVZtr'H]( qf4(8,@UJ/^AgHc#h P?BZ2=;D`OlH#4en)$>'K??&8m:SZY\S%e't@Jqu40j.L#S'lE ]/d=b];)!CukNC,RO'b]TsoeJG$mRS91t:7a"s)2!\R'3m0Uf;i+b"5,'H#5nc^`!_0nUo9uhK7:@g CM@cpHr5X%+SNbjD#f,cNd![9s+oRWcS1j\eDUYj7qCf`%3!F8p<9,!2gSS8A*t:](WNYc/m:WWHMn .!o"_AC2tfk@T&ITSU*pI##)#i_+OSRR/?h2"ib,c#Jt"G[*';_0@YAI:&2>i!3Ls8LN6f3H9c<+H/ /YJ<#Qh85n^afo2rD2pag3&R0C1i63T]IM3N)KbIGX+rgaj4[!\"WO?cMNVh8nrkuWBg"E#Dc7g&2`a"X_4"6 W+aeS]-hkhIUJ:(d\IE;(r9RAJT+S!Mpfau/l'/d=bLhcQNh#H%(-#/V-<'ktXm9o<,Pp!gKMo(]POQ6NU5K*PNrB4FN W/82H,TqV1.?[DonEGET+3'9QZdMgjVulpbe'8Y/I]\"VGQNo]XLdAm]VVM006h0NPEGjC ?*J;gVeTu<^.)1Y$^:hq)'B$;'1=d8DD6?db6E#OP=g?EDSpT+HaXNH(O=Dc/=RTe0DP5O$QH:Oe+Q TJi66\iX]qBB.\)jON`"(nq]1Ee.Jh@9SUV?40f>L;.)h]Q7VTlqB0e'aGlECBUMe(D2Jlq?>d_$1*4h^C#QdENGU'bKJ+c;IBsK32UaD+H!.IOp&45Wkr*&uQXrQmuC!qmW(RDIV#42ES!mgsqn% DqQqJ")Zmq_:TlEXTMY3T,DdmsnOA%ueE?#79PY+Rq:=fa-H>CP]kHs,pG=Ei5 "eZ\T7S:1;_H4.=E.-JImXSMg1uJXWD!kF!3B-h'QeBS9s*0$iG8oCm+:KAYYU"=Gl2L MGQb?>,b_R2^(+gjh"p0)V(]`$8C7o@8CLH?+3WK7I5R"'F(i%dEg\gGEpM>6PN/if[aSuC?!E]A3i 1tJ9\Et4n7(ue;R5c_ko<8$hWPi24mjN\tMC)98Dn]SAT.`p+&7*"tQ//arB'faU!"&b4?[k"VqF,N ;4kUJSE]/iMkr+=G(l5G=RMc<.eH7?2FrC?7T#\JdUf*`5*)kCI0>H1Zp8+Y`T/\_m:]c^[LiV:b&Q RZ'@/,^?**'nerU$0QRgD)!$U5q)"I&PNc>QD6cHMej&7]k=g.,eI[ru9WS2jdRC&rndHmhsCn%ICq :[EE!c+TKC&hOQ-9+tmP@WC,PV0$mX3]cnn%_\V^mJ#q;SLbXk)-gHagBAC0\b$NII=!h:+b0R.(DQ Z%I])DikK^&AWE9g8_=mTT3VaYOHe?2\4/]T[L>"9 Co@db]HM*=pYlGg>aO514^/\ppp7g-UA<=O\0u_='V(6>*4Dfr:lIWJleUNS@L)]g0?lqPmhJ#!"pK h'GMM5'Z2!AZtPU/;S`EL"tE=CuhP'FdoUS6l(7,*uY8X\@)b,l/_ 3RU#H"M^j`laCr.EmOW:Jjm/3/GO>#B2qr5T\73k2@Dgm8]WhEgIqTJ'>X'Gl+W3As^G/S"-5<>pH4Du-$]&<50?&jlHIJ^S["t5!>_!:[WG)&dJbBb_QXXkp ]JH6%1=>4E1G3XGJTWK/(F7Z1!MPY`f,ni9=AcS+V]$ERYmn#.,KEA2,:f>d.s8Mpm:2nFH(O5E)oSM&fCT@'7b[Xm5I^J;1\Xb'GfA7jC9 UPotN-RHF=Y*0;/%G"BP"pGOK&GNUh&$t_7+$DR/`TWsg\'3oqq c`[XD,WR[f)n6O)6i5SDT\K>]3Gh?k>XjNW[Z/7c=MQ\/;@N0ED/=hit+rJ,"YWUj+S%C7k,$4FP%5lj6u'G[S^H"AX?4ahY48P_:ZYee !VHiSH]W,:;Yd%pL%4N.051a$W8!5oBb")(71f)jGI)Q>-T/0!Ki2Zg!XWCMogO^=kCbFR1GkT] 5gr3dgNA*!)NRn^&UCp(HW0oS!p#/C7nbSX"=ZHB0bA:G$XoRNcnEW#pa;Q>Qgu[2+ :nH+d]3#/%W_rhBa:jDKOA?Xf[h+H]l:hQb6s*DoXIZ2:DY_i#c0Q0h;5:i#)l[i#)o>IWY&,A8L]e _Mi1[_g)LH65MQT5duAT]8BpW;?[^N%dPKc[$uZ-/"E66b[WH[iZRH'>!_>$mCRRr]?uUo&63*K;\U f+r)tE@N,>L7UUh)no%R$j2A)3N\#Wc=HA\WpbJu>_cd0L +l1tJJS8jn3I1$GNV0nIhV2[(M,EFnCsnsXP]NT1 ]B\IN7)7bY],!Fnfd`%g+G+6oJRZqr*AfbNtl7jUNUTY1e36G,3<%Y`Dp2,8]=($,\n.G`@?450h-d Bi&dM@\HFhI!g?;Y99Xg(W/QY9n7K$m#lY^u1lRK3A>,Tr]93IL0T/@!FGq2s[f@F(2:^-Tc-Fj,fQ ]8t!_0Wug4*##n$bWK`]B;ND(!YLKKVj)ct#p[iK4Y7_7iL(4g_2Y`t35m[.+ou+^EhoISPhW+D-Pb k@u=9kY(hZd0b^]5@iTLW\rLi*bOJhe%qA]a;-S\9AV:i]$Z^=JDYr0\HDm`Dt1Ke1X h$(PoL&f"S\qX-!@ZbAn'6oQ7_8CjI1cMg1Hi$8JM,s$*b3HB5`^YN.SdI)ql.pDuJ,4b_6tQf@!!i Q)TJ&95qje,o=]kYH=9&WR`/9ejU9X71:@<1BABDo-23IZo"5nIMD!'2\6W$rT"sN'klnKV_jjGSo[MZ9J.. [.g0t&21qt;nEJrpY!fW$ME5'eGIP^sILhroOt3hN/m%3bc_J,s`la/KeVQ_aD^Xo\t7(bh-A,^J%o n3jbMItj"I+,o8H0u=c#(,KOO80j#7c"X%"IH+,F&4-XIMuYS?Pl78X6o_Jfk:R(NR5H%Ah#q7IdtR iAO"`;$qQKnIF8C,=,'G;<_IbGHV[0+4e#Km`u]:Z#'TL'% OsRCN5>4_UY5SJ)Z^cX7Ke=5=[r#7e)a/0A6JiT/%c$oRPQCXf&q3H-(h5VWd-B^5p.9^UH$p.'FUXWBU*+% eG3:6B]2rNN#E"7Z9')@?cAsN!4bPe3aM8I=#2B]I1=l;gn!r?4sf:1PLr9`U%D/WRfL,qY85qTA-g 1B=(V?!.Y)_Xi`YA[7M.F"?jT_j`!(%9iY2FbJfW9IJE;?YJ.I@0+WcnHJW)8$uS5JLa,;!0ZQI'6' )!X&Hf%I9Mpnn`0j=8$Q-KU79"5TFO^]JLFt QYB=T9gG^DWaSdX?j>oKihC"XSWC1eN%6D#:5o?,@#d_W=HXetAk2:A5GAQ@!"gKWiJ\V96;q=m5U_ qU]-Jb6$t1-:`[^QN8`G/qX9;r[E7J?q#(%6Wuij)?h2Pm>D@:^,VcY Z?@h#VZd0%`Gc4UA\&mC75Jp!#Pe V%kBi%>JBP9/eZ#WBCXO&ee'.&]K@<)c-8t_C>hgV(YmR[F_J[9kFL):0&>I\A4kD^d2CoO#4GF3e-dl,Kc$GALjF2PCNaEk+/r9? ><[NsDtrK^mU#&MpB1j-I"+>'h3TPso-a86#n3R:/q$h<*eXOB;i,!HJ6]JWpJ8#Il <=AV6?TH@C#<*r!-ZVnMp;cO^.-"/Gsn!*K:4ZJYd:'?o-g0=4o2\XkuR;%Z,#+^NQjWQ!q?o'X_D3 0ZRR-p>FIR@f@\3(AQr^.E#OW)-=UgDt)QLqmDj:b'HD[@fG\+CI5a'attY$m5XPJ?$D,7"HJ=+Llr B#Q,PG^_AKNTVoUsJ+p0u&=1cg_pB5%N)2>KD3UIs/O"sRBPM6>WRB2I!QL5OX<\!2R[Wm>$<&eHMF ?M-)l+FP:tSm^R_aP-"feS%QB@ma=f.'C2%9tH@U3qnJs/P;2X%4s!+m')Pql5d,Fq[#!^=hMGf+k9jBb[gt$U8mbHAc?_ka!&.eQ.LcJa5jn]g^iZ5!kfN oA$lPuNT_",q&9IG2q#1m=""FCIK:W:9#*?YtJa*MN,ona_NA3[8&+g)YD15DTM.!eO2X[=Udua^$, K^R-9Fun-UTuo:)V(T_[]0k-5GpP2#QZ&SZtRQ.TE\3sX;>tC,Wd.*$AfOS2*n5KBM1IIGa$`eSAKW (!Z1o2"kF-O*tiE%DhUS0`*5NAd1nn*b663$N!Z$LD>hITdU$F_;6cRM%Cg["KqgA8N.Te9jQ.btDO %n]FYg<9P1121iQW?!"Yp3*:/7;Zp;2`7T3pXAPJQK+fp:dQ_D?3MJV5QPO\ :-1P&NfI(CS(cSr[^N&;>P49t9p)9GjZk7]Lb[rGG?P0d;H%(CCeQm\8P(s(+_#&IU^nC_D.kU-#&M 242_Fok+p80[681(VWMVtl5/9Lbr;[5qAk4i]CPa+Rd0) Y?&HF*5^G]!KernF%u:O*(l[jtG.7-E'TSf![5g;'V^17t>M[('#1sH"#G`4#!?_F\!dZ+cMVT; N)76[DpC)YdDQ,>C!jg_4BMTnPKJYAe1kT2fqqLCZd.,663uW.B[ETs -31(3D#\t/@S+_Jiq4Jqg]K9ZW\$JXEZj`;PUXb>JI li0isAO;9JE>hnHNnS(o5X3/`\H?[fQGluTHDiW+G87:lrr6?8-Zg%k=H^=lcRbaH2QWtUVoh/5R[d BqK[hHsOi?i],&5dc]JT_/?uJVK8k%Hu[B^kf9fUICBWgNIs"p9MXta?ht%4!;X1lN8>]d>-)[r_U* fil`faPTc#Aph!gGeRk@/0iD)..SDSQ/unn1$U84GF@."0?Ssr#o^dVKR?3hD>533q$cF0P;I=E0Mc (GX@u(0L)AipVIgsOj+MWueV$L*\2X(>!V,iM6+PfpTDc::$W.8si>m=ddBO?>g0r1-\r<(EuD:i,p =?-o-&.$$jn!9$Z.n88`(L)c@Fk'4X9O^NLq>lOpVk!+1`k&q\7R$6"ldi2`FmGK@*Wq%pM'Ep[4W8 hOTLYcsQ7^hRT.A*O/+:/a/75P=2!cbEa?8cFUhNBKCsEI\'pn[r(k<*h#6OaV%GH[So#Dh&bEej`+ *MdK">;d]2fo<_%#"8>(,lBu"`rk\_I:fuhWek%YO/#F#Xd-i@n4P]M[)HBL_LO;B'&B,r`.*\Pg\Q sU:n\>=:c#I0GH5+62q:V%mbXdC$u/*WS^2\o0UPEnUue6Za]_c?iVq^N&2AoTRR.9-]hYhN+G]9]Q IS(iK1U/WeBPZY$AjrrQ$^)MRfCaUNV"XoZ?mL9(]%Hp'e`K[7-N.YA6eNHcM+eN-hH#?cS:CXpc[# k/sm]ZbMPs1cT<%0L[[GTF[_;6]O(5R:>GX9U$b+ClT77F6a-B07*cZG4 mDjR9gW&k3>3iS1fs]>(ZEC@B\.l[-IJcYu6pD_r E*N<#iq.G`&msd`YGojH&oiui\ZFjZ1U.*oL5A[=#CnEVfm''\B^Dr1e]-F)EWs??2SnH&"a,$1MB: ]e!9Xi^B"=$EC-SsT6G\5l=i?7H?R4A?+"J@ak: _`TdE@8(ED$>c>DFqV5D[uK&R*>V:45%S>pr(p/R^.F8CGLrEqTJ7C$cB=3TOQfr_5W1's(r\9#Ek> rgM8q*7g!&49N8K(XcM:EG\u5.bM%WNK0d2D73&c)LD:rPmMZOsJat""ud?'Gc#?3\+^^'#S0mYGq' 7C!Bja?omhf:'@8(4KU#'?r9en(Zt&8>b:]As!ald@`U;EQqm]%7bO!Ge&gVP]%5?XV'2AE3+t)?:D g4kEp^q4s3\u/^_e6Kbr>+J[;5OH2e6,DVDW.t03XTO17?A1"$AIMn1"HP[NlA<:9&L0or.@lenS` @RM]b$/LU+s"1#*+YdJiod+qS/GJKFi&[,rIj6g&]ae:`ee'pTfi7k2;X*J97m-O9Ac.5;="W\uHg^)$(SGjg@=juq2f\UO/DXtq]5EFn8rre.RmB5OGW`#UcZ7 K!N*IU7a?6:aBM2Z."Tn/X.r]qFoLS_r:D)nu%<@4)R&#ll+'?o8-E?jIT,^+Z/Yql;F0(_D?3UD+q b(`HmXihZSQ^c@l#e5u+N,Nj6B[IB0e=7;BV+')XGlG%G6a\P/9\_Xl%c^6(USN>os+N+]2%"7W(g2(; ;@ZCqmA$g<`\O=TcFIb5CKKJ!Dj#'ac#'osGMb+HpfVne#loY=).8+OUCBdK 2J1:SPeFF9@JjJ"&C\);?HnMS@L<&J)RQff+-JVD=08k1<(m0Gl.F2]W!1jeY5C>Y Hd5o!g!l=7gMMr_eP36\8hWB7E89Y%KjtAXMe%W!lEWLL#SS;_J"jp83o\g-gsOR0H Lm-aHs`Nhc]!^"FA*n^Ai%d)l>*SG/@q"0Puca]LIY4;QXATomsVY(@[F+oa$p7g8f_'&0Re,]rK"H L]57p.c-FQEr;E%4M5S)#%#a4<;eCIs*7&-,[<$+ha7$/`DXGZ[m8hj6nb`=U<:]g`AS7Q'dt\G6q0 2`\)$0f/lIhK)+bA'km!l1cZ2[M`)5Fj>?AQ>$@dC&Q6C#l^K/mcGZ2nJA+V&Qoc5I!YTA?jKg=S!V 6M75B)lkMi0/bF8fq3KUd,,dqrc\6ip_%[*AumEuf_,%"8k+R,MCT[PSGBtX>/IQg4_[gN@8jU`4/f#\$Z`k-q9>!"_q!IU]BDTMa I;$cce#=&02rI)j^f*YIc6)OKFm*&c=ZJ0$g`<,Ku>jX'FUe.]C*%l%GCF(;_:?ELL,6Tf!SlEN;gI SF=:sqou#%Hh8J`%%*e^BXBTbAS2UOgn(lST3AGESF*_tK"W#I9;3B`F>!)Mu#U,- e$]hQD"gSm?HnI-^\ETDHA'Ia,UL>K0p'/`c+0gWtK7$)NKjn)!U*99o,3&%V,>%"AN]kDN'IfK+G, I.!L+O2jg$o%a?W+"K=\"AD&pZ!k^J:!jb`k[*hgaI$o)_VA;#XR"H:ldjT=]KC6"W?W%4s2kmRKFk Rq2D"Yhr:<(:7A\jfn)<**rl))-D/N$@)4*A\fYYcd!?n2;0s,)si::?eMDR;(kJ(iB&2`rti`6;_ HH:k<0,RL1fn-9?7R\m'QQ;lq*ACoS\n#ba(F_#YsB8r:FEE]VL]I*==\fGScOE'O_Z832j)ZQ??\: YoWQq[/Ff:&nX5#kH7k13bCLK4b_T:99u<)lp424:2.2[/&c /$a;UdkJ)jcHSB2'FSF+P.*N:WSR;5OC(lD8gaRrZUtfr`+&/f[AX"eX"+8!dMm,/S:$LIf[TH-ns9 9HoZ4&6j,S,E(@l'/'EmBV4$B%4BppBHj@!cRl^R>MCGo_s"L?(/GFX)IjR^@*r2TJFDd7e)]Qi;T+ =k3S&Flrg+TMM(L_Pog+)cPh3V%3)acK0$IlC!"l%d'od+7&eGb?RXbIlLRZeSJQ0L6+eK^TEFpSm[ gak]$aCO$:*m2eFD1tg&t)q;POr1@Wp4)agt>E_9V7e1J2[/$Q6(eG@@X6[Fcf'ntW\Yl'+HJo$&YF ".[8)7&^N$Q;ul7X^Jo5j`?gl0)<_#scUc#(j!!j2?Wq=cpkE\aLfGE*Ui+[fA6N,I:p1hTSEWiL1s *#ZnKg4]Dd&-+U[Tl@C/_'aoTDjJq4cG"\"WMYFDoEaX#'S,$C>%V1f0g^^0OZYcCQZ,u` QAGh9(&M3<5F7.[\(n6&n7h9NHi57Zbc]f05\40/Koj]=GT7jCA$^_9J9_Dchn4m%6?CL1:T:@XjUf jgk`!Uldn3RS+*C<<.)6/%cLLR7Y3LAn\\&sU\J:B4-_4cd57X1,1`fHcoZE;pY(!haNZ^YJ8Mln^ @PJJ(MoB.^D;0EHD!iRm3;pdX(S5+K7K!M0(k2TW.75dKAVN,o"3Tc?m2n_\?3tD1(-1!3=7%'sj*Y ""`sa:'QiS&JcpL`*:IU<4[" sf#YHFEbdR8<8HplFP#%377FjJ$V:t=4P6q@RV"rt1`REID$r9]&'2k7EImfD3UUUF?!/3nPs2cFqF <2+K>8=nLkIV7)`c9/[4tGq=<<:d*>`Tu&t2A[*DDIU!157fk`!fo;N<'9k,"bYEtH *V+mhYmY13=oM+c$2T3J>bQf`dr2o\](lr#Z&.#\/NBj1)uG@i/^ec58pgdC+<"Y5o RQ4_Trans & sigR => sigRQ4_Trans: ",wavR,wavdR,wavQ,wavdQ if (V_Flag) return -1 endif String/G globrq4data, globqzdata,globdrq4data,globdqdata Wave wavR1=$wavR,wavdR1=$wavdR,wavQ1=$wavQ,wavdQ1=$wavdQ Duplicate /O wavR1, RQ4_Trans Duplicate /O wavdR1, sigRQ4_Trans RQ4_Trans=wavR1*wavQ1^4 sigRQ4_Trans=sqrt((wavdR1*wavQ1^4))^2//+(4*wavR1* wavdQ1^3)^2) End Function Wave_Scaling_Func() String wav Variable cons Prompt wav, "Choose a wave:", popup, WaveList("*",";","") Prompt cons, "Enter the Scaling factor:" DoPrompt "Manual scaling of a wave (w_new=w_old*s_factor): ",wav,cons if (V_Flag) return -1 endif Wave wy=$wav wy=wy*cons End Function Sqrt_Wave_Func() // String wav // Variable cons String wav=StrVarOrDefault ("globdqdata","") Prompt wav, "Choose a wave:", popup, WaveList("*",";","") // Prompt cons, "Enter the Scaling factor:" DoPrompt "Manual scaling of a wave (w_new=sqrt(w_old)): ",wav//,cons String /G globdqdata if (V_Flag) return -1 endif Wave wy=$wav wy=sqrt(wy) End Function Wave_Shift_Func() String wav Variable cons Prompt wav, "Choose a wave:", popup, WaveList("*",";","") Prompt cons, "Enter the shift factor:" DoPrompt "Manual Shift of the values of a wave (w_new=w_old+s_factor): ",wav,cons if (V_Flag) return -1 endif Wave wy=$wav wy=wy+cons End Function Make_sigQ_Data() // String /G globdqdata String wav=StrVarOrDefault ("globqzdata","") Variable cons=NumVarOrDefault("", 0.03) // Variable cons String Nname=StrVarOrDefault ("name", "d"+ wav) String wavename_Dup=Nname // Variable cons Prompt wav, "Choose Qdata:", popup, WaveList("*",";","") Prompt wavename_Dup, "Name dQ:"//, popup, WaveList(" ",";","") Prompt cons, "What is the Scaling factor, dQ/Q ?(eg. 0.03 for 3 % of Q):" DoPrompt "Make dQ data",wav,wavename_Dup,cons String /G globqzdata if (V_Flag) return -1 endif // wavename_Dup=PossiblyQuoteName(wavename_Dup) Wave wy=$wav Duplicate /O wy $wavename_Dup Wave sigQ=$wavename_Dup sigQ=sigQ*cons // globdqdata=wavename_Dup // FitRgeneral3() End Function Wave_Dup_Func() String wav // Variable cons // String Nname="name" String wavename_Dup="name" Prompt wav, "Choose the wave to be duplicated:", popup, WaveList("*",";","") Prompt wavename_Dup, "Type the name of the new wave:" DoPrompt "Duplicate",wav,wavename_Dup if (V_Flag) return -1 endif // wavename_Dup=PossiblyQuoteName(wavename_Dup) Wave wy=$wav Duplicate /O wy $wavename_Dup End Function polydensity(d0,d1,d2,d3) //assumption: solvent can not penetrate into the PVP layer Variable d0,d1,d2,d3 SVAR yyy=globprosldz//,xxx //String yyy=yyy1 Wave yy=$yyy // Wave xx=$xxx Duplicate /O yy polydensy Duplicate /O yy solvdensy Duplicate /O yy psvolf_a,pvpvolf_a,solv_volf_a,polyvolf_a // Duplicate xx polydensx Variable i // print yy for (i=0;i<=8;i=i+1) polydensy[i]=yy[i]-(1-(yy[i]-d0)/(yy[9]-d0))*d0-((yy[20]-d2)/(d3-d2)*(yy[9]-d1)/(yy[20]-d1)*(yy[i]-d0)/(yy[9]-d0))*d3 solvdensy[i]=((yy[20]-d2)/(d3-d2)*(yy[9]-d1)/(yy[20]-d1)*(yy[i]-d0)/(yy[9]-d0))*d3 psvolf_a[i]=(1-(yy[20]-d2)/(d3-d2))*(yy[9]-d1)/(yy[20]-d1)*(yy[i]-d0)/(yy[9]-d0) solv_volf_a[i]=solvdensy[i]/d3 pvpvolf_a[i]=(polydensy[i]-psvolf_a[i]*d2)/d1 endfor for (i=9; i<=19;i=i+1) polydensy[i]=yy[i]-(yy[20]-d2)/(d3-d2)*(yy[i]-d1)/(yy[20]-d1)*d3 //ps+pvp solvdensy[i]=(yy[20]-d2)/(d3-d2)*(yy[i]-d1)/(yy[20]-d1)*d3 psvolf_a[i]=(1-(yy[20]-d2)/(d3-d2))*(yy[i]-d1)/(yy[20]-d1) solv_volf_a[i]=solvdensy[i]/d3 pvpvolf_a[i]=(polydensy[i]-psvolf_a[i]*d2)/d1 endfor for (i=20;i<=38;i=i+1) polydensy[i]=(1-(yy[i]-d2)/(d3-d2))*d2 //ps solvdensy[i]=((yy[i]-d2)/(d3-d2))*d3 psvolf_a[i]=(1-(yy[i]-d2)/(d3-d2)) pvpvolf_a[i]=(polydensy[i]-psvolf_a[i]*d2)/d1 solv_volf_a[i]=solvdensy[i]/d3 endfor for (i=39; i<=49;i=i+1) polydensy[i]=yy[i]-(yy[20]-d2)/(d3-d2)*(yy[i]-d1)/(yy[20]-d1)*d3 //ps+pvp solvdensy[i]=(yy[20]-d2)/(d3-d2)*(yy[i]-d1)/(yy[20]-d1)*d3 psvolf_a[i]=(1-(yy[20]-d2)/(d3-d2))*(yy[i]-d1)/(yy[20]-d1) pvpvolf_a[i]=(polydensy[i]-psvolf_a[i]*d2)/d1 solv_volf_a[i]=solvdensy[i]/d3 endfor for (i=50;i<= 60;i=i+1) polydensy[i]=yy[i]-(1-(yy[i]-d0)/(yy[9]-d0))*d0-((yy[20]-d2)/(d3-d2)*(yy[9]-d1)/(yy[20]-d1)*(yy[i]-d0)/(yy[9]-d0))*d3 solvdensy[i]=((yy[20]-d2)/(d3-d2)*(yy[9]-d1)/(yy[20]-d1)*(yy[i]-d0)/(yy[9]-d0))*d3 psvolf_a[i]=(1-(yy[20]-d2)/(d3-d2))*(yy[9]-d1)/(yy[20]-d1)*(yy[i]-d0)/(yy[9]-d0) pvpvolf_a[i]=(polydensy[i]-psvolf_a[i]*d2)/d1 solv_volf_a[i]=solvdensy[i]/d3 endfor polyvolf_a=psvolf_a+pvpvolf_a End Menu "NeutronReflectivity"//"Misc Operations" // Submenu "Profile Generator" // "Build HGauss Profile Smtr", EJMainS() // End // Submenu "Reflectivity" // "Cal RQ4 w\ a given Profile", ParrattMaindq( ) // End // Submenu "ReflFit" // "Fit RQ4 Symetry u\hGauss", ParrattFitMaindqS( ) // End // Submenu "ReflFit" // "Fit RQ4 Symetry u\Arbitrary", ParrattFitMaindqSIndeM( ) // End // Submenu "Main Analysis" "Start NR Analysis program ...", FitRgeneral2( ) help={"This is the first step for the reflectivity analysis. All other menu commands will NOT work before this is done ..."} // End Submenu " Utilities I" "Sqrt of Data", Sqrt_Wave_Func() End Submenu " Utilities I" "Make dQ", Make_sigQ_Data() End // Submenu "Utilities" // "R2RQ4", RtoRQ4_Data_Trans_Func() // End Submenu " Utilities I" "ReScale", Wave_Scaling_Func() End Submenu " Utilities I" "Shift", Wave_Shift_Func() End Submenu " Utilities I" "Approx. Q_c", crtQ_cal() End Submenu " Utilities I" "Approx. Theta_c", crt_theta_cal( ) End Submenu " Utilities I" "ReBin", Bin_Data() //accept all conditions in panel End Submenu " Utilities I" "SLD_Cal Web", NIST_SLD_Cal() End Submenu " Utilities I" "Copy data as", Wave_Dup_Func() Submenu "Pixelize SLD" "cstDZ", ConstdzSLD() //accept all conditions in panel End Submenu "Pixelize SLD" "cstDZX2", Numx2SLD() //accept all conditions in panel End // "new name", Wave_Dup_Func() // End End Submenu " Utilities II" Submenu "Special Fittings" help={" Under Construction... Under Construction... Under Construction... Under Construction... Under Construction..."} "SLD2Fit", ArbitraryFitting_Button() //accept all conditions in panel // Submenu "SLD2Fit" // "SLD2FitS", ArbitraryFitting_ButtonS() // End End End // // help= {"Current Data Folder"} Submenu " Utilities II" Submenu "Other R Calculation: nosmear" help={" No dQ smear nor incoherent smear..."} "Matrix Method", EMMainS() End Submenu "Other R Calculation: nosmear" "Rayleigh Formula: R Only", SuperMaster() End Submenu "Tools 4 Thickness" "(Interface position by IFT: R Only", InvSuperMasterMag3()" End // Submenu "Tools 4 Thickness" // "Interface position by IFTBack: R Only", InvSuperMasterMag() // End Submenu "Tools 4 Thickness" "Kiessig thickness: Note 'place cursors first'", Kiessig_Thickness() End Submenu "To Copy Panel Window" "(Use key-combination Shift+PrintScreen to copy NR panel to clipboard." End Submenu "Special Fittings" "SmoothFit", CSfit() help={"***Caution***Do NOT use this fitting... This may not work..."} "CCMassFit", CCSMfit1() help={"***Caution; NOT for users. This will not work; CC Sym. Geometry w/ mc; Only support numbers for constriants (Low or High boxes)..."} End End " SetDF", DataFolderNames() help={"An alternative way to change the DataFolder ..."} End Menu "SetDF2Root", dynamic//DF2root() GetDataFolder(0)+" > root",/Q, DF2root() help={"To change the current DataFoder to IgorPro root..."} // PrintAllDFNames4Menu(StrVarOrDefault(GetindexedObjName("root:",4,0),"root")),/Q, DF2root()<<< PrintAllDFNames4Menu();Not being used // DataFolderNames() END // Function root() // SetDataFolder root: // End //Function setDFf(a) //String a//=StringFromList(1,PrintAllDataFolderNames()) //SetDataFolder root:$a //End //Menu "CurrentDF", dynamic //"CurrentDF" // Dmenuitem() // "-" // "ChangeDF",DataFolderNames() // End //End Function /S DF2root() String /G globCDF=GetDataFolder(0) Variable aa=0 String selec Variable index String strfollist="" // String selec String gdf=GetDataFolder(1) String objName String aa1 // print gdf index=0 do objName=GetindexedObjName("root:",4,index) // print objName if (exists("root:"+objName+":globExptTitle")==2) aa1="root:"+objName // strfollist=strfollist+";"+objName+":" strfollist=strfollist+";"+"SetDataFolder"+aa1 endif if (strlen(objName) == 0) break endif index +=1 while(1) if (stringmatch("root:",gdf)>0) // strfollist=strfollist+";"+"root" strfollist=strfollist+";"+"SetDataFolder root:" endif SetDataFolder root://$aa1 return strfollist //String aa1="root:"+selec+":" //return selec End Function DataFolderNames() String ss=GetDataFolder(0) // print ss DoWindow /K CCDFwin NewPanel /K=1 /N=CCDFwin /W=(550,10,900,42) as "ChangeCurrentDataFolder" // SetVariable tiltleIn value=ss, bodyWidth=135, title=" ", pos={130,15},frame=1//,fstyle=0//,fColor=(55000,0,0)//,help={" Low limit "} PopupMenu ccdf value="root;"+PrintAllDataFolderNames(),title=" Select DataFolder: ",mode=1,bodyWidth=190, title="",fstyle=1, size={79,160},labelBack=(65280,43520,0),proc=popccdf,pos={110,7} //SetVariable aa_ccdf title=" ",value=$ss,limits={0,1,1},pos={130,7} // ss=PrintAllDataFolderNames() //SetDataFolder root:ss // Return ss End Function popccdf(cntrlName,popNum,popStr) : PopupMenuControl String cntrlName Variable popNum String popStr String varStr=popStr Variable varNum=popNum String st=popStr // String kk=GetDataFolder(0) //SVAR ExptName=globExptTitle // NewDataFolder /O root:$ExptName //print "...",GetDataFolder(1) if (stringmatch("root",st)>0) st=GetDataFolder(0)+" : " SetDataFolder root: print "IgorPro:> root:" else st="root:"+GetDataFolder(0)+":" SetDataFolder root:$popStr print "IgorPro:> root:",popStr endif //ModifyPanel /W=CCDFwin framestyle=0 //SetVariable aa_ccdf value=kk End Function /S Dmenuitem() Variable itn String st //if (itn==1) st=GetDataFolder(0) if (stringmatch("root",st)>0) st="! "+GetDataFolder(0)+" : " else st="! "+"root:"+GetDataFolder(0)+" : " endif Return st End //Function KillDFolder() //String svDef=GetDataFolder(1) Function Bin_Data() // String RQ4data,Qzdata,ProSLDz,Proz //defl,sepdata1,veldata1 //calF Variable i,j,k,l String savDF=GetDataFolder(1) // Variable /G globrswitch=0 // FitRgeneral3() String RQ4data=StrVarOrDefault ("globrqdata","") String Qzdata=StrVarOrDefault ("globqzdata","") String drq4data=StrVarOrDefault ("globdrqdata","") String dqdata=StrVarOrDefault ("globdqdata","") Variable NoBin=NumVarOrDefault("globnobin", 2) // Variable SLDn=NumVarOrDefault("globvisco", 2.07) // Variable SLDi=NumVarOrDefault("globdia", 5.67) // DoWindow RQ4vsQCal // if (V_Flag==0) Prompt RQ4data, "Choose R Data:", popup, WaveList("*",";","") Prompt Qzdata, "Choose Q Data:", popup, WaveList("*",";","") Prompt drq4data, "Choose sigmaR Data:", popup, WaveList("*",";","") Prompt dqdata, "Choose sigmaQ Data:", popup, WaveList("*",";","") Prompt NoBin, "Number for binning:" // Prompt SLDn, "Enter SLD of Substrate (E-06):" // Prompt SLDi, "Enter SLD of Incident Medium (E-06):" // Prompt yn, "Did place cursors (1(y)/0(n))?" DoPrompt "RQ4(Only) from Given SLD Profile",RQ4data,Qzdata,drq4data,dqdata,NoBin//,SLDn, SLDi //sepdata1,veldata1,sl,n,dg,yn//,vel,,n // Variable/G globSLDn=SLDn //Save for next time // Variable/G globSLDi=SLDi String/G globrqdata, globqzdata,globdrqdata,globdqdata Variable/G globnobin=NoBin if (V_Flag) return -1 endif String rdatabin,qdatabin,drdatabin,dqdatabin rdatabin=(RQ4data+"_"+Num2Str(NoBin)+"B") qdatabin=(Qzdata+"_"+Num2Str(NoBin)+"B") drdatabin=(drq4data+"_"+Num2Str(NoBin)+"B") dqdatabin=(dqdata+"_"+Num2Str(NoBin)+"B") // Duplicate/O /D $RQ4data rdatabin2 Duplicate/O /D $RQ4data rdatabin1 Duplicate/O /D $Qzdata qdatabin1 Duplicate/O /D $drq4data drdatabin1 Duplicate/O /D $dqdata dqdatabin1 // print qdatabin1 Variable sqs,eqs,numqbin1=numpnts(qdatabin1) if (qdatabin1[0]>qdatabin1[numqbin1]) sqs=numqbin1 eqs=0 else sqs=0 eqs=numqbin1 endif // print "*****",eqs,sqs,numqbin1 KillWaves /Z $rdatabin,$qdatabin,$drdatabin,$dqdatabin Make /O /N=1 rdatabin2, qdatabin2, drdatabin2,dqdatabin2 WaveStats/Q /Z $RQ4data i=0 k=0 j=0 rdatabin2=0 qdatabin2=0 drdatabin2=0 dqdatabin2=0 if (NoBin <1) //<0&& k==0) Insertpoints j, 1,rdatabin2 Insertpoints j, 1,qdatabin2 Insertpoints j, 1,drdatabin2 Insertpoints j, 1,dqdatabin2 endif rdatabin2[j]=rdatabin2[j]+rdatabin1[i] qdatabin2[j]=qdatabin2[j]+qdatabin1[i] drdatabin2[j]=sqrt(drdatabin2[j]^2+drdatabin1[i]^2) dqdatabin2[j]=sqrt(dqdatabin2[j]^2+dqdatabin1[i]^2) k=k+1 if (k==NoBin||i==V_npnts-1) rdatabin2[j]=rdatabin2[j]/k qdatabin2[j]=qdatabin2[j]/k drdatabin2[j]=drdatabin2[j]/k dqdatabin2[j]=dqdatabin2[j]/k endif endfor endif Duplicate/O /D rdatabin2 $rdatabin Duplicate/O /D qdatabin2 $qdatabin Duplicate/O /D drdatabin2 $drdatabin Duplicate/O /D dqdatabin2 $dqdatabin KillWaves rdatabin1, qdatabin1, drdatabin1,dqdatabin1 KillWaves rdatabin2, qdatabin2, drdatabin2,dqdatabin2 End Function ParrattMain( ) String RQ4data,Qzdata,ProSLDz,Proz //defl,sepdata1,veldata1 //calF Variable r,b,i,v1,z0,df0 String savDF=GetDataFolder(1) Variable SLDn=NumVarOrDefault("globSLDn", 2.07) Variable SLDi=NumVarOrDefault("globSLDi", 5.67) // Variable yn=NumVarOrDefault("globyn", 1) DoWindow RQ4vsQCal if (V_Flag==0) Prompt RQ4data, "Choose RQ4 Data:", popup, WaveList("RQ*",";","") Prompt Qzdata, "Choose Q Data:", popup, WaveList("Q*",";","") // Prompt dQdata, "Choose dQ Data:", popup, WaveList("*",";","") // Prompt yn, "Consider dQ (1(y)/0(n))?" Prompt ProSLDz, "Choose SLD Profile:", popup, WaveList("pro*",";","") Prompt Proz, "Choose Depth z:", popup, WaveList("z*",";","") Prompt SLDn, "Enter SLD of Substrate (E-06):" Prompt SLDi, "Enter SLD of Incident Medium (E-06):" DoPrompt "RQ4 from Given SLD Profile",RQ4data,Qzdata,ProSLDz,Proz,SLDn, SLDi //sepdata1,veldata1,sl,n,dg,yn//,vel,,n else Prompt RQ4data, "Choose RQ4 Data:", popup, WaveList("RQ*",";","WIN:RQ4vsQCal") Prompt Qzdata, "Choose Q Data:", popup, WaveList("Q*",";","WIN:RQ4vsQCal") // Prompt dQdata, "Choose dQ Data:", popup, WaveList("*",";","") // Prompt yn, "Consider dQ (1(y)/0(n))?" Prompt ProSLDz, "Choose SLD Profile:", popup, WaveList("pro*",";","") Prompt Proz, "Choose Depth z:", popup, WaveList("z*",";","") Prompt SLDn, "Enter SLD of Substrate (E-06):" Prompt SLDi, "Enter SLD of Incident Medium (E-06):" // Prompt yn, "Did place cursors (1(y)/0(n))?" DoPrompt "RQ4 from Given SLD Profile",RQ4data,Qzdata,ProSLDz,Proz,SLDn, SLDi //sepdata1,veldata1,sl,n,dg,yn//,vel,,n endif Variable/G globSLDn=SLDn //Save for next time Variable/G globSLDi=SLDi // Variable/G globyn=yn // String/G globrq4data=RQ4data // String/G globqzdata=Qzdata String/G globprosldz=ProSLDz,globproz=Proz if (V_Flag) return -1 endif // Variable nad // String ss,ss1 // sscanf defl,"%[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]%d",ss,nad //str2num(nm) // if (nad==0) // sscanf defl,"%d%[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]",nad,ss //str2num(nm) // endif // String Rq_Fitname // String na=num2str(nad) // Rq_Fitname="RQ4cal" Duplicate/O /D $RQ4data Rq_Fit Duplicate/O /D $Qzdata Qzcal // Duplicate/O /D $dQdata dQcal // WaveStats $Zpos Variable V_npnts=numpnts($Proz) Variable Ntot=V_npnts Rq_Fit=ParrattNTRNp(Qzcal,Ntot) //print Rq_Fit String wname="RQ4vsQCal" // String wnameslip="FvsSSlipCal"+na DoWindow $wname if (V_Flag==0) // Display f,fd1 vs ds1 Display $RQ4data Rq_Fit vs $Qzdata Label left "RQ4" Label bottom "Q (\U)" ModifyGraph log(left)=1, mirror=1,minor=0,standoff=0,tick=2, mode($RQ4data)=3, marker($RQ4data)=5, rgb(Rq_Fit)=(0,0,65535), rgb($RQ4data)=(65280,0,26112), grid=1,gridRGB=(65280,54528,32768) DoWindow/C $wname // else // DoWindow/F $wname // DoWindow $wname // CheckDisplayed/W=$wname Rq_Fit // if (V_flag==0) // AppendToGraph/W=$("RQ4vsQCal") $RQ4data Rq_Fit vs $Qzdata // ModifyGraph/W=$("RQ4vsQCal") rgb(Rq_Fit)=(0,0,65535) // endif endif KillWaves Qzcal End Function ParrattNTRNp(q,nt) //: FitFunc // 1D fit: f (below) vs. h w/o Gaussian Averaging Variable q,nt //NVAR SLD1g=globSLDn, SLDig=globSLDi Variable /C Xn,Xnp1,fn,fnp1,rn,an,anp1,kn,knp1 Variable /C alpha,nn,nnp1,n1,ni//,n2//,n2A,n2B//,phin,phinp1 Variable z,dz,i,dn, lamda,SLD1,SLDi,phi1,ko //,SLDA,SLDB SVAR hhh=globprosldz Wave /D hh=$hhh SVAR zz=globproz Wave /D pz=$zz //NVAR yn=globyn //Variable yy=yn lamda=4.62 SLD1=hh[nt-1]*1e-06//SLD1g*1e-06//5.69e-06//sapphire///4.14e-06 //Quartz ////SLD for substrate SLDi=hh[0]*1e-06//SLDig*1e-06 /////SLD for incident medium ko=2*pi/lamda n1=rip(lamda,SLD1,0)//cmplx(1-SLD1*lamda^2/(2*pi),0) ni= rip(lamda,SLDi,0) // dqq=sigmaq // print dq // if (yy<0.1) // dqq=0 // endif // XGn=cmplx(0,0) // DGn=cmplx(0,0) // for (j=q-3*dqq;j<=q+3*dqq;j=j+sigmaq) phi1=asin(lamda*q/(4*pi)) // dz=flmthickness/nolrs alpha=ni*cos(phi1) nnp1=n1 knp1=sqrt(ko^2*(nnp1^2-(alpha^2))) //nnp1*ko*sin(phinp1) Xnp1=cmplx(0,0) dz=0 for (i=nt-1;i>=0; i=i-1) // z=pz[i] if (i==0) dz=(pz[1]-pz[0])/2 elseif (i==(nt-1)) dz=(pz[i]-pz[i-1])/2 else dz=((pz[i]-pz[i-1])+(pz[i+1]-pz[i]))/2 endif // if (i==nt) // nn=ni // else nn= rip(lamda,hh[i]*1e-06,0)//SLDprof(z,SLD1,SLDA,SLDB,SLDS,lamda) // endif kn=sqrt(ko^2*(nn^2-alpha^2)) //nn*ko*sin(phin) an=exp(cmplx(0,-2)*kn*dz) // anp1=exp(cmplx(0,2)*knp1*(z)) rn=(kn-knp1)/(kn+knp1) Xn=an*((rn+Xnp1)/(1+rn*Xnp1)) // Xn=an*((rn+Xnp1*anp1)/(1+rn*Xnp1*anp1)) Xnp1=Xn knp1=kn endfor //for i // XGn=XGn+Xn*DistGauss1(j,q,sigmaq) //Gaussian average over flm thickness+-10A w/ sigma=4); need to find sigma and j for the thickness // DGn=DGn+DistGauss1(j,q,sigmaq) // endfor //for j // Xn=Xn*exp(-2*kn*sqrt(ko^2*(nnp1^2-(alpha^2))) *(20)^2) return magsqr(Xn)*q^4 End //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////To calculate RQ^4 w/incoherent smear and sigmaQ Gaussian averaging ///////////////////// //////////Use subloutine ParrattNTRNdq() for reflectivity calculation ////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////// //////////////////////// Function ParrattMaindq( ) // String ProSLDz,Proz //defl,sepdata1,veldata1 //calF Variable r,b,i,v1,z0,df0 // String savDF=GetDataFolder(1) // Variable SLDn=NumVarOrDefault("globSLDn", 2.07) // Variable SLDi=NumVarOrDefault("globSLDi", 5.67) Variable yn=NumVarOrDefault("globyn", 1) Variable syn=NumVarOrDefault("globsyn", 60) String RQ4data=StrVarOrDefault ("globrq4data","") String dRQ4data=StrVarOrDefault ("globdrq4data","") String Qzdata=StrVarOrDefault ("globqzdata","") String dQdata=StrVarOrDefault ("globdqdata","") String ProSLDz=StrVarOrDefault ("globprosldz","") String Proz=StrVarOrDefault ("globproz","") Prompt RQ4data, "Choose R(Q4) Data:", popup, WaveList("*",";","") Prompt dRQ4data, "Choose dR(Q4) Data:", popup, WaveList("*",";","") Prompt Qzdata, "Choose Q Data:", popup, WaveList("*",";","") Prompt dQdata, "Choose dQ Data:", popup, WaveList("*",";","") Prompt ProSLDz, "Choose SLD Profile:", popup, WaveList("*",";","") Prompt Proz, "Choose Depth z:", popup, WaveList("*",";","") Prompt yn, "Consider dQ (1(y)/0(n))?" Prompt syn, "Consider incoherent smear (#A(y)/0(n))?" // Prompt SLDn, "Enter SLD of Substrate (E-06):" // Prompt SLDi, "Enter SLD of Incident Medium (E-06):" DoPrompt "R(Q4) from Given (odd # of ) SLD Profile ",ProSLDz,Proz//,SLDn, SLDi //sepdata1,veldata1,sl,n,dg,yn//,vel,,n///,RQ4data,dRQ4data,Qzdata,dQdata,,yn,syn // Variable/G globSLDn=SLDn //Save for next time NVAR pfyn1=globpfyn,sf=globsf Variable/G globyn=yn Variable/G globsyn=syn String/G globrq4data=RQ4data String/G globdrq4data=dRQ4data String/G globqzdata=Qzdata String/G globdqdata=dqdata String/G globprosldz=ProSLDz,globproz=Proz Variable pfyn=pfyn1 if (V_Flag) return -1 endif NVAR rswitch=globrswitch SVAR ExptTitle=globExptTitle Duplicate/O /D $RQ4data Rq_Fit Duplicate/O /D $RQ4data RQdata Duplicate/O /D $dRQ4data dRQdata Duplicate/O /D $Qzdata Qzcal Duplicate/O /D $dQdata dQcal Duplicate/O /D dRQdata dRQtemp // dRQtemp=sf*dRQdata // WaveStats $Zpos Variable V_npnts=numpnts($Proz) Variable datapoints=numpnts($RQ4data) Variable Ntot=V_npnts Variable xisqr,rxisqr // Variable npd=numpnts(dQdata) for (i=0;i0) if (RQdata[i]<=0 || dRQdata[i]<=0) dRQtemp[i]=2*abs(dRQdata[i])//1e-04*Qzcal[i]^4 endif else if (RQdata[i]<=0 || dRQdata[i]<=0) dRQtemp[i]=2*abs(dRQdata[i])//1e-04 endif endif endfor Rq_Fit=ParrattNTRNdq(Qzcal, dQcal,Ntot) //dQcal xisqr=0 if (pfyn==1) Variable cursora,cursorb SetActiveSubWindow $ExptTitle#RQPlotInPanel cursora=pcsr(A, ExptTitle+"#RQPlotInPanel") cursorb=pcsr(B, ExptTitle+"#RQPlotInPanel") datapoints=abs(cursorb-cursora)+1 //Cursor /S=1 /W=NR#RQPlotInPanel A $RQ4data cursora //Cursor /S=1 /W=NR#RQPlotInPanel B $RQ4data cursorb RemoveFromGraph /Z /W=$ExptTitle#RQPlotInPanel Rq_Fit AppendToGraph /W=$ExptTitle#RQPlotInPanel Rq_Fit[cursora,cursorb] vs $Qzdata[cursora,cursorb] ModifyGraph /W=$ExptTitle#RQPlotInPanel rgb(Rq_Fit)=(6528,0,65280),lsize(Rq_Fit)=2 else cursora=0 cursorb=datapoints-1 RemoveFromGraph /Z /W=$ExptTitle#RQPlotInPanel Rq_Fit AppendToGraph /W=$ExptTitle#RQPlotInPanel Rq_Fit[cursora,cursorb] vs $Qzdata[cursora,cursorb] ModifyGraph /W=$ExptTitle#RQPlotInPanel rgb(Rq_Fit)=(6528,0,65280),lsize(Rq_Fit)=2 endif for (i=cursora;i<(cursorb+1);i+=1) if (dRQdata[i]>0)// if (dRQdata[i]!=0) // if (RQdata[i]>0&&dRQdata[i]>0) xisqr=xisqr+(RQdata[i]-Rq_Fit[i])^2/(dRQtemp[i])^2 else xisqr=xisqr+(RQdata[i]-Rq_Fit[i])^2/(dRQtemp[i])^2 // datapoints=datapoints-1 endif // datapoints=datapoints-1 endfor rxisqr=xisqr/datapoints Variable /G globV_chisq=xisqr,globnpntsdata=datapoints, globV_Rchisq=xisqr/(datapoints) print " Xi^2 = ",xisqr, " Xi^2/Ndatapnt = ",rxisqr //print Rq_Fit String wname="RQ4vsQCal" // String wnameslip="FvsSSlipCal"+na DoWindow $wname if (V_Flag==0) // Display f,fd1 vs ds1 DoWindow $ExptTitle if (V_flag==0) Display $RQ4data Rq_Fit vs $Qzdata Label left "RQ4" Label bottom "Q\Bz\M (\U)" ModifyGraph log(left)=1, mirror=1,minor=0,standoff=0,tick=2, mode($RQ4data)=3, marker($RQ4data)=5, rgb(Rq_Fit)=(0,0,65535), rgb($RQ4data)=(65280,0,26112), grid=1,gridRGB=(65280,54528,32768) DoWindow/C $wname else DoWindow /F $ExptTitle endif endif KillWaves /Z dRQtemp//Qzcal,dQcal,RQdata,dRQdata End Function crtQ_cal( ) NVAR n_lay1=globNLay Variable n_lay=n_lay1 Wave w_fit Variable lamda=4.62,SLDi=w_fit[0],SLDs=w_fit[n_lay+1] Variable /D q, angl,si,ss,ni,ns //lamda=lamda*1e-10 si=SLDi*1e-06 ss=SLDs*1e-06 ni=real(rip(lamda,si,0)) ns=real(rip(lamda,ss,0)) //print rip(lamda,si,0) //print si,ss if (ns/ni<=1 ) angl=acos(ns/ni) else print "no critical angle!" endif q=4*pi*sin(angl)/(lamda) //print "critical angle =", angl*180/pi, "degrees" print "Qc =", q, "Å^-2" return q END Function crt_theta_cal( ) NVAR n_lay1=globNLay Variable n_lay=n_lay1 Wave w_fit Variable lamda,SLDi=w_fit[0],SLDs=w_fit[n_lay+1] Variable /D q, angl,si,ss,ni,ns Prompt lamda," What is your wave length (Å)? " DoPrompt "To Calculate Critical angle and Qc", lamda //lamda=lamda*1e-10 si=SLDi*1e-06 ss=SLDs*1e-06 ni=real(rip(lamda,si,0)) ns=real(rip(lamda,ss,0)) //print rip(lamda,si,0) //print si,ss if (ns/ni<=1 ) angl=acos(ns/ni) else print "no critical angle!" endif q=4*pi*sin(angl)/(lamda) print "critical angle =", angl*180/pi, "degrees" print "Qc =", q, "Å^-2" //return 0 END //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////// ////////////////////////////////////////// Function ParrattNTRNdq(q,sigmaq,nt) //: FitFunc // 1D fit: f (below) vs. h w/ incoherence Gaussian Averaging andw/ sigmaQ blurring Variable q,nt,sigmaq //NVAR SLD1g=globSLDn, SLDig=globSLDi NVAR syn1=globsyn,rswitch=globrswitch,sf1=globsf,ntlay1=globNpoint Variable syn=syn1,sf=sf1,ntlay=ntlay1 Variable /C Xn,Xnp1,fn,fnp1,rn,an,anp1,kn,knp1 Variable /C alpha,nn,nnp1,n1,ni//,n2//,n2A,n2B//,phin,phinp1 Variable z,dz,i,dn, lamda,j,jj,dqq,SLD1,SLDi,phi1,ko,XXGn,XDGn,XGn,DGn,sdqq,incsdqq,Rcal_out_result //,SLDA,SLDB SVAR hhh=globprosldz Wave /D hh=$hhh SVAR zz=globproz SVAR ExptTitle=globExptTitle Wave /D pz=$zz NVAR yn=globyn Variable yy=yn,incmhh incmhh=hh[0] Variable /G globcmplxcalyn Variable cursora=-1//=strlen(CsrInfo(A, ExptTitle+"#SLDPlotInPanel")) if (syn>0) Variable csrYN=strlen(CsrInfo(A, ExptTitle+"#SLDPlotInPanel")) //print strlen(CsrInfo(A, ExptTitle+"#SLDPlotInPanel")) if (csrYN>0) cursora=pcsr(A, ExptTitle+"#SLDPlotInPanel") endif endif // if (globcmplxcalyn>1) // SVAR prof_IM1=globImSLDin Wave /D prof_IM//=$prof_IM1 // endif // sigmaq=sigmaq*2 //for (i=0;i0) sdqq=syn incsdqq=syn//sigma for incoherent endif XXGn=0 XDGn=0 // for (jj= sdqq;jj<= (5*sdqq);jj=jj+incsdqq) for (jj= (-2*sdqq);jj<= (2*sdqq);jj=jj+incsdqq/2) //jj=jj+incsdqq/2) XGn=0 DGn=0 for (j=q-2*dqq;j<=q+2*dqq;j=j+(sigmaq/2.5)) phi1=asin(lamda*j/(4*pi)) // dz=flmthickness/nolrs ///*** alpha=ni*(cos(asin(sin(phi1)/ni))) <<< more accurate but not neccessary alpha=ni*cos(phi1/ni) ///////03//03/2008 ni considered for phi1 ie., phi should be phi/ni in case of medium instead of air/// but will nor differ* other fit func need to be corrected****** nnp1=n1 knp1=sqrt(ko^2*(nnp1^2-(alpha^2))) //nnp1*ko*sin(phinp1) Xnp1=cmplx(0,0) dz=0 for (i=nt-1;i>=0; i=i-1) if (i==0) dz=(pz[1]-pz[0])/2 elseif (i==(nt-1)) dz=(pz[i]-pz[i-1])/2 else dz=((pz[i]-pz[i-1])+(pz[i+1]-pz[i]))/2 endif // print csrYN if (syn>0) if (csrYN>0) if (i==cursora) //(ceil((nt-1)/2)-ceil(ntlay/10)))//// dz=dz+jj endif else if(i==(ntlay-ceil(ntlay/10))||i==(2*ntlay-ceil(ntlay/10))||i==(3*ntlay-ceil(ntlay/10))||i==(4*ntlay-ceil(ntlay/10))||i==(5*ntlay-ceil(ntlay/10))||i==(6*ntlay-ceil(ntlay/10))||i==(7*ntlay-ceil(ntlay/10))||i==(8*ntlay-ceil(ntlay/10))) dz=dz+jj endif endif endif // if (dz<=0) // dz=0 // endif // print (ceil((nt-1)/2)-ceil(ntlay/10)) // if (i>=18 && i<=40) // dz=dz*((pz[40]-pz[18])+jj)/(pz[40]-pz[18]) // endif // dz=dz*(pz[nt-1]+jj)/pz[nt-1] nn= rip(lamda,hh[i]*1e-06,prof_IM[i]*1e-06)//SLDprof(z,SLD1,SLDA,SLDB,SLDS,lamda) kn=sqrt(ko^2*(nn^2-alpha^2)) //nn*ko*sin(phin) an=exp(cmplx(0,-2)*kn*dz) // anp1=exp(cmplx(0,2)*knp1*(z)) rn=(kn-knp1)/(kn+knp1) Xn=an*((rn+Xnp1)/(1+rn*Xnp1)) // Xn=an*((rn+Xnp1*anp1)/(1+rn*Xnp1*anp1)) Xnp1=Xn knp1=kn endfor //for i XGn=XGn+magsqr(Xn)*DistGauss1(j,q,sigmaq)//Gaussian average over flm thickness+-10A w/ sigma=4); need to find sigma and j for the thickness DGn=DGn+DistGauss1(j,q,sigmaq) endfor //for j XXGn=XXGn+(XGn/DGn)*DistGauss1(jj,0,incsdqq) XDGn=XDGn+DistGauss1(jj,0,incsdqq) // XXGn=XXGn+(XGn/DGn)*DistGauss1(jj,(3*sdqq),incsdqq) // XDGn=XDGn+DistGauss1(jj,(3*sdqq),incsdqq) endfor //for//jj if (rswitch>0) Rcal_out_result= sf*(XXGn/XDGn)*q^4 // else Rcal_out_result= sf*(XXGn/XDGn) endif if (numtype (Rcal_out_result )==1) Rcal_out_result=1 elseif (numtype (Rcal_out_result )==2) Rcal_out_result=0 endif // for (i=0;i0) return rb*q^4 // else return rb endif // return rb*q^4 End Function creflneutrm(pip,pis,prp,prs,Cmatrixp,Cmatrixs) Wave /C Cmatrixp,Cmatrixs Variable /C pip,pis,prp,prs Variable /C aaus, aads,aas, aaup,aadp,aap // Variable /C aabb,apbp,ccdd,cpdp // Variable A,B,C,D Variable RatiorpsR,RatiorpsI,Ratioo Variable rp1,rp2,rs2,rs1,phip,phip1,phip2,phis,phis1,phis2,rhop,rhos Variable rho,dphi Variable sn,pm aaup= Cmatrixp[0][0]*pip-Cmatrixp[1][1]*prp+Cmatrixp[0][1]*pip*prp-Cmatrixp[1][0] aadp= Cmatrixp[0][0]*pip+Cmatrixp[1][1]*prp+Cmatrixp[0][1]*pip*prp+Cmatrixp[1][0] aap=aaup/aadp aaus=Cmatrixs[0][0]*pis-Cmatrixs[1][1]*prs+Cmatrixs[0][1]*pis*prs-Cmatrixs[1][0] aads=Cmatrixs[0][0]*pis+Cmatrixs[1][1]*prs+Cmatrixs[0][1]*pis*prs+Cmatrixs[1][0] aas=aaus/aads rhop=(magsqr(aap)) rhos=(magsqr(aas)) phip2=arctan1p(Real(aadp),Imag(aadp)) phip1=arctan1p(Real(aaup),Imag(aaup)) phip=phip1-phip2 phis2=arctan1p(Real(aads),Imag(aads)) phis1=arctan1p(Real(aaus),Imag(aaus)) phis=phis1-phis2 print phip*180/pi,rhop,phis*180/pi,rhos // pm=0.027 //phase shift due to modul. crystal // dphi=abs(phip-phis) //0.65*0.10+pm) //phase shift due to glass cell strain (vacuum) + modul crystal rho=(rhop+rhos)/2 // rho=RatiorpsI*cos(pm) return rho END Function arctan1p(ar,ai) Variable ar, ai Variable c c=0. if (ai >=0) c=atan2(ai,ar) endif if (ai == 0 && ar < 0) c=pi endif if (ai < 0) c=atan2(ai,ar)+2*pi endif return c End Function DistGauss1(x1,u,s) Variable x1,u,s Variable z1,G1 z1=(x1-u)/s G1=1/(sqrt(2*pi)*s)*exp(-(z1^2)/2)//*s ///<<===???? // G1=cmplx(G1,0) // print G return G1 END Function FitNTRN(w,q): FitFunc ///Do not use this function ; need to be checked!!!!!!!!!!!!!!!!!!!!!!! Wave w; Variable q Variable /C Xn,Xnp1,fn,fnp1,rn,an,anp1,kn,knp1 Variable /C alpha,nn,nnp1,n1,n2,n2A,n2B//,phin,phinp1 Variable z,dz,i,dn, lamda,xi,flmthickness,nolrs,vc,M,redt,SLDA,SLDB,SLDS,SLD1,phi1,ko,j,h lamda=4.62 SLD1=5.69e-06//sapphire///4.14e-06 //Quartz SLDA=1.89e-06//P2VP///1.8e-06//PVP///6.45e-06 //D2O SLDB=1.41e-06//PS///6.64e-06//d-PS///1.43e-06 //BPic SLDS=5.67e-06//d-toluene //SLDS=0.65e-06//toluene // redt=0.08/(273.15+37)//20/(273.15+37)//1.12/(273.15+37)/// // xi=5.2/redt^(0.632) ko=2*pi/lamda n1=rip(lamda,SLD1,0)//cmplx(1-SLD1*lamda^2/(2*pi),0) n2A=rip(lamda,SLDA,0)//cmplx(1-SLDA*lamda^2/(2*pi),0) n2B=rip(lamda,SLDB,0)//cmplx(1-SLDB*lamda^2/(2*pi),0) n2=rip(lamda,SLDS,0)//cmplx(1-SLDS*lamda^2/(2*pi),0) // n2=sqrt(vc*n2A^2+(1-vc)*n2B^2) phi1=asin(lamda*q/(4*pi)) nolrs=80 flmthickness=1200 dz=flmthickness/nolrs alpha=n1*cos(phi1) nnp1=n1 knp1=sqrt(ko^2*(nnp1^2-(alpha^2))) //nnp1*ko*sin(phinp1) Xnp1=cmplx(0,0) for (i=0;i<=nolrs; i=i+1) z=i*dz//-dz/2 // if (i<=nolrs/2) // j=i // else // j=nolrs-i // w[i]=w[j] // endif if (i==nolrs) nn=n1 else // if (i>=nolrs/2) // h=w[nolrs-i-1] // else h=w[i] // endif // if (i>=nolrs/2-w[nolrs] || i<=nolrs/2+w[nolrs] -1) // h=SLDS/1e-06 // endif h=abs(h) w[i]=h nn=rip(lamda,h*1e-06,0)//cmplx(w[i],0)//SLDprof(z,SLD1,SLDA,SLDB,SLDS,lamda) endif kn=sqrt(ko^2*(nn^2-alpha^2)) //nn*ko*sin(phin) an=exp(cmplx(0,-2)*kn*dz) // anp1=exp(cmplx(0,2)*knp1*(z)) rn=(kn-knp1)/(kn+knp1) Xn=an*((rn+Xnp1)/(1+rn*Xnp1)) // Xn=an*((rn+Xnp1*anp1)/(1+rn*Xnp1*anp1)) Xnp1=Xn knp1=kn endfor // Xn=Xn*exp(-2*kn*sqrt(ko^2*(nnp1^2-(alpha^2))) *(20)^2) return magsqr(Xn)*q^4 End Function ProfExp(hn,hn1,an,dsn,cas,xx) Variable hn,hn1,an,dsn,xx,cas Variable y if (cas==0) //even y=(hn-hn1)*exp(-(xx-an)^2/dsn^2)+hn1 //dsn=dsn ,hn1=h(n-1) else y=(hn1-hn)*exp(-(xx-an)^2/dsn^2)+hn endif return y End ///Fit function w/ profile generator ///Make waveforfit (w[i]) nl+2 for (height inc/ substrates)/nl+1 for size of each layers/nl+1 for ratio, an/sigma. Function EProfileS(w,nl,nopntalayer)//, q)//: FitFunc//q,sigmaq,nt,nl) : FitFunc //nl = # of total layers, nt=# of total q points //Variable w Wave w Variable nopntalayer,nl //Variable q//,sigmaq,nt Variable i,j,k,m,nn,n,td,ad,vertexstr//,nopntalayer=10,nl=6 //nopntalayer=#of sublayers of each component(eg,PS) nn=(nl)*10 Make /O /D /N=((nl+1)*nopntalayer +1+(nl+1)) prof,zz //+(nl+1) Make /O /D /N=(nl+1) aa k=1 m=1 vertexstr=1 //td=w[29] aa[0]=0//w[7] prof[0]=w[0] zz[0]=0 for (i=vertexstr;i<=(nl+1);i=i+1) if (i>vertexstr) ad=1 else ad=0 endif aa[i]=ad*(w[(3*nl+3)+(i-1)])+w[(nl+1)+i]+aa[i-1] for (j=0; j<=nopntalayer-1; j=j+1) // for (mm=1; mm<=2;mm=mm+1) if ( m==0) zz[k]=zz[k-1]+(w[(nl+1)+i]*0.1*((nopntalayer-1)-j+1)/(5*(nopntalayer/10)^2+0.5*(nopntalayer/10)))//46.5//21 prof[k]=ProfExp(w[i],w[i-1],aa[i],w[(nl+1)+i]/w[2*(nl+1)+i],m,zz[k]) // if (i>ceil((nl+1)/2) // prof[k]=ProfExp(w[i],w[i-1],aa[i],w[(nl+1)+i]/w[2*(nl+1)+i],m,zz[k]) elseif ( m==1) // aa[i]=aa[i-1]-ad*w[(3*nl+3)+(i-1)] zz[k]=zz[k-1]+w[(nl+1)+i]*0.1*(j+1)/(5*(nopntalayer/10)^2+0.5*(nopntalayer/10))//21//(5.5) prof[k]=ProfExp(w[i],w[i-1],aa[(i-1)]+ad*w[(3*nl+3)+(i-1)],w[(nl+1)+i]/w[2*(nl+1)+i],m,zz[k]) endif if ( j==nopntalayer-1) k=k+1 zz[k]=zz[k-1]+w[(3*nl+3)+i] prof[k]=prof[k-1] endif k=k+1 // aa[i]=aa[i-1]+ad*w[(3*nl+3)+(i-1)] endfor m=m+1 if (m==2) m=0 // if (i>3&& i< 5) // m=m+1 // endif endif endfor return 1 End Function EJMainS( ) String ProPara//defl,sepdata1,veldata1 //calF // Variable r,b,i,v1,z0,df0 String savDF=GetDataFolder(1) Variable NoLayerwoSub=NumVarOrDefault("globNoLayerwoSub", 6) Variable NoPperlayer=NumVarOrDefault("globNoPperlayer", 10) Prompt ProPara, "Choose the wave for Exp parameters:", popup, WaveList("w*",";","") Prompt NoLayerwoSub, "How many # of layers except substrates?:" Prompt NoPperlayer, "How many points in a layer?" DoPrompt "IN nl+2 Ht; nl+1size; nl+1a/sig; nl+1flat tkns: OUT prof vs. zz",ProPara,NoLayerwoSub,NoPperlayer //sepdata1,veldata1,sl,n,dg,yn//,vel,,n Variable/G globNoLayerwoSub=NoLayerwoSub //Save for next time Variable/G globNoPperlayer=NoPperlayer if (V_Flag) return -1 endif Duplicate/O /D $ProPara PrPa EProfileS(PrPa,NoLayerwoSub,NoPperlayer) KillWaves PrPa End Function B4Efit( ) String Qdata String sigmaQdata //defl,sepdata1,veldata1 //calF String savDF=GetDataFolder(1) // Variable NoLayerwoSub=NumVarOrDefault("globNoLayerwoSub", 6) // Variable NoPperlayer=NumVarOrDefault("globNoPperlayer", 10) Prompt Qdata, "Choose the Q data:", popup, WaveList("Q*",";","") Prompt sigmaQdata, "Choose the Q data:", popup, WaveList("sigmaQ*",";","") // Prompt NoPperlayer, "How many points in a layer?" DoPrompt "To Globlize Q & SigmaQ data For Fitting",Qdata, sigmaQdata //sepdata1,veldata1,sl,n,dg,yn//,vel,,n String/G globq4fit=Qdata String/G globdq4fit=sigmaQdata if (V_Flag) return -1 endif // Duplicate/O /D $ProPara PrPa End //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //Dialog function for Parratt Fit with sigmaQ and EProfile Model////Odd # of profile points +1extra (substrate)/////// Function ParrattFitMaindqS( ) ///Works for 6layers w/symetry String RQ4data,dRQ4data,Qzdata,dQdata,www //defl,sepdata1,veldata1 //calF Variable r,b,i,v1,z0,df0 String savDF=GetDataFolder(1) Variable Nlay=NumVarOrDefault("globNlay", 6) Variable Npoint=NumVarOrDefault("globNpoint", 10) // Variable yn=NumVarOrDefault("globyn", 1) Variable syn=NumVarOrDefault("globsyn", 200) Variable nsi=NumVarOrDefault("globnsi", 2) Variable ssi=NumVarOrDefault("globssi", 2) DoWindow RQ4vsQCalFitE // if (V_Flag==0) Prompt RQ4data, "Choose RQ4 Data:", popup, WaveList("RQ*",";","") Prompt dRQ4data, "Choose dRQ4 Data:", popup, WaveList("sigRQ*",";","") Prompt Qzdata, "Choose Q Data:", popup, WaveList("Q*",";","") Prompt dQdata, "Choose dQ Data:", popup, WaveList("sigmaQ*",";","") Prompt www, "Choose Adjtbl Paramters:", popup, WaveList("w*",";","") Prompt syn, "Consider incoherent smear (#(y)/0(n))?" // Prompt yn, "Consider dQ (1(y)/0(n))?" Prompt nsi, "How many # of symetric interface?" Prompt ssi, "Which interface starts the symetry from bottom?" Prompt Nlay, "How many layers except subs?" Prompt Npoint, "How many points per layer?" DoPrompt "Fit w/ Exp SLD profile",RQ4data,dRQ4data,Qzdata,dQdata,www,syn,nsi,ssi,Nlay,Npoint//,yn //sepdata1,veldata1,sl,n,dg,yn//,vel,,n // else // Prompt RQ4data, "Choose RQ4 Data:", popup, WaveList("*",";","WIN:RQ4vsQCalFitE") // Prompt dRQ4data, "Choose dRQ4 Data:", popup, WaveList("*",";","WIN:RQ4vsQCalFitE") // Prompt Qzdata, "Choose Q Data:", popup, WaveList("*",";","WIN:RQ4vsQCalFitE") // Prompt dQdata, "Choose dQ Data:", popup, WaveList("*",";","WIN:RQ4vsQCalFitE") // Prompt www, "Choose Adjtbl Paramters:", popup, WaveList("*",";","") // Prompt yn, "Consider dQ (1(y)/0(n))?" // Prompt nsi, "How many # of symetric interface?" // Prompt ssi, "Which interface starts the symetry from bottom?" // Prompt Nlay, "How many layers except subs?" // Prompt Npoint, "How many points per layer?" // DoPrompt "Fit w/ Exp SLD profile",RQ4data,dRQ4data,Qzdata,dQdata,www,yn,nsi,ssi,Nlay, Npoint //sepdata1,veldata1,sl,n,dg,yn//,vel,,n // endif // Variable/G globSLDn=SLDn //Save for next time // Variable/G globSLDi=SLDi Variable/G globNlay=Nlay //Save for next time Variable/G globNpoint=Npoint Variable/G globsyn=syn // Variable/G globyn=yn Variable/G globnsi=nsi Variable/G globssi=ssi // String/G globrq4data=RQ4data // String/G globdrq4data=dRQ4data String/G globqzdata=Qzdata String/G globdqata=dqdata // String/G globprosldz=ProSLDz,globproz=Proz String/G globwww=www if (V_Flag) return -1 endif // Variable nad // String ss,ss1 // sscanf defl,"%[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]%d",ss,nad //str2num(nm) // if (nad==0) // sscanf defl,"%d%[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]",nad,ss //str2num(nm) // endif // String Rq_Fitname // String na=num2str(nad) // Rq_Fitname="RQ4cal" Duplicate/O /D $RQ4data Rq_Fit Duplicate/O /D $RQ4data RQdata Duplicate/O /D $dRQ4data dRQdata // Duplicate/O /D $Qzdata Qzcal // Duplicate/O /D $dQdata dQcal Duplicate/O /D $www W_coef // WaveStats $Zpos ///For symtric case/////////////////////////////////////////////////////////////////////////////////////////// Variable ii,jj,kk Make /O /D /N=((((Nlay+2)+(Nlay+1)+(Nlay+1)+Nlay+1)-4*(nsi))) tempw //for symetric sub-interfaces jj=1 kk=0 tempw[0]=W_coef[0] for (kk=0;kk<=3;kk=kk+1) for (ii=(kk*(Nlay+1)+1);ii<=((kk+1)*(Nlay+1));ii=ii+1) if (ii <((kk+1)*(Nlay+1)-(ssi-1)-(nsi-1)) || ii >((kk+1)*(Nlay+1)-(ssi-1))) tempw[jj]=W_coef[ii] //print jj,tempw[jj] jj=jj+1 endif endfor endfor //tempw[((((Nlay+2)+(Nlay+1)+(Nlay+1)+Nlay+1)-4*(nsi)))]=1 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Variable/G globNtot=((nlay+1)*Npoint +1+(nlay+1))//Npoint+1+(Nlay+1) // Variable xisqr Variable V_npnts=numpnts($www) Variable nopara=V_npnts // xisqr=0 // for (i=0;i= 5.66", "K0<= 5.8","K3>= 0.94","K7>=3", "K8<= 2.7","K9>= 2.7"}//"K0<= 6.0", "K0>= 5.6", "K3>= 0.94"} //T_Constraints[0] = {"K2<6","K3<6","K4<6","K5<6","K6<6","K7<6","K8<6","K9<6","K10<6","K11<6","K12<6","K7 >= 3","K8 >= 3","K9 >=3"}//"K27 > 0","K23=K27","K24=K26"} FuncFit /H="0000000000000" EProfile4FitS tempw RQdata /W=dRQdata /I=1 /D=Rq_Fit /E=w_fiteps /C=T_Constraints // FuncFit EProfile4FitS tempw RQdata /W=dRQdata /I=1 /D=Rq_Fit /C=T_Constraints [pcsr(A),pcsr(B)] KillWaves tempw,aa//,T_Constraints KillWaves RQdata,dRQdata//,Rq_Fit,Qzcal,dQcal End //To generate E profile and fit data using Ecoeff Wave. //Run B4Efit first Function EProfile4FitS(tempw,qq): FitFunc//,nl, nopntalayer)//: FitFunc//q,sigmaq,nt,nl) : FitFunc //nl = # of total layers, nt=# of total q points //Variable w Wave tempw Variable qq//,nopntalayer,nl //Variable /G globyn=1 //Variable q//,sigmaq,nt NVAR nt1=globNtot, nl1=globNlay, np1=globNpoint, syn1=globsyn,nsi1=globnsi,ssi1=globssi//, yn1=globyn Variable nt=nt1, nl=nl1, nopntalayer=np1,syn=syn1,nsi=nsi1,ssi=ssi1//,yn=yn1 SVAR qqq=globqzdata SVAR dddq=globdqata Wave q4f=$qqq Wave dq4f=$dddq Variable q=q4f[qq] Variable sigmaq=dq4f[qq] //String prof1, zz1 //SVAR prof2=//Variable Variable i,j,k,y,m,nn11,n,td,ad//,nopntalayer=10,nl=6 //nopntalayer=#of sublayers of each component(eg,PS) nn11=(nl)*10 Make /O /D /N=((nl+1)*nopntalayer +1+(nl+1)) prof,zz //+(nl+1) Make /O /D /N=(nl+1) aa ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Make /O /D /N=(((nl+2)+(nl+1)+(nl+1)+nl)+1) w_fit //for semi-symetric profile temp Variable ii,jj,kk//,ratio jj=0 //ratio=tempw[(((nl+2)+(nl+1)+(nl+1)+nl+1)+1)] for (ii=0;ii<=((nl+1)-nsi);ii=ii+1) if (ii <((nl+1)-nsi)) //5 w_fit[jj]=tempw[ii] jj=jj+1 else do w_fit[jj]=tempw[ii-(jj-(ceil(((nl+1+1-0.1)+0)/2)-1))] //ceil(x) smallest interger larger than x jj=jj+1 while (jj<=(1*(nl+1))) // w_fit[(nl+1)]=tempw[((nl+1)-nsi)] // jj=jj+1 endif endfor for (kk=1;kk<=2;kk=kk+1) for (ii=(kk*((nl+1)-nsi)+1);ii<=((kk+1)*((nl+1)-nsi));ii=ii+1) // if (ii <=((kk+1)*((nl+1)-nsi))) //10 w_fit[jj]=tempw[ii] jj=jj+1 // else endfor do w_fit[jj]=tempw[ii-(jj-(ceil(((kk+1)*(nl+1)+(kk*(nl+1))+1+0.1)/2-1)))] //ceil(x) smallest interger larger than x jj=jj+1 while (jj<=(((kk+1)*(nl+1)))) // endif // endfor endfor k=3 for (ii=(kk*((nl+1)-nsi)+1);ii<=((kk+1)*((nl+1)-nsi));ii=ii+1) // if (ii <((kk+1)*((nl+1)-nsi+1))) //10 w_fit[jj]=tempw[ii] jj=jj+1 // else endfor do w_fit[jj]=tempw[ii-(jj-(ceil(((kk+1)*(nl+1)+(kk*(nl+1))+1+0.1)/2)))-2] jj=jj+1 //ceil(x) smallest interger larger than x/ jj=jj+1 while (jj<=((kk+1)*(nl+1))-1) w_fit[((kk+1)*(nl+1))]=10//tempw[((kk+1)*((nl+1)-nsi+1))] // endif // endfor // for (i=0;i<=24;i=i+1) // print i,w_fit[i] // endfor // return 0 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// k=1 m=1 //for symetric 5 layers+subs 0 for semismetry 6 layers eg, si/silane/pvp/ps/tol/ps/pvp/s w_fit=abs(w_fit) //td=w[29] aa[0]=0//w[7] prof[0]=w_fit[0] zz[0]=0 for (i=1;i<=(nl+1);i=i+1) if (i>1) ad=1 else ad=0 endif aa[i]=ad*(w_fit[(3*nl+3)+(i-1)])+w_fit[(nl+1)+i]+aa[i-1] for (j=0; j<=nopntalayer-1; j=j+1) // for (mm=1; mm<=2;mm=mm+1) if ( m==0) zz[k]=zz[k-1]+((w_fit[(nl+1)+i]*0.1*((nopntalayer-1)-j+1)/(5*(nopntalayer/10)^2+0.5*(nopntalayer/10))))//46.5//21 prof[k]=ProfExp(w_fit[i],w_fit[i-1],aa[i],w_fit[(nl+1)+i]/w_fit[2*(nl+1)+i],m,zz[k]) // if (i>ceil((nl+1)/2) // prof[k]=ProfExp(w[i],w[i-1],aa[i],w[(nl+1)+i]/w[2*(nl+1)+i],m,zz[k]) elseif ( m==1) // aa[i]=aa[i-1]-ad*w[(3*nl+3)+(i-1)] zz[k]=zz[k-1]+(w_fit[(nl+1)+i]*0.1*(j+1)/(5*(nopntalayer/10)^2+0.5*(nopntalayer/10)))//21//(5.5) prof[k]=ProfExp(w_fit[i],w_fit[i-1],aa[(i-1)]+ad*w_fit[(3*nl+3)+(i-1)],w_fit[(nl+1)+i]/w_fit[2*(nl+1)+i],m,zz[k]) endif if (j==nopntalayer-1) k=k+1 zz[k]=zz[k-1]+(w_fit[(3*nl+3)+i]) prof[k]=prof[k-1] endif k=k+1 // aa[i]=aa[i-1]+ad*w[(3*nl+3)+(i-1)] endfor m=m+1 if (m==2) m=0 // if (i>3&& i< 5) // m=m+1 // endif endif endfor //NVAR SLD1g=globSLDn, SLDig=globSLDi Variable /C Xn,Xnp1,fn,fnp1,rn,an,anp1,kn,knp1 Variable /C alpha,nn,nnp1,n1,ni//,n2//,n2A,n2B//,phin,phinp1 Variable z,dz,dn, lamda,sdqq,dqq,SLD1,SLDi,phi1,ko,XXGn,XDGn,XGn,DGn,incsdqq //,SLDA,SLDB //Duplicate /O /D prof hh //Duplicate /O /D zz pz //print q, sigmaq, yn lamda=4.62 // print hh[3] // return 1 SLD1=prof[nt-1]*1e-06//SLD1g*1e-06//5.69e-06//sapphire///4.14e-06 //Quartz ////SLD for substrate SLDi=prof[0]*1e-06//SLDig*1e-06 /////SLD for incident medium ko=2*pi/lamda n1=rip(lamda,SLD1,0)//cmplx(1-SLD1*lamda^2/(2*pi),0) ni= rip(lamda,SLDi,0) dqq=sigmaq sdqq=0 incsdqq=1 // if (yn<0.1) // dqq=0 // endif if (syn>0) sdqq=syn incsdqq=syn//sigma for incoherent endif XXGn=0 XDGn=0 for (jj= sdqq;jj<= (sdqq*5);jj=jj+incsdqq) XGn=0 DGn=0 for (j=q-2*dqq;j<=q+2*dqq;j=j+sigmaq) phi1=asin(lamda*j/(4*pi)) // dz=flmthickness/nolrs alpha=ni*cos(phi1) nnp1=n1 knp1=sqrt(ko^2*(nnp1^2-(alpha^2))) //nnp1*ko*sin(phinp1) Xnp1=cmplx(0,0) dz=0 for (i=nt-1;i>=0; i=i-1) // z=pz[i] //if ( i>(ceil(nt/2))) // dz=zz[i]-zz[i-1] if (i==(ceil((nt)/2))) dz=((zz[i]-zz[(i-1)])+(zz[i+1]-zz[i]))/2+jj elseif (i==(nt-1)) dz=(zz[nt-1]-zz[nt-2])/2 elseif ( i==0) dz=(zz[1]-zz[0])/2 else dz=((zz[i]-zz[(i-1)])+(zz[i+1]-zz[i]))/2 endif // if (i==nt) // nn=ni // else nn= rip(lamda,prof[i]*1e-06,0)//SLDprof(z,SLD1,SLDA,SLDB,SLDS,lamda) // endif kn=sqrt(ko^2*(nn^2-alpha^2)) //nn*ko*sin(phin) an=exp(cmplx(0,-2)*kn*dz) // anp1=exp(cmplx(0,2)*knp1*(z)) rn=(kn-knp1)/(kn+knp1) Xn=an*((rn+Xnp1)/(1+rn*Xnp1)) // Xn=an*((rn+Xnp1*anp1)/(1+rn*Xnp1*anp1)) Xnp1=Xn knp1=kn endfor //for i XGn=XGn+magsqr(Xn)*DistGauss1(j,q,sigmaq)//Gaussian average over flm thickness+-10A w/ sigma=4); need to find sigma and j for the thickness DGn=DGn+DistGauss1(j,q,sigmaq) endfor //for j XXGn=XXGn+(XGn/DGn)*DistGauss1(jj,(3*sdqq),incsdqq) XDGn=XDGn+DistGauss1(jj,(3*sdqq),incsdqq) endfor //for//jj // Xn=Xn*exp(-2*kn*sqrt(ko^2*(nnp1^2-(alpha^2))) *(20)^2) // XGn=magsqr(XGn return (XXGn/XDGn)*q^4 // End ////////////// ////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////same as ParrattFitMaindq but for model independent fitting by using sld as adjustible parameters/////////////////// //////////////////////Odd # of profile points (no z)//////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////// ///////////////////////////////// //Dialog function for Parratt Fit with sigmaQ and EProfile Model Function ParrattFitMaindqSIndeM( ) ///Works for 6layers w/symetry String RQ4data,dRQ4data,Qzdata,dQdata,www //defl,sepdata1,veldata1 //calF Variable r,b,i,v1,z0,df0 String savDF=GetDataFolder(1) Variable Nlay=NumVarOrDefault("globNlay", 6) Variable Npoint=NumVarOrDefault("globNpoint", 10) Variable yn=NumVarOrDefault("globyn", 1) Variable syn=NumVarOrDefault("globsyn", 200) Variable ssyn=NumVarOrDefault("globssyn", 1) Variable thick=NumVarOrDefault("globthick", 5) Variable pfyn=NumVarOrDefault("globfpyn", 0) DoWindow RQ4vsQCalFitE // if (V_Flag==0) Prompt RQ4data, "Choose RQ4 Data:", popup, WaveList("RQ*",";","") Prompt dRQ4data, "Choose dRQ4 Data:", popup, WaveList("sigRQ*",";","") Prompt Qzdata, "Choose Q Data:", popup, WaveList("Q*",";","") Prompt dQdata, "Choose dQ Data:", popup, WaveList("sigmaQ*",";","") Prompt www, "Choose Adjtbl Parameters:", popup, WaveList("p*",";","") Prompt syn, "Consider incoherent smear (#(y)/0(n))?" Prompt yn, "Consider dQ (1(y)/0(n))?" Prompt ssyn, "Is the interface symetric (1(y)/0(n))?" Prompt thick, "Scale for thickness (eg. 1)?" Prompt pfyn, "Did you cursor for region fitting (1(y)/0(n))?" DoPrompt "Fit w/ Abtr SLD profile",RQ4data,dRQ4data,Qzdata,dQdata,www,syn,yn,ssyn,thick,pfyn //sepdata1,veldata1,sl,n,dg,yn//,vel,,n // else // Prompt RQ4data, "Choose RQ4 Data:", popup, WaveList("*",";","WIN:RQ4vsQCalFitE") // Prompt dRQ4data, "Choose dRQ4 Data:", popup, WaveList("*",";","WIN:RQ4vsQCalFitE") // Prompt Qzdata, "Choose Q Data:", popup, WaveList("*",";","WIN:RQ4vsQCalFitE") // Prompt dQdata, "Choose dQ Data:", popup, WaveList("*",";","WIN:RQ4vsQCalFitE") // Prompt www, "Choose Adjtbl Paramters:", popup, WaveList("*",";","") // Prompt yn, "Consider dQ (1(y)/0(n))?" // Prompt nsi, "How many # of symetric interface?" // Prompt ssi, "Which interface starts the symetry from bottom?" // Prompt Nlay, "How many layers except subs?" // Prompt Npoint, "How many points per layer?" // DoPrompt "Fit w/ Exp SLD profile",RQ4data,dRQ4data,Qzdata,dQdata,www,yn,nsi,ssi,Nlay, Npoint //sepdata1,veldata1,sl,n,dg,yn//,vel,,n // endif // Variable/G globSLDn=SLDn //Save for next time // Variable/G globSLDi=SLDi // Variable/G globNlay=Nlay //Save for next time Variable/G globsyn=syn Variable/G globyn=yn Variable/G globssyn=ssyn Variable/G globpfyn=pfyn String/G globqzdata=Qzdata String/G globdqata=dqdata // Variable/G globnsi=nsi // Variable/G globssi=ssi // String/G globwww=www if (V_Flag) return -1 endif // Variable nad // String ss,ss1 // sscanf defl,"%[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]%d",ss,nad //str2num(nm) // if (nad==0) // sscanf defl,"%d%[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]",nad,ss //str2num(nm) // endif // String Rq_Fitname // String na=num2str(nad) // Rq_Fitname="RQ4cal" Duplicate/O /D $RQ4data Rq_Fit Duplicate/O /D $RQ4data RQdata Duplicate/O /D $dRQ4data dRQdata // Duplicate/O /D $Qzdata Qzcal // Duplicate/O /D $dQdata dQcal Duplicate/O /D $www W_coef // WaveStats $Zpos ///For symtric case/////////////////////////////////////////////////////////////////////////////////////////// Variable/G globNpoint=(ceil(numpnts($www)/2)-1) ///only for this case Variable nopara=globNpoint Make /O /D /N=(nopara+2) tempw Variable ii,jj,kk if (ssyn>0) for (i=0;i<=(nopara);i=i+1) tempw[i]=W_coef[i] // print tempw[i] endfor endif // if (thick<0.1) // thick=1 // endif tempw[(nopara+1)]=thick // scaling factor for total thickness //print Rq_Fit String wname="RQ4vsQCalFitE" // Make/O/T/N=2 T_Constraints //T_Constraints[0] = {"K0 >=5.66","K8 <= 5.8"} //T_Constraints[0] = {"K2<6","K3<6","K4<6","K5<6","K6<6","K7<6","K8<6","K9<6","K10<6","K11<6","K12<6","K7 >= 3","K8 >= 3","K9 >=3"}//"K27 > 0","K23=K27","K24=K26"} //? /H="100000000000000000000000000000000" if (pfyn==1) FuncFit /H="10000000000000000000000000000000000000000000000000000000000000000" EProfile4FitSIndeM tempw RQdata[pcsr(A),pcsr(B)] /W=dRQdata /E=profeps /I=1 /D=Rq_Fit ///C=T_Constraints else FuncFit /H="10000000000000000000000000000000000000000000000000000000000000000" EProfile4FitSIndeM tempw RQdata /W=dRQdata /E=profeps /I=1 /D=Rq_Fit ///C=T_Constraints endif // FuncFit EProfile4FitS tempw RQdata /W=dRQdata /I=1 /D=Rq_Fit /C=T_Constraints thick= tempw[(nopara+1)] Variable/G globthick=thick // KillWaves tempw//,aa//,T_Constraints KillWaves RQdata,dRQdata//,Rq_Fit,Qzcal,dQcal End //To generate E profile and fit data using Ecoeff Wave. //Run B4Efit first Function EProfile4FitSIndeM(w,qq): FitFunc//,nl, nopntalayer)//: FitFunc//q,sigmaq,nt,nl) : FitFunc //nl = # of total layers, nt=# of total q points //Variable w Wave w Variable qq//,nopntalayer,nl //Variable /G globyn=1 //Variable q//,sigmaq,nt NVAR nt1=globNpoint, syn1=globsyn, yn1=globyn, ssyn1=globssyn Variable nt=nt1,syn=syn1,yn=yn1,ssyn=ssyn1 SVAR qqq=globqzdata SVAR dddq=globdqata Wave q4f=$qqq Wave dq4f=$dddq Variable q=q4f[qq] Variable sigmaq=dq4f[qq] Variable i,j,k,y,m,nn11,n,td,ad//,nopntalayer=10,nl=6 //nopntalayer=#of sublayers of each component(eg,PS) Variable ii,jj,kk Variable /C Xn,Xnp1,fn,fnp1,rn,an,anp1,kn,knp1 Variable /C alpha,nn,nnp1,n1,ni//,n2//,n2A,n2B//,phin,phinp1 Variable z,dz,dn,dp, lamda,sdqq,dqq,SLD1,SLDi,phi1,ko,XXGn,XDGn,XGn,DGn,incsdqq //,SLDA,SLDB lamda=4.62 Make /O /D /N=(2*nt+1) prof,zz,dzz//,dprof //+(nl+1) // dprof[0]=prof[0] // dzz[0]=0 dqq=sigmaq sdqq=0 incsdqq=1 if (yn<0.1) dqq=0 endif if (syn>0) sdqq=syn incsdqq=syn//sigma for incoherent endif dp=0 zz[0]=0 // w[0]=5.67 if (w[0]<(5.67-0.0567)) w[0]=5.67-0.0567 elseif (w[0]>(5.67+0.0567)) w[0]=5.67+0.0567 endif prof[0]=w[0] if (ssyn==1) for (i=0;i<=(nt);i=i+1) // if (w[i]<0.98 ) // w[i]=abs(abs(w[i])-0.5) // endif if (abs(w[i])>20) w[i]=w[i]/1000 endif prof[i]=abs(w[i]) if (i100) // dp=100 // elseif (dp<0.01) // dp=0.01 // endif if (i==0) dzz[i]=abs(w[nt+1])*dp/2 zz[i]=0 else dzz[i]=abs(w[nt+1])*dp zz[i]=zz[i-1]+dzz[i] endif endfor // dzz[0]=abs(w[nt+1])*dp/2 for (i=(nt+1);i<=(2*nt);i=i+1) prof[i]=prof[((2*nt)-i)] dzz[i]=dzz[((2*nt)-i)] if (i==(2*nt)) zz[i]=zz[i-1]+dzz[0]*2 /// For dzz[1], the equal thickness of profile slabs are assumed. else zz[i]=zz[i-1]+dzz[i] endif endfor endif // zz[2*nt]=zz[2*nt-1]+10 // prof[2*nt]=prof[(2*nt-1)] SLD1=prof[(2*nt)]*1e-06//SLD1g*1e-06//5.69e-06//sapphire///4.14e-06 //Quartz ////SLD for substrate SLDi=prof[0]*1e-06//SLDig*1e-06 /////SLD for incident medium ko=2*pi/lamda n1=rip(lamda,SLD1,0)//cmplx(1-SLD1*lamda^2/(2*pi),0) ni= rip(lamda,SLDi,0) XXGn=0 XDGn=0 for (jj= (sdqq);jj<= (5*sdqq);jj=jj+incsdqq) XGn=0 DGn=0 for (j=q-2*dqq;j<=q+2*dqq;j=j+sigmaq) phi1=asin(lamda*j/(4*pi)) // dz=flmthickness/nolrs alpha=ni*cos(phi1) nnp1=n1 knp1=sqrt(ko^2*(nnp1^2-(alpha^2))) //nnp1*ko*sin(phinp1) Xnp1=cmplx(0,0) dz=0 for (i=(2*nt);i>=0; i=i-1) // // z=pz[i] if (i==0) dz=(zz[1]-zz[0])/2 elseif (i==(2*nt)) dz=(zz[i]-zz[i-1])/2 else dz=((zz[i]-zz[i-1])+(zz[i+1]-zz[i]))/2 endif if (i==(ceil(nt))) dz=dz+jj endif nn= rip(lamda,prof[i]*1e-06,0)//SLDprof(z,SLD1,SLDA,SLDB,SLDS,lamda) // endif kn=sqrt(ko^2*(nn^2-alpha^2)) //nn*ko*sin(phin) an=exp(cmplx(0,-2)*kn*dz) // anp1=exp(cmplx(0,2)*knp1*(z)) rn=(kn-knp1)/(kn+knp1) Xn=an*((rn+Xnp1)/(1+rn*Xnp1)) // Xn=an*((rn+Xnp1*anp1)/(1+rn*Xnp1*anp1)) Xnp1=Xn knp1=kn // if (real(Xn)>1) // Xn=cmplx(1,imag(Xn)) // elseif (real(Xn)<01) // Xn=cmplx(0,imag(Xn)) // endif endfor //for i //Gaussian average over flm thickness+-10A w/ sigma=4); need to find sigma and j for the thickness DGn=DGn+DistGauss1(j,q,sigmaq) endfor //for j XXGn=XXGn+(XGn/DGn)*DistGauss1(jj,(3*sdqq),incsdqq) XDGn=XDGn+DistGauss1(jj,(3*sdqq),incsdqq) endfor //for//jj // Xn=Xn*exp(-2*kn*sqrt(ko^2*(nnp1^2-(alpha^2))) *(20)^2) // XGn=magsqr(XGn return (XXGn/XDGn)*q^4 // End //////////////////////// ////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////same as ParrattFitMaindq but for general fitting by /////////////////// //////////////////////Odd # of profile points (no z)//////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////// ///////////////////////////////// //Dialog function for Parratt Fit with sigmaQ and EProfile Model Function FitRgeneral( ) ///Works for 6layers w/symetry String RQ4data,dRQ4data,Qzdata,dQdata,www //defl,sepdata1,veldata1 //calF Variable r,b,i,v1,z0,df0 String savDF=GetDataFolder(1) Variable Nlay=NumVarOrDefault("globNlay", 6) Variable Npoint=NumVarOrDefault("globNpoint", 10) Variable yn=NumVarOrDefault("globyn", 1) Variable syn=NumVarOrDefault("globsyn", 200) Variable ssyn=NumVarOrDefault("globssyn", 1) Variable thick=NumVarOrDefault("globthick", 5) Variable pfyn=NumVarOrDefault("globfpyn", 0) DoWindow RQ4vsQCalFitE // if (V_Flag==0) Prompt RQ4data, "Choose RQ4 Data:", popup, WaveList("RQ*",";","") Prompt dRQ4data, "Choose dRQ4 Data:", popup, WaveList("sigRQ*",";","") Prompt Qzdata, "Choose Q Data:", popup, WaveList("Q*",";","") Prompt dQdata, "Choose dQ Data:", popup, WaveList("sigmaQ*",";","") Prompt www, "Choose Adjtbl Paramters:", popup, WaveList("w*",";","") Prompt syn, "Consider incoherent smear (#(y)/0(n))?" Prompt yn, "Consider dQ (1(y)/0(n))?" Prompt pfyn, "Did you cursor for region fitting (1(y)/0(n))?" Prompt Nlay, "How many layers except subs?" Prompt Npoint, "How many points per layer?" DoPrompt "Fit w/ Abtr SLD profile",RQ4data,dRQ4data,Qzdata,dQdata,www,syn,yn,pfyn,Nlay,Npoint //sepdata1,veldata1,sl,n,dg,yn//,vel,,n Variable/G globsyn=syn Variable/G globyn=yn Variable/G globpfyn=pfyn Variable/G globNpoint=Npoint Variable/G globNlay=Nlay String/G globrq4data=RQ4data String/G globdrq4data=dRQ4data String/G globqzdata=Qzdata String/G globdqata=dqdata String/G globwww=www if (V_Flag) return -1 endif Duplicate/O /D $RQ4data Rq_Fit Duplicate/O /D $RQ4data RQdata Duplicate/O /D $dRQ4data dRQdata Duplicate/O /D $www W_coef // WaveStats $Zpos ///For symtric case/////////////////////////////////////////////////////////////////////////////////////////// Variable/G globNpara=(numpnts($www)) ///only for this case Variable nopara=globNpara Make /O /D /N=(nopara) tempw,weps1 Make /O /T /N=(nopara) namepara weps1=0.01 tempw=0 Variable ii,jj,kk // if (ssyn>0) for (i=0;i=1","K4 >=1"}//,"K6 >= 0"}//,"K6 <= K8"}//,"K5 >= 0","K6 >= 0","K7 >= 0","K8 >= 0"} //T_Constraints[0] = {"K2<6","K3<6","K4<6","K5<6","K6<6","K7<6","K8<6","K9<6","K10<6","K11<6","K12<6","K7 >= 3","K8 >= 3","K9 >=3"}//"K27 > 0","K23=K27","K24=K26"} //? /H="100000000000000000000000000000000" if (pfyn==1) FuncFit /H="000000" Profile4Fit tempw RQdata[pcsr(A),pcsr(B)] /W=dRQdata /E=weps /I=1 /D=Rq_Fit ///C=T_Constraints else FuncFit /H="101000" Profile4Fit tempw RQdata /W=dRQdata /E=weps1 /I=1 /D=Rq_Fit /C=T_Constraints endif elseif (Nlay==2) Make/O/T/N=7 T_Constraints T_Constraints[0] = {"K4<=K7/4","K5 <= K7/4","K5 <= K8/4","K6 <= K8/4","K4 >1","K5 >1","K6 >1"}//,"K6 >= 0"}//,"K6 <= K8"}//,"K5 >= 0","K6 >= 0","K7 >= 0","K8 >= 0"} //T_Constraints[0] = {"K2<6","K3<6","K4<6","K5<6","K6<6","K7<6","K8<6","K9<6","K10<6","K11<6","K12<6","K7 >= 3","K8 >= 3","K9 >=3"}//"K27 > 0","K23=K27","K24=K26"} //? /H="100000000000000000000000000000000" if (pfyn==1) FuncFit /H="000000000" Profile4Fit tempw RQdata[pcsr(A),pcsr(B)] /W=dRQdata /E=weps /I=1 /D=Rq_Fit ///C=T_Constraints else FuncFit /H="100100000" Profile4Fit tempw RQdata /W=dRQdata /E=weps1 /I=1 /D=Rq_Fit /C=T_Constraints endif elseif (Nlay==3) Make/O/T/N=10 T_Constraints T_Constraints[0] = {"K5 <=K9/4","K6 <= K9/4","K6 <= K10/4","K7 <= K10/4","K7 <= K11/4","K8 <= K11/4","K5 >1","K6 >1","K7 >1","K8 >1"}//,"K6 >= 0"}//,"K6 <= K8"}//,"K5 >= 0","K6 >= 0","K7 >= 0","K8 >= 0"} //T_Constraints[0] = {"K2<6","K3<6","K4<6","K5<6","K6<6","K7<6","K8<6","K9<6","K10<6","K11<6","K12<6","K7 >= 3","K8 >= 3","K9 >=3"}//"K27 > 0","K23=K27","K24=K26"} //? /H="100000000000000000000000000000000" if (pfyn==1) FuncFit /H="000000000000" Profile4Fit tempw RQdata[pcsr(A),pcsr(B)] /W=dRQdata /E=weps /I=1 /D=Rq_Fit ///C=T_Constraints else FuncFit /H="100010000000" Profile4Fit tempw RQdata /W=dRQdata /E=weps1 /I=1 /D=Rq_Fit /C=T_Constraints endif elseif (Nlay==4) Make/O/T/N=13 T_Constraints T_Constraints[0] = {"K6 <=K11/4","K7 <= K11/4","K7 <= K12/4","K8 <= K12/4","K8 <= K13/4","K9 <= K13/4","K9 <= K14/4","K10 <= K14/4","K6 >1","K7 >1","K8 >1","K9 >1","K10>1"}//,"K6 >= 0"}//,"K6 <= K8"}//,"K5 >= 0","K6 >= 0","K7 >= 0","K8 >= 0"} //T_Constraints[0] = {"K2<6","K3<6","K4<6","K5<6","K6<6","K7<6","K8<6","K9<6","K10<6","K11<6","K12<6","K7 >= 3","K8 >= 3","K9 >=3"}//"K27 > 0","K23=K27","K24=K26"} //? /H="100000000000000000000000000000000" if (pfyn==1) FuncFit /H="000000000000000" Profile4Fit tempw RQdata[pcsr(A),pcsr(B)] /W=dRQdata /E=weps /I=1 /D=Rq_Fit ///C=T_Constraints else FuncFit /H="100001000000000" Profile4Fit tempw RQdata /W=dRQdata /E=weps1 /I=1 /D=Rq_Fit /C=T_Constraints endif elseif (Nlay==5) Make/O/T/N=(16+2*7+3*2) T_Constraints T_Constraints[0] = {"K3 >0","K4 >0","K5 >0","K3 <5","K4 < 5","K5 <5","K1 K5","K2 K4","K7 K12","K8 K11","K9 K10","K13 K17","K14 K16"}//"K8 <= K14/4","K T_Constraints[20] = {"K7 <=K13/4","K8 <= K13/4","K8 <= K14/4","K9 <= K14/4","K9 <= K15/4","K10 <= K15/4","K10 <= K16/4","K11 <= K16/4","K11 <= K17/4","K12 <= K17/4","K7 >1","K8 >1","K9 >1","K10 >1","K11>1","K12>1"}//,"K6 >= 0"}//,"K6 <= K8"}//,"K5 >= 0","K6 >= 0","K7 >= 0","K8 >= 0"} //T_Constraints[0] = {"K2<6","K3<6","K4<6","K5<6","K6<6","K7<6","K8<6","K9<6","K10<6","K11<6","K12<6","K7 >= 3","K8 >= 3","K9 >=3"}//"K27 > 0","K23=K27","K24=K26"} //? /H="100000000000000000000000000000000" if (pfyn==1) FuncFit /H="000000000000000000" Profile4Fit tempw RQdata[pcsr(A),pcsr(B)] /W=dRQdata /E=weps /I=1 /D=Rq_Fit ///C=T_Constraints else FuncFit /H="100000100000000000" Profile4Fit tempw RQdata /W=dRQdata /E=weps1 /I=1 /D=Rq_Fit /C=T_Constraints endif elseif (Nlay==6) Make/O/T/N=19 T_Constraints T_Constraints[0] = {"K8 <=K15/4","K9 <= K15/4","K9 <= K16/4","K10 <= K16/4","K10 <= K17/4","K11 <= K17/4","K11 <= K18/4","K12 <= K18/4","K12 <= K19/4","K13 <= K19/4","K13 <= K20/4","K14 <= K20/4","K8 >1","K9 >1","K10 >1","K11 >1","K12>1","K13>1","K14>1"}//,"K6 >= 0"}//,"K6 <= K8"}//,"K5 >= 0","K6 >= 0","K7 >= 0","K8 >= 0"} //T_Constraints[0] = {"K2<6","K3<6","K4<6","K5<6","K6<6","K7<6","K8<6","K9<6","K10<6","K11<6","K12<6","K7 >= 3","K8 >= 3","K9 >=3"}//"K27 > 0","K23=K27","K24=K26"} //? /H="100000000000000000000000000000000" if (pfyn==1) FuncFit /H="000000000000000000000" Profile4Fit tempw RQdata[pcsr(A),pcsr(B)] /W=dRQdata /E=weps /I=1 /D=Rq_Fit ///C=T_Constraints else FuncFit /H="100000010000000000000" Profile4Fit tempw RQdata /W=dRQdata /E=weps1 /I=1 /D=Rq_Fit /C=T_Constraints endif endif // FuncFit EProfile4FitS tempw RQdata /W=dRQdata /I=1 /D=Rq_Fit /C=T_Constraints // thick= tempw[(nopara +1)] // Variable/G globthick=thick // KillWaves tempw//,aa//,T_Constraints KillWaves dRQdata//,RQdata,//,Rq_Fit,Qzcal,dQcal End //To generate E profile and fit data using Ecoeff Wave. //Run B4Efit first Function Profile4Fit(w,qq): FitFunc//,nl, nopntalayer)//: FitFunc//q,sigmaq,nt,nl) : FitFunc //nl = # of total layers, nt=# of total q points //Variable w Wave w Variable qq//,nopntalayer,nl Variable V_chisq //Variable /G globyn=1 //Variable q//,sigmaq,nt NVAR npt1=globNpoint, syn1=globsyn, yn1=globyn,npara1=globNpara,lay1=globNlay//, sf=globsf//, ssyn1=globssyn Variable npt=npt1, npara=npara1,syn=syn1,yn=yn1,lay=lay1//,ssyn=ssyn1 SVAR qqq=globqzdata SVAR dddq=globdqdata //SVAR dddr=globdrq4data SVAR fitfun1=globfitfun String /G globprew NVAR s2sld1=globStop2SLD //SVAR df=globweps Variable /G globautoR,globautowav Wave q4f=$qqq Wave dq4f=$dddq Wave /D fitfun=$fitfun1//, w1=tempw //Wave /D prew=$prew1 Variable q=q4f[qq] Variable sigmaq=dq4f[qq] Variable i,j,k,y,m,nn11,n,td,ad//,nopntalayer=10,nl=6 //nopntalayer=#of sublayers of each component(eg,PS) Variable ii,jj,kk,notp,Rq_Fitout,deltad Variable /C Xn,Xnp1,fn,fnp1,rn,an,anp1,kn,knp1 Variable /C alpha,nn,nnp1,n1,ni//,n2//,n2A,n2B//,phin,phinp1 Variable z,dz,dn,dp, lamda,sdqq,dqq,SLD1,SLDi,phi1,ko,XXGn,XDGn,XGn,DGn,incsdqq,zzorg,Erfv //,SLDA,SLDB // lamda=4.62 //Rq_Fitout=0 notp=npt*(lay+1)+1 //No. of total points Make /O /D /N=(notp) prof,zz//,dprof //+(nl+1) String/G globprosldz="prof",globproz="zz" Make /O /D /N=(npara) weps1//,prew String/G globprew Make /O /D /N=(npara) $globprew Wave /D prew=$globprew String/G globweps="weps1"//,globprew="prew" Variable Rq_Fitpre=NumVarOrDefault("globRq_Fitpre", 1) // Variable /G globStop2SLD // Make /O /N=(lay+1) $fitfun // String/G globfitfun="fitfun" // fitfun=0 //default values (erf) for functions // prew=1 Variable /G globsf // Variable sf=sf1 Variable sf=w[npara-1] //Wave drr4f=$dddr //Wave dRQ_temp // dRQ_temp=sf*drr4f Variable/G cslay //massnorm=0,//=10000 // Make /O/N=(lay+1) cslay1=10000 Variable inn globsf=sf npara=npara-1 Variable /G globcmplxcalyn Wave /D im_SLD_in//=$im_SLD_in1 Make /O /D /N=(notp) prof_IM // for (i=(lay+1)+2;i<=(2*(lay+1));i=i+1) // w[i]=abs(w[i]) // endfor // Variable temp15=w[15] ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////building a model profile against z ///////////////////////////////////////// if (abs(w[npara-(2*lay+1)])<10) zz[0]=-abs(w[npara-(2*lay+1)])*2-10 elseif (abs(w[npara-(2*lay+1)])>100) zz[0]=-abs(w[npara-(2*lay+1)])*2-100 else zz[0]=-abs(w[npara-(2*lay+1)])*3 endif zz[1]=-abs(w[npara-(2*lay+1)])*2 //initial point move back to 2times of sigma (of the first layer) ii=1 for (i=0;i<=(lay);i=i+1) // # of interfaces is no. of layers +1 // w[npara-(2*lay+1)+i]=abs(w[npara-(2*lay+1)+i]) if (abs(w[npara-(2*lay+1)+i])<1e-04) //to elliminate a bug when a becomes 0 w[npara-(2*lay+1)+i]=1e-04///*sign(w[npara-(2*lay+1)+i]) endif // if (fitfun[ii]!=8) for (j=1; j<=(npt);j=j+1) //improved the SLD profile builder if (j==1&&i!=0) zz[ii]=zz[ii-1]+(zz[ii-1]-zz[ii-2]) elseif (j100) zz[notp-1]=zz[notp-2]+100 else zz[notp-1]=zz[notp-2]+ abs(w[npara-(1*lay+1)]) // add the last point of SLD endif // endif //endif (fitfun[i]!=8) endfor ii=1 zzorg=0 for (i=0;i<=(lay);i=i+1) if (i>0) zzorg=zzorg+w[npara-(lay-(i-1))] endif for (j=1; j<=(npt);j=j+1) if (fitfun[i]==0) Erfv=(erf((zz[ii]-zzorg)/((w[(lay+2)+i])))/2+0.5) //modifying erf adaptable to profile elseif (fitfun[i]==1) if ((zz[ii]-zzorg)>=2*(w[(lay+2)+i])) Erfv=1 else Erfv=exp((-(((zz[ii]-zzorg)-2*(w[(lay+2)+i]))/((w[(lay+2)+i])))^2)/2) //leftGaussian endif elseif (fitfun[i]==2) if ((zz[ii]-zzorg)<=-2*(w[(lay+2)+i])) Erfv=0 else Erfv=1-exp((-(((zz[ii]-zzorg)+2*(w[(lay+2)+i]))/((w[(lay+2)+i])))^2)/2) //rightGaussian endif elseif (fitfun[i]==3) if ((zz[ii]-zzorg)>=2*(w[(lay+2)+i])) Erfv=1 elseif ((zz[ii]-zzorg)<=-2*(w[(lay+2)+i])) Erfv=0 else Erfv=1-((((zz[ii]-zzorg)-2*(w[(lay+2)+i]))/(4*abs(w[(lay+2)+i])))^2) //leftParabola endif elseif (fitfun[i]==4) if ((zz[ii]-zzorg)>=2*(w[(lay+2)+i])) Erfv=1 elseif ((zz[ii]-zzorg)<=-2*(w[(lay+2)+i])) Erfv=0 else Erfv=((((zz[ii]-zzorg)+2*(w[(lay+2)+i]))/(4*(w[(lay+2)+i])))^2) //rightParabola endif elseif (fitfun[i]==5) if ((zz[ii]-zzorg)>=2*(w[(lay+2)+i])) Erfv=1 elseif ((zz[ii]-zzorg)<=-2*(w[(lay+2)+i])) Erfv=0 else Erfv=exp((-(abs((zz[ii]-zzorg)-2*(w[(lay+2)+i]))/((w[(lay+2)+i]))))) //leftExp endif elseif (fitfun[i]==6) if ((zz[ii]-zzorg)>=2*(w[(lay+2)+i])) Erfv=1 elseif ((zz[ii]-zzorg)<=-2*(w[(lay+2)+i])) Erfv=0 else Erfv=1-exp((-(((zz[ii]-zzorg)+2*(w[(lay+2)+i]))/((w[(lay+2)+i]))))) //rightExp endif elseif (fitfun[i]==7) if ((zz[ii]-zzorg)>=2*(w[(lay+2)+i])) Erfv=1 elseif ((zz[ii]-zzorg)<=-2*(w[(lay+2)+i])) Erfv=0 else Erfv=((zz[ii]-zzorg)+2*(w[(lay+2)+i]))/(4*(w[(lay+2)+i])) //Linear endif elseif (fitfun[i]==8) if ((zz[ii]-zzorg)>=2*(w[(lay+2)+i])) Erfv=1 elseif ((zz[ii]-zzorg)<=-2*(w[(lay+2)+i])) Erfv=0 else Erfv=MyOwn(zz[ii],zzorg,(w[(lay+2)+i])) endif // elseif (fitfun[i]==9) // if (cslay>9999) //figure out which interface is cspline... // cslay=i // endif // cslay1[i]=i //ith interface; spline on // if ((zz[ii]-zzorg)>0)//2*(w[(lay+2)+i])) // // Erfv=1 // elseif ((zz[ii]-zzorg)<0)//-2*(w[(lay+2)+i])) // Erfv=0 // else // Erfv=0.5 // Erfv=(erf((zz[ii]-zzorg)/((w[(lay+2)+i])))/2+0.5) //error func // endif endif // Erfv=abs(Erfv) prof[ii]=w[i]*(1-Erfv)+w[i+1]*(Erfv) if (globcmplxcalyn>1) prof_IM[ii]=im_SLD_in[i]*(1-Erfv)+im_SLD_in[i+1]*(Erfv) else prof_IM[ii]=0 endif // if (prof[ii]>10) // // prof[ii]=10 // <<<=== specify maximum SLD !!!!?? // endif // ii=ii+1 endfor endfor // zz[0]=-w[npara-(2*lay+1)]*3//-w[npara-(2*lay+1)]/10 // zz[1]=-w[npara-(2*lay+1)]*2//-w[npara-(2*lay+1)]/10 prof[0]=w[0] prof_IM[0]=im_SLD_in[0] prof_IM[(notp-1)]=im_SLD_in[(lay+1)] prof[(notp-1)]=w[(lay+1)] // sld of substrate // w[15] = temp15 if (cslay>0) //Cubic Slpine Smoothing all the interface no matter which interface has this function... // Make /O/N=(4) profcs//,zzcs // Make /O/N=(npt*(lay+1)+1) proftemp,zztemp Duplicate/O zz zztemp Duplicate/O prof proftemp Interpolate2/T=2/N=(npt*(lay+1)+1)/F=1 /Y=proftemp/X=zztemp zz,prof //[cslay*npt,(cslay+1)*npt] for (inn=0;inn<=(npt*(lay+1));inn=inn+1) prof[inn]=proftemp[inn] zz[inn]=zztemp[inn] endfor // Numx2SLD() // ConstdzSLD() KillWaves proftemp,zztemp // smooth/E=2 7,proftemp // Duplicate/O proftemp prof // Duplicate/O zztemp, zz // prof[0]=w[0] // prof_IM[0]=im_SLD_in[0] // prof_IM[(notp-1)]=im_SLD_in[(lay+1)] // prof[(notp-1)]=w[(lay+1)] // sld of substrate // for (inn=0;inn<=(npt*(lay+1));inn=inn+1) // prof[inn]=proftemp[inn] // endfor // ConstdzSLD() // prof[0]=w[0] // prof[(notp-1)]=w[(lay+1)] // sld of substrate endif // Smooth/E=2 13, prof // Variable ci // for (ci=cslay*npt+1;ci<=(cslay+1)*npt;ci=ci+1) // prof[ci]=profcs[ci] // zz[ci]=zzcs[ci] // endfor // KillWaves zzcs,profcs,zztemp,proftemp // endif // Variable /G globmass // Integrate/METH=1 prof/X=zz/D=prof_INT // globmass=(1351.16+prof_INT[60])/5.66 if (s2sld1==1) s2sld1=0 return 0 endif // endif // end if for the # of layers >=1 ///////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // String/G globImSLDin="im_SLD_in",globImSLDout="im_SLD_out" String/G globImSLDin="prof_IM" if (globautoR>0&&globautowav>0) // if (stringmatch(dddq,"SelectData")==1) // Wave dQ_Fit1=SimdQ_Pre_Cal,Qz_Fit1=SimQ_Pre_Cal // else Wave dQ_Fit1=$dddq+"_Pre_Cal",Qz_Fit1=$qqq+"_Pre_Cal" // endif Rq_Fitout=ParrattNTRNdq(Qz_Fit1, dQ_Fit1,notp) else Rq_Fitout=ParrattNTRNdq(q, sigmaq,notp) endif // for (i=0;i<=(lay);i=i+1) // # of interfaces is no. of layers +1 // w[npara-(2*lay+1)+i]=abs(w[npara-(2*lay+1)+i]) // endfor //print Rq_Fitout npara=npara+1 Variable/G globRq_Fitpre=Rq_Fitpre for (i=0;i1) //weps1[i]=1 //endif if (abs(weps1[i])<1e-06) weps1[i]=1e-06*sign(weps1[i]) endif if (abs(weps1[i])>1e+06) weps1[i]=1e+06*sign(weps1[i]) endif endfor Rq_Fitpre=Rq_Fitout //print V_chisq //V_chisq=V_chisq/(sf*sf) return Rq_Fitout // End /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Function CCSMfit1() //To fit SYmetric or Asym for ccell geometry.NLay=5(sym),6(asymw/Si),7(symw/tail),8(Asymw/Si&tail) //String cntrlName Variable/G globpfyn,globNpara,globNlay,globNpoint,globcmplxcalyn String/G globwww,globT_Constraints_temp,globrq4data,globdrq4data,globqzdata//, globprew SVAR checkhold1=globcheckhold SVAR ExptTitle=globExptTitle NVAR syn1=globsyn,rswitch=globrswitch Variable /G globsf//incohenrent smearing length Variable pfyn=globpfyn,nopara=globNpara,Nlay=globNlay,syn=syn1,Npoint_per_Lay=globNpoint//,sf=sf1 String w_fit_temp=globwww,TC_temp=globT_Constraints_temp//,weps=globweps String rdata=globrq4data, drdata=globdrq4data, qzdata1=globqzdata Wave checkhold=$checkhold1 Wave w_fit=$w_fit_temp,RQdata=$rdata,dRQdata=$drdata, qzdata=$qzdata1 Wave /T T_Constraints_temp=$TC_temp Variable mnm=NumVarOrDefault("massnorm", 1) DoWindow /N AdvanceFit Prompt mnm, "Intg[beta(solvent)-beta(z)] (for all z) = ?" DoPrompt "SLDmass for mass conservation:",mnm if (V_Flag|| NLay<5 ||NLay>9) return -1 endif Variable /G massnorm=mnm Variable /G cslay=0 Variable i,j,k String holdstring,holdstring1="" print "*****", ExptTitle, "Fitting Started .....................................................................v v v v v" Duplicate /O T_Constraints_temp T_Constraints_temp_temp // if (cmpstr(cntrlName,"rst1")==0) // FitRgeneral2() // endif SetWindow $ExptTitle hook=$" " //kwTopWin Make /O/D/N=((NLay-Ceil(NLay/2))*3+4) tempw1,checkholdc Duplicate /O w_fit tempw if (NLay>0) for (i=0;i0) Variable cursorprofA if (strlen(CsrInfo(A, ExptTitle+"#SLDPlotInPanel"))>0) cursorprofA=pcsr(A, ExptTitle+"#SLDPlotInPanel") endif endif Variable/G globgraphhold Variable graphhold=globgraphhold if (graphhold>0) ModifyGraph /W=$ExptTitle#SLDplotinPanel mode(prof)=4,msize(prof)=2,lsize(prof)=1.5 GraphNormal /W=$ExptTitle#SLDplotinPanel globgraphhold=0 endif if (pfyn==1) Variable cursora,cursorb SetActiveSubWindow $ExptTitle#RQPlotInPanel cursora=pcsr(A, ExptTitle+"#RQPlotInPanel") cursorb=pcsr(B, ExptTitle+"#RQPlotInPanel") Cursor /S=1 /W=$ExptTitle#RQPlotInPanel A $rdata cursora Cursor /S=1 /W=$ExptTitle#RQPlotInPanel B $rdata cursorb RemoveFromgraph /Z /W=$ExptTitle#RQPlotInPanel Rq_Fit AppendToGraph /W=$ExptTitle#RQPlotInPanel Rq_Fit[cursora,cursorb] vs qzdata[cursora,cursorb] ModifyGraph /W=$ExptTitle#RQPlotInPanel rgb(Rq_Fit)=(6528,0,65280),lsize(Rq_Fit)=2 else RemoveFromgraph /W=$ExptTitle#RQPlotInPanel Rq_Fit AppendToGraph /W=$ExptTitle#RQPlotInPanel Rq_Fit vs qzdata ModifyGraph /W=$ExptTitle#RQPlotInPanel rgb(Rq_Fit)=(0,0,65280),lsize(Rq_Fit)=2 endif // for (i=0;i<=(Nlay);i=i+1) // # of interfaces is no. of layers +1 // tempw[nopara-(2*Nlay+1)+i-1]=abs(tempw[nopara-(2*Nlay+1)+i-1]) // endfor prew=w_fit weps1=1e-06//0.001//prew*0.1// holdstring="" k=0 //massnorm=0 //ON/OFF is currently manual for (i=0;i<((NLay-Ceil(NLay/2))*3+4) ;i=i+1) if (i<=Ceil((NLay+0.5)/2)) tempw1[i]=tempw[i] checkholdc[i]=checkhold[i] elseif (i<=2*Ceil((NLay+0.5)/2)) tempw1[i]=tempw[i+Ceil(NLay/2)] checkholdc[i]=checkhold[i+Ceil(NLay/2)] elseif (i<=3*Ceil((NLay+0.5)/2)-1) tempw1[i]=tempw[i+2*Ceil(NLay/2)] checkholdc[i]=checkhold[i+2*Ceil(NLay/2)] else tempw1[i]=tempw[nopara-1] checkholdc[i]=checkhold[nopara-1] endif holdstring1=holdstring1+num2str(checkholdc[i]) endfor // if (cmpstr(cntrlName,"rst1")==0 || cmpstr(cntrlName,"rst1a")==0) for (i=0;i<(2*nopara+Nlay);i=i+1) //to avoid conflict by both constrainted and held if (i<2*nopara) for (j=0; jNLay+1&&i<2*NLay+3) T_Constraints[2*i]="K"+num2str(i)+">"+"0.001" endif else T_Constraints[2*i]="K"+num2str(i)+">"+T_Constraints_temp[2*i] endif if (stringmatch(T_Constraints_temp[2*i+1], "")==1||stringmatch(T_Constraints_temp[2*i+1], " ")==1||stringmatch(T_Constraints_temp[2*i+1], " ")==1||stringmatch(T_Constraints_temp[2*i+1], " ")==1) T_Constraints[2*i+1]="0x" else T_Constraints[2*i+1]="K"+num2str(i)+"<"+T_Constraints_temp[2*i+1] endif else T_Constraints[2*i]="0x"//"K"+num2str(Nlay+2)+">"+"K"+num2str(Nlay+2) //fake constraint T_Constraints[2*i+1]="0x"//"K"+num2str(Nlay+2)+"<"+"K"+num2str(Nlay+2) //fake constraint k=k+2 endif holdstring=holdstring+num2str(checkhold[i]) endfor // Variable /G globmass // Profile4Fit(w_fit,x) // Integrate/METH=1 prof/X=zz/D=prof_INT // globmass=(1351.16+prof_INT[60])/5.66 for (j=0;j0) if (strlen(CsrInfo(A, ExptTitle+"#SLDPlotInPanel"))>0) if (j==(ceil(cursorprofA/Npoint_per_Lay)-1)) sw4incohe[j]=2*syn+1 else sw4incohe[j]=1 endif else // if (j==(ntlay-ceil(ntlay/10))||i==(2*ntlay-ceil(ntlay/10))||i==(3*ntlay-ceil(ntlay/10))||i==(4*ntlay-ceil(ntlay/10))||i==(5*ntlay-ceil(ntlay/10))||i==(6*ntlay-ceil(ntlay/10))||i==(7*ntlay-ceil(ntlay/10))||i==(8*ntlay-ceil(ntlay/10))) sw4incohe[j]=2*syn+1 // else sw4incohe[j]=1 // endif endif endif endfor j=0 for (i=2*nopara;i<(2*nopara+Nlay);i=i+1) if (checkhold[nopara-Nlay-1+j]<1 && checkhold[nopara-2*(Nlay+1)+j]<1 && checkhold[nopara-2*(Nlay+1)+j+1]<1) T_Constraints[i]="K"+num2str(nopara-Nlay-1+j)+">"+"2*K"+num2str(nopara-2*(Nlay+1)+j)+"+2*K"+num2str(nopara-2*(Nlay+1)+j+1)+"+"+num2str(sw4incohe[j]) elseif (checkhold[nopara-Nlay-1+j]<1 && checkhold[nopara-2*(Nlay+1)+j]>0 && checkhold[nopara-2*(Nlay+1)+j+1]<1 ) T_Constraints[i]="K"+num2str(nopara-Nlay-1+j)+">"+"2*"+num2str(w_fit[nopara-2*(Nlay+1)+j])+"+2*K"+num2str(nopara-2*(Nlay+1)+j+1)+"+"+num2str(sw4incohe[j]) elseif (checkhold[nopara-Nlay-1+j]<1 && checkhold[nopara-2*(Nlay+1)+j]<1 && checkhold[nopara-2*(Nlay+1)+j+1]>0) T_Constraints[i]="K"+num2str(nopara-Nlay-1+j)+">"+"2*K"+num2str(nopara-2*(Nlay+1)+j)+"+2*"+num2str(w_fit[nopara-2*(Nlay+1)+j+1])+"+"+num2str(sw4incohe[j]) elseif (checkhold[nopara-Nlay-1+j]<1 && checkhold[nopara-2*(Nlay+1)+j]>0 && checkhold[nopara-2*(Nlay+1)+j+1]>0) T_Constraints[i]="K"+num2str(nopara-Nlay-1+j)+">"+"2*"+num2str(w_fit[nopara-2*(Nlay+1)+j])+"+2*"+num2str(w_fit[nopara-2*(Nlay+1)+j+1])+"+"+num2str(sw4incohe[j]) else T_Constraints[i]="0x" k=k+1 endif j=j+1 endfor Duplicate /O/T T_Constraints T_Constraints1 // T_Constraints[2*nopara+Nlay]="globmass-8-2*K13-2*K14 > K15" //added for one more constraint May08 // T_Constraints[2*nopara+Nlay+1]="globmass-8-2*K13-2*K14 < K15" //added for one more constraint May08 j=0 //constraints for sym geometry String conva,convb //?? for (i=0;i<(2*nopara+Nlay);i=i+1) //constraints for sym geometry if ((i>(((NLay+1)-Ceil(NLay/2)+1)*2-1)&& (i<(NLay+2)*2)) || (i>=((2*(NLay+1)-Ceil(NLay/2)+1)*2)&& i<(2*NLay+3)*2 ) || (i>=(((3*(NLay+1))-Ceil(NLay/2))*2)&& i<(3*NLay+3)*2) || (i>=(2*nopara+Nlay)-Ceil(NLay/2)))//0) T_Constraints1[i]="0x" elseif (i>=(NLay+2)*2 && i<((2*(NLay+1)-Ceil(NLay/2)+1)*2)&& Stringmatch(T_Constraints1[i],"*K"+num2Str(Ceil((i+0.5)/2)-1)+"*")==1) if (Stringmatch(T_Constraints1[i],"*>*")==1) T_Constraints1[i]="K"+num2Str(Ceil((i+0.5)/2)-1-Ceil(NLay/2))+">"+StringFromList(1,T_Constraints[i],">") else T_Constraints1[i]="K"+num2Str(Ceil((i+0.5)/2)-1-Ceil(NLay/2))+"<"+StringFromList(1,T_Constraints[i],"<") endif elseif (i>=(2*NLay+3)*2 && i<(((3*(NLay+1))-Ceil(NLay/2))*2)&& Stringmatch(T_Constraints1[i],"*K"+num2Str(Ceil((i+0.5)/2)-1)+"*")==1) if (Stringmatch(T_Constraints1[i],"*>*")==1) T_Constraints1[i]="K"+num2Str(Ceil((i+0.5)/2)-1-2*Ceil(NLay/2))+">"+StringFromList(1,T_Constraints[i],">") else T_Constraints1[i]="K"+num2Str(Ceil((i+0.5)/2)-1-2*Ceil(NLay/2))+"<"+StringFromList(1,T_Constraints[i],"<") endif // T_Constraints1[i]="K"+num2Str(Ceil((i+0.5)/2)-1-2*Ceil(NLay/2))+StringFromList(1,T_Constraints[i],convTC) elseif (i>=(3*NLay+3)*2 && i<((2*nopara))&& Stringmatch(T_Constraints1[i],"*K"+num2Str(Ceil((i+0.5)/2)-1)+"*")==1) if (Stringmatch(T_Constraints1[i],"*>*")==1) T_Constraints1[i]="K"+num2Str(Ceil((i+0.5)/2)-1-3*Ceil(NLay/2))+">"+StringFromList(1,T_Constraints[i],">") else T_Constraints1[i]="K"+num2Str(Ceil((i+0.5)/2)-1-3*Ceil(NLay/2))+"<"+StringFromList(1,T_Constraints[i],"<") endif elseif (i>=(2*nopara))//-Ceil(NLay/2)))//&& Stringmatch(T_Constraints1[i],"*K"+num2Str(Ceil((i+0.5)/2)-1-NLay)+"*")==1) conva="K"+num2Str(Ceil((i)/2)-4*Ceil(NLay/2)-Ceil((NLay+0.5)/2)) convb="K"+num2Str(Ceil((i)/2)-4*Ceil(NLay/2)-Ceil((NLay+0.5)/2)+1) if (checkholdc[(Ceil((i)/2)-4*Ceil(NLay/2)-Ceil((NLay+0.5)/2))]>0) conva=num2str(tempw1[(Ceil((i)/2)-4*Ceil(NLay/2)-Ceil((NLay+0.5)/2))]) endif if (checkholdc[(Ceil((i)/2)-4*Ceil(NLay/2)-Ceil((NLay+0.5)/2)+1)]>0) convb=num2str(tempw1[(Ceil((i)/2)-4*Ceil(NLay/2)-Ceil((NLay+0.5)/2)+1)]) endif T_Constraints1[i]="K"+num2Str(Ceil((i)/2)-4*Ceil(NLay/2))+">2*"+conva+"+1+2*"+convb // print T_Constraints1[i] if (checkholdc[(Ceil((i)/2)-4*Ceil(NLay/2))]>0) T_Constraints1[i]="0x" endif endif endfor if (NLay==7) insertpoints i,2, T_Constraints1 // noconstrnt=noconstrnt-1 T_Constraints1[i]="K11>2*K7+2*K8+1" T_Constraints1[i+1]="K11<2*K7+2*K8+1" endif Variable noconstrnt k=0 for (i=0;i<(2*nopara+Nlay);i=i+1) if (stringmatch(T_Constraints1[i],"0x")==1) deletepoints i,1,T_Constraints1 i=i-1 k=k+1 noconstrnt=(2*nopara+Nlay)-k endif if (stringmatch(T_Constraints[i],"0x")==1) deletepoints i,1,T_Constraints i=i-1 endif // T_Constraints[i]= T_Constraints1[j] // j=j+1 endfor Variable /G globV_chisq Variable /G globV_Rchisq Variable /G globnpntsdata Duplicate /O dRQdata dRQ_temp // dRQ_temp=dRQ_temp^2 Variable nodata=numpnts(dRQdata) for (i=0;i<(nodata);i=i+1) // if (rswitch>0) if (dRQdata[i]<=0|| RQdata[i]<=0) dRQ_temp[i]=5*abs(dRQdata[i])//1e-04*qzdata[i]^4 endif else if (dRQdata[i]<=0|| RQdata[i]<=0) dRQ_temp[i]=5*abs(dRQdata[i])//1e-04 endif endif endfor // Variable w15init=w_fit[15] if (noconstrnt==0) if (pfyn==1) FuncFit /H=holdstring1 Profile4FitCCS1 tempw1 RQdata[pcsr(A),pcsr(B)] /W=dRQ_temp /I=1 /D=Rq_Fit // /C=T_Constraints ///M=MaskRQdata else FuncFit /H=holdstring1 Profile4FitCCS1 tempw1 RQdata /W=dRQ_temp /D=Rq_Fit /I=1 // /C=T_Constraints ///M=MaskRQdata// /R=Res_try endif else if (pfyn==1) // redimension/N=10 weps1 FuncFit /H=holdstring1 Profile4FitCCS1 tempw1 RQdata[pcsr(A),pcsr(B)] /I=1 /D=Rq_Fit /C=T_Constraints1 /W=dRQ_temp ///E=weps1///M=MaskRQdata //need update T_Constraints1 else FuncFit /H=holdstring1 Profile4FitCCS1 tempw1 RQdata /W=dRQ_temp /D=Rq_Fit /I=1 /C=T_Constraints1 ///M=MaskRQdata// /R=Res_try endif endif //for (i=0;i<((NLay-Ceil(NLay/2))*3+4) ;i=i+1) // if (i<=Ceil((NLay+0.5)/2)) // tempw[i]=tempw1[i] // if (i!=(NLay+1)-i) // tempw[(NLay+1)-i]=tempw1[i] // endif // elseif (i<=2*Ceil((NLay+0.5)/2)) // tempw[i+Ceil(NLay/2)]=tempw1[i] // tempw[2*(NLay+1)-(i-Ceil((NLay+0.5)/2)-1)]=tempw1[i] // elseif (i<=3*Ceil((NLay+0.5)/2)-1) // tempw[i+2*Ceil(NLay/2)]= tempw1[i] // if ((i+2*Ceil(NLay/2))==3*(NLay+1)-(i-2*Ceil((NLay+0.5)/2))) // tempw[3*(NLay+1)-(i-2*Ceil((NLay+0.5)/2))]=(massnorm-(5.66*2*(tempw1[7]+tempw1[8])-2*(tempw1[1]*tempw1[7]+tempw1[2]*tempw1[8])-4*tempw1[5]/3*(tempw1[2]-tempw1[3])))/(5.66-tempw1[3]) // print "tempw[",3*(NLay+1)-(i-2*Ceil((NLay+0.5)/2)),"] = ", tempw[3*(NLay+1)-(i-2*Ceil((NLay+0.5)/2))] // else // tempw[3*(NLay+1)-(i-2*Ceil((NLay+0.5)/2))]=tempw1[i] // endif // else // tempw[nopara-1]=tempw1[i] // endif // endfor Duplicate /O T_Constraints_temp_temp $TC_temp KillWaves /Z T_Constraints_temp_temp SetActiveSubWindow $ExptTitle if (V_chisq>0) globV_chisq=V_chisq globV_Rchisq=V_chisq/(V_npnts) globnpntsdata=V_npnts endif KillWaves /Z dRQ_temp // endif // massnorm=0 SetWindow $ExptTitle, hook=winhookproc print "*****", ExptTitle, "Fitting Finished .................................................................. ^ ^ ^ ^ ^" //SetActiveSubWindow $ExptTitle End Function Profile4FitCCS1(w1,qq): FitFunc//,nl, nopntalayer)//: FitFunc//q,sigmaq,nt,nl) : FitFunc //nl = # of total layers, nt=# of total q points //Variable w Wave w1 Variable qq//,nopntalayer,nl Variable V_chisq //Variable /G globyn=1 //Variable q//,sigmaq,nt NVAR npt1=globNpoint, syn1=globsyn, yn1=globyn,npara1=globNpara,lay1=globNlay//, ssyn1=globssyn Variable npt=npt1, npara=npara1,syn=syn1,yn=yn1,lay=lay1//,ssyn=ssyn1 SVAR qqq=globqzdata SVAR dddq=globdqdata SVAR dddr=globdrq4data SVAR fitfun1=globfitfun String /G globprew NVAR s2sld1=globStop2SLD //SVAR df=globweps Variable /G globautoR,globautowav // Make /O/D/N=19 w Wave w=tempw Wave q4f=$qqq Wave dq4f=$dddq //Wave drq4f=$dddr Wave /D fitfun=$fitfun1 //Wave /D prew=$prew1 Variable q=q4f[qq] Variable sigmaq=dq4f[qq] Variable i,j,k,y,m,nn11,n,td,ad//,nopntalayer=10,nl=6 //nopntalayer=#of sublayers of each component(eg,PS) Variable ii,jj,kk,notp,Rq_Fitout,deltad Variable /C Xn,Xnp1,fn,fnp1,rn,an,anp1,kn,knp1 Variable /C alpha,nn,nnp1,n1,ni//,n2//,n2A,n2B//,phin,phinp1 Variable z,dz,dn,dp, lamda,sdqq,dqq,SLD1,SLDi,phi1,ko,XXGn,XDGn,XGn,DGn,incsdqq,zzorg,Erfv //,SLDA,SLDB // lamda=4.62 //Rq_Fitout=0 notp=npt*(lay+1)+1 //No. of total points Make /O /D /N=(notp) prof,zz//,dprof //+(nl+1) String/G globprosldz="prof",globproz="zz" Make /O /D /N=(npara) weps1//,prew String/G globprew Make /O /D /N=(npara) $globprew Wave /D prew=$globprew String/G globweps="weps1"//,globprew="prew" Variable Rq_Fitpre=NumVarOrDefault("globRq_Fitpre", 1) Variable /G globsf Variable/G massnorm,cslay // Variable sf=sf1 Variable /G globcmplxcalyn for (i=0;i<((lay-Ceil(lay/2))*3+4) ;i=i+1) if (i<=Ceil((lay+0.5)/2)) w[i]= w1[i] if (i!=(lay+1)-i) w[(lay+1)-i]= w1[i] endif elseif (i<=2*Ceil((lay+0.5)/2)) w[i+Ceil(lay/2)]= abs(w1[i]) w[2*(lay+1)-(i-Ceil((lay+0.5)/2)-1)]= abs(w1[i]) elseif (i<=3*Ceil((lay+0.5)/2)-1) w[i+2*Ceil(lay/2)]= w1[i] w[3*(lay+1)-(i-2*Ceil((lay+0.5)/2))]=w1[i] // print i else w[npara-1]=w1[i] endif endfor if (lay<6) w[3*(lay+1)-Ceil(lay/2)]=(massnorm-(5.66*2*( w1[7]+ w1[8])-2*( w1[1]* w1[7]+w1[2]*w1[8])-4*w1[6]/3*(w1[2]-w1[3])))/(5.66-w1[3]) //w[3*(lay+1)-(i-2*Ceil((lay+0.5)/2))]=(massnorm-(5.66*2*( w1[7]+ w1[8])-2*( w1[1]* w1[7]+w1[2]*w1[8])-4*w1[6]/3*(w1[2]-w1[3])))/(5.66-w1[3]) elseif(lay<7) elseif(lay<8) w[3*(lay+1)-Ceil(lay/2)]=(massnorm-(5.66*2*( w1[9]+ w1[10]+w1[11])-2*( w1[1]* w1[9]+w1[2]*w1[10]+w1[3]*w1[11])-4*w1[7]/3*(w1[2]-w1[3])+2*(w1[3]*w1[8]-w1[4]*w1[8])))/(5.66-w1[4]) //w[3*(lay+1)-(i-2*Ceil((lay+0.5)/2))]=(massnorm-(5.66*2*( w1[7]+ w1[8])-2*( w1[1]* w1[7]+w1[2]*w1[8])-4*w1[6]/3*(w1[2]-w1[3])))/(5.66-w1[3]) else // w[3*(lay+1)-Ceil(lay/2)]=(massnorm-(5.66*2*( w1[7]+ w1[8])-2*( w1[1]* w1[7]+w1[2]*w1[8])-4*w1[6]/3*(w1[2]-w1[3])))/(5.66-w1[3]) //w[3*(lay+1)-(i-2*Ceil((lay+0.5)/2))]=(massnorm-(5.66*2*( w1[7]+ w1[8])-2*( w1[1]* w1[7]+w1[2]*w1[8])-4*w1[6]/3*(w1[2]-w1[3])))/(5.66-w1[3]) endif Variable sf=w[npara-1] globsf=sf npara=npara-1 //w[0]=w1[0] // w[1]=w1[1] // w[5]=w1[1] // w[4]=w1[2] // w[2]=w1[2] // w[3]=w1[3] // w[6]=w1[0] // w[7]=w1[4] // w[12]=w1[4] // w[8]=w1[5] // w[11]=w1[5] // w[9]=w1[6] // w[10]=w1[6] // w[13]=w1[7] // w[17]=w1[7] // w[14]=w1[8] // w[16]=w1[8] // w[18]=w1[9] // w[15]=(massnorm-(5.66*2*(w1[7]+w1[8])-2*(w1[1]*w1[7]+w1[2]*w1[8])-4*w1[5]/3*(w1[2]-w1[3])))/(5.66-w1[3]) Wave drr4f=$dddr Wave dRQ_temp // dRQ_temp=sf*drr4f Wave /D im_SLD_in//=$im_SLD_in1 Make /O /D /N=(notp) prof_IM // Variable temp15=w[15] ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////building a model profile against z ///////////////////////////////////////// if (abs(w[npara-(2*lay+1)])<10) zz[0]=-abs(w[npara-(2*lay+1)])*2-10 elseif (abs(w[npara-(2*lay+1)])>100) zz[0]=-abs(w[npara-(2*lay+1)])*2-100 else zz[0]=-abs(w[npara-(2*lay+1)])*3 endif zz[1]=-abs(w[npara-(2*lay+1)])*2 //initial point move back to 2times of sigma (of the first layer) ii=1 for (i=0;i<=(lay);i=i+1) // # of interfaces is no. of layers +1 // w[npara-(2*lay+1)+i]=abs(w[npara-(2*lay+1)+i]) if (abs(w[npara-(2*lay+1)+i])<1e-04) //to elliminate a bug when a becomes 0 w[npara-(2*lay+1)+i]=1e-04///*sign(w[npara-(2*lay+1)+i]) endif // if (fitfun[ii]!=8) for (j=1; j<=(npt);j=j+1) //improved the SLD profile builder if (j==1&&i!=0) zz[ii]=zz[ii-1]+(zz[ii-1]-zz[ii-2]) elseif (j100) zz[notp-1]=zz[notp-2]+100 else zz[notp-1]=zz[notp-2]+ abs(w[npara-(1*lay+1)]) // add the last point of SLD endif // endif //endif (fitfun[i]!=8) endfor ii=1 zzorg=0 for (i=0;i<=(lay);i=i+1) if (i>0) zzorg=zzorg+w[npara-(lay-(i-1))] endif for (j=1; j<=(npt);j=j+1) if (fitfun[i]==0) Erfv=(erf((zz[ii]-zzorg)/((w[(lay+2)+i])))/2+0.5) //modifying erf adaptable to profile elseif (fitfun[i]==1) if ((zz[ii]-zzorg)>=2*(w[(lay+2)+i])) Erfv=1 else Erfv=exp((-(((zz[ii]-zzorg)-2*(w[(lay+2)+i]))/((w[(lay+2)+i])))^2)/2) //leftGaussian endif elseif (fitfun[i]==2) if ((zz[ii]-zzorg)<=-2*(w[(lay+2)+i])) Erfv=0 else Erfv=1-exp((-(((zz[ii]-zzorg)+2*(w[(lay+2)+i]))/((w[(lay+2)+i])))^2)/2) //rightGaussian endif elseif (fitfun[i]==3) if ((zz[ii]-zzorg)>=2*(w[(lay+2)+i])) Erfv=1 elseif ((zz[ii]-zzorg)<=-2*(w[(lay+2)+i])) Erfv=0 else Erfv=1-((((zz[ii]-zzorg)-2*(w[(lay+2)+i]))/(4*abs(w[(lay+2)+i])))^2) //leftParabola endif elseif (fitfun[i]==4) if ((zz[ii]-zzorg)>=2*(w[(lay+2)+i])) Erfv=1 elseif ((zz[ii]-zzorg)<=-2*(w[(lay+2)+i])) Erfv=0 else Erfv=((((zz[ii]-zzorg)+2*(w[(lay+2)+i]))/(4*(w[(lay+2)+i])))^2) //rightParabola endif elseif (fitfun[i]==5) if ((zz[ii]-zzorg)>=2*(w[(lay+2)+i])) Erfv=1 elseif ((zz[ii]-zzorg)<=-2*(w[(lay+2)+i])) Erfv=0 else Erfv=exp((-(abs((zz[ii]-zzorg)-2*(w[(lay+2)+i]))/((w[(lay+2)+i]))))) //leftExp endif elseif (fitfun[i]==6) if ((zz[ii]-zzorg)>=2*(w[(lay+2)+i])) Erfv=1 elseif ((zz[ii]-zzorg)<=-2*(w[(lay+2)+i])) Erfv=0 else Erfv=1-exp((-(((zz[ii]-zzorg)+2*(w[(lay+2)+i]))/((w[(lay+2)+i]))))) //rightExp endif elseif (fitfun[i]==7) if ((zz[ii]-zzorg)>=2*(w[(lay+2)+i])) Erfv=1 elseif ((zz[ii]-zzorg)<=-2*(w[(lay+2)+i])) Erfv=0 else Erfv=((zz[ii]-zzorg)+2*(w[(lay+2)+i]))/(4*(w[(lay+2)+i])) //Linear endif elseif (fitfun[i]==8) if ((zz[ii]-zzorg)>=2*(w[(lay+2)+i])) Erfv=1 elseif ((zz[ii]-zzorg)<=-2*(w[(lay+2)+i])) Erfv=0 else Erfv=MyOwn(zz[ii],zzorg,(w[(lay+2)+i])) endif endif // Erfv=abs(Erfv) prof[ii]=w[i]*(1-Erfv)+w[i+1]*(Erfv) if (globcmplxcalyn>1) prof_IM[ii]=im_SLD_in[i]*(1-Erfv)+im_SLD_in[i+1]*(Erfv) else prof_IM[ii]=0 endif // if (prof[ii]>10) // // prof[ii]=10 // <<<=== specify maximum SLD !!!!?? // endif // ii=ii+1 endfor endfor // zz[0]=-w[npara-(2*lay+1)]*3//-w[npara-(2*lay+1)]/10 // zz[1]=-w[npara-(2*lay+1)]*2//-w[npara-(2*lay+1)]/10 prof[0]=w[0] prof_IM[0]=im_SLD_in[0] prof_IM[(notp-1)]=im_SLD_in[(lay+1)] prof[(notp-1)]=w[(lay+1)] // sld of substrate // w[15] = temp15 if (cslay>0) //Cubic Slpine Smoothing all the interface no matter which interface has this function... Variable inn Make /O/N=(npt) zzcs,profcs,zztemp,proftemp for (inn=0;inn=1 ///////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // String/G globImSLDin="im_SLD_in",globImSLDout="im_SLD_out" String/G globImSLDin="prof_IM" if (globautoR>0&&globautowav>0) // if (stringmatch(dddq,"SelectData")==1) // Wave dQ_Fit1=SimdQ_Pre_Cal,Qz_Fit1=SimQ_Pre_Cal // else Wave dQ_Fit1=$dddq+"_Pre_Cal",Qz_Fit1=$qqq+"_Pre_Cal" // endif Rq_Fitout=ParrattNTRNdq(Qz_Fit1, dQ_Fit1,notp) else Rq_Fitout=ParrattNTRNdq(q, sigmaq,notp) endif // for (i=0;i<=(lay);i=i+1) // # of interfaces is no. of layers +1 // w[npara-(2*lay+1)+i]=abs(w[npara-(2*lay+1)+i]) // endfor //print Rq_Fitout npara=npara+1 Variable/G globRq_Fitpre=Rq_Fitpre for (i=0;i1) //weps1[i]=1 //endif if (abs(weps1[i])<1e-06) weps1[i]=1e-06*sign(weps1[i]) endif if (abs(weps1[i])>1e+06) weps1[i]=1e+06*sign(weps1[i]) endif endfor Rq_Fitpre=Rq_Fitout //print V_chisq //V_chisq=V_chisq/(sf*sf) return Rq_Fitout // End /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Function holdcheckbox(cntrlName,checked) String cntrlName Variable checked SVAR checkhold1=globcheckhold SVAR ExptTitle=globExptTitle NVAR Nlay1=globNLay Variable Nlay=Nlay1 Wave checkhold=$checkhold1 NVAR nopara1=globNpara Variable nopara=nopara1,i,a String matc,namelow,namehigh for (i=0;i0||globautoS>0) autoRup(" ",0," "," ") endif End Function R4DoPC(ctrlName,popNum,popStr): PopupMenuControl String ctrlName Variable popNum String popStr Variable modecalRDP modecalRDP=popNum Variable /G globmodecalRDP=modecalRDP End Function GED4PSD(ctrlName,popNum,popStr): PopupMenuControl String ctrlName Variable popNum String popStr Variable modeGraphdrawEdit modeGraphdrawEdit=popNum Variable /G globmodeGraphdrawEdit=modeGraphdrawEdit End //////////////////////// ////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Function keepscald(ctrlName,varNum,varStr,varName) : SetVariableControl String ctrlName Variable varNum String varStr String varName if (cmpstr(ctrlName,"tempw18")==0) NVAR sf1=globsf sf1=varNum endif End Function /S PrintAllDataFolderNames() String objName Variable index=0,index1=0 String strfollist="" String /G globcomWin, globExptTitle // String helwin=" " do objName=GetindexedObjName("root:",4,index) if (exists("root:"+objName+":globExptTitle")==2) // if (StringMatch(globExptTitle,objName)>0) // strfollist=strfollist+";"+objName // Execute "helwin=root:"+objName+":globcomWin " // else // helwin="Note:"+helwin // if (strlen(helwin)!=0) strfollist=strfollist+";"+objName //+helwin//+"\\Z08\K(26112,26112,26112)"+globcomWin // helwin=" " // endif endif if (strlen(objName) == 0) break endif index +=1 while(1) strfollist=SortList(strfollist) return strfollist End Function /S PrintAllDFNames4Menu(objName) String objName Variable index String strfollist="" String selec String gdf=GetDataFolder(1) // print gdf index=0 do objName=GetindexedObjName("root:",4,index) // print objName if (exists("root:"+objName+":globExptTitle")==2) if (stringmatch(gdf,"root:"+objName+":")>0) strfollist=strfollist+";"+objName+"!>"//+", SetDataFolder root:"+objName else strfollist=strfollist+";"+objName//+", SetDataFolder root:"+objName endif endif if (strlen(objName) == 0) break endif index +=1 while(1) if (stringmatch("root:",gdf)>0) strfollist=strfollist+";"+"root"+"!>"//+"; SetDataFolder root:" else strfollist=strfollist+";"+"root"//+"; SetDataFolder root:" endif return strfollist End Function LoadWaveFromFile(cntrlName) : ButtonControl String cntrlName if (cmpstr(cntrlName,"LWF")==0||cmpstr(cntrlName,"LWFa")==0) String svFD=GetDataFolder(1) NewDataFolder /S/O root:F_L_temp String /G globExptTitle String /G S_fileName Execute "LoadWave /G/D/L={4, 0, 0, 0,4}/B=\"N=Qz;N=Rn;N=dRn;N=dQz;\" " if (strlen(S_fileName)>=0) if (strlen(S_fileName)>25) if (Stringmatch(S_fileName,"REF_L*")>0) globExptTitle=StringFromList(1,S_fileName,"_")+"_"+StringFromList(2,S_fileName,"_") else globExptTitle="toolongfilename" endif else globExptTitle=StringFromList(0,S_fileName,".") endif If (Stringmatch(globExptTitle,"*-*")>0) globExptTitle=ReplaceString("-",globExptTitle,"_") endif If (Stringmatch(globExptTitle,"* *")>0) globExptTitle=ReplaceString(" ",globExptTitle,"_") endif String wn=WinName(0,1) If (Stringmatch(wn,"Untitled")>0) // DoWindow /K $wn endif else KillDataFolder root:F_L_temp endif if (Strsearch(PrintAllDataFolderNames(),globExptTitle,0)<0) RenameDataFolder root:F_L_temp $globExptTitle else KillDataFolder root:F_L_temp //SetDataFolder svFD //globExptTitle=globExptTitle+"X2" //RenameDataFolder root:F_L_temp $globExptTitle endif SetDataFolder root:$globExptTitle Variable /G globmoderq4=2 Variable /G globmodedrq=3 Variable /G globmodeqz=1 Variable /G globmodedqz=4 FitRgeneral2( ) SVAR qzdata1=globqzdata,rdata=globrq4data,drdata=globdrq4data String /G globdqdata String qzdata=qzdata1 if (stringmatch(globdqdata,"SelectData")==1) Wave qdata=$qzdata, rd=$rdata,drd=$drdata Duplicate /O qdata SelectData SelectData=0.02*qdata globdqdata="d"+qzdata1+"2p" Rename SelectData $globdqdata Wave dqdata=$globdqdata Variable i for (i=0;i<=20000;i=i+1) if ( drd[i]==NaN && rd[i]==NaN && qdata[i]==NaN ) break endif if ( drd[i]<0 ||rd[i]<0||qdata[i]<0||drd[i]==NaN||rd[i]==NaN||qdata[i]==NaN||rd[i]==inf) deletepoints i, 1, qdata,dqdata,drd,rd // deleteponts i 1 dqdata // deleteponts i 1 drd // deleteponts i 1 rd i=i-1 endif endfor Duplicate /O rd Rq_Fit Sort $qzdata1 $rdata,$drdata,$globdqdata,$qzdata1 Variable /G globmodedqz=4 FitRgeneral3( ) endif //Killwaves SelectData endif End ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Function FitRgeneral2( ) ///Random Profile fit // SetDataFolder root: String /G S_fileName String ExptTitle=StrVarOrDefault ("globExptTitle", "Untitled") NewDataFolder /S/O root:$ExptTitle Variable r,b,i,j,k,kk,v1,z0,df0 String /G globExptTitle=ExptTitle String /G globExptTitlepre Variable Nlay=NumVarOrDefault("globNlay", 2) Variable Npoint=NumVarOrDefault("globNpoint", 10) Variable yn=NumVarOrDefault("globyn", 0) Variable syn=NumVarOrDefault("globsyn", 0) Variable ssyn=NumVarOrDefault("globssyn", 0) Variable thick=NumVarOrDefault("globthick", 6) Variable pfyn=NumVarOrDefault("globpfyn", 0) Variable nopara=NumVarOrDefault("globNpara", 2) Variable rswitch=NumVarOrDefault("globrswitch", 0) Variable sf=NumVarOrDefault("globsf", 1) //Variable update911=NumVarOrDefault("globupdate911", 0) String /G globRQdata String /G globdRQdata String RQ4data=StrVarOrDefault ("globrq4data","") String dRQ4data=StrVarOrDefault ("globdrq4data","") String Qzdata=StrVarOrDefault ("globqzdata","") String dQdata=StrVarOrDefault ("globdqdata","") String fitfun= StrVarOrDefault ("globfitfun","") Variable moderq4= NumVarOrDefault ("globmoderq4",1) Variable modedrq= NumVarOrDefault ("globmodedrq",1) Variable modeqz= NumVarOrDefault ("globmodeqz",1) Variable modedqz= NumVarOrDefault ("globmodedqz",1) Variable cmplxcalyn=NumVarOrDefault("globcmplxcalyn",1) Variable /G globcmplxcalyn= cmplxcalyn//1 Variable /G globNNDF=1 Variable/G globsyn=syn Variable/G globyn=yn Variable/G globpfyn=pfyn Variable/G globNpoint=Npoint Variable/G globNlay=Nlay Variable /G globNLay_1 Variable/G globrswitch=rswitch Variable/G globsf=sf String /G globcomWin//="" Variable gsw=rswitch Variable /G globautoR=0 Variable /G globautoS=0 globrswitch=0 rswitch=0 // rswitch=0 // Variable/G globwinup=winup Make /O /N=3 SelectData for (i=0;i<2; i=i+1) SelectData[i]=i/100 endfor SelectData[0]=0.003 SelectData[1]=0.1 SelectData[2]=0.3 DoWindow RQ4vsQCalFitE if (V_Flag) return -1 endif nopara=(globNlay*3+3+1) //1 for rescaling R incase of neutron coming through other superstrate than air Variable/G globNpara=nopara, massnorm=0,cslay=0 //String/G globcheckhold Make /O /D /N=(nopara) w_fit,weps1, tempw // Duplicate/O /D w_fit, tempw tempw[nopara-1]=sf Make /O /T /N=(nopara) namepara Make /O /T /N=(2*nopara) namecnstrnt Make /O /T /N=(2*nopara) T_Constraints_temp//,T_Constraints Make /O /D /N=(globNlay+1) fitfun1 Make /O /D /N=(nopara) checkhold fitfun="fitfun1" String/G RRQ4nPlot String/G dRQ4nPlot String/G globwww="w_fit" String/G globfitfun="fitfun1" String/G globT_Constraints_temp="T_Constraints_temp" String /G globprosldz,globproz String names,namelow,namehigh,low,nametempw,nametitle,namefun,Rdata,dRdata,Qdata,dQzdata if (rswitch>0) RRQ4nPlot="RQ\\S4" dRQ4nPlot="SigRQ\\S4" else RRQ4nPlot="R" dRQ4nPlot="SigR" endif If (strsearch(WinList(ExptTitle,";","WIN:"),ExptTitle,0)>=0) SetWindow $ExptTitle hook=$" " DoWindow /R/K $ExptTitle endif Display /K=1 /N=$ExptTitle /W=(7*72/96-5,3*72/96,1156*72/96-5,762*72/96) as "NRfit 6:// "+ExptTitle DefaultGuiFont /W=$ExptTitle /Win all={"MS Sans Serif",12,0} SetDataFolder root:$ExptTitle GroupBox topgb0 frame=1,size={1140,1},pos={5,55}//, labelBack=(55000,0,0) ModifyGraph /W=$ExptTitle gbRGB=(60416,59648,55296) TitleBox expt_title title="Title: ", pos={48,32},fsize=13,fstyle=1,frame=4,labelBack=(65280,43520,0),help={" Support no special characters... Use only letters, digits or _"}//pos={750+50,16},(60416,59648,55296) SetVariable tiltleIn value=globExptTitle, bodyWidth=135, title=" ", proc=ExtTitleUp1, pos={177,36},labelBack=(65280,43520,0),frame=1//,fstyle=0//,fColor=(55000,0,0)//,help={" Low limit "} globExptTitlepre=globExptTitle PopupMenu tiltleInPop value=PrintAllDataFolderNames(),mode=moderq4,bodyWidth=20, title="",fstyle=1, size={79,200},labelBack=(65280,43520,0),proc=popExtTitleUp,pos={172,34},help={globcomWin} j=727 TitleBox title0 title="Neutron", pos={385,14},fsize=22,fstyle=1,font="Lucida Calligraphy",frame=0, fcolor=(20000,20000,20000),help={"Nuetron and X-Ray Reflectivity Analysis ..." }//(370,9),labelBack=(55000,55000,65000) TitleBox title01 title="Reflectivity", pos={585,14},fsize=22,fstyle=1,font="Lucida Calligraphy",frame=0, fcolor=(20000,20000,20000),help={"Nuetron and X-Ray Reflectivity Analysis ..." }//(370,9),labelBack=(55000,55000,65000) TitleBox Company title="ORNL", pos={1055,6},fsize=14,fstyle=1,font="Times New Roman",frame=0, fcolor=(20000,20000,20000)//,labelBack=(55000,55000,65000) TitleBox Author title="Neutron Scattering Sciences Division", pos={1000,25},fsize=9,fstyle=1,font="Times New Roman",frame=0, fcolor=(20000,20000,20000)//,labelBack=(55000,55000,65000) TitleBox WDate title=date(), pos={1027,40},fsize=10,fstyle=0,font="Times New Roman",frame=0, fcolor=(20000,20000,20000)//,labelBack=(55000,55000,65000) Button nnbutton picture=ProcGlobal#nbutton,pos={510,7},size={5,5},proc=LogoButton,title="",help={" Developed by Jae-Hie J. Cho, Gregory S. Smith, and William A. Hamilton at the Oak Ridge National Laboratory"} Button nnbutton2 picture=ProcGlobal#reflico,pos={1040,320},size={5,4},proc=LogoButton,title=" " ,help={"A manual will be here in the future ... : Contact; jhjcho@gmail.com "} //reflico GroupBox gb0 frame=1,size={1013,1},pos={5,55+50} TitleBox Data1 title=" DATA ", pos={49,45+10},fstyle=1,frame=3,labelBack=(65280,33520,0)//labelBack=(60416,59648,55296)////, fcolor=(65000,65000,650000)//labelBack=(60416,59648,55296) // GroupBox gbdata1 frame=1,size={3,50},pos={4,56} // TitleBox Data2 title=" ", pos={4,45+25},fstyle=1,frame=3,labelBack=(65280,33520,0)//labelBack=(60416,59648,55296) TitleBox title1 title="GLOBAL VARIABLES", pos={50,45+50},fstyle=1,frame=4,labelBack=(60416,59648,55296)//,frame=4//,labelBack=(55000,55000,65000) TitleBox rticktitleR title="R", pos={80,90+50},fsize=12,fstyle=1,frame=0//, fcolor=(20000,20000,20000)//,labelBack=(55000,55000,65000) TitleBox rticktitleRQ4 title="RQ\\S4\\M", pos={180,83+50},fsize=12,fstyle=1,frame=0//, fcolor=(20000,20000,20000)//,labelBack=(55000,55000,65000) GroupBox rbox frame=1,size={180,30},pos={50,80+50}//,title="Reflectivity calculation" Slider objectR, pos={110,90+50},size={50,40},fsize=10,ticks=0,limits={0,1,1},value=rswitch,userTicks={tickNumbers,tickLabels},vert=0,side=0,proc=SliderobjectR, labelback=(60416,59648,55296),help={"To choose Reflectivity to be calculated; R or RQ4?"} SetVariable setvar0 bodyWidth=30,title=" Number of Layers ",value=globNlay,limits={0,31,1},labelBack=(60416,59648,55296),proc=updatewinpan,pos={180,115+50},help={"How many layers (films) are there throughout the interface? (Note that no more than 9 are recommended.)"} SetVariable setvar1 bodyWidth=41,value=globNpoint,title=" Points per Each Layer ",limits={3,1000,5}, pos={180,135+50},labelBack=(60416,59648,55296),proc=autoRup,help={"Number of points for the each interface+film on the SLD profile? (eg., choose 10, 20, 30, etc.)"} SetVariable setvar2 bodyWidth=30,value=globyn,limits={0,10,1},title=" SigmaQ Smear? (y(1)/n(0)) ",pos={180,155+50},labelBack=(60416,59648,55296),proc=autoRup,help={"Would you like to consider Gaussian averging for the uncertainty of Qz?"} SetVariable setvar3 bodyWidth=40,title=" Incoherent Smear (Å) ",value=globsyn,limits={0,500,5},pos={180,175+50},labelBack=(60416,59648,55296),proc=incoherentpointproc,help={"If u not know, set to 0. Or move the cursor to the point on the SLD profile graph at which the incoherent averaging takes place."} SetVariable setvar4 bodyWidth=30,title=" Ranged by Cursors? (y(1)/n(0))",value=globpfyn,limits={0,1,1},pos={180,195+50},labelBack=(60416,59648,55296),proc=FitRangeDraw,help={"Use the cursor on the R(Q4) Graph to choose the range for fitting; mouse (or arrow key) can be used for holding and moving it."} PopupMenu setvar5a value="No;Yes",mode=globcmplxcalyn,pos={152,215+50},fstyle=0, size={80,200},bodyWidth=50,labelBack=(60416,59648,55296),proc=PopCmplxYn, title="Any Complex SLDs? ",help={"Are any SLDs complex number? The imaginary SLD (im(SLD)=-crosssection*density/lamda) input boxes will appear on the right side."} TitleBox title2 title="FIT PARAMETERS", pos={275,45+50},fstyle=1,frame=4,labelBack=(60416,59648,55296)//,frame=4//,labelBack=(55000,55000,65000) TitleBox title11a title="Layer", pos={276,80+50},fstyle=1,frame=0//,frame=4//,labelBack=(55000,55000,65000) TitleBox title11 title="No.", pos={276,95+50},fstyle=0,frame=0//,frame=4//,labelBack=(55000,55000,65000) // TitleBox title11a title="Hold?", pos={302,95+50},fstyle=0,frame=0//,frame=4//,labelBack=(55000,55000,65000) TitleBox title3 title="SLD (10\\S-6\\MÅ\\S-2\\M)", pos={385,76+50},fstyle=1,frame=0,help={"SLDs; Si=2.07, SiO2=3.16, Quartz=4.2, Sapphire=5.69, D2O=6.25, h-Toluene=0.94, d-Toluene=5.66, P2VP=1.87, h-PS=1.4, d-PS=6.4, H2O=-0.56"} //,frame=4//,labelBack=(55000,55000,65000) TitleBox title4 title="Interfacial Roughness (Å) &", pos={555,80+50},fstyle=1,frame=0,help={"Note that this roughness is a quarter of the interfacial thickness. To get STD roughness, divide these values by sqrt(2)"}//,frame=4//,labelBack=(55000,55000,65000) TitleBox title5 title="Shape", pos={725,80+50},fstyle=1,frame=0,help={"The function to describe the interface" }//,frame=4//,labelBack=(55000,55000,65000) TitleBox title6 title="Thickness (Å)", pos={875,80+50},fstyle=1,frame=0,help={"This value equal to (2 * top interfacial roughness+2*bottom interfacial roughness)+ extra thickness."}//,frame=4//,labelBack=(55000,55000,65000) TitleBox title7 title=" Low In Out High", pos={338,95+50},fstyle=0,frame=0//,frame=4//,labelBack=(55000,55000,65000) TitleBox title8 title=" Low In Out High", pos={545,95+50},fstyle=0,frame=0//,frame=4//,labelBack=(55000,55000,65000) TitleBox title9 title="Functions", pos={720,95+50},fstyle=0,frame=0,help={"The functions to describe the interface" }//,frame=4//,labelBack=(55000,55000,65000) TitleBox title10 title=" Low In Out High", pos={835,95+50},fstyle=0,frame=0//,frame=4//,labelBack=(55000,55000,65000) if (moderq4==0) moderq4=1 endif if (modedrq==0) modedrq=1 endif if (modeqz==0) modeqz=1 endif if (modedqz==0) modedqz=1 endif PopupMenu RQ4data value=WaveList("*",";",""),mode=moderq4,bodyWidth=150, title="R",fstyle=1, size={80,200},proc=dataRInput,pos={210,70},help={"Reflectivity Data"}//WaveList("*",";","") PopupMenu dRQ4data value=WaveList("*",";",""),mode=modedrq,bodyWidth=150, title="dR",fstyle=1,size={80,200},proc=datadRInput,pos={430,70},help={"Uncertainty of Reflectivity Data"} PopupMenu Qzdata value=WaveList("*",";",""),mode=modeqz,bodyWidth=150, title="Q",fstyle=1,size={80,200},proc=dataQInput,pos={650,70},help={"Qz Data"} // if (globyn==0) // PopupMenu dQdata value="sigQ Smear: Turned Off",mode=modedqz,bodyWidth=150, title="sigQ",fstyle=1,disable=2,size={80,200},proc=datadQInput,pos={870,70},help={"Uncertainty of Qz Data"} // else PopupMenu dQdata value=WaveList("*",";",""),mode=modedqz,bodyWidth=150, title="dQ",fstyle=1,disable=0,size={80,200},proc=datadQInput,pos={870,70},help={"Uncertainty of Qz Data"} // endif Variable/G globmoderq4=moderq4,globmodedrq=modedrq,globmodeqz=modeqz,globmodedqz=modedqz RQ4data=WaveName("",moderq4-1, 4) dRQ4data=WaveName("",modedrq-1, 4) Qzdata=WaveName("",modeqz-1, 4) dQdata=WaveName("",modedqz-1, 4) String/G globrq4data=RQ4data String/G globdrq4data=dRQ4data String/G globqzdata=Qzdata String/G globdqdata=dQdata String/G globrq4dataold=RQ4data String/G globdrq4dataold=dRQ4data String/G globqzdataold=Qzdata String/G globdqdataold=dQdata String/G globrqdata=RQ4data String/G globdrqdata=dRQ4data // String Rq_Fit=globdrq4data+"_Cal" If ((WaveExists(prof)<1 || exists (globprosldz)<1)) // checkhold=1 checkhold[0]=1 checkhold[Nlay+1]=1 checkhold[nopara-1]=1 checkhold[NLay+Nlay+2]=1 endif j=0 k=1 kk=0 for (i=0; i(2*globNlay+2) low="K"+num2str(i) CheckBox $low,pos={805,(116+50+(i-2*(globNlay+1))*20)},title=" ",proc=holdcheckbox,value=checkhold[i], labelback=(60416,59648,55296),help={" Hold?"} TitleBox $low+"T" title=low,pos={824,(116+50+(i-2*(globNlay+1))*20)},frame=0 SetVariable $namelow bodyWidth=32,title=" ", value=T_Constraints_temp [2*i],limits={0,1,1},pos={828,(115+50+(i-2*(globNlay+1))*20)},disable=checkhold[i] ,help={"Low limit constraint (Note that this value should be larger than (2 * top interfacial roughness+2*bottom interfacial roughness).)"} SetVariable $names bodyWidth=45,title=" ",value=w_fit[i],limits={1,20000,20},pos={875,(115+50+(i-2*(globNlay+1))*20)},proc=autoRup,format="%4.1f",help={" Initial Guess; The values are stored in a column (so called a wave) named as 'w_fit'."} SetVariable $nametempw bodyWidth=35,title=" ",value=tempw[i],pos={912,(115+50+(i-2*(globNlay+1))*20)},limits={0,9000,0},format="%4.1f",help={" Results; The values are stored in a column (so called a wave) named as 'tempw'."}//,disable=2 SetVariable $namehigh bodyWidth=34,title=" ",value=T_Constraints_temp [2*i+1],limits={0,1,1},pos={948,(115+50+(i-2*(globNlay+1))*20)},disable=checkhold[i],help={" High limit constraint; The values are stored in a column (so called a wave) named as 'T_Constraints_temp'."} k=k+1 else low="K"+num2str(i) GroupBox sfbox frame=1,size={250,30},pos={534,(145+45+(i-2*(globNlay+1))*20)} CheckBox $low,pos={570,(153+45+(i-2*(globNlay+1))*20)},title=" ",proc=holdcheckbox,value=checkhold[i], labelback=(60416,59648,55296),help={" Hold?"} TitleBox titlesf title="RScale", pos={510,(149+45+(i-2*(globNlay+1))*20)},fstyle=1,frame=4,labelBack=(60416,59648,55296),help={"To rescale the calculation values of R(Q4) in case, otherwise it should be set to 1."} TitleBox $low+"T" title=low,pos={592,(153+45+(i-2*(globNlay+1))*20)},frame=0 SetVariable $namelow bodyWidth=32,title=" ", value=T_Constraints_temp [2*i],limits={0,1,1},pos={599,(152+45+(i-2*(globNlay+1))*20)},disable=checkhold[i],help={" Low limit constraint; The values are stored in a column (so called a wave) named as 'T_Constraints_temp'."}//,format="%f" SetVariable $names bodyWidth=45,title=" ",value=w_fit[i],limits={0,1000,0.1},pos={646,(152+45+(i-2*(globNlay+1))*20)},proc=autoRup,format="%4.2f",help={" Initial Guess; The values are stored in a column (so called a wave) named as 'w_fit'."} SetVariable $nametempw bodyWidth=35,title=" ",value=tempw[i],pos={683,(152+45+(i-2*(globNlay+1))*20)},limits={0,1000,0},format="%5.3f",proc=keepscald,help={"Results: (This Scaling factor value will be used for all the R(Q4) calculations and stored as 'globsf' and in 'tempw'.)"}//,disable=2 SetVariable $namehigh bodyWidth=34,title=" ",value=T_Constraints_temp [2*i+1],limits={0,1,1},pos={719,(152+45+(i-2*(globNlay+1))*20)},disable=checkhold[i],help={" High limit constraint; The values are stored in a column (so called a wave) named as 'T_Constraints_temp'."} endif endfor k=((globNlay+1)*20+115)-200 if (k>0) j=((globNlay+1)*20+115)+50 else j=250 endif Variable jfl=j Variable comcorc=0 if (jfl>365) comcorc=0.1 endif SetVariable /Z comWinIn bodyWidth=865, frame=0, labelback=(60416,59648,55296),title=" ",pos={90, ((jfl*(1+comcorc)+40+45+40)*72/96+372)}, proc=ComLineinWin, value=globcomWin//,labelBack=(65280,43520,0),frame=1//,fstyle=0//,fColor=(55000,0,0)//,help={" Low limit "} // TitleBox comman title="Command (? :^ )",pos={50,(j+40+45+40)*72/96+372}, frame=0 TitleBox comman title="Note:",pos={50,((jfl*(1+comcorc)+40+45+40)*72/96+372)}, frame=0,help={"Note ..."}//, labelback=(60416,59648,55296) GroupBox gb1 frame=1,size={1,(j-52)},pos={250,60+50} GroupBox gb2 frame=1,size={1013,1},pos={5,j+10+50} TitleBox titlegraph title="PLOTS", pos={50, j+50},fstyle=1,frame=4,labelBack=(60416,59648,55296)//,frame=4//,labelBack=(55000,55000,65000) CheckBox autoR,pos={210, j+88},title="",variable=globautoR, proc=autoRupbutt,mode=0,labelBack=(60416,59648,55296),help={" Automatically update R (R_Pre_Cal; green line w/ no xi sqr update) in the graph whenever the SLD is updated."} CheckBox autoS,pos={691, j+88},title="",variable=globautoS, proc=autoSupbutt,mode=0,labelBack=(60416,59648,55296),help={" Automatically update SLD profile by changing the fit parameter IN values."} Button titlegraph0,pos={230, j+40+45},size={92,20},fColor=(60416,59648,55296),fstyle=1 //pos={1027,80} Button titlegraph0,proc=MakeGraph_RButton,title="Reflectivity",help={"Make a new graph : "+globrq4data+" and Rq_Fit vs. "+globqzdata} Button titlegraph1,pos={711, j+40+45},size={92,20},fColor=(60416,59648,55296),fstyle=1 //pos={1027,80} Button titlegraph1,proc=MakeGraph_sldButton,title="SLD Profile",help={"Make a new graph : "+globprosldz+" vs. "+globproz} globNLay_1=NLay If (WaveExists(prof)<1 &&WaveExists(zz)<1)//|| exists (globprosldz)<1) //No. of total points String /G globprew="prew" String prew // Make /O /D /N=(Npoint*(Nlay+1)+1) prof,zz//,dprof //+(nl+1) Make /O /D /N=11 prof,zz//,dprof //+(nl+1) String/G globprosldz="prof",globproz="zz" zz=x*50-50 prof=6.25 //prof=(abs(7*sin(Pi*x/20))) prof[0]=0 prof[1]=0 for (i=0;i(NLay+1) && i<(Nlay+2+Nlay+1)) T_Constraints_temp [2*i]=Num2Str(1) endif endfor endif // Profile4Fit(w_fit,x) String/G globcheckhold="checkhold" If (WaveExists(Rq_Fit)<1 ) Duplicate/O /D $RQ4data Rq_Fit elseif (gsw>0) wave Qzdata1=$Qzdata // Wave Rq_Fit Rq_Fit= Rq_Fit/Qzdata1^4 endif Duplicate/O /D w_fit W_coef Display /W=(37,(j+40+45+40)*72/96,370,(j+40+45+40)*72/96+187) /HOST=$globExptTitle /N=RQplotInPanel $RQ4data Rq_Fit vs $Qzdata as "ReflectivityPlot4RQFitGraph" Label left "\\f01"+RRQ4nPlot Label bottom "\\f01Q\Bz\M (Å\\S-1\\M)" ModifyGraph framestyle=5,log(left)=1, mirror=1,minor=0,standoff=1,tick=2, mode($RQ4data)=3, marker($RQ4data)=19,opaque($RQ4data)=1, rgb(Rq_Fit)=(0,0,65280), rgb($RQ4data)=(65280,21760,0),useMrkStrokeRGB($RQ4data)=1,lsize(Rq_Fit)=2, lowTrip=0.0001//,grid=1,gridRGB=(65280,54528,32768) ModifyGraph gbRGB=(57000,57000,57000), wbRGB=(54000,54000,54000),lblRot(left)=-90 ErrorBars $RQ4data Y ,wave=($dRQ4data,$dRQ4data)//XY,wave=($dqdata,$dqdata) // TitleBox Rnplot title=RRQ4nPlot,pos={52, j+220},fsize=12,fstyle=1, frame=0, labelBack=(53760,53760,53760),variable=RRQ4nPlot //Left Label to vary by slider if (pfyn>0) Cursor /S=1 /W=$globExptTitle#RQPlotInPanel A $RQ4data leftx($RQ4data) Cursor /S=1 /W=$globExptTitle#RQPlotInPanel B $RQ4data numpnts($RQ4data) else //SetActiveSubWindow NR#RQPlotInPanel Cursor /K /W=$globExptTitle#RQPlotInPanel A //$rq4data1 Cursor /K /W=$globExptTitle#RQPlotInPanel B //$rq4data1 //SetAxis /W=NR#RQPlotInPanel /A bottom endif //Profile4Fit(w_fit,x) Display /W=(400,(j+40+45+40)*72/96,733,(j+40+45+40)*72/96+187) /HOST=$globExptTitle /N=SLDplotInPanel $globprosldz vs $globproz Label left "\\F'Arial'\\f0110\\S6\\MSLD (Å\\S-2\\M)" Label bottom "\\f01z (Å)" ModifyGraph framestyle=5, mirror=1,minor=0,standoff=1,tick=2,mode($globprosldz)=4,marker($globprosldz)=19,msize($globprosldz)=2,lsize($globprosldz)=1.5,opaque($globprosldz)=1,zColor($globprosldz)={$globprosldz,*,*,Rainbow},grid=1,gridRGB=(60000,60000,60000)//(65280,54528,32768) ModifyGraph gbRGB=(57000,57000,57000), wbRGB=(54000,54000,54000)//,useMrkStrokeRGB=1//, mrkStrokeRGB($globprosldz)=(30464,30464,30464) if (syn>0) // Variable cursorasld=pcsr(A,"NR#SLDPlotInPanel") Cursor /S=2 /C=(26368,0,52224) /W=$globExptTitle#SLDPlotInPanel A prof ceil((numpnts(prof)-1)/2)-1 else Cursor /K /W=$globExptTitle#SLDPlotInPanel A //$rq4data1 endif ///For symtric case/////////////////////////////////////////////////////////////////////////////////////////// weps1=0.01 //<< tempw=0 Variable ii,jj for (i=0;i9) GroupBox gb3 frame=1,size={1,695+(globNLay-9)*18+25},pos={1020,60} GroupBox bottomgb0 frame=1,size={1149,1},pos={0,757+(globNLay-9)*18+25} GroupBox rightg3 frame=1,size={1,758+(globNLay-9)*18+25},pos={1147,0} else GroupBox gb3 frame=1,size={1,695},pos={1020,60} GroupBox bottomgb0 frame=1,size={1149,1},pos={0,757} GroupBox rightg3 frame=1,size={1,758},pos={1147,0} endif Button rst1,pos={1040,260},size={92,20},fColor=(26368,0,52224),fstyle=1 //pos={1027,80} Button rst1,proc=UserRestartPanel_ContButton2,title="Do Fit",help={"To Start fitting."} Button upbutton,pos={1040,110},size={92,20},fColor=(65280,21760,0),fstyle=1 //pos={1027,80} Button upbutton,proc=UserUpdatePanel_ContButton,title="ReNew",help={"To reload this control window; Some of features in the graph could be changed."} // Button rst4i,pos={1030,140},size={92,20},fColor=(65280,43520,0),fstyle=1//pos={/{1027,110} // Button rst4i,proc=UserIn2InPanel_ContButton,title="IN\\F'Symbol'® \\M\\F'Arial'OUT",help={"To copy input paramters to output."} Button rst4,pos={1040,140},size={92,20},fColor=(65280,43520,0),fstyle=1//pos={/{1027,110} Button rst4,proc=UserOut2InPanel_ContButton,title="OUT\\F'Symbol'® \\M\\F'Arial'IN",help={"To copy output paramters to input."} Button rst2,pos={1040,170},size={92,20},fColor=(0,5000,0),fstyle=1//pos={1027,140} Button rst2,proc=UserPara2SLDPanel_ContButton,title="IN \\F'Symbol'® \\M\\F'Arial'SLD",help={"To calculate SLD profile from the input paramters."} Button rst5,pos={1040,200},size={92,20},fColor=(0,43520,65280),fstyle=1//pos={1027,170}, Button rst5,proc=UserEditSLD_ContButton,title="SLD Draw",help={"To Edit the present SLD profile on the graph or to return the graph to the normal mode."} Button rst3,pos={1040,230},size={92,20},fColor=(0,15872,50000),fstyle=1//pos={1027,170}, Button rst3,proc=UserSLD2RPanel_ContButton,title="SLD \\F'Symbol'® \\M\\F'Arial'R(Q4)",help={"To calculate reflectivity (R or RQ4; blue line) and xi sqr from the present SLD profile. "} Button LWF,pos={1040,80},size={92,20},fColor=(55000,0,0),fstyle=1//pos={1027,170}, Button LWF,proc=LoadWaveFromFile,title="LoadFile",help={"Choose a text file to load your data. Use only if you want to have the title from the file name you would load."} //Expt_Title="ddd" // print "kk=",Expt_Title LoadWaveFromFile Button rst1a,pos={230,10-2},size={20,20},fColor=(26368,0,52224),fstyle=1 //pos={1027,80} Button rst1a,proc=UserRestartPanel_ContButton2,help={"To start fitting."},title="F" Button upbuttona,pos={80,10-2},size={20,20},fColor=(65280,21760,0),fstyle=1 //pos={1027,80} Button upbuttona,proc=UserUpdatePanel_ContButton,help={"To reload this control window; Some of features in the graph will be changed."},title="N" // Button rst4ia,pos={110,15},size={20,20},fColor=(65280,43520,0),fstyle=1//pos={/{1027,110} // Button rst4ia,proc=UserOut2InPanel_ContButton,help={"To copy input paramters to output."},title="I" Button rst4a,pos={110,10-2},size={20,20},fColor=(65280,43520,0),fstyle=1//pos={/{1027,110} Button rst4a,proc=UserOut2InPanel_ContButton,help={"To copy output paramters to input."},title="I" Button rst2a,pos={140,10-2},size={20,20},fColor=(0,5000,0),fstyle=1//pos={1027,140} Button rst2a,proc=UserPara2SLDPanel_ContButton,help={"To calculate SLD profile from the input paramters."},title="S" Button rst5a,pos={170,10-2},size={20,20},fColor=(0,43520,65280),fstyle=1//pos={1027,170}, Button rst5a,proc=UserEditSLD_ContButton,help={"To Edit the present SLD profile in the graph or to return the graph to the normal mode."},title="D" Button rst3a,pos={200,10-2},size={20,20},fColor=(0,15872,50000),fstyle=1//pos={1027,170}, Button rst3a,proc=UserSLD2RPanel_ContButton,help={"To calculate reflectivity (R or RQ4; blue line) and xi sqr from the present SLD profile."},title="R" Button LWFa,pos={50,10-2},size={20,20},fColor=(55000,0,0),fstyle=1,fsize=14//pos={1027,170}, Button LWFa,proc=LoadWaveFromFile,title="L",help={"Choose a text file to load your data. Use this button only one time per the same data file."} String namesim//, nametempwim Make /O /N=(globNlay+2) Im_SLD_in//,Im_SLD_out String /G globImSLDin="Im_SLD_in"//,globImSLDout="Im_SLD_out" if (globcmplxcalyn>1) TitleBox titleImag title="\f01 Imaginary \f00\r SLD (10\\S-6\\MÅ\\S-2\\M)", pos={1040,432},fstyle=1,frame=0,help={" Imaginary part of SLD; The imaginary profile is 'prof_IM' vs 'zz'."}//,help={"Some SLDs; Si=2.07, SiO2=3.16, Quartz=4.2, D2O=6.25, h-Toluene=0.94, Cyclohexane=-0.278, P2VP=1.87, h-PS=1.4, d-PS=6.4"} //,frame=4//,labelBack=(55000,55000,65000) // TitleBox titleImaginout title="Real Imaginary", pos={1046,447},fstyle=0,frame=0//,help={"Some SLDs; Si=2.07, SiO2=3.16, Quartz=4.2, D2O=6.25, h-Toluene=0.94, Cyclohexane=-0.278, P2VP=1.87, h-PS=1.4, d-PS=6.4"} //,frame=4//,labelBack=(55000,55000,65000) // GroupBox SLDIMbox frame=1,size={102,83+20*i},pos={1025,475} for (i=0; i<=globNlay+1; i=i+1) namesim="ImSLDin"+num2str(i) // nametempw="ImSLDout"+num2str(i) low="K"+num2str(i) if (i==0) TitleBox $low+"Tim" title="M ",pos={1045,471+20*i},fstyle=1,fsize=13,frame=5,labelBack=(65280,43520,0),help={"Incident Medium"}//,fcolor=(65000,65000,65000),(65280,21760,0) elseif (i==(globNlay+1)) KillControl SLDIMbox TitleBox $low+"Tim" title="S ", pos={1045,471+20*i},fstyle=1,fsize=13,frame=5,labelBack=(0,65280,38024),help={"Substrate"} //title=num2str(i) GroupBox SLDIMbox frame=1,size={102,83+20*i},pos={1035,425} else TitleBox $low+"Tim" title=num2str(i),pos={1050,477+20*i},frame=0 endif SetVariable $namesim bodyWidth=55,title=" ",value=$globImSLDin[i],pos={1069,475+20*i},limits={-100,100,0},proc=autoRup,help={" Imaginary part of SLD; These are fixed for fitting and stored in 'Im_SLD_in'."}//,format="%4.2f" // SetVariable $nametempw bodyWidth=35,title=" ",value=$globImSLDout[i],pos={1077,465+20*i},limits={-10,10,0},help={" Results; these outputs are calculated as ImSLD_input*ReSLD_out/ReSLD_in."}//,format="%5.3f" endfor // Im_SLD_out=Im_SLD_in else KillControl SLDIMbox Im_SLD_in=0 // Im_SLD_out=0 endif // Profile4Fit( ) SetVariable /Z comWinIn bodyWidth=865, frame=0, labelback=(60416,59648,55296),title=" ",pos={90, ((jfl*(1+comcorc)+40+45+40)*72/96+372)}, proc=ComLineinWin, value=globcomWin//,labelBack=(65280,43520,0),frame=1//,fstyle=0//,fColor=(55000,0,0)//,help={" Low limit "} // TitleBox comman title="Command (? :^ )",pos={50,(j+40+45+40)*72/96+372}, frame=0 TitleBox comman title="Note:",pos={50,((jfl*(1+comcorc)+40+45+40)*72/96+372)}, frame=0,help={"Note ..."}//, labelback=(60416,59648,55296) Variable /G globstop2sld=1 Duplicate /O $dRQ4data dRQ_temp Profile4Fit(w_fit,x) KillWaves dRQ_temp SetWindow $globExptTitle, hook=winhookproc // FitRgeneral3() // print ExptTitle End ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Function winhookproc(infoStr) String infoStr String wn=WinName(0,1) //String ExptTitle//=globExptTitle if( StrSearch(infoStr,"EVENT:activate",0) >= 0) // SetIgorMenuMode "Graph","Append Traces to G", enableItem // String wn=WinName(0,1) SetDataFolder root:$wn String /G globExptTitle globExptTitle=wn FitRgeneral3( ) SetDataFolder root:$wn SetIgorMenuMode "Graph", "Append Traces to Graph",DisableItem SetIgorMenuMode "Analysis", "Curve Fitting",DisableItem SetIgorMenuMode "Windows", "Control", DisableItem // Execute "Menu Graph Submenu (Append traces to graph... end End" elseif ( StrSearch(infoStr,"EVENT:deactivate",0) >= 0) SetIgorMenuMode "Graph", "Append Traces To Graph",EnableItem SetIgorMenuMode "Analysis", "Curve Fitting",EnableItem SetIgorMenuMode "Windows", "Control", EnableItem // elseif ( StrSearch(infoStr,"EVENT:deactivate",0) >= 0||StrSearch(infoStr,"EVENT:kill",0) >=2) elseif ( StrSearch(infoStr,"EVENT:kill",0) >=2) // SetIgorMenuMode "NeutronReflectivity","Other R Calculation: nosmear", disableItem // SetIgorMenuMode "Windows","Graph Macros", DisableItem // DoWindow /K "Close Window" SetDataFolder root: if (StrSearch(infoStr,"EVENT:kill",0) >=2) // Execute "Cancel" Variable yeskillDF=0 // DoWindow /K Stop4NewDFName // NewPanel /N=Stop4NewDFName /W=(2,0,450,100) // PopupMenu $wn value="No;Yes",mode=yeskillDF, pos={110,20},fstyle=1, size={80,100},bodyWidth=250, title= "Remove '"+wn+"' permanently? (0(No)/1(Yes))" /////////,fstyle=1, size={80,200},proc=dataRInput,pos={210,70},help={"Reflectivity Data"}//WaveList("*",";","") // Button buttonSNDFN,pos={155,65},size={92,20},fstyle=1 // Button buttonSNDFN,proc=Stop4NewDFName_ContButton,title="Continue" // PauseForUser Stop4NewDFName Prompt yeskillDF, "Remove '"+wn+"' permanently? (0(No)/1(Yes))" DoPrompt "Kill DataFolder named '"+wn+"'",yeskillDF //<< this command gives a choice for killing previous datafolder but had a problem with FitRgeneral2()<0) pt4insdel=fk-1 // fk=NLay_1+2 Break else pt4insdel=0 endif endfor If (globNLay>globNLay_1) //add (delete) points from 1st layer when Nlay is changed. InsertPoints 1+pt4insdel,globNLay-globNLay_1,checkhold,w_fit,tempw InsertPoints 0+pt4insdel,globNLay-globNLay_1,fitfun1 InsertPoints 2*(1+pt4insdel),2*(globNLay-globNLay_1), T_Constraints_temp InsertPoints globNLay+2+pt4insdel,globNLay-globNLay_1,checkhold,w_fit,tempw InsertPoints 2*((globNLay+2)+pt4insdel),2*(globNLay-globNLay_1), T_Constraints_temp InsertPoints 2*(globNLay+1)+1+pt4insdel,globNLay-globNLay_1,checkhold,w_fit,tempw InsertPoints 2*(( 2*(globNLay+1)+1)+pt4insdel),2*(globNLay-globNLay_1), T_Constraints_temp if (globcmplxcalyn>1) InsertPoints 1+pt4insdel,globNLay-globNLay_1,Im_SLD_in endif elseif (globNLay1) DeletePoints 1+pt4insdel,abs(globNLay_1-globNLay),Im_SLD_in endif endif Redimension /N=(nopara) checkhold // Make /O /D /N=(nopara) checkhold Make /O /D /N=(nopara) w_fit,weps1 // w_fit[1+pt4insdel]=1; w_fit[globNLay+2+pt4insdel]=1;w_fit[2*(globNLay+1)+1+pt4insdel]=4 // Duplicate/O /D w_fit, tempw //<<<081706 Wave tempw //<<<081706 tempw[nopara-1]=sf Make /O /T /N=(nopara) namepara Make /O /T /N=(2*nopara) namecnstrnt Make /O /T /N=(2*nopara) T_Constraints_temp//,T_Constraints Make /O /D /N=(globNlay+1) fitfun1 If (globNLay>globNLay_1) for (fk=globNLay+2+pt4insdel;fk<(globNLay+2+pt4insdel+globNLay-globNLay_1);fk=fk+1) w_fit[fk]=1 w_fit[fk+(globNLay+1)]=4 // tempw[fk]=1 T_Constraints_temp[2*fk]="1" endfor endif fitfun="fitfun1" String/G globcheckhold="checkhold" String/G RRQ4nPlot String/G dRQ4nPlot String/G globwww="w_fit" String/G globfitfun="fitfun1" String/G globT_Constraints_temp="T_Constraints_temp" String /G globprosldz,globproz String names,namelow,namehigh,low,nametempw,nametitle,namefun,Rdata,dRdata,Qdata,dQzdata if (rswitch>0) RRQ4nPlot="RQ\\S4" dRQ4nPlot="SigRQ\\S4" else RRQ4nPlot="R" dRQ4nPlot="SigR" endif String /G globExptTitle=ExptTitle ModifyGraph /W=$globExptTitle gbRGB=(60416,59648,55296) KillControl tiltleIn SetVariable tiltleIn value=globExptTitle, bodyWidth=135, title=" ", proc=ExtTitleUp1, pos={177,36},labelBack=(65280,43520,0),frame=1//,fstyle=0//,fColor=(55000,0,0)//,help={" Low limit "} String /G globExptTitlepre=globExptTitle j=727 TitleBox title0 title="Neutron", pos={385,14},fsize=22,fstyle=1,font="Lucida Calligraphy",frame=0, fcolor=(20000,20000,20000),help={"Nuetron and X-Ray Reflectivity Analysis ..." }//(370,9),labelBack=(55000,55000,65000) //"Monotype Corsiva" TitleBox title01 title="Reflectivity", pos={590,14},fsize=22,fstyle=1,font="Lucida Calligraphy",frame=0, fcolor=(20000,20000,20000),help={"Nuetron and X-Ray Reflectivity Analysis ..." }//(370,9),labelBack=(55000,55000,65000) //"Monotype Corsiva" TitleBox Company title="ORNL", pos={1055,6},fsize=14,fstyle=1,font="Times New Roman",frame=0, fcolor=(20000,20000,20000)//,labelBack=(55000,55000,65000) TitleBox Author title="Neutron Scattering Sciences Division", pos={1000,25},fsize=9,fstyle=1,font="Times New Roman",frame=0, fcolor=(20000,20000,20000)//,labelBack=(55000,55000,65000) TitleBox WDate title=date(), pos={1027,40},fsize=10,fstyle=0,font="Times New Roman",frame=0, fcolor=(20000,20000,20000)//,labelBack=(55000,55000,65000) Button nnbutton picture=ProcGlobal#nbutton,pos={510,7},size={5,5},proc=LogoButton,title="",help={" Developed by Jae-Hie J. Cho, Gregory S. Smith, and William A. Hamilton at the Oak Ridge National Laboratory"} GroupBox topgb0 frame=1,size={1140,1},pos={5,55} // TitleBox Inputddd title="INPUT DATA", pos={50,45},fstyle=1,frame=4,labelBack=(60416,59648,55296)//,frame=4//,labelBack=(55000,55000,65000) GroupBox gb0 frame=1,size={1013,1},pos={5,55+50} TitleBox title1 title="GLOBAL VARIABLES", pos={50,45+50},fstyle=1,frame=4,labelBack=(60416,59648,55296)//,frame=4//,labelBack=(55000,55000,65000) TitleBox rticktitleR title="R", pos={80,90+50},fsize=12,fstyle=1,frame=0//, fcolor=(20000,20000,20000)//,labelBack=(55000,55000,65000) TitleBox rticktitleRQ4 title="RQ\\S4\\M", pos={180,83+50},fsize=12,fstyle=1,frame=0//, fcolor=(20000,20000,20000)//,labelBack=(55000,55000,65000) GroupBox rbox frame=1,size={180,30},pos={50,80+50}//,title="Reflectivity calculation" Slider objectR, pos={110,90+50},size={50,40},fsize=10,ticks=0,limits={0,1,1},value=rswitch,userTicks={tickNumbers,tickLabels},vert=0,side=0,proc=SliderobjectR, labelback=(60416,59648,55296),help={"To choose Reflectivity to be calculated; R or RQ4?"} SetVariable setvar0 //pos={180-142,115+50} SetVariable setvar1 //pos={180-142,135+50} SetVariable setvar2 //pos={180-142,155+50} SetVariable setvar3 //pos={180-142,175+50} SetVariable setvar4 //pos={180-142,195+50} TitleBox title2 title="FIT PARAMETERS", pos={275,45+50},fstyle=1,frame=4,labelBack=(60416,59648,55296)//,frame=4//,labelBack=(55000,55000,65000) TitleBox title11a title="Layer", pos={276,80+50},fstyle=1,frame=0//,frame=4//,labelBack=(55000,55000,65000) TitleBox title11 title="No.", pos={276,95+50},fstyle=0,frame=0//,frame=4//,labelBack=(55000,55000,65000) TitleBox title3 title="SLD (10\\S-6\\MÅ\\S-2\\M)", pos={385,76+50},fstyle=1,frame=0,help={"Some SLDs; Si=2.07, SiO2=3.16, Quartz=4.2, D2O=6.25, h-Toluene=0.94,d-Toluene=5.66, P2VP=1.87, h-PS=1.4, d-PS=6.4, H2O=-0.56"} //,frame=4//,labelBack=(55000,55000,65000) TitleBox title4 title="Interfacial Roughness (Å) &", pos={555,80+50},fstyle=1,frame=0,help={"Note that this roughness is a quarter of the interfacial thickness. To get STD roughness, divide these values by sqrt(2)"}//,frame=4//,labelBack=(55000,55000,65000) TitleBox title5 title="Shape", pos={725,80+50},fstyle=1,frame=0,help={"The function to describe the interface" }//,frame=4//,labelBack=(55000,55000,65000) TitleBox title6 title="Thickness (Å)", pos={875,80+50},fstyle=1,frame=0,help={"This value equal to (2 * top interfacial roughness+2*bottom interfacial roughness)+ extra thickness."}//,frame=4//,labelBack=(55000,55000,65000) TitleBox title7 title=" Low In Out High", pos={338,95+50},fstyle=0,frame=0//,frame=4//,labelBack=(55000,55000,65000) TitleBox title8 title=" Low In Out High", pos={545,95+50},fstyle=0,frame=0//,frame=4//,labelBack=(55000,55000,65000) TitleBox title9 title="Functions", pos={720,95+50},fstyle=0,frame=0,help={"The functions to describe the interface" }//,frame=4//,labelBack=(55000,55000,65000) TitleBox title10 title=" Low In Out High", pos={835,95+50},fstyle=0,frame=0//,frame=4//,labelBack=(55000,55000,65000) if (moderq4==0) moderq4=1 endif if (modedrq==0) modedrq=1 endif if (modeqz==0) modeqz=1 endif if (modedqz==0) modedqz=1 endif PopupMenu RQdata value=WaveList("*",";",""),mode=moderq4,bodyWidth=150, title="R",fstyle=1, size={80,200},proc=dataRInput,pos={210,70},help={"Reflectivity Data"}//WaveList("*",";","") PopupMenu dRQdata value=WaveList("*",";",""),mode=modedrq,bodyWidth=150, title="dR",fstyle=1,size={80,200},proc=datadRInput,pos={430,70},help={"Uncertainty of Reflectivity Data"} PopupMenu Qzdata value=WaveList("*",";",""),mode=modeqz,bodyWidth=150, title="Q",fstyle=1,size={80,200},proc=dataQInput,pos={650,70},help={"Qz Data"} // if (globyn==0) // PopupMenu dQdata value="sigQ Smear: Turned Off",mode=modedqz,bodyWidth=150, title="sigQ",fstyle=1,disable=2,size={80,200},proc=datadQInput,pos={870,70},help={"Uncertainty of Qz Data"} // else PopupMenu dQdata value=WaveList("*",";",""),mode=modedqz,bodyWidth=150, title="dQ",fstyle=1,disable=0,size={80,200},proc=datadQInput,pos={870,70},help={"Uncertainty of Qz Data"} // endif // TitleBox Rtitle title="",pos={112,70}, frame=0,fstyle=1, variable=RRQ4nPlot //Left Label to vary by slider // TitleBox dRtitle title="",pos={313,70}, frame=0,fstyle=1, variable=dRQ4nPlot //Left Label to vary by slider Variable/G globmoderq4=moderq4,globmodedrq=modedrq,globmodeqz=modeqz,globmodedqz=modedqz RQdata=WaveName("",moderq4-1, 4) dRQdata=WaveName("",modedrq-1, 4) Qzdata=WaveName("",modeqz-1, 4) dQdata=WaveName("",modedqz-1, 4) String/G globrqdata=RQdata String/G globdrqdata=dRQdata String/G globqzdata=Qzdata String/G globdqdata=dQdata String/G globrq4dataold=RQ4data String/G globdrq4dataold=dRQ4data String/G globqzdataold=Qzdata String/G globdqdataold=dQdata j=0 k=1 kk=0 if ( NLay!=NLay_1) for (i=0; i(2*globNlay+2) nametitle="title"+num2str(i+12) KillControl $nametitle low="K"+num2str(i) KillControl $low CheckBox $low,pos={805,(116+50+(i-2*(globNlay+1))*20)},title=" ",proc=holdcheckbox,value=checkhold[i], labelback=(60416,59648,55296),help={" Hold?"} TitleBox $low+"T" title=low,pos={824,(116+50+(i-2*(globNlay+1))*20)},frame=0 SetVariable $namelow bodyWidth=32,title=" ", value=T_Constraints_temp [2*i],limits={0,1,1},pos={828,(115+50+(i-2*(globNlay+1))*20)},disable=checkhold[i] ,help={"Low limit constraint (Note that this value should be larger than (2 * top interfacial roughness+2*bottom interfacial roughness).)"} SetVariable $names bodyWidth=45,title=" ",value=w_fit[i],limits={1,20000,20},pos={875,(115+50+(i-2*(globNlay+1))*20)},proc=autoRup,format="%4.1f",help={" Initial Guess"} SetVariable $nametempw bodyWidth=35,title=" ",value=tempw[i],pos={912,(115+50+(i-2*(globNlay+1))*20)},limits={0,9000,0},format="%4.1f",help={" Results; The values are stored in a column (so called a wave) named as 'tempw'."}//,disable=2 SetVariable $namehigh bodyWidth=34,title=" ",value=T_Constraints_temp [2*i+1],limits={0,1,1},pos={948,(115+50+(i-2*(globNlay+1))*20)},disable=checkhold[i],help={" High limit constraint; The values are stored in a column (so called a wave) named as 'T_Constraints_temp'."} if (w_fit[i] <1) w_fit[i] =1 endif k=k+1 else low="K"+num2str(i) KillControl $low GroupBox sfbox frame=1,size={250,30},pos={534,(145+45+(i-2*(globNlay+1))*20)} CheckBox $low,pos={570,(153+45+(i-2*(globNlay+1))*20)},title=" ",proc=holdcheckbox,value=checkhold[i], labelback=(60416,59648,55296),help={" Hold?"} TitleBox titlesf title="RScale", pos={510,(149+45+(i-2*(globNlay+1))*20)},fstyle=1,frame=4,labelBack=(60416,59648,55296),help={"To rescale the calculation values of R(Q4) in case, otherwise it should be set to 1."} TitleBox $low+"T" title=low,pos={592,(153+45+(i-2*(globNlay+1))*20)},frame=0 SetVariable $namelow bodyWidth=32,title=" ", value=T_Constraints_temp [2*i],limits={0,1,1},pos={599,(152+45+(i-2*(globNlay+1))*20)},disable=checkhold[i],help={" Low limit constraint; The values are stored in a column (so called a wave) named as 'T_Constraints_temp'."}//,format="%f" SetVariable $names bodyWidth=45,title=" ",value=w_fit[i],limits={0,100,0.1},pos={646,(152+45+(i-2*(globNlay+1))*20)},proc=autoRup,format="%4.2f",help={" Initial Guess; The values are stored in a column (so called a wave) named as 'w_fit'."} SetVariable $nametempw bodyWidth=35,title=" ",value=tempw[i],pos={683,(152+45+(i-2*(globNlay+1))*20)},limits={0,1000,0},format="%5.3f",proc=keepscald,help={"Results: (This Scaling factor value will be used for all the R(Q4) calculations and stored as 'globsf' and in 'tempw'.)"}//,disable=2 SetVariable $namehigh bodyWidth=34,title=" ",value=T_Constraints_temp [2*i+1],limits={0,1,1},pos={719,(152+45+(i-2*(globNlay+1))*20)},disable=checkhold[i],help={" High limit constraint; The values are stored in a column (so called a wave) named as 'T_Constraints_temp'."} endif endfor namefun="" for (j=0;j<=Nlay;j=j+1) namefun=namefun+"f" endfor for (i=globNpara; i<=100; i=i+1) namefun=namefun+"f" low="K"+num2str(i) names="para"+num2str(i) namelow="low"+num2str(i) namehigh="high"+num2str(i) nametempw="tempw"+num2str(i) nametitle="title"+num2str(i+12) KillControl $namefun KillControl $low KillControl $low+"T" KillControl $names KillControl $namelow KillControl $namehigh KillControl $nametempw KillControl $nametitle endfor endif k=((globNlay+1)*20+115)-200 if (k>0) j=((globNlay+1)*20+115)+50 else j=250 endif GroupBox gb1 frame=1,size={1,(j-52)},pos={250,60+50} GroupBox gb2 frame=1,size={1013,1},pos={5,j+10+50} TitleBox titlegraph title="PLOTS", pos={50, j+50},fstyle=1,frame=4,labelBack=(60416,59648,55296)//,frame=4//,labelBack=(55000,55000,65000) CheckBox autoR,pos={210, j+88},title="",variable=globautoR, proc=autoRupbutt, mode=0,labelBack=(60416,59648,55296),help={" Automatically update R (R_Pre_Cal; green line w/ no xi sqr update) in the graph whenever the SLD is updated."} CheckBox autoS,pos={691, j+88},title="",variable=globautoS, proc=autoSupbutt,mode=0,labelBack=(60416,59648,55296),help={" Automatically update SLD profile by changing the fit parameter IN values."} Button titlegraph0,pos={230, j+40+45},size={92,20},fColor=(60416,59648,55296),fstyle=1 //pos={1027,80} Button titlegraph0,proc=MakeGraph_RButton,title="Reflectivity",help={"Make a new graph : "+rq4data+" and Rq_Fit vs. "+globqzdata} Button titlegraph1,pos={711, j+40+45},size={92,20},fColor=(60416,59648,55296),fstyle=1 //pos={1027,80} Button titlegraph1,proc=MakeGraph_sldButton,title="SLD Profile",help={"Make a new graph : "+globprosldz+" vs. "+globproz} // Make /O/N=(globNlay+1) thickneswvx,thickneswvy // for (i=0;i<(globNlay+1);i=i+1) // if (i==0) // thickneswvx[i]=0 // else // thickneswvx[i]=w_fit[2*globNlay+2+i-1]+w_fit[2*globNlay+2+i] // endif // thickneswvy[i]=interp( thickneswvx[i],zz,prof) // endfor SetDataFolder root:$globExptTitle If (WaveExists(Rq_Fit)<1 ) Duplicate/O /D $RQ4data Rq_Fit endif Duplicate/O /D w_fit W_coef MoveSubwindow /W=$globExptTitle#RQplotInPanel fnum=(37,(j+40+45+40)*72/96,370,(j+40+45+40)*72/96+187)//(37,j+20,370,j+227) Label /W=$globExptTitle#RQplotInPanel left "\\f01"+RRQ4nPlot If (WaveExists(prof)<1 || exists (globprosldz)<1) //No. of total points Make /O /D /N=(Npoint*(Nlay+1)+1) prof,zz//,dprof //+(nl+1) String/G globprosldz="prof",globproz="zz" prof=1 zz=1 endif // RemoveFromGraph /Z /W=$globExptTitle#SLDPlotInPanel thickneswvy // AppendToGraph /W=$globExptTitle# SLDplotInPanel thickneswvy vs thickneswvx // ModifyGraph /W=$globExptTitle# SLDplotInPanel mode(thickneswvy)=1 // TitleBox Rnplot title=RRQ4nPlot,pos={52, (j+220)},fsize=12,fstyle=1, frame=0, labelback=(53760,53760,53760),variable=RRQ4nPlot //Left Label to vary by slider MoveSubwindow /W=$globExptTitle# SLDplotInPanel fnum=(400,(j+40+45+40)*72/96,733,(j+40+45+40)*72/96+187)//(400, j+20,733,j+227) if (syn>0 && strlen(CsrInfo(A, ExptTitle+"#SLDPlotInPanel"))>0) Variable cursorasld=pcsr(A,globExptTitle+"#SLDPlotInPanel") Cursor /S=2 /C=(26368,0,52224) /W=$globExptTitle#SLDPlotInPanel A prof cursorasld else Cursor /K /W=$globExptTitle#SLDPlotInPanel A //$rq4data1 endif Variable ii,jj if (pfyn==1) Variable cursora,cursorb SetActiveSubWindow $globExptTitle#RQPlotInPanel //Cursor /S=1 /W=$ExptTitle#RQPlotInPanel A $rq4data leftx($rq4data) //Cursor /S=1 /W=$ExptTitle#RQPlotInPanel B $rq4data numpnts($rq4data) cursora=pcsr(A, globExptTitle+"#RQPlotInPanel") cursorb=pcsr(B, globExptTitle+"#RQPlotInPanel") //Cursor /S=1 /W=NR#RQPlotInPanel A $RQ4data cursora //Cursor /S=1 /W=NR#RQPlotInPanel B $RQ4data cursorb //SetActiveSubWindow $globExptTitle RemoveFromGraph /Z /W=$globExptTitle#RQPlotInPanel Rq_Fit AppendToGraph /W=$globExptTitle#RQPlotInPanel Rq_Fit[cursora,cursorb] vs $Qzdata[cursora,cursorb] ModifyGraph /W=$globExptTitle#RQPlotInPanel rgb(Rq_Fit)=(6528,0,65280),lsize(Rq_Fit)=2 endif //SetActiveSubWindow $globExptTitle#RQPlotInPanel RemoveFromGraph /Z /W=$globExptTitle#RQplotInPanel $RQ4data RemoveFromGraph /Z /W=$globExptTitle#RQplotInPanel $RQdata if (rswitch<1) String trace_wave="RQ4_Trans_"+RQdata RemoveFromGraph /Z /W=$globExptTitle#RQplotInPanel $trace_wave endif AppendToGraph /W=$globExptTitle#RQplotInPanel $RQ4data vs $qzdata // RemoveFromGraph /Z /W=$globExptTitle#RQplotInPanel $RQdata ModifyGraph /Z /W=$globExptTitle#RQplotInPanel framestyle=5,log(left)=1, mirror=1,minor=0,standoff=1,tick=2, mode($RQ4data)=3, marker($RQ4data)=19,opaque($RQ4data)=1, rgb($RQ4data)=(65280,21760,0),useMrkStrokeRGB($RQ4data)=1, rgb(Rq_Fit)=(0,0,65280),lsize(Rq_Fit)=2//,grid=1,gridRGB=(65280,54528,32768) ErrorBars /W=$globExptTitle#RQplotInPanel $RQ4data Y,wave=($dRQ4data,$dRQ4data)//XY,wave=($dqdata,$dqdata) CheckDisplayed /W= $ExptTitle#RQplotInPanel $(RQ4data+"_Pre_Cal") if(V_flag==1) ReorderTraces /W=$globExptTitle#RQplotInPanel $RQ4data,{$(RQ4data+"_Pre_Cal")} endif CheckDisplayed /W= $ExptTitle#RQplotInPanel Rq_Fit if(V_flag==1) ReorderTraces /W=$globExptTitle#RQplotInPanel Rq_Fit,{$RQ4data} endif if (pfyn>0) Cursor /S=1 /W=$globExptTitle#RQPlotInPanel A $RQ4data cursora Cursor /S=1 /W=$globExptTitle#RQPlotInPanel B $RQ4data cursorb endif //return 0 SetActiveSubWindow $globExptTitle Variable /G globV_chisq Variable /G globV_Rchisq Variable /G globnpntsdata TitleBox chisqtitle title="\\F'symbol'c\\S2\\M\\Bn\\M =",pos={440, j+35+50}, frame=0 SetVariable chisq1, title=" ", value=globV_chisq,frame=0,pos={468, j+40+50},limits={0,1000,0},size={50,20},format="%8.2f",noedit=1 SetVariable npntsdata, title="/ ",value=globnpntsdata,frame=0,pos={518, j+40+50},limits={0,1000,0},size={40,20},noedit=1 SetVariable chisq2, title="= ",value=globV_Rchisq,frame=0,pos={560, j+39+50},limits={0,1000,0},size={100,20} ,noedit=1//,format="%7.3f" // // SetVariable /Z comWinIn pos={0,(j+40+45+40)*72/96+372}, bodyWidth=850//value=globcomWin, title=" Command:", , bodyWidth=910, title=" Command:"proc=ComLineinWin, pos={20,740} Variable comcorc=0 // if (k>0) if (j>365) comcorc=0.1 endif SetVariable /Z comWinIn value=globcomWin, pos={90, (j*(1+comcorc)+40+45+40)*72/96+372}, bodyWidth=865, frame=0, labelback=(60416,59648,55296),title=" ", proc=ComLineinWin//,labelBack=(65280,43520,0),frame=1//,fstyle=0//,fColor=(55000,0,0)//,help={" Low limit "} // TitleBox comman title="Command (? :^ )",pos={50,(j+40+45+40)*72/96+372}, frame=0 TitleBox comman title="Note:",pos={50,(j*(1+comcorc)+40+45+40)*72/96+372}, frame=0,help={"Note ..."}//, labelback=(60416,59648,55296) if (GlobNLay>9) GroupBox gb3 frame=1,size={1,695+(globNLay-9)*18+25},pos={1020,60} GroupBox bottomgb0 frame=1,size={1149,1},pos={0,757+(globNLay-9)*18+25} GroupBox rightg3 frame=1,size={1,758+(globNLay-9)*18+25},pos={1147,0} else GroupBox gb3 frame=1,size={1,695},pos={1020,60} GroupBox bottomgb0 frame=1,size={1149,1},pos={0,757} GroupBox rightg3 frame=1,size={1,758},pos={1147,0} endif String namesim//, nametempwim Make /O /N=(globNlay+2) Im_SLD_in//,Im_SLD_out String /G globImSLDin="Im_SLD_in"//,globImSLDout="Im_SLD_out" if (globcmplxcalyn>1) TitleBox titleImag title="\f01 Imaginary \f00\r SLD (10\\S-6\\MÅ\\S-2\\M)", pos={1040,432},fstyle=1,frame=0,help={" Imaginary part of SLD; The imaginary profile is 'prof_IM' vs 'zz'."}//,help={"Some SLDs; Si=2.07, SiO2=3.16, Quartz=4.2, D2O=6.25, h-Toluene=0.94, Cyclohexane=-0.278, P2VP=1.87, h-PS=1.4, d-PS=6.4"} //,frame=4//,labelBack=(55000,55000,65000) // TitleBox titleImaginout title="Real Imaginary", pos={1046,447},fstyle=0,frame=0//,help={"Some SLDs; Si=2.07, SiO2=3.16, Quartz=4.2, D2O=6.25, h-Toluene=0.94, Cyclohexane=-0.278, P2VP=1.87, h-PS=1.4, d-PS=6.4"} //,frame=4//,labelBack=(55000,55000,65000) for (i=0; i<=globNlay+9; i=i+1) namesim="ImSLDin"+num2str(i) low="K"+num2str(i) KillControl $low+"Tim" KillControl $namesim // SetVariable $nametempw bodyWidth=35,title=" ",value=$globImSLDout[i],pos={1077,465+20*i},limits={-10,10,0},help={" Results; these outputs are calculated as ImSLD_input*ReSLD_out/ReSLD_in."}//,format="%5.3f" endfor for (i=0; i<=globNlay+1; i=i+1) namesim="ImSLDin"+num2str(i) // nametempw="ImSLDout"+num2str(i) low="K"+num2str(i) if (i==0) TitleBox $low+"Tim" title="M ",pos={1045,471+20*i},fstyle=1,fsize=13,frame=5,labelBack=(65280,43520,0),help={"Incident Medium"}//,fcolor=(65000,65000,65000),(65280,21760,0) elseif (i==(globNlay+1)) KillControl SLDIMbox TitleBox $low+"Tim" title="S ", pos={1045,471+20*i},fstyle=1,fsize=13,frame=5,labelBack=(0,65280,38024),help={"Substrate"} //title=num2str(i) GroupBox SLDIMbox frame=1,size={102,83+20*i},pos={1035,425} else TitleBox $low+"Tim" title=num2str(i),pos={1050,477+20*i},frame=0 endif SetVariable $namesim bodyWidth=55,title=" ",value=$globImSLDin[i],pos={1069,475+20*i},limits={-100,100,0},proc=autoRup,help={" Imaginary part of SLD; These are fixed for fitting and stored in 'Im_SLD_in'."}//,format="%4.2f" // SetVariable $nametempw bodyWidth=35,title=" ",value=$globImSLDout[i],pos={1077,465+20*i},limits={-10,10,0},help={" Results; these outputs are calculated as ImSLD_input*ReSLD_out/ReSLD_in."}//,format="%5.3f" endfor // Im_SLD_out=Im_SLD_in else KillControl SLDIMbox KillControl titleImag for (i=0; i<=globNlay+9; i=i+1) namesim="ImSLDin"+num2str(i) low="K"+num2str(i) KillControl $low+"Tim" KillControl $namesim // SetVariable $nametempw bodyWidth=35,title=" ",value=$globImSLDout[i],pos={1077,465+20*i},limits={-10,10,0},help={" Results; these outputs are calculated as ImSLD_input*ReSLD_out/ReSLD_in."}//,format="%5.3f" endfor Im_SLD_in=0 // Im_SLD_out=0 endif globNLay_1=globNLay End ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Function autoRup(ctrlName,varNum,varStr,varName)//: SetVariableControl String ctrlName Variable varNum String varStr String varName Variable /G globautoS Variable /G globautoR Variable /G globNlay if (globautoS<1) globautoR=0 if (stringmatch(ctrlName,"setvar2")==1) FitRgeneral3() endif else SVAR rq4data1=globrq4data,drq4data1=globdrq4data,qzdata1=globqzdata,dqdata1=globdqdata Variable i String rq4data2=rq4data1,drq4data2=drq4data1,qzdata2=qzdata1,dqdata2=dqdata1 Wave rq4data=$rq4data2,drq4data=$drq4data2, qzdata=$qzdata2,dqdata=$dqdata2 // Wave Rq_Fit Duplicate /O drq4data dRQ_temp // String Rq_Fit1=rq4data2+"_Pre_Cal" Wave w_fit if (globNlay>0) for (i=globNlay+2;i<(3*globNlay+3);i=i+1) if (stringmatch(ctrlName,"para"+num2str(i))==1) if (i==globNlay+2&&w_fit[i]>(w_fit[i+globNlay+1]/2-w_fit[i+1])) w_fit[i+globNlay+1]=2*(w_fit[i]+w_fit[i+1]) elseif (i==2*globNlay+2&&w_fit[i]>(w_fit[i+globNlay]/2-w_fit[i-1])) w_fit[i+globNlay]=2*(w_fit[i]+w_fit[i-1]) elseif (i>globNlay+2&&i<2*globNlay+2) if (w_fit[i]>(w_fit[i+globNlay+1]/2-w_fit[i+1])) w_fit[i+globNlay+1]=2*(w_fit[i]+w_fit[i+1]) endif if (w_fit[i]>(w_fit[i+globNlay]/2-w_fit[i-1])) w_fit[i+globNlay]=2*(w_fit[i]+w_fit[i-1]) endif elseif ( i>2*globNlay+2) if (w_fit[i]<2*(w_fit[i-globNlay-1]+w_fit[i-globNlay])) w_fit[i]=2*(w_fit[i-globNlay-1]+w_fit[i-globNlay]) endif endif break endif endfor endif // Variable idq // for (idq=0;idq0) ModifyGraph /W=$ExptTitle#SLDplotinPanel mode(prof)=4,msize(prof)=2,lsize(prof)=1.5 GraphNormal /W=$ExptTitle#SLDplotinPanel globgraphhold=0 endif endif Variable /G globmodecalRDP=1 if (npt>2) if (stringmatch(ctrlName,"editt")==1) Rq_Fit1= ParrattNTRNdq(Qz_Fit1, dQ_Fit1,notp) else globautowav=1 Rq_Fit1= Profile4Fit(w_fit,x) globautowav=0 endif CheckDisplayed /W= $ExptTitle#RQplotInPanel Rq_Fit1 if (V_flag!=1) AppendToGraph/C=(0,39168,0) /W=$ExptTitle#RQplotInPanel Rq_Fit1 vs Qz_Fit1 // SetWindow $ExptTitle#RQplotInPanel kwTopWin // if (stringmatch(rq4data2,"SelectData")==1) // ModifyGraph /Z /W=$ExptTitle#RQplotInPanel lsize(SimR_Pre_Cal)=1.5//,rgb(Rq_Fit1)=(0,39168,0) // else ModifyGraph /Z /W=$ExptTitle#RQplotInPanel lsize($rq4data2+"_Pre_Cal")=1.5//,rgb(Rq_Fit1)=(0,39168,0) // endif endif else Variable/G globstop2sld=1 Profile4Fit(w_fit,x) endif // if (stringmatch(rq4data2,"SelectData")==1) // CheckDisplayed /W= $ExptTitle#RQplotInPanel SimR_Pre_Cal // else CheckDisplayed /W= $ExptTitle#RQplotInPanel $rq4data2+"_Pre_Cal" // endif // print V_flag if (globautoR<1&&V_flag>0) // if (stringmatch(rq4data2,"SelectData")==1) // RemoveFromGraph /W=$ExptTitle#RQplotInPanel SimR_Pre_Cal // else RemoveFromGraph /W=$ExptTitle#RQplotInPanel $rq4data2+"_Pre_Cal" // endif endif killwaves /Z dRQ_temp // CheckDisplayed /W=$ExptTitle#RQPlotInPanel Rq_Fit // if (V_flag>0) //ReorderTraces /W=$ExptTitle#RQPlotInPanel Rq_Fit, {$rq4data2} //endif // if (globautoR>0) // Variable ss=V_flag //CheckDisplayed /W=$ExptTitle#RQPlotInPanel $rq4data2+"_Pre_Cal" // if (V_flag>0 && ss>0) // ReorderTraces /W=$ExptTitle#RQPlotInPanel $rq4data2+"_Pre_Cal", {$rq4data2,Rq_Fit} // endif // endif endif End Function autoRupbutt(ctrlName,checked): CheckBoxControl String ctrlName Variable checked Variable /G globautoR, globautoS if (checked>0) globautoS=1 autoRup("",0,"","") endif // globautoR=checked autoRup("editt",0," ", " ") End Function autoSupbutt(ctrlName,checked): CheckBoxControl String ctrlName Variable checked Variable /G globautoR,globautoS if (checked<1) globautoR=0 globautoS=1 autoRupbutt("",0) globautoS=0 endif autoRup(" ",0," ", " ") End Function AbtrProfile4FitS(w,qq): FitFunc//,nl, nopntalayer)//: FitFunc//q,sigmaq,nt,nl) : FitFunc //nl = # of total layers, nt=# of total q points //Variable w Wave w Variable qq//,nopntalayer,nl //Variable /G globyn=1 //Variable q//,sigmaq,nt NVAR npt1=globNpoint, syn1=globsyn, yn1=globyn,npara1=globNpara,lay1=globNlay//, ssyn1=globssyn Variable npt=npt1, npara=npara1,syn=syn1,yn=yn1,lay=lay1//,ssyn=ssyn1 SVAR qqq=globqzdata SVAR dddq=globdqdata NVAR s2sld1=globStop2SLD Wave q4f=$qqq Wave dq4f=$dddq Variable q=q4f[qq] Variable sigmaq=dq4f[qq] Variable i,j,k,ad,s_thick Variable notp,Rq_Fitout,deltad Variable z,zzorg,ceilnotp//,sf,sf1 //NVAR sf=globsf //Variable s_thick_1=NumVarOrDefault("globs_thick_1", 1) //Variable sf1=sf notp=numpnts(prof) // notp=npt*(lay+1)+1 //No. of total points Make /O /D /N=(notp) prof,zz//,abtr_zz_temp String/G globprosldz="prof",globproz="zz" ceilnotp=ceil(notp-1)/2 //30 s_thick=abs(w[(ceilnotp)]) for (i=0;i alpha) abtr_weps1[i]= alpha*sign(abtr_weps1[i]) endif ////abtr_weps1[i]=0.1 //need to be removed when others are enabled endfor Rq_Fitpre=Rq_Fitout return Rq_Fitout // End Function ArbtrProfile4FitZ(w,qq): FitFunc//,nl, nopntalayer)//: FitFunc//q,sigmaq,nt,nl) : FitFunc //nl = # of total layers, nt=# of total q points //Variable w Wave w Variable qq//,nopntalayer,nl Variable alpha=1e-06//0.0001 NVAR npt1=globNpoint,lay1=globNlay//, ssyn1=globssyn Variable npt=npt1,lay=lay1//,ssyn=ssyn1 SVAR qqq=globqzdata SVAR dddq=globdqdata Wave q4f=$qqq Wave dq4f=$dddq Variable q=q4f[qq] Variable sigmaq=dq4f[qq] Variable zz_sf Variable notp,Rq_Fitout,deltad,i Variable /G globpre_wnotp String/G globproz Wave zz notp=numpnts(prof)// npt*(lay+1)+1 //No. of total points // zz_sf=w[notp] Duplicate /O zz zzd Make /O /D /N=(notp+1) abtr_weps1,abtr_prew String/G globabtr_weps="abtr_weps1",globprew="abtr_prew" Variable Rq_Fitpre=NumVarOrDefault("globRq_Fitpre", 1) abtr_prew=1 for (i=1;i0 || (abs(w[i+1]-w[i])-abs(w[i-1]-w[i]))<0) // zzd[i]= (zz[i+1]-zz[i-1])/2//+(abs(w[i+1]-w[i])-abs(w[i-1]-w[i]))/(abs(w[i])) // else if (i==notp-1) zzd[i]=0 else zzd[i]=(zz[i+1]-zz[i-1])/2 endif // endif endfor for (i=1;i alpha) abtr_weps1[i]= alpha*sign(abtr_weps1[i]) endif ////abtr_weps1[i]=0.1 //need to be removed when others are enabled endfor Rq_Fitpre=Rq_Fitout return Rq_Fitout // End Function ConstdzSLD() SVAR prof1=globprosldz,zz1=globproz //NVAR npoint1=globNpoint, Nlay1=globNlay Wave /D prof=$prof1,zz=$zz1 Variable intp//,npoint=npoint1,Nlay=Nlay1 Duplicate /O prof, prof_temp Duplicate /O zz, zz_temp Variable npnts_prof=numpnts(prof) for (intp=1;intp<(npnts_prof-1);intp=intp+1) prof_temp[intp]=interp(zz[0]+intp*(zz[npnts_prof-1]-zz[0])/(npnts_prof-1),zz,prof) zz_temp[intp]=zz[0]+intp*(zz[npnts_prof-1]-zz[0])/(npnts_prof-1) endfor prof_temp[0]=prof[0] zz_temp[0]=zz[0] prof_temp[npnts_prof-1]=prof[npnts_prof-1] zz_temp[npnts_prof-1]=zz[npnts_prof-1] prof=prof_temp zz=zz_temp Killwaves prof_temp,zz_temp Variable /G globautoR if (globautoR>0) autoRup("editt",0," "," ") endif End Function Numx2SLD() SVAR prof1=globprosldz,zz1=globproz //NVAR npoint1=globNpoint, Nlay1=globNlay Wave /D prof=$prof1,zz=$zz1 Variable intp//,npoint=npoint1,Nlay=Nlay1 Duplicate /O prof, prof_temp Duplicate /O zz, zz_temp Variable npnts_prof=numpnts(prof) ReDimension /N=(2*npnts_prof-1) prof_temp, zz_temp for (intp=1;intp<(2*npnts_prof-1);intp=intp+1) prof_temp[intp]=interp(zz[0]+intp/2*(zz[npnts_prof-1]-zz[0])/(npnts_prof-1),zz,prof) zz_temp[intp]=zz[0]+intp/2*(zz[npnts_prof-1]-zz[0])/(npnts_prof-1) endfor prof_temp[0]=prof[0] zz_temp[0]=zz[0] prof_temp[2*npnts_prof-2]=prof[npnts_prof-1] zz_temp[2*npnts_prof-2]=zz[npnts_prof-1] ReDimension /N=(2*npnts_prof-1) prof, zz prof=prof_temp zz=zz_temp Killwaves prof_temp,zz_temp Variable /G globautoR if (globautoR>0) autoRup("editt",0," "," ") endif End Function ArbitraryFitting_Button()//cntrlName)//: ButtonControl //To fit,use 10point-per-layer profile//Only for symetric geometric case //String cntrlName Variable/G globpfyn,globsyn Variable /G globpre_wnotp=1 Variable /G globzz_sfpre=1 Variable alpha=1e-06//0.0001 NVAR npt1=globNpoint,lay1=globNlay Variable npt=npt1,lay=lay1 Variable pfyn=globpfyn,syn=globsyn SVAR rdata=globrq4data, drdata=globdrq4data, qzdata1=globqzdata //Variable s_thick_1=NumVarOrDefault("globs_thick_1", 1) SVAR prof1=globprosldz,zz1=globproz SVAR ExptTitle=globExptTitle NVAR gaS= globautoS Wave /D prof=$prof1,zz=$zz1 Wave /D RQdata=$rdata,dRQdata=$drdata,qzdata=$qzdata1 Wave checkhold Wave /D w_fit Variable npnts_prof=numpnts(prof)//npt*(lay+1)+1 SetWindow $ExptTitle hook=$" " Duplicate /O prof, pro_In_org Make /O /N=(npnts_prof+2) abtr_weps1//=1 InsertPoints npnts_prof,2, pro_In_org //Make /O /T /N=(2*(npnts_prof)) abtr_T_Constraints_temp//="1" ////abtr_T_Constraints_temp needs to make active when constraint are needed. Variable/G globgraphhold Variable graphhold=globgraphhold if (graphhold>0) ModifyGraph /W=$ExptTitle#SLDplotinPanel mode(prof)=4,msize(prof)=2,lsize(prof)=1.5 GraphNormal /W=$ExptTitle#SLDplotinPanel globgraphhold=0 endif if (pfyn==1) Variable cursora,cursorb SetActiveSubWindow $ExptTitle#RQPlotInPanel cursora=pcsr(A, ExptTitle+"#RQPlotInPanel") cursorb=pcsr(B, ExptTitle+"#RQPlotInPanel") Cursor /S=1 /W=$ExptTitle#RQPlotInPanel A $rdata cursora Cursor /S=1 /W=$ExptTitle#RQPlotInPanel B $rdata cursorb RemoveFromgraph /Z /W=$ExptTitle#RQPlotInPanel Rq_Fit AppendToGraph /W=$ExptTitle#RQPlotInPanel Rq_Fit[cursora,cursorb] vs qzdata[cursora,cursorb] ModifyGraph /W=$ExptTitle#RQPlotInPanel rgb(Rq_Fit)=(0,0,65280),lsize(Rq_Fit)=2 else RemoveFromgraph /W=$ExptTitle#RQPlotInPanel Rq_Fit AppendToGraph /W=$ExptTitle#RQPlotInPanel Rq_Fit vs qzdata ModifyGraph /W=$ExptTitle#RQPlotInPanel rgb(Rq_Fit)=(0,0,65280),lsize(Rq_Fit)=2 endif Variable i,j Variable /G globV_chisq Variable /G globV_Rchisq Variable /G globnpntsdata //Initialize the values of parameters/////////////////////////////////////////////// Duplicate /O RQdata Rq_Fit Duplicate /O dRQdata dRQ_temp Variable nodata=numpnts(dRQdata) for (i=0;i<(nodata);i=i+1) //masking points if (dRQdata[i]<=0) // dRQ_temp[i]=abs(RQdata[i]) endif // MaskRQdata[i]=0 // else // MaskRQdata[i]=1 // endif endfor String holdstring holdstring="" if (gaS<1) Make /T /O /N=2 abtr_T_Constraints_temp abtr_T_Constraints_temp[0]="K"+num2str((npnts_prof)+1)+">"+"0.1" abtr_T_Constraints_temp[1]="K"+num2str((npnts_prof)+1)+"<"+"10" endif for (i=0;i<(npnts_prof+2);i=i+1) // abtr_T_Constraints_temp[2*i]="K"+num2str(i)+">"+num2str(pro_In_org[i]-0.5*abs(pro_In_org[i])) // abtr_T_Constraints_temp[2*i+1]="K"+num2str(i)+"<"+num2str(pro_In_org[i]+0.5*abs(pro_In_org[i])) if (i==0) if (i==0) holdstring=holdstring+"1" endif abtr_weps1[i]= alpha// elseif (i==(npnts_prof)-1) holdstring=holdstring+"1" abtr_weps1[i]= alpha elseif (i==(npnts_prof)) holdstring=holdstring+num2str(checkhold(numpnts(checkhold)-1)) pro_In_org[i]=w_fit[3*lay+3] abtr_weps1[i]= alpha elseif (i==(npnts_prof)+1) holdstring=holdstring+num2str(gaS) pro_In_org[i]=1 abtr_weps1[i]= alpha else holdstring=holdstring+"0" abtr_weps1[i]= alpha/(zz[i]-zz[i-1]) endif endfor // deletepoints 0,1,abtr_T_Constraints_temp //// deletepoints 0,1,abtr_T_Constraints_temp // deletepoints (2*npnts_prof-2-2),1,abtr_T_Constraints_temp //<0) globV_chisq=V_chisq globV_Rchisq=V_chisq/(V_npnts-npnts_prof-1) globnpntsdata=V_npnts-npnts_prof-1 endif SetWindow $ExptTitle, hook=winhookproc KillVariables /Z globpre_wnotp Killwaves /Z dRQ_temp, abtr_T_Constraints_temp,profext,zzext,prof_In_org // endif // Variable /G globs_thick_1=s_thick_1 End Function UserUpdatePanel_ContButton(cntrlName) : ButtonControl //To restart in NR window String cntrlName if (cmpstr(cntrlName,"upbutton")==0||cmpstr(cntrlName,"upbuttona")==0) Variable/G globgraphhold Variable graphhold=globgraphhold //SVAR ExptTitlepre=globExptTitlepre String wn=WinName(0,1) String /G globExptTitlepre if (graphhold>0) GraphNormal /W=$wn#SLDplotinPanel globgraphhold=0 endif SetDataFolder root:$wn String /G globExptTitle=wn // SetWindow $globExptTitle hook=$" " FitRgeneral2() endif End Function ArbitraryFitting_ButtonS()//cntrlName) : ButtonControl //To fit,use 10point-per-layer profile//Only for symetric geometric case //String cntrlName Variable/G globpfyn String/G globrq4data,globdrq4data,globqzdata SVAR abtr_prof=globprosldz String ab_prof=abtr_prof Wave /D abtemp_prof=$ab_prof NVAR npt1=globNpoint,lay1=globNlay Variable npt=npt1,lay=lay1 Variable pfyn=globpfyn SVAR ExptTitle=globExptTitle String rdata=globrq4data, drdata=globdrq4data,qzdata1=globqzdata //Variable s_thick_1=NumVarOrDefault("globs_thick_1", 1) SetWindow kwTopWin, hook=$" " Wave /D RQdata=$rdata,dRQdata=$drdata,qzdata=$qzdata1 Variable npnts_prof=npt*(lay+1)+1 Variable/G globgraphhold Variable graphhold=globgraphhold if (graphhold>0) ModifyGraph /W=$ExptTitle#SLDplotinPanel mode(prof)=4,msize(prof)=2,lsize(prof)=1.5 GraphNormal /W=$ExptTitle#SLDplotinPanel globgraphhold=0 endif if (pfyn==1) Variable cursora,cursorb SetActiveSubWindow $ExptTitle#RQPlotInPanel cursora=pcsr(A, ExptTitle+"#RQPlotInPanel") cursorb=pcsr(B, ExptTitle+"#RQPlotInPanel") Cursor /S=1 /W=$ExptTitle#RQPlotInPanel A $rdata cursora Cursor /S=1 /W=$ExptTitle#RQPlotInPanel B $rdata cursorb RemoveFromgraph /Z /W=$ExptTitle#RQPlotInPanel Rq_Fit AppendToGraph /W=$ExptTitle#RQPlotInPanel Rq_Fit[cursora,cursorb] vs qzdata[cursora,cursorb] ModifyGraph /W=$ExptTitle#RQPlotInPanel rgb(Rq_Fit)=(0,0,65280),lsize(Rq_Fit)=2 else RemoveFromgraph /W=$ExptTitle#RQPlotInPanel Rq_Fit AppendToGraph /W=$ExptTitle#RQPlotInPanel Rq_Fit vs qzdata ModifyGraph /W=$ExptTitle#RQPlotInPanel rgb(Rq_Fit)=(0,0,65280),lsize(Rq_Fit)=2 endif Make /O /N=(ceil(npnts_prof-1)/2+0) prof_In_temp=1,abtr_weps1//=1 //Make /O /N=(npnts_prof) prof_In Make /O /T /N=(2*(ceil(npnts_prof-1)/2-1-8*npt/10)+2) abtr_T_Constraints_temp//="1" Variable i,j Variable /G globV_chisq Variable /G globV_Rchisq Variable /G globnpntsdata Duplicate /O RQdata Rq_Fit Duplicate /O dRQdata dRQ_temp Variable nodata=numpnts(dRQdata) for (i=0;i<(nodata);i=i+1) //masking points if (dRQdata[i]<=0) // dRQ_temp[i]=abs(RQdata[i]) endif endfor //Initialize the values of parameters/////////////////////////////////////////////// abtr_weps1=0.001 Duplicate /O abtemp_prof pro_In_org for (i=0;i<(ceil(npnts_prof-1)/2+0);i=i+1) if (i<8*npt/10) prof_In_temp[i]=pro_In_org[i] //half-profile as input paramters // abtr_T_Constraints_temp[2*i]="K"+num2str(i)+">"+num2str( prof_In_temp[i]) // abtr_T_Constraints_temp[2*i+1]="K"+num2str(i)+"<"+num2str( prof_In_temp[i]) else //(i"+num2str( prof_In_temp[i]-0.1) abtr_T_Constraints_temp[2*(i-8*npt/10)+1]="K"+num2str(i)+"<"+num2str( prof_In_temp[i]+0.1) // else // prof_In_temp[30]= 0.552614//s_thick_1 //thickness and Rscale parameters // prof_In_temp[i]= 1//s_thick_1 //thickness and Rscale parameters // abtr_T_Constraints_temp[2*i]="K"+num2str(i)+">"+num2str(prof_In_temp[i]-0.5) // abtr_T_Constraints_temp[2*i+1]="K"+num2str(i)+"<"+num2str(prof_In_temp[i]+0.5) endif endfor Variable V_FitError=0 //Variable V_FitQuitReason if (pfyn==1) FuncFit/H="11111111" AbtrProfile4FitS prof_In_temp RQdata[pcsr(A),pcsr(B)] /W=dRQ_temp /I=1 /D=Rq_Fit /E=abtr_weps1 /C=abtr_T_Constraints_temp else FuncFit/H="11111111" AbtrProfile4FitS prof_In_temp RQdata /W=dRQ_temp /I=1 /D=Rq_Fit /E=abtr_weps1 /C=abtr_T_Constraints_temp // // print V_FitQuitReason endif SetActiveSubWindow $ExptTitle if (V_chisq>0) globV_chisq=V_chisq globV_Rchisq=V_chisq/(V_npnts) globnpntsdata=V_npnts endif Killwaves /Z dRQ_temp SetWindow $ExptTitle, hook=winhookproc // endif // Variable /G globs_thick_1=s_thick_1 End Function UserOut2InPanel_ContButton(cntrlName) String cntrlName NVAR autoR1=globautoR Variable autoR=autoR1 if (cmpstr(cntrlName,"rst4")==0||cmpstr(cntrlName,"rst4a")==0) Variable/G globgraphhold Variable graphhold=globgraphhold SVAR ExptTitle=globExptTitle if (graphhold>0) ModifyGraph /W=$ExptTitle#SLDplotinPanel mode(prof)=4,msize(prof)=2,lsize(prof)=1.5 GraphNormal /W=$ExptTitle#SLDplotinPanel globgraphhold=0 endif Duplicate /O tempw, w_fit //Profile4Fit(tempw,x) if (autoR>0) autoRup(" ",0," ", " ") endif endif End Function CSFit() Variable /G cslay=2 UserRestartPanel_ContButton2("rst1") cslay=0 End Function UserRestartPanel_ContButton2(cntrlName) : ButtonControl //To fit String cntrlName Variable/G globpfyn,globNpara,globNlay,globNpoint,globcmplxcalyn,cslay String/G globwww,globT_Constraints_temp,globrq4data,globdrq4data,globqzdata//, globprew SVAR checkhold1=globcheckhold SVAR ExptTitle=globExptTitle NVAR syn1=globsyn, rswitch=globrswitch Variable /G globsf//incohenrent smearing length Variable pfyn=globpfyn,nopara=globNpara,Nlay=globNlay,syn=syn1,Npoint_per_Lay=globNpoint//,sf=sf1 String w_fit_temp=globwww,TC_temp=globT_Constraints_temp//,weps=globweps String rdata=globrq4data, drdata=globdrq4data, qzdata1=globqzdata Wave checkhold=$checkhold1 Wave w_fit=$w_fit_temp,RQdata=$rdata,dRQdata=$drdata, qzdata=$qzdata1 Wave /T T_Constraints_temp=$TC_temp Variable i,j,k String holdstring print "*****", ExptTitle, "Fitting Started .....................................................................v v v v v" Duplicate /O T_Constraints_temp T_Constraints_temp_temp // if (cmpstr(cntrlName,"rst1")==0) // FitRgeneral2() // endif SetWindow $ExptTitle hook=$" " //kwTopWin Duplicate /O w_fit tempw if (NLay>0) for (i=0;i0) Variable cursorprofA if (strlen(CsrInfo(A, ExptTitle+"#SLDPlotInPanel"))>0) cursorprofA=pcsr(A, ExptTitle+"#SLDPlotInPanel") endif endif Variable/G globgraphhold Variable graphhold=globgraphhold if (graphhold>0) ModifyGraph /W=$ExptTitle#SLDplotinPanel mode(prof)=4,msize(prof)=2,lsize(prof)=1.5 GraphNormal /W=$ExptTitle#SLDplotinPanel globgraphhold=0 endif if (pfyn==1) Variable cursora,cursorb SetActiveSubWindow $ExptTitle#RQPlotInPanel cursora=pcsr(A, ExptTitle+"#RQPlotInPanel") cursorb=pcsr(B, ExptTitle+"#RQPlotInPanel") k=numpnts(Rq_Fit) for (i=0;icursorb)) Rq_Fit[i]=-inf elseif ((cursora>cursorb)&&(i>cursora||iNLay+1&&i<2*NLay+3) T_Constraints[2*i]="K"+num2str(i)+">"+"0.001" endif else T_Constraints[2*i]="K"+num2str(i)+">"+T_Constraints_temp[2*i] endif if (stringmatch(T_Constraints_temp[2*i+1], "")==1||stringmatch(T_Constraints_temp[2*i+1], " ")==1||stringmatch(T_Constraints_temp[2*i+1], " ")==1||stringmatch(T_Constraints_temp[2*i+1], " ")==1) T_Constraints[2*i+1]="0x" else T_Constraints[2*i+1]="K"+num2str(i)+"<"+T_Constraints_temp[2*i+1] endif else T_Constraints[2*i]="0x"//"K"+num2str(Nlay+2)+">"+"K"+num2str(Nlay+2) //fake constraint T_Constraints[2*i+1]="0x"//"K"+num2str(Nlay+2)+"<"+"K"+num2str(Nlay+2) //fake constraint k=k+2 endif holdstring=holdstring+num2str(checkhold[i]) endfor // Variable /G globmass // Profile4Fit(w_fit,x) // Integrate/METH=1 prof/X=zz/D=prof_INT // globmass=(1351.16+prof_INT[60])/5.66 for (j=0;j0) if (strlen(CsrInfo(A, ExptTitle+"#SLDPlotInPanel"))>0) if (j==(ceil(cursorprofA/Npoint_per_Lay)-1)) sw4incohe[j]=2*syn+1 else sw4incohe[j]=1 endif else // if (j==(ntlay-ceil(ntlay/10))||i==(2*ntlay-ceil(ntlay/10))||i==(3*ntlay-ceil(ntlay/10))||i==(4*ntlay-ceil(ntlay/10))||i==(5*ntlay-ceil(ntlay/10))||i==(6*ntlay-ceil(ntlay/10))||i==(7*ntlay-ceil(ntlay/10))||i==(8*ntlay-ceil(ntlay/10))) sw4incohe[j]=2*syn+1 endif else sw4incohe[j]=1//3 // endif endif endfor j=0 for (i=2*nopara;i<(2*nopara+Nlay);i=i+1) if (checkhold[nopara-Nlay-1+j]<1 && checkhold[nopara-2*(Nlay+1)+j]<1 && checkhold[nopara-2*(Nlay+1)+j+1]<1) T_Constraints[i]="K"+num2str(nopara-Nlay-1+j)+">"+"2*K"+num2str(nopara-2*(Nlay+1)+j)+"+2*K"+num2str(nopara-2*(Nlay+1)+j+1)+"+"+num2str(sw4incohe[j]) elseif (checkhold[nopara-Nlay-1+j]<1 && checkhold[nopara-2*(Nlay+1)+j]>0 && checkhold[nopara-2*(Nlay+1)+j+1]<1 ) T_Constraints[i]="K"+num2str(nopara-Nlay-1+j)+">"+"2*"+num2str(w_fit[nopara-2*(Nlay+1)+j])+"+2*K"+num2str(nopara-2*(Nlay+1)+j+1)+"+"+num2str(sw4incohe[j]) elseif (checkhold[nopara-Nlay-1+j]<1 && checkhold[nopara-2*(Nlay+1)+j]<1 && checkhold[nopara-2*(Nlay+1)+j+1]>0) T_Constraints[i]="K"+num2str(nopara-Nlay-1+j)+">"+"2*K"+num2str(nopara-2*(Nlay+1)+j)+"+2*"+num2str(w_fit[nopara-2*(Nlay+1)+j+1])+"+"+num2str(sw4incohe[j]) elseif (checkhold[nopara-Nlay-1+j]<1 && checkhold[nopara-2*(Nlay+1)+j]>0 && checkhold[nopara-2*(Nlay+1)+j+1]>0) T_Constraints[i]="K"+num2str(nopara-Nlay-1+j)+">"+"2*"+num2str(w_fit[nopara-2*(Nlay+1)+j])+"+2*"+num2str(w_fit[nopara-2*(Nlay+1)+j+1])+"+"+num2str(sw4incohe[j]) else T_Constraints[i]="0x" k=k+1 endif j=j+1 endfor // T_Constraints[2*nopara+Nlay]="globmass-8-2*K13-2*K14 > K15" //added for one more constraint May08 // T_Constraints[2*nopara+Nlay+1]="globmass-8-2*K13-2*K14 < K15" //added for one more constraint May08 //print k, noconstrnt j=0 k=0 for (i=0;i<(2*nopara+Nlay);i=i+1) // to remove held parameters from being constrainted if (stringmatch(T_Constraints[i],"0x")==1) deletepoints i,1,T_Constraints i=i-1 k=k+1 endif // T_Constraints[i]= T_Constraints1[j] // j=j+1 endfor Variable noconstrnt=(2*nopara+Nlay)-k // deletepoints i,1, T_Constraints // noconstrnt=noconstrnt-1 // print noconstrnt,k Variable /G globV_chisq Variable /G globV_Rchisq Variable /G globnpntsdata Duplicate /O dRQdata dRQ_temp // dRQ_temp=dRQ_temp^2 Variable nodata=numpnts(dRQdata) for (i=0;i<(nodata);i=i+1) // if (rswitch>0) if (dRQdata[i]<=0|| RQdata[i]<=0) dRQ_temp[i]=5*abs(dRQdata[i])//1e-04*qzdata[i]^4 endif else if (dRQdata[i]<=0|| RQdata[i]<=0) dRQ_temp[i]=5*abs(dRQdata[i])//1e-04 endif endif endfor Variable/G massnorm //mass norm procedure ON(>0)/OFF(0) if (massnorm>0) massnorm =w_fit[15] //mass norm procedure ON(>0)/OFF(0) tempw[15]=massnorm //mass norm procedure ON(>0)/OFF(0) //massnorm=0 //ON/OFF is currently manual endif //mass norm procedure ON(>0)/OFF(0) // Variable w15init=w_fit[15] Duplicate /O tempw tempwfit if (noconstrnt==0) if (pfyn==1) FuncFit /H=holdstring Profile4Fit tempw RQdata[pcsr(A),pcsr(B)] /W=dRQ_temp /I=1 /D=Rq_Fit /E=weps1 //M=MaskRQdata// /C=T_Constraints ///M=MaskRQdata else FuncFit /H=holdstring Profile4Fit tempw RQdata /W=dRQ_temp /D=Rq_Fit /I=1 /E=weps1 //M=MaskRQdata// /C=T_Constraints ///M=MaskRQdata// /R=Res_try endif else if (pfyn==1) FuncFit /H=holdstring Profile4Fit tempw RQdata[pcsr(A),pcsr(B)] /I=1 /D=Rq_Fit /C=T_Constraints /W=dRQ_temp /E=weps1 //M=MaskRQdata ///M=MaskRQdata else FuncFit /H=holdstring Profile4Fit tempw RQdata /W=dRQ_temp /D=Rq_Fit /I=1 /C=T_Constraints /E=weps1 //M=MaskRQdata//M=MaskRQdata// /R=Res_try endif endif // weps1=prew*0.1 // for (i=0;i<=(Nlay);i=i+1) // # of interfaces is no. of layers +1 // tempw[nopara-(2*Nlay+1)+i-1]=abs(tempw[nopara-(2*Nlay+1)+i-1]) // endfor Variable/G massnorm //mass norm procedure ON(>0)/OFF(0) if (massnorm>0) //mass norm procedure ON(>0)/OFF(0) tempw[15]=massnorm //mass norm procedure ON(>0)/OFF(0) //massnorm=0 //ON/OFF is currently manual endif //mass norm procedure ON(>0)/OFF(0) // w_fit[15]= w15init cslay=0 Duplicate /O T_Constraints_temp_temp $TC_temp KillWaves /Z T_Constraints_temp_temp,tempwfit SetActiveSubWindow $ExptTitle if (V_chisq>0) globV_chisq=V_chisq globV_Rchisq=V_chisq/(V_npnts) globnpntsdata=V_npnts endif KillWaves /Z dRQ_temp//, dRQmod endif SetWindow $ExptTitle, hook=winhookproc print "*****", ExptTitle, "Fitting Finished .................................................................. ^ ^ ^ ^ ^" //SetActiveSubWindow $ExptTitle End Function FitRangeDraw(ctrlName,varNum,varStr,varName) String ctrlName,varStr,varName Variable varNum SVAR rq4data1=globrq4data SVAR qzdata1=globqzdata SVAR ExptTitle=globExptTitle NVAR autoR=globautoR Variable/G globgraphhold Variable graphhold=globgraphhold //SetWindow $ExptTitle hook=$" " if (graphhold>0) ModifyGraph /W=$ExptTitle#SLDplotinPanel mode(prof)=4,msize(prof)=2,lsize(prof)=1.5 GraphNormal /W=$ExptTitle#SLDplotinPanel globgraphhold=0 endif if (varNum>0) //SetActiveSubWindow NR#RQPlotInPanel //RemoveFromgraph /Z /W=NR#RQPlotInPanel Rq_Fit Cursor /S=1 /W=$ExptTitle#RQPlotInPanel A $rq4data1 leftx($rq4data1) Cursor /S=1 /W=$ExptTitle#RQPlotInPanel B $rq4data1 numpnts($rq4data1) if (autoR>0) CheckDisplayed /W=$ExptTitle#RQPlotInPanel $rq4data1+"_Pre_Cal" if (V_flag>0) ReorderTraces /W=$ExptTitle#RQPlotInPanel $rq4data1,{$rq4data1+"_Pre_Cal"} endif endif CheckDisplayed /W=$ExptTitle#RQPlotInPanel Rq_Fit if (V_flag>0) ReorderTraces /W=$ExptTitle#RQPlotInPanel $rq4data1,{Rq_Fit} endif //cursora=pcsr(A,"NR#RQPlotInPanel") //cursorb=pcsr(B,"NR#RQPlotInPanel") //SetAxis /W=NR#RQPlotInPanel /A bottom //qzdata[cursora],qzdata[cursorb] else //SetActiveSubWindow NR#RQPlotInPanel Cursor /K /W=$ExptTitle#RQPlotInPanel A //$rq4data1 Cursor /K /W=$ExptTitle#RQPlotInPanel B //$rq4data1 //SetAxis /W=NR#RQPlotInPanel /A bottom CheckDisplayed /W=$ExptTitle#RQPlotInPanel Rq_Fit if (V_flag>0) ReorderTraces /W=$ExptTitle#RQPlotInPanel Rq_Fit, {$rq4data1} endif if (autoR>0) Variable ss=V_flag CheckDisplayed /W=$ExptTitle#RQPlotInPanel $rq4data1+"_Pre_Cal" if (V_flag>0 && ss>0) ReorderTraces /W=$ExptTitle#RQPlotInPanel $rq4data1+"_Pre_Cal", {$rq4data1,Rq_Fit} endif endif endif //DrawRect /W=NR#RQPlotInPanel 0.01,7e-08,0.06,0 //SetWindow $ExptTitle, hook=winhookproc End Function PopCmplxYn(ctrlName,popNum,popStr): PopupMenuControl String ctrlName Variable popNum String popStr Variable cmplxcalyn cmplxcalyn=popNum Variable /G globcmplxcalyn=cmplxcalyn Variable/G globgraphhold Variable graphhold=globgraphhold SVAR ExptTitle=globExptTitle if (graphhold>0) ModifyGraph /W=$ExptTitle#SLDplotinPanel mode(prof)=4,msize(prof)=2,lsize(prof)=1.5 GraphNormal /W=$ExptTitle#SLDplotinPanel globgraphhold=0 endif FitRgeneral3( ) End Function popAddD(cntrlName,popNum,popStr) : PopupMenuControl String cntrlName Variable popNum String popStr String varStr=popStr Variable varNum=popNum AddDCUp("D",varNum,varStr,"") End Function popAddC(cntrlName,popNum,popStr) : PopupMenuControl String cntrlName Variable popNum String popStr String varStr=popStr Variable varNum=popNum AddDCUp("C",varNum,varStr,"") End Function AddDCUp(cntrlName,varNum,varStr,varName) //: SetVariableControl String cntrlName Variable varNum String varStr String varName String get_temp // NewDataFolder /O root:$varStr String /G globExptTitle//=varStr String svDF=GetDataFolder(1) Variable /G globrswitch String wn=WinName(0,1) SetDataFolder root:$varStr SVAR rdata1=globRQ4data SVAR drdata1=globdRQ4data SVAR qdata1=globqzdata String rfit="Rq_Fit"//_Dup" String rname, drname,qname,rfitname rname="r"+varStr drname="dr"+varStr qname="q"+varStr rfitname="rfit"+varStr Wave Rq_Fit Duplicate /O $rdata1 $rname Duplicate /O $drdata1 $drname Duplicate /O $qdata1 $qname Duplicate /O Rq_Fit $rfitname Variable i ///To find max unumber of dataplots String objName Variable index=0 do objName=GetindexedObjName("root:",4,index) if (strlen(objName) == 0) break endif index +=1 while(1) // print Tracenamelist(" ",";",1) ///the max number stored in index Variable j=0 String texstr texstr="\\s("+rname+") "+varStr+" " if (stringmatch(cntrlName,"D")>0) CheckDisplayed $rname if (V_flag>0) RemoveFromGraph $rname else AppendText /N=texgra texstr endif if (varNum0) CheckDisplayed $rfitname if (V_flag>0) RemoveFromGraph $rfitname endif //Duplicate /O $rfit Rq_Fit_Dup AppendToGraph /C=(65535*varNum/(index),0,65535-65535*varNum/(index)) $rfitname vs $qname // print stringmatch(WaveName("",i,1),"Rq_Fit*") for (i=1;i<2*index*10;i=i+1) if (stringmatch(WaveName("",i,1),"rfit*")>0) ModifyGraph /Z lsize[i]=1.5 endif endfor endif SetDataFolder svDF End Function popExtTitleUp(cntrlName,popNum,popStr) : PopupMenuControl String cntrlName Variable popNum String popStr String varStr=popStr Variable varNum=popNum ExtTitleUp("",varNum,varStr,"") End Function ExtTitleUp(cntrlName,varNum,varStr,varName) : SetVariableControl String cntrlName Variable varNum String varStr String varName String get_temp // NewDataFolder /O root:$varStr String /G globExptTitle//=varStr String svDF=GetDataFolder(1) If (Stringmatch(globExptTitle,"*-*")>0) globExptTitle=ReplaceString("-",globExptTitle,"_") endif String wn=WinName(0,1) NewDataFolder /O root:$globExptTitle globExptTitle=varStr If (strsearch(WinList(globExptTitle,";","WIN:"),globExptTitle,0)>=0) DoWindow /F $globExptTitle// else if (Strsearch(PrintAllDataFolderNames(),globExptTitle,0)<0||Strsearch(varStr,wn,0)<1) FitRgeneral2() else FitRgeneral3() endif endif SetDataFolder svDF globExptTitle= wn SetDataFolder root:$varStr End Function ComLineinWin(cntrlName,varNum,varStr,varName) : SetVariableControl String cntrlName Variable varNum String varStr String varName String comIn=" " String commanLine=varStr String /G globcomWin sprintf globcomWin,"%s", commanLine //print globcomWin //Redoing these 3lines activates the commend line excution. //Execute globcomWin //globcomWin="" //globcomWin=commanLine End Function ChoiceNewDFName(ctrlName,popNum,popStr): PopupMenuControl String ctrlName Variable popNum String popStr SetDataFolder root: SetDataFolder root:$ctrlName Variable /G globNNDF globNNDF=popNum //print globNNDF,GetDataFolder(1) End Function ExtTitleUp1(cntrlName,varNum,varStr,varName) : SetVariableControl //does not work yet!!! String cntrlName Variable varNum String varStr String varName String get_temp // NewDataFolder /O root:$varStr String /G globExptTitle//=varStr String svDF=GetDataFolder(1) Variable modeDF=1//=NumVarOrDefault("globNNDF",1) If (Stringmatch(globExptTitle,"*-*")>0) globExptTitle=ReplaceString("-",globExptTitle,"_") // globExptTitle=ReplaceString("-",globExptTitle,"_") // globExptTitle=ReplaceString("-",globExptTitle,"_") endif String wn=WinName(0,1) //Variable /G root:globExptTitleroot=varStr NewDataFolder /O root:$globExptTitle Variable /G globNNDF=modeDF //String svDF1=GetDataFolder(1) //print svDF1,globExptTitle,wn,varStr globExptTitle=varStr If (strsearch(WinList(globExptTitle,";","WIN:"),globExptTitle,0)>=0) DoWindow /F $globExptTitle// else if (Strsearch(PrintAllDataFolderNames(),globExptTitle,0)<0||Strsearch(varStr,wn,0)<1) if (Strsearch(PrintAllDataFolderNames(),globExptTitle,0)<0) DoWindow /K Stop4NewDFName NewPanel /N=Stop4NewDFName /W=(2,0,450,100) PopupMenu $wn value="Yes;No",mode=modeDF,proc=ChoiceNewDFName, pos={110,20},fstyle=1, size={80,100},bodyWidth=150, title=" Would you like to copy the current data too?"/////////,fstyle=1, size={80,200},proc=dataRInput,pos={210,70},help={"Reflectivity Data"}//WaveList("*",";","") Button buttonSNDFN,pos={155,65},size={92,20},fstyle=1 Button buttonSNDFN,proc=Stop4NewDFName_ContButton,title="Continue" PauseForUser Stop4NewDFName SetDataFolder root:$wn Variable /G globNNDF // print globNNDF,GetDataFolder(1),varStr,wn,globExptTitle if (globNNDF!=2) KillDataFolder /Z root:$varStr DuplicateDataFolder root:$wn, root:$varStr endif endif // SetDataFolder svDF // Variable /G globNNDF=1 // SetDataFolder root:$varStr globExptTitle=varStr FitRgeneral2() else FitRgeneral3() //print globExptTitle //Execute "SetActiveSubWindow $globExptTitle" endif endif SetDataFolder svDF globExptTitle= wn SetDataFolder root:$varStr //KillVariables /Z root:globNNDF End Function Stop4NewDFName_ContButton(cntrlName) String cntrlName DoWindow /K Stop4NewDFName //tmp_GetInputPanel End Function MakeGraph_sldButton(cntrlName) : ButtonControl //To restart in NR window String cntrlName SVAR ExptTitle=globExptTitle SVAR prosldz=globprosldz,proz=globproz//RQ4data=globrq4data, Qzdata=globqzdata,RRQ4nPlot=RRQ4nPlot,dqdata=globdqdata,dRQ4data=globdRQ4data String name, namet name="SLD_"+ExptTitle namet="SLD"+ExptTitle if (cmpstr(cntrlName,"titlegraph1")==0) SetDataFolder root:$ExptTitle If (strsearch(WinList(namet,";","WIN:2"),namet,0)<0) Edit /N=$namet /W=(5,10,400,650) $prosldz, $proz else DoWindow /F $namet endif If (strsearch(WinList(name,";","WIN:1"),name,0)>=0) DoWindow /F $name // SetDataFolder root:$ExptTitle else SetDataFolder root:$ExptTitle Display /N=$name $prosldz vs $proz as name///N=name Label left "\\F'Arial'\\f0110\\S6\\MSLD (Å\\S2\\M)" Label bottom "\\f01z (Å)" ModifyGraph framestyle=0, mirror=1,minor=0,standoff=1,tick=2,mode($prosldz)=4,marker($prosldz)=19,msize($prosldz)=2,lsize($prosldz)=1.5,opaque($prosldz)=1,zColor($prosldz)={$prosldz,*,*,Rainbow}//,grid=1,gridRGB=(60000,60000,60000)//(65280,54528,32768) ModifyGraph gbRGB=(61000,61000,61000), wbRGB=(65535,65535,65535) //,useMrkStrokeRGB($prosldz)=2//,mrkStrokeRGB($prosldz)=(30464,30464,30464) endif SetDataFolder root: endif End Function UserEditSLD_ContButton(cntrlName) String cntrlName Variable graphhold=NumVarOrDefault("globgraphhold", 0) Variable modeGraphdrawEdit=NumVarOrDefault("globmodeGraphdrawEdit",1) Variable modeGraphdrawEdit1=modeGraphdrawEdit SVAR ExptTitle=globExptTitle Variable /G globautoR if ((cmpstr(cntrlName,"rst5")==0|| cmpstr(cntrlName,"rst5a")==0)) if (graphhold==0) DoWindow /K GraphDraworEdit NewPanel /N=GraphDraworEdit /W=(2,0,450,120) PopupMenu GraphDE value="Edit;Draw",mode=modeGraphdrawEdit1,pos={310,20},fstyle=1,proc=GED4PSD, size={80,100},bodyWidth=50, title="Do you like to EDIT or DRAW the SLD profile? "//,fstyle=1, size={80,200},proc=dataRInput,pos={210,70},help={"Reflectivity Data"}//WaveList("*",";","") TitleBox note4GDEl title=" Use mouse click to edit and double click to finish.", pos={45,45}, frame=0 TitleBox note4GDE title="*Note that Choosing 'Draw' will remove the current SLD profile.", pos={48,65}, frame=0 Button buttonGDE,pos={155,90},size={92,20},fstyle=1 Button buttonGDE,proc=UserGetGDE_ContButton,title="Continue" Variable /G globmodeGraphdrawEdit=modeGraphdrawEdit1 PauseForUser GraphDraworEdit if (globmodeGraphdrawEdit<2) GraphWaveEdit/M /W=$ExptTitle#SLDplotinPanel prof else if (WaveExists(prof_back)==1) // RemoveFromGraph /W=##/Z prof_back RemoveFromGraph /W=$ExptTitle#SLDplotinPanel/Z prof_back, zz_back // Rename prof prof_back, zz_back //prof_GraphDraw, zz_GraphDraw endif Duplicate /O prof, prof_back Duplicate /O zz, zz_back AppendToGraph /W=$ExptTitle#SLDplotinPanel prof_back vs zz_back ModifyGraph /W=$ExptTitle#SLDplotinPanel mode(prof_back)=0,marker(prof_back)=19,msize(prof_back)=1,lsize(prof_back)=3,opaque(prof_back)=1, rgb(prof_back)=(32768,65280,32768),zColor(prof_back)=0//,zColor(prof_back)={prof_back,*,*,Grays} ReorderTraces /W=$ExptTitle#SLDplotinPanel prof, {prof_back} // ModifyGraph /W=$ExptTitle#SLDplotinPanel mode(prof)=4,marker(prof)=19,msize(prof)=2,lsize(prof)=1.5,opaque(prof)=1,zColor(prof)={prof,*,*,Rainbow},grid=1,gridRGB=(60000,60000,60000)//(65280,54528,32768) GraphWaveDraw /M /O /W=$ExptTitle#SLDplotinPanel prof, zz endif graphhold=1 else ModifyGraph /W=$ExptTitle#SLDplotinPanel mode(prof)=4,msize(prof)=2,lsize(prof)=1.5 // ModifyGraph /W=$ExptTitle#SLDplotinPanel mode(prof)=4,marker(prof)=19,msize(prof)=2,lsize(prof)=1.5,opaque(prof)=1,zColor(prof)={prof,*,*,Rainbow},grid=1,gridRGB=(60000,60000,60000)//(65280,54528,32768) GraphNormal /W=$ExptTitle#SLDplotinPanel graphhold=0 endif if (globautoR>0) autoRup("editt",0," "," ") endif // FitRGeneral3() // ModifyGraph /W=$ExptTitle#SLDplotinPanel mode(prof)=4,marker(prof)=19,msize(prof)=2,lsize(prof)=1.5,opaque(prof)=1,zColor(prof)={prof,*,*,Rainbow},grid=1,gridRGB=(60000,60000,60000) endif globmodeGraphdrawEdit=1 Variable /G globgraphhold=graphhold End Function UserPara2SLDPanel_ContButton(cntrlName): ButtonControl String cntrlName if (cmpstr(cntrlName,"rst2")==0||cmpstr(cntrlName,"rst2a")==0) Variable/G globgraphhold,globautoS Variable graphhold=globgraphhold SVAR ExptTitle=globExptTitle if (graphhold>0) ModifyGraph /W=$ExptTitle#SLDplotinPanel mode(prof)=4,msize(prof)=2,lsize(prof)=1.5 GraphNormal /W=$ExptTitle#SLDplotinPanel globgraphhold=0 endif //Variable /G globstop2sld=1 if (globautoS<1) Profile4Fit(w_fit,x) endif //f (cmpstr(cntrlName,"up")==0) autoRup(" ",0," "," ") endif End Function Kiessig_Thickness() SVAR qzdata1=globqzdata //Variable s_thick_1=NumVarOrDefault("globs_thick_1", 1) Wave /D qzdata=$qzdata1 SVAR ExptTitle=globExptTitle Variable/G globpfyn Variable pfyn=globpfyn if (pfyn>0) Variable cursora,cursorb SetActiveSubWindow $ExptTitle#RQPlotInPanel Variable apprxtoltalthick apprxtoltalthick=abs(2*Pi/(qzdata[pcsr(B)]-qzdata[pcsr(A)])) print "Q[B]-Q[A] =", (qzdata[pcsr(B)]-qzdata[pcsr(A)]) print "Total film thickness from Kiessig-fringes, d =", apprxtoltalthick,"Å" else print "****Please set 'Ranged by Cursor' to 1, and place cursors on the reflectivity graph first. Then, look at 'Command Window' which can be brought by 'Ctrl+J'. ************" endif //SetActiveSubWindow dennissingleair End Function incoherentpointproc(ctrlName,varNum,varStr,varName) String ctrlName,varStr,varName Variable varNum SVAR prosldz1=globprosldz SVAR proz1=globproz, ExptTitle=globExptTitle Variable/G globsyn Variable syn=globsyn Variable center_point4_inc,notp notp=numpnts(prof) center_point4_inc=ceil((notp-1)/2) if (varNum>0) //SetActiveSubWindow NR#RQPlotInPanel //RemoveFromgraph /Z /W=NR#RQPlotInPanel Rq_Fit if (strlen(CsrInfo(A, ExptTitle+"#SLDPlotInPanel"))<=0) Cursor /S=2 /L=0 /C=(26368,0,52224) /W=$ExptTitle#SLDPlotInPanel A $prosldz1 center_point4_inc endif else //if (strlen(CsrInfo(A, ExptTitle+"#SLDPlotInPanel"))>0) //SetActiveSubWindow NR#RQPlotInPanel Cursor /K /W=$ExptTitle#SLDPlotInPanel A //$rq4data1 endif End Function updatewinpan(ctrlName,varNum,varStr,varName) String ctrlName,varStr,varName Variable varNum Variable/G globgraphhold Variable graphhold=globgraphhold SVAR ExptTitle=globExptTitle if (graphhold>0) ModifyGraph /W=$ExptTitle#SLDplotinPanel mode(prof)=4,msize(prof)=2,lsize(prof)=1.5 GraphNormal /W=$ExptTitle#SLDplotinPanel globgraphhold=0 endif FitRgeneral3() autoRup(" ",0," "," ") // End //Master formula calculation of R Function SuperMaster() // v: q values for the R calculation; ex, make /N=? RSM > RSM=SuperMaster(Qcal) Variable /C rsin,rcos Variable rho,i,j,RSM,lamda=5.46//e-10 //Variable /C epnt SVAR prof1=globprosldz, zz1=globproz,q1=globqzdata, ExptTitle=globExptTitle Wave q=$q1,prof=$prof1,zz=$zz1 Duplicate /O prof dprof Duplicate /O zz dzz Variable nptnsprof=numpnts(prof) Differentiate prof /X=zz /D=dprof ///METH=1 /X=zz Differentiate zz/D=dzz ///METH=1 Make /O /N=(numpnts(q)) R1_FT rho=0 for (i=0;i1) R1_FT[j]=1 endif endfor CheckDisplayed /W=$ExptTitle#RQPlotInPanel R1_FT//NR#SLDPlotInPanel prof1_IFT if (V_flag<1) AppendToGraph /W=$ExptTitle#RQPlotInPanel R1_FT vs $q1 ModifyGraph lsize(R1_FT)=2 endif //endif return 0//RSM//*2e+9//*1e+02 End Function InvSuperMasterReal()//,xx)//: FitFunc // v: xvalues for the R calculation; ex, make /N=? RSM > RSM=SuperMaster(Qcal) //Variable xx Variable /C rsin,rcos,RSM Variable i,j,lamda=5.46//,rho//e-10 //Variable /C epnt SVAR prof1=globprosldz, zz1=globproz, rq1=globrq4data,q1=globqzdata, ExptTitle=globExptTitle Wave rq2=$rq1,q=$q1,prof=$prof1,zz=$zz1 //Duplicate /O rq rqtrans //Variable z=zz[xx] Duplicate /O rq2 rq Duplicate /O q dq Variable nptnsprof=numpnts(prof) Variable nptnsrq=numpnts(rq) Make /O /C /D /N=(2*nptnsrq) rqtrans//,drqtrans Make /O /D /N=(2*nptnsrq) q_f,dq_f,rq_f Make /O /N=1200 prof1_IFT,prof1_IFT1,prof1_IFT2, zz1_IFT zz1_IFT=x-100 Variable qc Variable rho=(prof[nptnsprof-1]-prof[0]) for (j=0;j0.8 && rq[i+1]<0.8)||(rq[i+1]<0.8 && rq[i]>0.8)) qc=(q[i]+q[i+1])/2 endif endfor for (i=0;i RSM=SuperMaster(Qcal) //Variable xx Variable /C rsin,rcos,RSM Variable i,j,lamda=5.46//,rho//e-10 //Variable /C epnt SVAR prof1=globprosldz, zz1=globproz, rq1=globrq4data,q1=globqzdata Wave rq2=$rq1,q=$q1,prof=$prof1,zz=$zz1 //Duplicate /O rq rqtrans //Variable z=zz[xx] Duplicate /O rq2 rq Duplicate /O q dq Variable nptnsprof=numpnts(prof) Variable nptnsrq=numpnts(rq) Make /O /C /D /N=(2*nptnsrq) rqtrans Make /O /D /N=(2*nptnsrq) q_f,dq_f,rq_f Make /O /N=1200 zz1_IFT,prof1_IFT2 zz1_IFT=x-100 Variable qc Variable rho=(prof[nptnsprof-1]-prof[0]) for (j=0;j0.8 && rq[i+1]<0.8)||(rq[i+1]<0.8 && rq[i]>0.8)) qc=(q[i]+q[i+1])/2 endif endfor for (i=0;i RSM=SuperMaster(Qcal) //Variable xx Variable /C rsin,rcos,RSM Variable i,j,lamda=5.46//,rho//e-10 //Variable /C epnt SVAR prof1=globprosldz, zz1=globproz, rq1=globrq4data,q1=globqzdata, ExptTitle=globExptTitle Wave rq2=$rq1,q=$q1,prof=$prof1,zz=$zz1 //Duplicate /O rq rqtrans //Variable z=zz[xx] Duplicate /O rq2 rq Duplicate /O q dq Variable nptnsprof=numpnts(prof) Variable nptnsrq=numpnts(rq) Make /O /C /D /N=(2*nptnsrq) rqtrans Make /O /D /N=(2*nptnsrq) q_f,dq_f,rq_f Make /O /N=1200 prof1_IFT,prof1_IFT2,prof1_IFTMag, zz1_IFT zz1_IFT=x-100 Variable qc Variable rho=(prof[nptnsprof-1]-prof[0]) for (j=0;j0.8 && rq[i+1]<0.8)||(rq[i+1]<0.8 && rq[i]>0.8)) qc=(q[i]+q[i+1])/2 endif endfor for (i=0;i=0) DoWindow /F $name1t else Edit /N=$name1t /W=(5,10,500,650) $RQ4data,$dRQ4data,$Qzdata,$dqdata,Rq_Fit endif // DoWindow /K $name1 SetDataFolder root:$ExptTitle If (strsearch(WinList(name1,";","WIN:"),name1,0)>=0&& strsearch(TraceNameList(name1,";",0),RQ4data,0)>=0) DoWindow /F $name1 else // DoWindow /K $name1 String rname="r"+ExptTitle String drname="dr"+ExptTitle String qname="q"+ExptTitle String rfitname="rfit"+ExptTitle Duplicate /O $RQ4data $rname Duplicate /O $dRQ4data $drname Duplicate /O $Qzdata $qname Duplicate /O Rq_Fit $rfitname DoWindow $name1 if (V_flag>0) // Duplicate /O Rq_Fit Rq_Fit_Dup Display /N=$name1 $rname $rfitname vs $qname ModifyGraph height=200 ControlBar 40 TitleBox but1, pos={0,0},size={130,40},labelBack=(65280,49152,16384),frame=4,title="\\f01\\Z12Scenic View" ModifyGraph height=0 PopupMenu adddata value=PrintAllDataFolderNames(),mode=1,bodyWidth=20, title="Append Data",fstyle=1, size={79,200},labelBack=(65280,43520,0),proc=popaddD,pos={170,12}, help={" This is a copy of your data... Make sure that the modes (R or RQ4) for data sets are consistent with each other..."} PopupMenu addcal value=PrintAllDataFolderNames(),mode=1,bodyWidth=20, title="Append Fit",fstyle=1, size={79,200},labelBack=(65280,43520,0),proc=popaddC,pos={340,12}, help={" This is a copy of your data fit and will not be auto-updated..."} else Display /N=$name1 $RQ4data Rq_Fit vs $Qzdata endif SetDataFolder root:$ExptTitle Label left "\\f01"+RRQ4nPlot Label bottom "\\f01Q\Bz\M (Å\\S-1\\M)" if (V_flag>0) ModifyGraph framestyle=0,log(left)=1, mirror=1,minor=0,standoff=1,tick=2, mode($rname)=3, msize($rname)=2,marker($rname)=19,opaque($rname)=1, rgb($rfitname)=(0,0,65280),lsize($rfitname)=2, rgb($rname)=(65280,21760,0),useMrkStrokeRGB($rname)=1, lowTrip=0.0001//,grid=1,gridRGB=(65280,54528,32768) ErrorBars $rname, Y wave=($drname,$drname) String texstr="\\s("+rname+") "+ExptTitle+" " TextBox /C/N=texgra texstr else ModifyGraph framestyle=0,log(left)=1, mirror=1,minor=0,standoff=1,tick=2, mode($RQ4data)=3, marker($RQ4data)=19,opaque($RQ4data)=1, rgb(Rq_Fit)=(0,0,65280),lsize(Rq_Fit)=2, rgb($RQ4data)=(65280,21760,0),useMrkStrokeRGB($RQ4data)=1, lowTrip=0.0001//,grid=1,gridRGB=(65280,54528,32768) ErrorBars $RQ4data, Y wave=($dRQ4data,$dRQ4data) endif ModifyGraph gbRGB=(61000,61000,61000), wbRGB=(65535,65535,65535),lblRot(left)=-90 //, X,wave=($dqdata) // ErrorBars $RQ4data XY wave=($dRQ4data,$dqdata) If (rswitch<1) CheckDisplayed /W= $ExptTitle#RQplotInPanel R_cal if (V_flag==1) // AppendToGraph /W=$name1 R_cal vs Q_cal ModifyGraph /W=$name1 rgb(R_cal)=(65280,0,0),lsize=2 endif else CheckDisplayed /W= $ExptTitle#RQplotInPanel RQ4_cal if (V_flag==1) AppendToGraph /W=$name1 RQ4_cal vs Q_cal ModifyGraph /W=$name1 rgb(RQ4_cal)=(65280,0,0),lsize=2 endif endif endif endif //SetDataFolder root: End Function InvSuperMasterMag()//,xx)//: FitFunc // v: xvalues for the R calculation; ex, make /N=? RSM > RSM=SuperMaster(Qcal) //Variable xx Variable /C rsin,rcos,RSM Variable i,j,lamda=5.46//,rho//e-10 //Variable /C epnt SVAR prof1=globprosldz, zz1=globproz, rq1=globrq4data,q1=globqzdata, ExptTitle=globExptTitle Wave rq2=$rq1,q=$q1,prof=$prof1,zz=$zz1 //Duplicate /O rq rqtrans //Variable z=zz[xx] Duplicate /O rq2 rq Duplicate /O q dq Variable nptnsprof=numpnts(prof) Variable nptnsrq=numpnts(rq) Make /O /C /D /N=(2*nptnsrq) rqtrans Make /O /D /N=(2*nptnsrq) q_f,dq_f,rq_f Make /O /N=1200 prof1_IFT0,prof1_IFT00,prof1_IFTMag, zz1_IFT0 zz1_IFT0=x-100 Variable qc Variable rho rho=(prof[nptnsprof-1]-prof[0]) //print sign(rho) for (j=0;j0.8 && rq[i+1]<0.8)||(rq[i+1]<0.8 && rq[i]>0.8)) qc=(q[i]+q[i+1])/2 endif endfor for (i=0;i RSM=SuperMaster(Qcal) //Variable xx Variable /C rsin,rcos,RSM Variable i,j,lamda=4.62//5.46//,rho//e-10 NVAR Nlay1=globNlay Variable Nlay=Nlay1 //Variable /C epnt SVAR prof1=globprosldz, zz1=globproz, rq1=globrqdata,q1=globqzdata, ExptTitle=globExptTitle Wave rq2=$rq1,q=$q1,prof=$prof1,zz=$zz1 Wave w_fit Variable sld_in=w_fit[0] Variable sld_sub=w_fit[NLay+1] Wave ph //Duplicate /O rq rqtrans //Variable z=zz[xx] Duplicate /O rq2 rq Duplicate /O q dq Variable nptnsprof=numpnts(prof) Variable nptnsrq=numpnts(rq) Make /O /C /D /N=(nptnsrq) rqtrans Make /O /D /N=(nptnsrq) q_f,dq_f,rq_f Make /O /N=1200 prof1_IFT,prof1_IFT2,prof1_IFTMaga, zz1_IFT zz1_IFT=(x-100)*0.5 Variable qc Variable rho //rho=(prof[nptnsprof-1]-prof[0]) Variable /C kn,knp1,rn Variable /C alpha,nn,nnp1,n1,ni//,n2//,n2A,n2B//,phin,phinp1 Variable SLD1,SLDi,phi1,ko//,rf // if (globcmplxcalyn>1) SVAR prof_IM1=globImSLDin Wave prof_IM=$prof_IM1 SLD1=w_fit[NLay+1]*1e-06//SLD1g*1e-06//5.69e-06//sapphire///4.14e-06 //Quartz ////SLD for substrate SLDi=w_fit[0]*1e-06//SLDig*1e-06 /////SLD for incident medium rho=SLD1-SLDi ko=2*pi/lamda n1=rip(lamda,SLD1,prof_IM[NLay+1]*1e-06)//cmplx(1-SLD1*lamda^2/(2*pi),0) ni= rip(lamda,SLDi,prof_IM[0]*1e-06) qc=crtQ_cal( ) //print sign(rho) for (j=0;j0.8 && rq[i+1]<0.8)||(rq[i+1]<0.8 && rq[i]>0.8)) //qc=(q[i]+q[i+1])/2 //endif //endfor for (i=0;i4) rswitch=value if (rswitch>0) globrq4data="RQ4_Trans_"+rqdata1 globdrq4data="sig_RQ4_Trans_"+drqdata1 if ( waveExists($globrq4data) || waveExists($globdrq4data)) Make /O/N=(numpnts(rqdata)) $globrq4data Make /O/N=(numpnts(drqdata)) $globdrq4data endif Duplicate /O rqdata $globrq4data Duplicate /O drqdata $globdrq4data Wave RQ4data=$globRQ4data Wave dRQ4data=$globdRQ4data RRQ4nPlot="RQ\\S4" dRQ4nPlot="SigRQ\\S4" RQ4data=RQ4data*(Qzdata)^4 dRQ4data=dRQ4data*(Qzdata)^4 Rq_Fit=Rq_Fit*(Qzdata)^4 Rq_Fit1=rqdata1+"_Pre_Cal" // dQ_Fit1=dqdata1+"_Pre_Cal" Qz_Fit1=qzdata1+"_Pre_Cal" GetAxis /W= $ExptTitle#RQplotInPanel /Q left SetAxis /W= $ExptTitle#RQplotInPanel /Z/A // left V_min*(Qzdata)^4, V_max*(Qzdata)^4 GetAxis /W= $ExptTitle#RQplotInPanel /Q bottom SetAxis /W= $ExptTitle#RQplotInPanel /Z bottom V_min, V_max CheckDisplayed /W= $ExptTitle#RQplotInPanel $Rq_Fit1 if (V_flag==1) Wave rqprecal=$Rq_Fit1,qzprecal=$Qz_Fit1 rqprecal=rqprecal*(qzprecal)^4 RemoveFromGraph /Z/W= $ExptTitle#RQplotInPanel $Rq_Fit1 Rq_Fit1=globrq4data+"_Pre_Cal" Qz_Fit1=globQzdata+"_Pre_Cal" Duplicate /O rqprecal, $Rq_Fit1 // Duplicate /O qzprecal, $Qz_Fit1 AppendToGraph /C=(0,39168,0) /W= $ExptTitle#RQplotInPanel $Rq_Fit1 vs $Qz_Fit1 ModifyGraph /W= $ExptTitle#RQplotInPanel lsize($Rq_Fit1)=1.5 endif CheckDisplayed /W= $ExptTitle#RQplotInPanel R_Cal if (V_flag==1) if (stringmatch(rqdata1,"R_Cal")<1) RemoveFromGraph /Z/W= $ExptTitle#RQplotInPanel R_Cal AppendToGraph /C=(65280,0,0) /W= $ExptTitle#RQplotInPanel RQ4_Cal vs Q_Cal ModifyGraph /W= $ExptTitle#RQplotInPanel lsize(RQ4_Cal)=3 endif endif DoWindow $erq // print V_flag if (V_flag>0) RemoveFromGraph /Z/W= $erq $rqdata1 AppendToGraph /W= $erq /C=(65280,0,0) RQ4data vs Qzdata ModifyGraph /W= $erq framestyle=0,log(left)=1, mirror=1,minor=0,standoff=1,tick=2, mode($globRQ4data)=3, marker($globRQ4data)=19,opaque($globRQ4data)=1, rgb($globRQ4data)=(65280,21760,0),useMrkStrokeRGB($globRQ4data)=1, lowTrip=0.0001//,grid=1,gridRGB=(65280,54528,32768) // ModifyGraph /W= $erq gbRGB=(61000,61000,61000), wbRGB=(64000,64000,64000),lblRot(left)=-90 ErrorBars/W= $erq $globRQ4data Y,wave=($globdRQ4data,$globdRQ4data)//XY,wave=($dqdata,$dqdata) CheckDisplayed /W= $ExptTitle#RQplotInPanel Rq_Fit if(V_flag>0) CheckDisplayed /W= $ExptTitle#RQplotInPanel $globRQ4data if (V_flag>0) ReorderTraces /W=$erq Rq_Fit,{$globRQ4data} endif endif // SetAxis /W= $erq /Z /A left endif // SetAxis /W= $ExptTitle#RQplotInPanel /Z /A left // SetAxis /W= $ExptTitle#RQplotInPanel /Z /A bottom else DoWindow $erq // print V_flag if (V_flag>0) RemoveFromGraph /Z/W= $erq $globRQ4data AppendToGraph /W= $erq /C=(65280,0,0) rqdata vs Qzdata ModifyGraph /W= $erq framestyle=0,log(left)=1, mirror=1,minor=0,standoff=1,tick=2, mode($rqdata1)=3, marker($rqdata1)=19,opaque($rqdata1)=1, rgb($rqdata1)=(65280,21760,0),useMrkStrokeRGB($rqdata1)=1, lowTrip=0.0001//,grid=1,gridRGB=(65280,54528,32768) // ModifyGraph /W= $erq gbRGB=(61000,61000,61000), wbRGB=(64000,64000,64000),lblRot(left)=-90 ErrorBars/W= $erq $rqdata1 Y,wave=($drqdata1,$drqdata1)//XY,wave=($dqdata,$dqdata) CheckDisplayed /W= $ExptTitle#RQplotInPanel Rq_Fit if(V_flag>0) CheckDisplayed /W= $ExptTitle#RQplotInPanel$rqdata1 if (V_flag>0) ReorderTraces /W=$erq Rq_Fit,{$rqdata1} endif endif // CheckDisplayed /W= $erq RQ_Fit // if (V_flag>0) // ModifyGraph /W= $erq lsize(RQ_Fit)=2 // endif endif Rq_Fit1=globrq4data+"_Pre_Cal" Qz_Fit1=globQzdata+"_Pre_Cal" globrq4data=rqdata1 globdrq4data=drqdata1 RRQ4nPlot="R" dRQ4nPlot="SigR" Rq_Fit=Rq_Fit/(Qzdata)^4 GetAxis /W= $ExptTitle#RQplotInPanel /Q left SetAxis /W= $ExptTitle#RQplotInPanel /Z/A // left V_min/(Qzdata)^4, V_max/(Qzdata)^4 GetAxis /W= $ExptTitle#RQplotInPanel /Q bottom SetAxis /W= $ExptTitle#RQplotInPanel /Z bottom V_min, V_max // if (globmodecalRDP<2) // CheckDisplayed /W= $ExptTitle#RQplotInPanel $Rq_Fit1 // endif CheckDisplayed /W= $ExptTitle#RQplotInPanel $Rq_Fit1 if (V_flag==1) Wave rqprecal=$Rq_Fit1 Wave qzprecal=$Qz_Fit1 rqprecal=rqprecal/(qzprecal)^4 RemoveFromGraph /Z/W= $ExptTitle#RQplotInPanel $Rq_Fit1 Rq_Fit1=rqdata1+"_Pre_Cal" Duplicate /O rqprecal, $Rq_Fit1 AppendToGraph /C=(0,39168,0) /W= $ExptTitle#RQplotInPanel $Rq_Fit1 vs $Qz_Fit1 ModifyGraph /W= $ExptTitle#RQplotInPanel lsize($Rq_Fit1)=1.5 endif CheckDisplayed /W= $ExptTitle#RQplotInPanel RQ4_Cal if (V_flag==1&&stringmatch(rqdata1,"R_Cal")<1) RemoveFromGraph /Z/W= $ExptTitle#RQplotInPanel RQ4_Cal AppendToGraph /C=(65280,0,0) /W= $ExptTitle#RQplotInPanel R_Cal vs Q_Cal ModifyGraph /W= $ExptTitle#RQplotInPanel lsize(R_Cal)=2 endif endif DoWindow $erq if (V_flag>0) Label /W=$erq /Z left "\\f01"+RRQ4nPlot endif // CheckDisplayed /W= $ExptTitle#RQplotInPanel SimR_Pre_Cal // if (V_flag==1) // RemoveFromGraph /Z/W= $ExptTitle#RQplotInPanel SimR_Pre_Cal // endif // CheckDisplayed /W= $ExptTitle#RQplotInPanel RQ4_Trans_SelectData_Pre_Cal // if (V_flag==1) // RemoveFromGraph /Z/W= $ExptTitle#RQplotInPanel RQ4_Trans_SelectData_Pre_Cal // endif FitRgeneral3() //DoWindow /R ReflectivityPlot4RQFitPanel endif return 0 End Function UserSLD2RPanel_ContButton(cntrlName): ButtonControl String cntrlName Variable modecalRDP=NumVarOrDefault("globmodecalRDP",1) Variable modecalRDP1=modecalRDP Variable /G globmodecalRDP=modecalRDP1 Variable /G globrswitch SVAR rq4data1=globRQ4data String rq4data=rq4data1 SVAR rqdata1=globRQdata String rqdata=rqdata1 Variable rswitch=globrswitch Variable i,nptproz SVAR Proz1=globproz SVAR ExptTitle=globExptTitle Wave Proz=$Proz1 NVAR cmplxcalyn1=globcmplxcalyn Variable cmplxcalyn=cmplxcalyn1 // if (cmplxcalyn>1) // Profile4Fit(w_fit,x) // endif //Wavestats Proz nptproz=numpnts(Proz) //print nptproz if (cmpstr(cntrlName,"rst3")==0|| cmpstr(cntrlName,"rst3a")==0) Variable/G globgraphhold Variable graphhold=globgraphhold if (graphhold>0) ModifyGraph /W=$ExptTitle#SLDplotinPanel mode(prof)=4,msize(prof)=2,lsize(prof)=1.5 GraphNormal /W=$ExptTitle#SLDplotinPanel globgraphhold=0 endif DoWindow /K Rcal4DataorPreCal //print stringmatch(rq4data,"SelectData") if (stringmatch(rqdata,"SelectData")==1||stringmatch(rq4data,"SelectData")==1||stringmatch(rq4data,"RQ4_Trans_SelectData")==1) if (stringmatch(rq4data,"RQ4_Trans_SelectData")==1) globrswitch=0 rswitch=0 fitRgeneral3() endif modecalRDP1=2 else modecalRDP1=1 endif //globmodecalRDP=modecalRDP1 //modecalRDP1=1 if (modecalRDP1>1) NewPanel /N=Rcal4DataorPreCal /W=(2,0,450,120) PopupMenu RQ4data value="Yes;No",mode=modecalRDP1,pos={310,20},fstyle=1, size={80,100},bodyWidth=50,proc=R4DoPC, title="Do you have Q data for this R (or RQ4) calculation? "//,fstyle=1, size={80,200},proc=dataRInput,pos={210,70},help={"Reflectivity Data"}//WaveList("*",";","") TitleBox note4rcal title="*Note that Choosing 'no' will generate 6 columns of data named; ", pos={40,45}, frame=0 TitleBox note4rcalb title="R_cal, RQ4_cal, Q_cal, sigmaR_cal, sigmaRQ4_cal, sigmaQ_cal.", pos={43,65}, frame=0 Button button0,pos={155,90},size={92,20},fstyle=1 Button button0,proc=UserGetInputPanel_ContButton,title="Continue" PauseForUser Rcal4DataorPreCal endif Variable/G globmodecalRDP=modecalRDP1 SetWindow $ExptTitle hook=$" " //kwTopWin if (globmodecalRDP<2) ParrattMaindq( ) // DoWindow /K RQ4vsQCal CheckDisplayed /W= $ExptTitle#RQplotInPanel $(RQ4data1+"_Pre_Cal") // if(V_flag==1) //<<==This is OK but w/ precal on, Fit_cal hides under precal. Need more trials. 081507 // ReorderTraces /W=$ExptTitle#RQplotInPanel $(RQ4data1+"_Pre_Cal"),{Rq_Fit} // endif else Make /O /N=(256) R_cal,Q_cal, sigmaR_cal, sigmaQ_cal, RQ4_cal,sigmaRQ4_cal sigmaQ_cal=0.001 Q_cal=0 for (i=0;i<256;i=i+1) Q_cal[i]=(0.3-0.003)/255*i+0.003 sigmaQ_cal[i]=Q_cal[i]*0.02 endfor if (rswitch <1) R_cal=ParrattNTRNdq(Q_cal,sigmaQ_cal,nptproz) RQ4_cal=R_cal*Q_cal^4 sigmaR_cal=R_cal*0.01 sigmaRQ4_cal=RQ4_cal*0.01 CheckDisplayed /W= $ExptTitle#RQplotInPanel RQ4_cal if (V_flag==1) RemoveFromGraph /W=$ExptTitle#RQplotInPanel RQ4_cal endif CheckDisplayed /W= $ExptTitle#RQplotInPanel R_cal if (V_flag==1) RemoveFromGraph /W=$ExptTitle#RQplotInPanel R_cal endif AppendToGraph /W=$ExptTitle#RQplotInPanel R_cal vs Q_cal ModifyGraph /W=$ExptTitle#RQplotInPanel rgb(R_cal)=(65280,0,0),lsize=2//,grid=1,gridRGB=(65280,54528,32768) // endif else RQ4_cal=ParrattNTRNdq(Q_cal,sigmaQ_cal,nptproz) R_cal=RQ4_cal/Q_cal^4 sigmaR_cal=R_cal*0.01 sigmaRQ4_cal=RQ4_cal*0.01 CheckDisplayed /W= $ExptTitle#RQplotInPanel R_cal if (V_flag==1) RemoveFromGraph /W=$ExptTitle#RQplotInPanel R_cal endif CheckDisplayed /W= $ExptTitle#RQplotInPanel RQ4_cal if (V_flag==1) RemoveFromGraph /W=$ExptTitle#RQplotInPanel RQ4_cal endif AppendToGraph /W=$ExptTitle#RQplotInPanel RQ4_cal vs Q_cal ModifyGraph /W=$ExptTitle#RQplotInPanel rgb(RQ4_cal)=(65280,0,0),lsize=2//,grid=1,gridRGB=(65280,54528,32768) endif endif //endif //SetActiveSubWindow $ExptTitle SetWindow $ExptTitle, hook=winhookproc endif //print globmodecalRDP End Function CSRPos4PCX(a) Variable a //dummy NVAR syn1=globsyn SVAR ExptTitle=globExptTitle Variable syn=syn1 Variable cursora if (syn>0) cursora=pcsr(A, ExptTitle+"#SLDPlotInPanel") endif return cursora END Function dataRInput(ctrlName,popNum,popStr) String ctrlName Variable popNum String popStr String/G globrq4data=popStr Variable/G globmoderq4=popNum Variable /G globpfyn Variable pfyn=globpfyn String/G globrqdata=popStr Variable/G globrswitch//=0 Variable rswitch=globrswitch SVAR RQ4data=globRQ4data,Qzdata=globQzdata,dRQ4data=globdRQ4data,dqdata=globdqdata SVAR RQ4data1old1=globRQ4dataold,Qzdata1old=globQzdataold,dRQ4data1old=globdRQ4dataold,dqdata1old=globdqdataold SVAR ExptTitle=globExptTitle Variable /G globautoR=0 Variable rswitchpre=rswitch Variable/G globgraphhold Variable graphhold=globgraphhold String RQ4data1old=RQ4data1old1 //globrswitch=0 if (rswitch>0) SliderobjectR(" ",0,5) SliderobjectR(" ",1,5) endif if (graphhold>0) GraphNormal /W=$ExptTitle#SLDplotinPanel globgraphhold=0 endif if (pfyn==1) Variable cursora,cursorb //SetActiveSubWindow NR#RQPlotInPanel cursora=pcsr(A, ExptTitle+"#RQPlotInPanel") cursorb=pcsr(B, ExptTitle+"#RQPlotInPanel") // Cursor /S=1 /W=NR#RQPlotInPanel A $RQ4data cursora // Cursor /S=1 /W=NR#RQPlotInPanel B $RQ4data cursorb endif CheckDisplayed /W= $ExptTitle#RQplotInPanel RQ4_Cal Variable a= V_flag CheckDisplayed /W= $ExptTitle#RQplotInPanel R_Cal a= a+V_flag CheckDisplayed /W= $ExptTitle#RQplotInPanel Selectdata a= a+V_flag if (a>1) if(rswitch>0&&(stringmatch(RQ4data,"R_Cal")==1||stringmatch(RQ4data,"RQ4_Cal")==1)) RemoveFromGraph /W=$ExptTitle#RQplotInPanel RQ4_Cal else RemoveFromGraph /W=$ExptTitle#RQplotInPanel R_Cal endif endif CheckDisplayed /W= $ExptTitle#RQplotInPanel $RQ4data if (stringmatch(RQ4data,RQ4data1old)==1 && V_flag==1 ) RemoveFromGraph /W=$ExptTitle#RQplotInPanel $RQ4data Rq_Fit endif //if (rswitchpre>0) //Wave Rq_Fit, qz=$Qzdata //Rq_Fit=Rq_Fit/(qz)^4 //endif AppendToGraph /W=$ExptTitle#RQplotInPanel $RQ4data Rq_Fit vs $Qzdata //endif ModifyGraph /W=$ExptTitle#RQplotInPanel framestyle=5,log(left)=1, mirror=1,minor=0,standoff=1,tick=2, mode($RQ4data)=3, marker($RQ4data)=19,opaque($RQ4data)=1, rgb($RQ4data)=(65280,21760,0),useMrkStrokeRGB($RQ4data)=1, rgb(Rq_Fit)=(0,0,65280),lsize(Rq_Fit)=2//,grid=1,gridRGB=(65280,54528,32768) ErrorBars /W=$ExptTitle#RQplotInPanel $RQ4data XY,wave=($dqdata,$dqdata),wave=($dRQ4data,$dRQ4data) Label /W=$ExptTitle#RQplotInPanel bottom "\\f01Q\\Bz\\M (Å\\S-1\\M)" CheckDisplayed /W= $ExptTitle#RQplotInPanel $RQ4data1old // Variable bb=V_flag //print RQ4data1old, V_flag, RQ4data if (stringmatch(RQ4data,RQ4data1old)==0 &&V_flag==1) RemoveFromGraph /W=$ExptTitle#RQplotInPanel $RQ4data1old Rq_Fit#1 //vs $Qzdata1old if (globrswitch==1) RemoveFromGraph /Z /W=$ExptTitle#RQplotInPanel $RQ4data endif //elseif ( V_flag==1) //RemoveFromGraph /W=NR#RQplotInPanel $RQ4data1old endif ReorderTraces /W=$ExptTitle#RQplotInPanel Rq_Fit, {$RQ4data} if (pfyn==1) Cursor /S=1 /W=$ExptTitle#RQPlotInPanel A $RQ4data cursora Cursor /S=1 /W=$ExptTitle#RQPlotInPanel B $RQ4data cursorb endif CheckDisplayed /W= $ExptTitle#RQplotInPanel $(RQ4data1old+"_Pre_Cal") if (stringmatch(RQ4data,RQ4data1old)==0 && V_flag==1) RemoveFromGraph /W=$ExptTitle#RQplotInPanel $(RQ4data1old+"_Pre_Cal")//vs $Qzdata1old endif // CheckDisplayed /W= $ExptTitle#RQplotInPanel Rq_Fit // if ( V_flag==1) // RemoveFromGraph /W=$ExptTitle#RQplotInPanel Rq_Fit // KillWaves Rq_Fit //endif //print rswitchpre//RQ4data1old,RQ4data,V_flag,(RQ4data1old+"_Pre_Cal") // CheckDisplayed /W= NR#RQplotInPanel $RQ4data#1 RQ4data1old=RQ4data dRQ4data1old=dRQ4data Qzdata1old=Qzdata dqdata1old=dqdata FitRgeneral3( ) End Function datadRInput(ctrlName,popNum,popStr) String ctrlName Variable popNum String popStr String/G globdrq4data=popStr String/G globdrqdata=popStr Variable/G globmodedrq=popNum //String/G globrqdata=popStr Variable/G globrswitch Variable rswitch=globrswitch SVAR RQ4data=globRQ4data,Qzdata=globQzdata,dRQ4data=globdRQ4data,dqdata=globdqdata SVAR RQ4data1old1=globRQ4dataold,Qzdata1old=globQzdataold,dRQ4data1old=globdRQ4dataold,dqdata1old=globdqdataold SVAR ExptTitle=globExptTitle Variable /G globpfyn Variable pfyn=globpfyn Variable /G globautoR=0 Variable rswitchpre=rswitch Variable/G globgraphhold Variable graphhold=globgraphhold String RQ4data1old=RQ4data1old1 //globrswitch=0 if (rswitch>0) SliderobjectR(" ",0,5) SliderobjectR(" ",1,5) endif if (graphhold>0) GraphNormal /W=$ExptTitle#SLDplotinPanel globgraphhold=0 endif if (pfyn==1) Variable cursora,cursorb //SetActiveSubWindow NR#RQPlotInPanel cursora=pcsr(A, ExptTitle+"#RQPlotInPanel") cursorb=pcsr(B, ExptTitle+"#RQPlotInPanel") endif if (stringmatch(RQ4data,RQ4data1old)==1 ) RemoveFromGraph /W=$ExptTitle#RQplotInPanel $RQ4data Rq_Fit endif AppendToGraph /W=$ExptTitle#RQplotInPanel $RQ4data Rq_Fit vs $Qzdata //endif ModifyGraph /W=$ExptTitle#RQplotInPanel framestyle=5,log(left)=1,lblRot(left)=-90, mirror=1,minor=0,standoff=1,tick=2, mode($RQ4data)=3, marker($RQ4data)=19,opaque($RQ4data)=1, rgb($RQ4data)=(65280,21760,0),useMrkStrokeRGB($RQ4data)=1, rgb(Rq_Fit)=(0,0,65280),lsize(Rq_Fit)=2//,grid=1,gridRGB=(65280,54528,32768) ErrorBars /W=$ExptTitle#RQplotInPanel $RQ4data XY,wave=($dqdata,$dqdata),wave=($dRQ4data,$dRQ4data) // Label left "\\f01"+RRQ4nPlot Label /W=$ExptTitle#RQplotInPanel bottom "\\f01Q\\Bz\\M (Å\\S-1\\M)" CheckDisplayed /W= $ExptTitle#RQplotInPanel $RQ4data1old if (stringmatch(RQ4data,RQ4data1old)==0 && V_flag==1) RemoveFromGraph /W=$ExptTitle#RQplotInPanel $RQ4data1old Rq_Fit//#0 //vs $Qzdata1old if (globrswitch==1) RemoveFromGraph /Z /W=$ExptTitle#RQplotInPanel $RQ4data endif endif //if (rswitchpre>0) //Wave Rq_Fit, qz=$Qzdata //Rq_Fit=Rq_Fit/(qz)^4 //endif ReorderTraces /W=$ExptTitle#RQplotInPanel Rq_Fit, {$RQ4data} if (pfyn==1) Cursor /S=1 /W=$ExptTitle#RQPlotInPanel A $RQ4data cursora Cursor /S=1 /W=$ExptTitle#RQPlotInPanel B $RQ4data cursorb endif CheckDisplayed /W= $ExptTitle#RQplotInPanel $(RQ4data1old+"_Pre_Cal") if (stringmatch(RQ4data,RQ4data1old)==0 && V_flag==1) RemoveFromGraph /W=$ExptTitle#RQplotInPanel $(RQ4data1old+"_Pre_Cal")//vs $Qzdata1old endif // CheckDisplayed /W= $ExptTitle#RQplotInPanel Rq_Fit // if ( V_flag==1) // RemoveFromGraph /W=$ExptTitle#RQplotInPanel Rq_Fit // KillWaves Rq_Fit //endif RQ4data1old=RQ4data dRQ4data1old=dRQ4data Qzdata1old=Qzdata dqdata1old=dqdata FitRgeneral3( ) End Function dataQInput(ctrlName,popNum,popStr) String ctrlName Variable popNum String popStr String/G globqzdata=popStr Variable/G globmodeqz=popNum NVAR rswitch=globrswitch SVAR RQ4data=globRQ4data,Qzdata=globQzdata,dRQ4data=globdRQ4data,dqdata=globdqdata SVAR RQ4data1old1=globRQ4dataold,Qzdata1old=globQzdataold,dRQ4data1old=globdRQ4dataold,dqdata1old=globdqdataold SVAR ExptTitle=globExptTitle Variable /G globpfyn Variable pfyn=globpfyn Variable /G globautoR=0 Variable/G globgraphhold Variable graphhold=globgraphhold String RQ4data1old=RQ4data1old1 if (rswitch>0) SliderobjectR(" ",0,5) SliderobjectR(" ",1,5) endif SliderobjectR(" ",1,1) if (graphhold>0) GraphNormal /W=$ExptTitle#SLDplotinPanel globgraphhold=0 endif if (pfyn==1) Variable cursora,cursorb //SetActiveSubWindow NR#RQPlotInPanel cursora=pcsr(A, ExptTitle+"#RQPlotInPanel") cursorb=pcsr(B, ExptTitle+"#RQPlotInPanel") // Cursor /S=1 /W=NR#RQPlotInPanel A $RQ4data cursora // Cursor /S=1 /W=NR#RQPlotInPanel B $RQ4data cursorb endif if (stringmatch(RQ4data,RQ4data1old)==1)// || stringmatch(RQ4data,RQ4data1old)==1) RemoveFromGraph /W=$ExptTitle#RQplotInPanel $RQ4data Rq_Fit endif AppendToGraph /W=$ExptTitle#RQplotInPanel $RQ4data Rq_Fit vs $Qzdata //endif ModifyGraph /W=$ExptTitle#RQplotInPanel framestyle=5,log(left)=1,lblRot(left)=-90, mirror=1,minor=0,standoff=1,tick=2, mode($RQ4data)=3, marker($RQ4data)=19,opaque($RQ4data)=1, rgb($RQ4data)=(65280,21760,0),useMrkStrokeRGB($RQ4data)=1, rgb(Rq_Fit)=(0,0,65280),lsize(Rq_Fit)=2//,grid=1,gridRGB=(65280,54528,32768) ErrorBars /W=$ExptTitle#RQplotInPanel $RQ4data XY,wave=($dqdata,$dqdata),wave=($dRQ4data,$dRQ4data) Label /W=$ExptTitle#RQplotInPanel bottom "\\f01Q\\Bz\\M (Å\\S-1\\M)" CheckDisplayed /W= $ExptTitle#RQplotInPanel $RQ4data1old if (stringmatch(RQ4data,RQ4data1old)==0 && V_flag==1) RemoveFromGraph /W=$ExptTitle#RQplotInPanel $RQ4data1old Rq_Fit//#0 //vs $Qzdata1old if (rswitch==1) RemoveFromGraph /Z /W=$ExptTitle#RQplotInPanel $RQ4data endif endif ReorderTraces /W=$ExptTitle#RQplotInPanel Rq_Fit, {$RQ4data} if (pfyn==1) Cursor /S=1 /W=$ExptTitle#RQPlotInPanel A $RQ4data cursora Cursor /S=1 /W=$ExptTitle#RQPlotInPanel B $RQ4data cursorb endif CheckDisplayed /W= $ExptTitle#RQplotInPanel $(RQ4data1old+"_Pre_Cal") if (stringmatch(RQ4data,RQ4data1old)==0 && V_flag==1) RemoveFromGraph /W=$ExptTitle#RQplotInPanel $(RQ4data1old+"_Pre_Cal")//vs $Qzdata1old endif // CheckDisplayed /W= $ExptTitle#RQplotInPanel Rq_Fit // if ( V_flag==1) // RemoveFromGraph /W=$ExptTitle#RQplotInPanel Rq_Fit // KillWaves Rq_Fit //endif RQ4data1old=RQ4data dRQ4data1old=dRQ4data Qzdata1old=Qzdata dqdata1old=dqdata FitRgeneral3( ) End Function datadQInput(ctrlName,popNum,popStr) String ctrlName Variable popNum String popStr String/G globdqdata=popStr Variable/G globmodedqz=popNum NVAR rswitch=globrswitch SVAR RQ4data=globRQ4data,Qzdata=globQzdata,dRQ4data=globdRQ4data,dqdata=globdqdata SVAR RQ4data1old1=globRQ4dataold,Qzdata1old=globQzdataold,dRQ4data1old=globdRQ4dataold,dqdata1old=globdqdataold, ExptTitle=globExptTitle Variable /G globpfyn Variable pfyn=globpfyn Variable /G globautoR=0 Variable/G globgraphhold Variable graphhold=globgraphhold String RQ4data1old= RQ4data1old1 if (rswitch>0) SliderobjectR(" ",0,5) SliderobjectR(" ",1,5) endif if (graphhold>0) GraphNormal /W=$ExptTitle#SLDplotinPanel globgraphhold=0 endif if (pfyn==1) Variable cursora,cursorb //SetActiveSubWindow NR#RQPlotInPanel cursora=pcsr(A, ExptTitle+"#RQPlotInPanel") cursorb=pcsr(B, ExptTitle+"#RQPlotInPanel") endif if (stringmatch(RQ4data,RQ4data1old)==1 ) RemoveFromGraph /W=$ExptTitle#RQplotInPanel $RQ4data Rq_Fit endif AppendToGraph /W=$ExptTitle#RQplotInPanel $RQ4data Rq_Fit vs $Qzdata //endif ModifyGraph /W=$ExptTitle#RQplotInPanel framestyle=5,log(left)=1,lblRot(left)=-90, mirror=1,minor=0,standoff=1,tick=2, mode($RQ4data)=3, marker($RQ4data)=19,opaque($RQ4data)=1, rgb($RQ4data)=(65280,21760,0),useMrkStrokeRGB($RQ4data)=1, rgb(Rq_Fit)=(0,0,65280),lsize(Rq_Fit)=2//,grid=1,gridRGB=(65280,54528,32768) ErrorBars /W=$ExptTitle#RQplotInPanel $RQ4data XY,wave=($dqdata,$dqdata),wave=($dRQ4data,$dRQ4data) Label /W=$ExptTitle#RQplotInPanel bottom "\\f01Q (Å\\S-1\\M)" CheckDisplayed /W= $ExptTitle#RQplotInPanel $RQ4data1old if (stringmatch(RQ4data,RQ4data1old)==0 && V_flag==1) RemoveFromGraph /W=$ExptTitle#RQplotInPanel $RQ4data1old Rq_Fit//#0 //vs $Qzdata1old endif ReorderTraces /W=$ExptTitle#RQplotInPanel Rq_Fit, {$RQ4data} if (pfyn==1) Cursor /S=1 /W=$ExptTitle#RQPlotInPanel A $RQ4data cursora Cursor /S=1 /W=$ExptTitle#RQPlotInPanel B $RQ4data cursorb endif CheckDisplayed /W= $ExptTitle#RQplotInPanel $(RQ4data1old+"_Pre_Cal") if (stringmatch(RQ4data,RQ4data1old)==0 && V_flag==1) RemoveFromGraph /W=$ExptTitle#RQplotInPanel $(RQ4data1old+"_Pre_Cal")//vs $Qzdata1old if (rswitch==1) RemoveFromGraph /Z /W=$ExptTitle#RQplotInPanel $RQ4data endif endif // CheckDisplayed /W= $ExptTitle#RQplotInPanel Rq_Fit // if ( V_flag==1) // RemoveFromGraph /W=$ExptTitle#RQplotInPanel Rq_Fit // KillWaves Rq_Fit //endif RQ4data1old=RQ4data dRQ4data1old=dRQ4data Qzdata1old=Qzdata dqdata1old=dqdata FitRgeneral3( ) End Function CSplinefunc(zz,zzorg,roughthick) //<<< Do not change. Variable zz,zzorg,roughthick Variable Fun_out // example: sin Fun_out=(sin(190*Pi/2*(zz-zzorg+2*roughthick)/(4*roughthick)))^2/(sin(1*Pi/2))^2 // <<<<<<<<<<< CHANGE THIS LINE ONLY. You also can add variables. // Another example // Fun_out=((zz-zzorg)+2*roughthick)/(4*roughthick) ///Linear function return Fun_out End // PNG: width= 271, height= 73 Picture reflico ASCII85Begin M,6r;%14!\!!!!.8Ou6I!!!$1!!!!j#Qau+!3A7=X8i5#&TgHDFAm*iFE_/6AH5;7DfQssEc39jTBQ =U+94u$5u`*!mCdePjk!Miq:YY8oD@A@L8n.:8l_<2\MSOrZ4)I)RuWGe4983m3(#X\&P;^@X@64o8 9[G-H3LU)i73eN[aV)smBB]t4'?&adR%AWcqO H\#RaN^&PjqspHJJdO.8E,2.E@qLs_`f'L82S#J6!-/8%?^Odl`/Y3V]]"Xlgj%mK`AnD%+(km J*R*Q-MT7+\%(T),gs)f-F%Uct>*hY2ZqGr*Z`DStC$+QO_CiTUa'0oR\NFT!2r3Qrm_D6W=3Th\#, :W0+RV)f41H,Hhu#_ZFc.Qi,&4,1"/Ln&ed.s3]a'3g0o4@tH)[;q5&5P T^p9,n1,Wd:gUt"f#)uh7SL$[^tfQW,Ug+7[Mc?=YD=[&&;rI5(YGh.9GVo/ndXa`"g*m'?.>Q6?t`qTU=Ls&T[9qJ"=4#fLof'aHq3[ &P?`0](r!qdKVP1#fVeob!qSPl8@=J%q\<7d`!,buH:%;CT]#Q?ELs(o7CmH.87%4C(R%TP'4Y"`C. Dkp&TFPm6]_M`l+q-1Dlc'6<1]QejFDt7GgTl/#>2@`X-NaZ`>Er,EV)kMNVbh=E.cLl6r?*psg6jL >[G5eWdds+2#r%%qTK*N';5\t:moE>qM)\s'S!i1MO,fn&l08ogEH.hYJMo^]lnjM?qaf=t*1WYm_% ^I^JZssrdOAc[>V/A=l1MbH6a/1q\CiiNj\oZ!YcDA*tco2U2NP><\/"cU!0S^=;RI7),;q-@A"]=b cK.+VVal>/=TR\0q');I,7>bLoG3_qhRslDMN%^!NmGI!(WDbb89-+b]fu1N;qo+k/ia/(+Eo^":&BQpf27^n4LGr-k[]qb=3&;i;pbEG$s6e!XU,= TtB\n3;A+s&5/)UH;@S4*?:Y",VLK0!',2mhTZop[Ue0jK:=Z7eY=t%K+`cj?&sHqmI%pmiS<[pDP3 S/TEpqX8aZ@qhE\=p/cc;e.%jsUQpO(Y=:\$,8W*Y343I%XHMnH?:6A'!FpYu4YKdUfJCXF3a"Z)DU QVt5D9.&S`C)1LF\kCIB2c2ffD@V]5@<='3QYE:L@O?QanPaO3;*_s38HKc1`gQpNs^n2leia,Gek) :W1\;#0[ueN3?/aL"WT?"&\Ok2#<`D;?lh6oLl]"EITRZj,ASnjhe[PNVlJ#P%L,"LZ&Lfj<0Z:2?= *X%TDOiPUcP7f6*U4ZeiTN1_.*ZN"g<':5jLA,)mL;Zr`#rdIl6@ED1i'Dl*E9QZg/T o[arA?Sj`);c3N_"3<9^6$>&:L!SYKQ;5Ql^Y]_tMbZFYlA:C+)6_tr)%X]!:sO2db!MeW1XV$%.gt=!ii&T(K;)r6-oVWB:ljc-3QkAbo.A!i$Tf>'2i/SV="H mai%K2)o(C]@S;lq-`t\F\E+@C@JdRr&dAKFl)qJk[=2l+<%fMLs"/&;oEsjr13oNn:l#_r, s.)rH*7aBl\ts1a%kh0*j/R@L[2k2X>2q5OXsQ/jnd+h8jKd"nTed[MP@PFs68,>#IZ\85"$_B`#=^ 17^@H:KF$c^`=EIApagp&RBJ,fB39Q>.@lTJb=rhoQb;knqi(+icY&Aq:*$I8#jj5:Qu+pTW.r*%*/ QIW=`?K9Ql?<@=bY@4Qg8sSVK4ma6&Ih0Sdk^o@P*p&'Ua=0T00GqiJA]ciCG[Va&RVrpSV.TdQ[3T 5.du>:sn8Fpql=@6DLW?\a8f#L>(ZVi0A_ l'$B^T19-6ki8\##Tt/jZOiq?Id:g4H*h_$clt(70>8bi!e(+R/X4BhJcR&L"U0qjBOHEP6kPI^1B) ZnKm3=^l#>q*n]JU6^9CV.%@V/QgqdF>0X_BRL*p#)139dtN;'ETR#$R:EL2u]=MYJh+1b]inIC1@. >G$)0D3!X)V*@C%-MHH["0CEW>e1f&[<5/DD60u@Y>m5d"Ilk_kk3o#r6$FiWtr[*B#(%?kF`)!P&1 Hhu\1M:c2kLPom6HNT*PVrE(N&2E5>0P=tA6DX3-rA.)Nh>[06NBi"*D2N/)XQ;#Uaa]Yg[2ZCH5/h rZgQ/N7eWLU^gfAR3SUKC8uq$Gq$!Ach`U\.a6?TY"Tfg&PH+fH&iZ>7u/EpK2\Yst-MB!E-/5en<9 !,8,m$d>CMLOX[AXoF]P;`"q4q#^kgrqmG"?Vn )FlX+L7?tm04AQ]i2Mm+opdf46PCq2i2r(QtPEu'O2F]PE_qNr=I$tH>Hps%AdQd:<9/_olNpu.8M- ue/,0AH*D[gs#*r9,68b0LK.YPYkXqRt`OLCY45VKLC2^\#4;B0n"S-GCcb8E8OQBON"lYQi^P(#9( 2YQiu/*Xbmq%;++C7ikLB,+?UpBh08uTT0.D0I'gl'Z?(C)qSqNE9'eB[q')_2)q#WF5hOr@.aF/"W 0LNji_;np/\`g"r8!OPXs'5=!m40SffltF=o0(]U,Hbnu4j$mbuM&C&uDU3ZD7mFBssFNaZ`YN%Jj" k@AaZl.5=g*]Tn-O2lNj"SR3bo7*6QKEX\:9/mWe&k!aj.LOZ]-:86TK=9DbY62h(0l%2f)o+QEBSM `p^;Vt*QGEQB\<`d%O7Tm8c,i=>5TrQgTlf?M,g(p\KW\-P85&/l\3N65>_#aqYGPfWjm0K^rn[BWs 5d1onsbts#9Q9Rh/s^Mdd>j0Id7g'4\&2Z_tl?/0X8,a;J@Gdl0/.bpUsRrk7eD-g_"IO2s";JNqJs K^-3KPa"TnDdrM*Fmh'sDig74]N\jR(3#McS6g!6Y-)Bq-d^:6ReB1VT;^VH_XnJ`T&eJis>-A!E`i Cul2DPOp=G,./`s`Ai>A.^So=,qE,Ts6cQUu2o3"u865,\.cuWKH=Zr5d8i TC5N+mYA#^QX4m,]Csrtp!pWlT?b`%s$PmZ0CAqRosGjAi:LhI,;GbuK$U73o^M='n/T>SE:QA1EnK /R2WXp?O0n6+_Kt$^$tF#hIVgMc"]a6hHh='kD0]%G>p9pW-nNnMQ7"ZKp0\F=.>FB[D](_ 1Y@#C`Fp_67?AgZl:L0"#1+>7AEQ[UYN+*V,A\:9q,A) $69TX\`#rY%<:^ZRcSm?VhB=N5J*]Pk/]c6Ege&9@]d:dpd694mumbbWb-P;K*A:4VLj&H:P7j20Hr ;$@V[*LlT(uc>q3>q7ML%FU1Rl81>[36Nc>i,KH/Ppp)tMna+QN$[;192$ .&G4i8keCbe-+uV%0sd&*XP?oPn)S8>^j=6htnG3fOPg<=YHOIql8EL*T'$UcpuPAVgT=Q4_3iV%6( rH"AUQ,CUF\+"roP@&lOXm%@d\s6A/q:4=Je=*7d/(=9Hj]Zg@2kW&hmXE2I(gPqj^^`C`SO^r/ds/ <\#Q+p9/obZ7E+c6c\^O?;Yu)7@2hCsS'fO@Q]U8:1$[iXRY'(RLFWkK^VJa!N0/aF3gQah.J_hJ&# lL5d)3%:,ele=!:H7KQLTD[%R0UC%F^jH2]i:#,A)(ZJV,*LRYEX^]$>Sje0"#o``C"Ht[0g%Z?(ffEqf;;X`mo dg2))a+2MIk*;oQ>7f[&g9c/?",B:%A,bD/iJJG4(*4?apq4&.kT7;G,M1pu9llPUbP(<2%76nOMS"L/arXFs2WeO^Zig `^Sud\d9+4?#/Mu>3384$AF,d5bd0.PnDaAHW/IQI+iQ\M2,%tC$-YIHpKp"L?/a;4h94!*&"t)5S,7tbm/Q8K\=?^1DITH]'jQY&Y!n$WBH?5 4+U!lV4FFhE-FY;0uo9TC"Ta?!iP-Qon-6<&5Bstidet_hdj1r)&d)lV7i\NKFo+[l= oG(*H+:_d*@J8(FmWA,`XtJ/qlZ@'u#)<>9SpZUdH)9S!4`B#N*Uo(tCbZ@59ufm_ZD<8:b&DUeYPs HJ\(LMgr`)$F[JtA!\,_p"?AO>mPWaB1^3su`p5_>QR5=#TpYBJ3pYG^rouH7`peG(,UP/4ekRa*.Q 506'\a0p%Es.7M,68G1di'Nb,BneVN8eA%LF^R2rq,D9hDbEOG(IHG[(URUmnX+SB/1MEo14c]ON'/ SkeF1[^\VSiJ*gm*M<3i>k)m\oK<6JY;HK#?/La7Ts3^+LD8IG^-o"HA+9a\N$//f1/Y`J9!)KMGn8 rZkdnY%;je=VtC>c@2qaQtXj4iTJVEO\Dd@T*.dV-r62q52`j6NqsD`,l(>+BX_hmrY->EX-D^tM@T2%PfSJZ[IrtEhJ 'h#`[Bo&mb.1OFV[(tGETfFi9iBI$);UY*r)m=62rOa%4TR5^oub.Y*Jn3m:pkbP37NH-oE/L"F)+d ][dNJAidbKUM"AD?;1?Jma"Xq=L0r3)PEN"Z:@#J(!g>5i05Ejg9Vhlc7Z'SR,[m@)=_J=!0fLI]>T s"1I#p5>@*Xl/QtcfZrKl#je!#532%`(&2YT&j,pXm2%`K4*o@o` KmIBCg<:N.+W\n8HU"f6>KsEf5;$o9c)V/$@7`ng="2f`:OrK&A><%FK\p1?$WaN1'P( lPno$3ksR*K@B@JW@MQM/#KNk%NP\a5TEk6&uK&M#"M>i7Am8nE^?f,q5B@06ZKV>OWI%_!3&s>%Rc go\c7)s:r2]Z?drnJnt.ZI4,1!\)pE-#hI/8fZ8u+-rp'MY-P)I%^LnT0Ygk`pc2.r?bh^QuO#):dm eh?7=D7Er/_=7V*&q@'pWF:QKL:OUn6rrlh@oqITD=hfpmQF+P4%"79-\J89@27)E1De)88(D(*r5G h-TQ>IpHI,VJDh.U\q$K_iA/A0ath2/`1:s[k>7O9MU9,IsJ?h0t2118dm4;e3c`Z7Mmduh9U*7+2. U)s8Dc406GHaL8EPee'7.+l*AM!H-^90^:G:H(p:H->An@#HuS`BcQ%5pRs4hP%ik@G^Q;3\@T(O-7 DcjJQ_-A9LP<&^mf(c/;=_?OCWu32fY6GVc)Y27o?ruJ_1O^[PDL;A(;K^rpt\RYCkV.03/!,8Zk?1,>tR7-QH:b>N*n.K.3oeJ,qtI?1:`_tng14,-TAj"]1old)f;cojd# !8K%k4(97tabC)k*;cpc_qon5>#khtNr8%fDk3#;kb'q[cC[0W5'BW'^HOd[q6jpsIbV=@?MMCRf=j .lf*@>Lo8iXZn,I4CErnaVD&)VNLG1L0`k=N'UC-I>JRO9,dBE!Ej[4R)uQI>Q!*_g\\nHn3ipb33hakdREo;!g8hoq-, J3L`E7gTP?i42of8fGS\)Lp+#3!e&[Fl(F`GSuQQq]PZ,,#C8# 7WQQd^H$b/rLSY($Lp#ScP'VfFmIBs7;Ze$o87aud?4^jgfW3d5#o*AfH4F/D*AAod[N^Zd'T*RY#p jS%=5\(jmLrmHYlqlsE[rRT(TfsNU5>dq5a)0cDF.'lu\48cfOcFrq3E8,5MePuU14;&`\@.LR`NSa E-q$V\[!r;:mYMtGqPRGQ_Z7p-n4,n,pc#:!RO]"EEZXV\cW,:k=ShLX.L&i,D@NM#s"#dtX1#`7t8 KKPGKPN:cf/bBKXM5LT7[ZLS!g$5SaaKp-9ss%&1,<#(c$MO>*caJ>*-Ma#Md^k"G)-b!A[N%b8lc1 L[i!A(NOVS-<";7u7k?Jd&e(&<9>i@b.q`(3d;E/g$RAI\2>?I!PJ>ZfS@%jE$sB)f H-p0NK/?9%i.s5'p1^=M+f1W,oFa8$*MkW\[=nXk5KoUk$u M%&;6qL--MZ2+?*49!''G&`Vhik8GNBq:1mk@V8cDB1J:YF(J9hT-8/X/]&qA_:ls^W*REfC?4e&5/ !uE]3@nR$]l'(tIU\&lJ1\;W#4,TI9j[L^DrmNbH97-I]A!5t`:f@lWX.2u+rrcW:<"j1SPMSfo(s$ tH>H9\Eh>".C.iX:CPVa`>BfO^R2oHloi$p;'Arc P4\,-/Hu*^F*'%3JSs:75%/]ebTgSg%YP#*o:A;<200=/_mMFb9pR9_/6\h%s.Aou):Od]PF+73hlp Kt(s3c/!I./fg\Fi$*\m_m,qW\;-d."s8C3Vfe-qKdK?+'HoU[T/+6nOjb*SulL*sst%K\0I_B7p'R ZTb+3\i>M'=])@8-Pjec$J?YYNM%FiGp:@?#rA$1;Xa\u[!8KSW9eFd<]mr@m3Uib[kaaUiUrp6ZiL$\XdB(kW3,4N`cht_iV.mGoGqAA`l<\+X8@ \Q`*WM*'AB1"Q6?El2piQGkPIWX"4K(:cA/\?Y/s'#.,$IS5+=Z#' 'F1]+?$6WdSRHo:qcgE6n,:+k>Aq$#hm$[7r%Hh&c>I3ujhCQDlb2*LAR@V`4+#gC"$3EolW>PH%56 dGO=Tr,e_nOrg?=EXRuaEiiTC$_q)!8K:Z""!]DB\=:04'7i+qo!d:rXfpc;]uRi&mcp;sgbj"`-_n%[hTj& T3PQd3q&>k+CKbt7Meif"Vs[259h,a4012JKVn,+jJ&@.^k$*("BEDf>:\*0D&a6c0@keX!"m(IK>;<`ODGk, 3JonoB)(G(a#s5/=^Y2S7\*#rEi!H48t!^t7hPj1XUOVB??,W=e[IT(62r3#"FVI=kC%!!3/Ie'2Yr 9H._cd0kDQgOdJ5E#uR?CF+A],?M:,c-Wf+%o\bre#qbeY6ZC)+n=.>rkl!-+W$[B.Mhc&nOQ+`8ao W_,8-4&KD8ZHI4X-"RhOF.hpl+j$h3$28bho/!nLdG2;#U*HlmWH+AkU]("q3ptTfQ,7Y.ZGKoYWoZ #;?@J1k5tX>GE$3:%L%edV+]da)[OS/CeQ ja=^Fpf]_uAiKV@&l5ZI@=ZRKI8/lVQ%#;blT08A4/mrDs?t#DGHXt=B:%,@P6612l! c-PrsR:bu9d/)+OoaR5[kRs4B!K=kbbV3"7K"hoJ2FBkBO3]0cII\T6eCK-(A?qjR=hp,VnfS=IpK0 @!4'bK>Z(\^/^/,3lk+,1pD1TJj$j^1h!rp)*EZJ$t7L:'U_sh$T,^sh$b(g?:n^V&43'))R\#)U#I#*<)%$E%; dN-2!Y$)BXL^"JU/[Pn4oDqqN',:nY4m@#5+6m.`?ubfi[5@PF0LGd7Q>9gNXmD/9g-:V)*C.=]dGK hG?2FT^]3g:cgXQ42(g<2JfUW/1?)P_$&B^'m%>*NuG/:Ee9C1FeU(iJl>:)`\U2#m'O%'b9K#?PZ^ C*%9q@VCU*P]BXokdEZV/oQ@VCrE2g4h^eu&s-HuW?An=rQECahZac,SgR4tVlI\`-aj@Ku^h5Es[@ 7!O?jcVZm-o/s*,SIG7;8e&qdjA7&=]!kX_(J.rFpql=@Ani%0hTpEk0R^@RhXF>8^UMAJjgr8TE:6 "'S22\`DBVib`YMWBJ@D)Yr7;?iUP<_H7aBd@3kZjW'aVpMX&p;WZX`WSSAXRNe3_n^1XG E\iA$VJsW10"sk0*t7/>bj)ng(87;bN"Z,#Q9H$DJ_59S1/]]MaVe:Eq0"RPjb,l?2>Q31.dI@;If[ a(9nr2%HV#\;[S.<(KsV%BSkcD>.tV.*>G%,f\C%9<^CX>-$h_=[]>fMG;/0JLF&9e\\a3/W1Ia,RB 6+6nG/;)%i#S.410^)r*oG_PCSYO>>)_,r->_,*HGCfcWi;'r6p8X#u\b=]!kX_(J.rFpqk2)pG1\Q OUd$pGQSK0dYq3Aa9[0;Z/mq=Wbk);P,O(?S5=uFp ql]@;P<%],Jmf)rh^!h6$p6KTr&c;2Nq^IMWd8-r@uc3i-Af*\JHnjDOCT\0.&Dh>8X<>CUf,.:e_aYiAKdP^%)jJ`P#Akh$;-/,@#1FcE[b$-adUj)Qk:f73ojklD1h56$LDD:mMO:@di[[)q6,e$S%:g.DJl tK@]]:Uf8p7)l&gO,;8^`GU';:Ak3gVoso=0T,,mu#2;9:H2Y&mNG.S5;V/P:"C9b=4.QXq?e8eQ69 [7E#EN1CWA.?B)oD'_]i9VaFUV/E[a:s+M@s,tE2a"Xq?L2JuVh%Iqk]_mC4Dn3U:EPdi(N7++oSmnRQ1-rJu02CLa@IGk)gQnXO'?nuBg5cj-?]$i0(rd?/d*;<=Ro.>ndq(:s&.ZJ A-iW?+2d\Mr9>!OSaYBssP6Pb&%gQ?r"^8=r, n),=o@i/DZA).UPX)"_OF4'SUg^Kcdm_:s`+/F&J5C`=YSNY[ dEF53*4]t76qK$BCIE16SHT6Wo0CI5*)&Ji7/(.f]jp0O4cmuID:g-0n6g"YB!]"^u#VCLug59M?N& -[+T`f43FH=;uL84r.%b4;00rPf+Q8]riZf6f@8dpfL5Q iF2`6d^cMdh!;+Ab05+18h,4-_enTqXj0NG&T-t*Q-N?(gi%-[RP2>rXu3t=YeIhgL_!pl%S2/Ts:b aVCc($hOBd6BOijF"M2n0F0O)7d'(3)3_=!9FqU5V4)s,Y821EWA(%7%Y3UZYVf'tQ4<8RQZGA.Z*$ 1^]FpS6@p"<_g:Q'$6IEI`+VY0^R+VG]663P[FQdEduZjOnf2S?Nk+kMJC0"m@Er[(E/SZQ_49+Zm! B7jKAJ5D,nT&'I]@F!uI3`q=*2U&^GD5L$S@E<3"k!^G(D/X^FWpoY7LtResC_h'VdJZ">EM5E@V1l!)mP5'M_Yp&=YtO-""rC HQBcW723J;lVp>M:>\Y(I!(Nk?0tDB0+[0&![[0@IUf[7.iRD_D1ke%b ?K9]ajSoH=1j3Z^W2C[:!!!!j78?7R6=>B ASCII85End End /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////// Write Your Own Function here ////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////// Note: 1. Do NOT change the NAME of the function /////////////////////////////////////// ///////////////////////////////// 2. Only ONE function is currently allowed /////////////////////////////////////// ///////////////////////////////// 3. Rescale your function so that Fun_out=0 at zz=zzorg-2*roughthick /////////////////////////////////////// ///////////////////////////////// and Fun_out=1 at zz=zzorg+2*roughthick. //////////////////////////////////////// ///////////////////////////////// 4. This function enters as a volume fraction. //////////////////////////////////////// ///////////////////////////////// 5. "zzorg" is the center of the interface. //////////////////////////////////////// ///////////////////////////////// 6. "roughthick" is sqrt(2) times of roughness. //////////////////////////////////////// ///////////////////////////////// 7. Changes in the func are important (Not the values) /////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Function MyOwn(zz,zzorg,roughthick) //<<< Do not change. Variable zz,zzorg,roughthick Variable Fun_out // example: sin Fun_out=(sin(190*Pi/2*(zz-zzorg+2*roughthick)/(4*roughthick)))^2/(sin(1*Pi/2))^2 // <<<<<<<<<<< CHANGE THIS LINE ONLY. You also can add variables. // Another example // Fun_out=((zz-zzorg)+2*roughthick)/(4*roughthick) ///Linear function return Fun_out End ///////// >>>>After done, click on "save precedure" in the file menu bar, then "compile" button below, click on X mark on the upper-right corner, //////// and then "hide" button (NOT the "kill" button) //// ///////// >>>>If you did not change anything, just click on X mark on the upper-right corner, and then "hide" button (NOT the "kill" button) //// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////// Example of a function //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // // | * * | // | * * | // | * * * * | // 1 -|- * * * 1 -|- * * * * * * * // | * | * * * * // | * | * * * * // 0 -|- * 0 -|- * * * * * // |___________________________________ |___________________________________ // | | | | | | // zzorg-2*roughthick zzorg zzorg+2*roughthick zzorg-2*roughthick zzorg zzorg+2*roughthick // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////The following functions are for extracting volf distribution from the SLD profiles; the last one = the recent func for CC system function solvolf20(btol,bps,bpvp) Variable btol,bps,bpvp SVAR yyy=globprosldz//,xxx // NVAR gNL=globNlay, gNp=globNpoint //String yyy=yyy1 Wave yy=$yyy // Wave xx=$xxx Variable i //Duplicate /O yy polydensy // Duplicate /O yy solvdensy Duplicate /O yy psvolf_a,pvpvolf_a,solv_volf_a,polyvolf_a Variable vpvpmax=1,alpha,gamm,alpra for (i=80;i>=40;i=i-1) psvolf_a[i]=1-(yy[i]-bps)/(btol-bps) solv_volf_a[i]=1- psvolf_a[i] pvpvolf_a[i]=0 endfor alpha=(solv_volf_a[40]-(1-vpvpmax))/psvolf_a[40] gamm=(1-vpvpmax) for (i=39;i>=1;i=i-1) polyvolf_a[i]=((1+alpha)*(yy[i]-gamm*btol)-(1-gamm)*(bps+alpha*btol))/(bpvp*(1+alpha)-bps-alpha*btol) //<<==PVP volf endfor for (i=39;i>=20;i=i-1) psvolf_a[i]= ((1-gamm)-polyvolf_a[i])/(1+alpha) solv_volf_a[i]= alpha*psvolf_a[i]+gamm pvpvolf_a[i]=polyvolf_a[i]//1-(psvolf_a[i]+ solv_volf_a[i]) endfor alpra= solv_volf_a[20]/ pvpvolf_a[20] for (i=20;i>=0;i=i-1) psvolf_a[i]=0 pvpvolf_a[i]=(1-(((1+alpra)*yy[i]-(bpvp+alpra*btol))/(4.22*(1+alpra)-bpvp-alpra*btol)))/(1+alpra) solv_volf_a[i]=alpra*pvpvolf_a[i] endfor End function CCvolf(bpvp,bps,btol) //20 points Variable btol,bps,bpvp SVAR yyy=globprosldz,zzz=globproz//,xxx NVAR gNL1=globNlay, gNp1=globNpoint Variable gnl=gNL1, gnp=gNp1 //String yyy=yyy1 Wave yy=$yyy, zz=$zzz, w_fit // Wave xx=$xxx Variable i //Duplicate /O yy polydensy Duplicate /O zz zzvolf Duplicate /O yy psvolf_a,pvpvolf_a,solv_volf_a,polyvolf_a Variable vpvpmax=1,alpha,gamm,alpra, tail=1 //tail 1: for 5 layer CCell. tail 2: for 6 layer CCell. if (gnl>5) tail=2 endif for (i=((gnl+1)*gnp);i>=((gnl+1)*gnp)/2-tail*gnp+1;i=i-1) //3rd interface ....assumed 5layer symetric geo. if (i<= ((gnl+1)*gnp)/2) psvolf_a[i]=1-(yy[i]-bps)/(btol-bps) solv_volf_a[i]=1- psvolf_a[i] else psvolf_a[i]=0 solv_volf_a[i]=0 endif pvpvolf_a[i]=0 endfor alpha=(solv_volf_a[((gnl+1)*gnp)/2-tail*gnp+1]-(1-vpvpmax))/psvolf_a[((gnl+1)*gnp)/2-tail*gnp+1] gamm=(1-vpvpmax) for (i=((gnl+1)*gnp)/2-tail*gnp;i>=1;i=i-1) //1st and 2nd interface polyvolf_a[i]=((1+alpha)*(yy[i]-gamm*btol)-(1-gamm)*(bps+alpha*btol))/(bpvp*(1+alpha)-bps-alpha*btol) //<<==PVP volf endfor for (i=((gnl+1)*gnp)/2-tail*gnp;i>=((gnl+1)*gnp)/2-(tail+1)*gnp;i=i-1) //2nd interface psvolf_a[i]= ((1-gamm)-polyvolf_a[i])/(1+alpha) solv_volf_a[i]= alpha*psvolf_a[i]+gamm pvpvolf_a[i]=polyvolf_a[i]//1-(psvolf_a[i]+ solv_volf_a[i]) endfor alpra= solv_volf_a[gnp]/ pvpvolf_a[gnp] for (i=gnp;i>=0;i=i-1) //1st interface psvolf_a[i]=0 pvpvolf_a[i]=(1-(((1+alpra)*yy[i]-(bpvp+alpra*btol))/(w_fit[0]*(1+alpra)-bpvp-alpra*btol)))/(1+alpra) solv_volf_a[i]=alpra*pvpvolf_a[i] endfor for (i=0;i<((gnl+1)*gnp)/2;i=i+1)//Symetrize the other side of profile... psvolf_a[(gnl+1)*gnp-i]=psvolf_a[i] pvpvolf_a[(gnl+1)*gnp-i]=pvpvolf_a[i] polyvolf_a[(gnl+1)*gnp-i]=polyvolf_a[i] solv_volf_a[(gnl+1)*gnp-i]=solv_volf_a[i] endfor End Function Airvolf() //2-layer model // Variable bps,bpvp SVAR yyy=globprosldz//,xxx NVAR npt1=globNpoint,npara1=globNpara,lay1=globNlay//, ssyn1=globssyn Variable npt=npt1,npara=npara1,lay=lay1 //String yyy=yyy1 Wave yy=$yyy, w_fit // Wave xx=$xxx Variable i,j //Duplicate /O yy polydensy // Duplicate /O yy solvdensy Duplicate /O yy psvolf_b,pvpvolf_b//,solv_volf_a,polyvolf_a for (j=0;j<=lay;j=j+1) for (i=j*npt+1;i<=(j+1)*npt;i=i+1) if (j