linear_interpolation
Differences
This shows you the differences between two versions of the page.
linear_interpolation [2010/11/14 18:33] – created pac079 | linear_interpolation [2022/11/03 15:08] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== Linear interpolation background functions ====== | ||
+ | A set of linear interpolation background functions, similar to GSAS background function 7 (p130 of GSAS manual), with 6, 12, 24 and 36 parameters. | ||
+ | The function splits the pattern into N equal segments with N+1 refined background intensity points with straight lines describing the background between each point. | ||
+ | These functions use nested IF loops to significantly decrease the calculation time compared to subsequent IF statements. | ||
+ | The macros can be used to draw your own background by fixing the background intensity values at the observed value... | ||
+ | e.g. Bkg_LinInterpol_N6(!bk0, | ||
+ | ...or just used to refine even the most tricky of backgrounds which are not well served by gradually changing mathematical functions. | ||
+ | Example of use: Bkg_LinInterpol_N36(bk0, | ||
+ | Linear interpolation background function with 6 parameters | ||
+ | <code topas> | ||
+ | { | ||
+ | prm pStep =((X*0)+X2-X1)/ | ||
+ | prm pStart =((X*0)+X1); | ||
+ | prm Xval0 = pStart; | ||
+ | prm Xval1 = pStart+pStep; | ||
+ | prm Xval2 = pStart+(pStep*2); | ||
+ | prm Xval3 = pStart+(pStep*3); | ||
+ | prm Xval4 = pStart+(pStep*4); | ||
+ | prm Xval5 = pStart+(pStep*5); | ||
+ | |||
+ | prm bk0 b0v | ||
+ | prm bk1 b1v | ||
+ | prm bk2 b2v | ||
+ | prm bk3 b3v | ||
+ | prm bk4 b4v | ||
+ | prm bk5 b5v | ||
+ | prm bk6 b6v | ||
+ | |||
+ | fit_obj = | ||
+ | IF (X < Xval3) THEN | ||
+ | IF (X < Xval1) THEN | ||
+ | ((bk1-bk0)/ | ||
+ | ELSE IF (X < Xval2) THEN | ||
+ | ((bk2-bk1)/ | ||
+ | ELSE | ||
+ | ((bk3-bk2)/ | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ELSE IF (X < Xval4) THEN | ||
+ | ((bk4-bk3)/ | ||
+ | ELSE IF (X < Xval5) THEN | ||
+ | ((bk5-bk4)/ | ||
+ | ELSE | ||
+ | ((bk6-bk5)/ | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ; | ||
+ | }</ | ||
+ | |||
+ | Linear interpolation background function with 12 parameters | ||
+ | <code topas> | ||
+ | { | ||
+ | prm pStep =((X*0)+X2-X1)/ | ||
+ | prm pStart =((X*0)+X1); | ||
+ | prm Xval0 = pStart; | ||
+ | prm Xval1 = pStart+pStep; | ||
+ | prm Xval2 = pStart+(pStep*2); | ||
+ | prm Xval3 = pStart+(pStep*3); | ||
+ | prm Xval4 = pStart+(pStep*4); | ||
+ | prm Xval5 = pStart+(pStep*5); | ||
+ | |||
+ | prm bk0 b0v prm bk7 b7v | ||
+ | prm bk1 b1v prm bk8 b8v | ||
+ | prm bk2 b2v prm bk9 b9v | ||
+ | prm bk3 b3v prm bk10 b10v | ||
+ | prm bk4 b4v prm bk11 b11v | ||
+ | prm bk5 b5v prm bk12 b12v | ||
+ | prm bk6 b6v | ||
+ | |||
+ | fit_obj = | ||
+ | IF (X < Xval6) THEN | ||
+ | IF (X < Xval3) THEN | ||
+ | IF (X < Xval1) THEN | ||
+ | ((bk1-bk0)/ | ||
+ | ELSE IF (X < Xval2) THEN | ||
+ | ((bk2-bk1)/ | ||
+ | ELSE | ||
+ | ((bk3-bk2)/ | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ELSE | ||
+ | IF (X < Xval4) THEN | ||
+ | ((bk4-bk3)/ | ||
+ | ELSE IF (X < Xval5) THEN | ||
+ | ((bk5-bk4)/ | ||
+ | ELSE | ||
+ | ((bk6-bk5)/ | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ELSE | ||
+ | IF (X < Xval9) THEN | ||
+ | IF (X < Xval7) THEN | ||
+ | ((bk7-bk6)/ | ||
+ | ELSE IF (X < Xval8) THEN | ||
+ | ((bk8-bk7)/ | ||
+ | ELSE | ||
+ | ((bk9-bk8)/ | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ELSE | ||
+ | IF (X < Xval10) THEN | ||
+ | ((bk10-bk9)/ | ||
+ | ELSE IF (X < Xval11) THEN | ||
+ | ((bk11-bk10)/ | ||
+ | ELSE | ||
+ | ((bk12-bk11)/ | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ; | ||
+ | }</ | ||
+ | |||
+ | Linear interpolation background function with 24 parameters | ||
+ | <code topas> | ||
+ | { | ||
+ | prm pStep =((X*0)+X2-X1)/ | ||
+ | prm pStart =((X*0)+X1); | ||
+ | prm Xval0 = pStart; | ||
+ | prm Xval1 = pStart+pStep; | ||
+ | prm Xval2 = pStart+(pStep*2); | ||
+ | prm Xval3 = pStart+(pStep*3); | ||
+ | prm Xval4 = pStart+(pStep*4); | ||
+ | prm Xval5 = pStart+(pStep*5); | ||
+ | prm Xval6 = pStart+(pStep*6); | ||
+ | prm Xval7 = pStart+(pStep*7); | ||
+ | prm Xval8 = pStart+(pStep*8); | ||
+ | prm Xval9 = pStart+(pStep*9); | ||
+ | prm Xval10 = pStart+(pStep*10); | ||
+ | prm Xval11 = pStart+(pStep*11); | ||
+ | |||
+ | prm bk0 b0v prm bk10 b10v prm bk20 b20v | ||
+ | prm bk1 b1v prm bk11 b11v prm bk21 b21v | ||
+ | prm bk2 b2v prm bk12 b12v prm bk22 b22v | ||
+ | prm bk3 b3v prm bk13 b13v prm bk23 b23v | ||
+ | prm bk4 b4v prm bk14 b14v prm bk24 b24v | ||
+ | prm bk5 b5v prm bk15 b15v | ||
+ | prm bk6 b6v prm bk16 b16v | ||
+ | prm bk7 b7v prm bk17 b17v | ||
+ | prm bk8 b8v prm bk18 b18v | ||
+ | prm bk9 b9v prm bk19 b19v | ||
+ | |||
+ | fit_obj = | ||
+ | IF (X < Xval12) THEN | ||
+ | IF (X < Xval6) THEN | ||
+ | IF (X < Xval3) THEN | ||
+ | IF (X < Xval1) THEN | ||
+ | ((bk1-bk0)/ | ||
+ | ELSE IF (X < Xval2) THEN | ||
+ | ((bk2-bk1)/ | ||
+ | ELSE | ||
+ | ((bk3-bk2)/ | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ELSE | ||
+ | IF (X < Xval4) THEN | ||
+ | ((bk4-bk3)/ | ||
+ | ELSE IF (X < Xval5) THEN | ||
+ | ((bk5-bk4)/ | ||
+ | ELSE | ||
+ | ((bk6-bk5)/ | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ELSE | ||
+ | IF (X < Xval9) THEN | ||
+ | IF (X < Xval7) THEN | ||
+ | ((bk7-bk6)/ | ||
+ | ELSE IF (X < Xval8) THEN | ||
+ | ((bk8-bk7)/ | ||
+ | ELSE | ||
+ | ((bk9-bk8)/ | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ELSE | ||
+ | IF (X < Xval10) THEN | ||
+ | ((bk10-bk9)/ | ||
+ | ELSE IF (X < Xval11) THEN | ||
+ | ((bk11-bk10)/ | ||
+ | ELSE | ||
+ | ((bk12-bk11)/ | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ELSE | ||
+ | IF (X < Xval18) THEN | ||
+ | IF (X < Xval15) THEN | ||
+ | IF (X < Xval13) THEN | ||
+ | ((bk13-bk12)/ | ||
+ | ELSE IF (X < Xval14) THEN | ||
+ | ((bk14-bk13)/ | ||
+ | ELSE | ||
+ | ((bk15-bk14)/ | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ELSE | ||
+ | IF (X < Xval16) THEN | ||
+ | ((bk16-bk15)/ | ||
+ | ELSE IF (X < Xval17) THEN | ||
+ | ((bk17-bk16)/ | ||
+ | ELSE | ||
+ | ((bk18-bk17)/ | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ELSE | ||
+ | IF (X < Xval21) THEN | ||
+ | IF (X < Xval19) THEN | ||
+ | ((bk19-bk18)/ | ||
+ | ELSE IF (X < Xval20) THEN | ||
+ | ((bk20-bk19)/ | ||
+ | ELSE | ||
+ | ((bk21-bk20)/ | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ELSE | ||
+ | IF (X < Xval22) THEN | ||
+ | ((bk22-bk21)/ | ||
+ | ELSE IF (X < Xval23) THEN | ||
+ | ((bk23-bk22)/ | ||
+ | ELSE | ||
+ | ((bk24-bk23)/ | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ; | ||
+ | }</ | ||
+ | |||
+ | Linear interpolation background function with 36 parameters | ||
+ | <code topas> | ||
+ | { | ||
+ | prm pStep =((X*0)+X2-X1)/ | ||
+ | prm pStart =((X*0)+X1); | ||
+ | prm Xval0 = pStart; | ||
+ | prm Xval1 = pStart+pStep; | ||
+ | prm Xval2 = pStart+(pStep*2); | ||
+ | prm Xval3 = pStart+(pStep*3); | ||
+ | prm Xval4 = pStart+(pStep*4); | ||
+ | prm Xval5 = pStart+(pStep*5); | ||
+ | prm Xval6 = pStart+(pStep*6); | ||
+ | prm Xval7 = pStart+(pStep*7); | ||
+ | prm Xval8 = pStart+(pStep*8); | ||
+ | prm Xval9 = pStart+(pStep*9); | ||
+ | prm Xval10 = pStart+(pStep*10); | ||
+ | prm Xval11 = pStart+(pStep*11); | ||
+ | |||
+ | prm bk0 b0v prm bk10 b10v prm bk20 b20v prm bk30 b30v | ||
+ | prm bk1 b1v prm bk11 b11v prm bk21 b21v prm bk31 b31v | ||
+ | prm bk2 b2v prm bk12 b12v prm bk22 b22v prm bk32 b32v | ||
+ | prm bk3 b3v prm bk13 b13v prm bk23 b23v prm bk33 b33v | ||
+ | prm bk4 b4v prm bk14 b14v prm bk24 b24v prm bk34 b34v | ||
+ | prm bk5 b5v prm bk15 b15v prm bk25 b25v prm bk35 b35v | ||
+ | prm bk6 b6v prm bk16 b16v prm bk26 b26v prm bk36 b36v | ||
+ | prm bk7 b7v prm bk17 b17v prm bk27 b27v | ||
+ | prm bk8 b8v prm bk18 b18v prm bk28 b28v | ||
+ | prm bk9 b9v prm bk19 b19v prm bk29 b29v | ||
+ | |||
+ | fit_obj = | ||
+ | IF (X < Xval12) THEN | ||
+ | IF (X < Xval6) THEN | ||
+ | IF (X < Xval3) THEN | ||
+ | IF (X < Xval1) THEN | ||
+ | ((bk1-bk0)/ | ||
+ | ELSE IF (X < Xval2) THEN | ||
+ | ((bk2-bk1)/ | ||
+ | ELSE | ||
+ | ((bk3-bk2)/ | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ELSE | ||
+ | IF (X < Xval4) THEN | ||
+ | ((bk4-bk3)/ | ||
+ | ELSE IF (X < Xval5) THEN | ||
+ | ((bk5-bk4)/ | ||
+ | ELSE | ||
+ | ((bk6-bk5)/ | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ELSE | ||
+ | IF (X < Xval9) THEN | ||
+ | IF (X < Xval7) THEN | ||
+ | ((bk7-bk6)/ | ||
+ | ELSE IF (X < Xval8) THEN | ||
+ | ((bk8-bk7)/ | ||
+ | ELSE | ||
+ | ((bk9-bk8)/ | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ELSE | ||
+ | IF (X < Xval10) THEN | ||
+ | ((bk10-bk9)/ | ||
+ | ELSE IF (X < Xval11) THEN | ||
+ | ((bk11-bk10)/ | ||
+ | ELSE | ||
+ | ((bk12-bk11)/ | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ELSE IF (X < Xval24) THEN | ||
+ | IF (X < Xval18) THEN | ||
+ | IF (X < Xval15) THEN | ||
+ | IF (X < Xval13) THEN | ||
+ | ((bk13-bk12)/ | ||
+ | ELSE IF (X < Xval14) THEN | ||
+ | ((bk14-bk13)/ | ||
+ | ELSE | ||
+ | ((bk15-bk14)/ | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ELSE | ||
+ | IF (X < Xval16) THEN | ||
+ | ((bk16-bk15)/ | ||
+ | ELSE IF (X < Xval17) THEN | ||
+ | ((bk17-bk16)/ | ||
+ | ELSE | ||
+ | ((bk18-bk17)/ | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ELSE | ||
+ | IF (X < Xval21) THEN | ||
+ | IF (X < Xval19) THEN | ||
+ | ((bk19-bk18)/ | ||
+ | ELSE IF (X < Xval20) THEN | ||
+ | ((bk20-bk19)/ | ||
+ | ELSE | ||
+ | ((bk21-bk20)/ | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ELSE | ||
+ | IF (X < Xval22) THEN | ||
+ | ((bk22-bk21)/ | ||
+ | ELSE IF (X < Xval23) THEN | ||
+ | ((bk23-bk22)/ | ||
+ | ELSE | ||
+ | ((bk24-bk23)/ | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ELSE | ||
+ | IF (X < Xval30) THEN | ||
+ | IF (X < Xval27) THEN | ||
+ | IF (X < Xval25) THEN | ||
+ | ((bk25-bk24)/ | ||
+ | ELSE IF (X < Xval26) THEN | ||
+ | ((bk26-bk25)/ | ||
+ | ELSE | ||
+ | ((bk27-bk26)/ | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ELSE | ||
+ | IF (X < Xval28) THEN | ||
+ | ((bk28-bk27)/ | ||
+ | ELSE IF (X < Xval29) THEN | ||
+ | ((bk29-bk28)/ | ||
+ | ELSE | ||
+ | ((bk30-bk29)/ | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ELSE | ||
+ | IF (X < Xval33) THEN | ||
+ | IF (X < Xval31) THEN | ||
+ | ((bk31-bk30)/ | ||
+ | ELSE IF (X < Xval32) THEN | ||
+ | ((bk32-bk31)/ | ||
+ | ELSE | ||
+ | ((bk33-bk32)/ | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ELSE | ||
+ | IF (X < Xval34) THEN | ||
+ | ((bk34-bk33)/ | ||
+ | ELSE IF (X < Xval35) THEN | ||
+ | ((bk35-bk34)/ | ||
+ | ELSE | ||
+ | ((bk36-bk35)/ | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ; | ||
+ | }</ |