aUCBLogo Demos and Tests / nmr_carterspectra_f_Li3N


setCaseIgnored false

to nmr_carterspectra_f_Li3N
   
setUpdateGraph "false
   
hideTurtle
   
clearScreen
   
WindowMode
   
setpensize 0
;   disableTextureFont
   
enablePolySmooth
   
ch=0
zzz
stop
   
forever 
   
[
      
clearScreen
      
;pr repcount
      
catch "error [ignore runResult [zzz]]
      
err=Error
      
if :err != []
      
[   clearText
         
print :err.2
         
waitMS 200
      
]
      
updategraph
      
updateVars
      
dispatchMessages
      
waitMS 100
      
if ch==Char 27 [stop]
   
]
end

to zzz
   
ni=1000
   
x=rSeqFA -400 400 :ni
comment [
   spectrum=readfile "../La2RuO5/56Mhz/0_700K_ausw.dat
   specx=:spectrum.1
   specy=:spectrum.2
   specy=:specy/(max :specy)
   specn=count specy
   specy=:specy-rSeqFA 0.0 0.05 specn
   specy=:specy*400-200

   spectrum2=readfile "../La2RuO5/64Mhz/1K_2_ausw.dat
   specx2=:spectrum2.1/64*56
   specy2=:spectrum2.2
   specy2=:specy2/(max :specy2)*400-200
]

   
   
for [0 90 1]
   
[
   
intensity=FloatArray :ni
      
I=3/2
      
kHz=1e3
      
MHz=1e6
      
markerx=10*:MHz
      
nu0=34.495*MHz
      
nuref=nu0
      
nuQ=582/2*:kHz
      
eta=0 
      
expo=1
      
K1=0
      
K2=0
      
theta=p
      
nphi=400
      
I0=1
      
Inu0=:nu0
      
nnu=0.4*MHz
      
smoothwidth=0.001*:MHz
      
compwidth=1*:MHz
      
nmr
;comment[
      
nuQ=285/2*:kHz
      
eta=0
      
K1=0
      
K2=0
      
ntheta=400
      
nphi=400
      
I0=3
      
Inu0=:nu0
      
nmr
;]
      
I0=1
      
maxy=200
      
maxx=400
      
ticksx=8
      
tick=15
      
txtx=25
      
filename="nmr_carterspectrum_Li2B4O7.pdf

      
xmax=( :nnu/2);/:gamma
      
xmin=(-:nnu/2);/:gamma
      
w=:xmax-:xmin
      
wq=(:xmax-:xmin)*2^(int -0.5+(ln :w/(:xmax-:xmin))/ln 2)
      
markerx=:markerx ;/:gamma
      
draw

      
if ch==char 27 [break]
   
]
end

to nmr
   
intens=FloatArray :ni
comment[
   intens=NMRCarterIntensity 
      :I :nu0 :nuQ :nuref 
      :eta :K1 :K2
      :ntheta :nphi :Inu0 :nnu
      :intens :expo
]

   
intens=NMRCarterIntensity_oneTheta
      
:I :nu0 :nuQ :nuref 
      
:eta :K1 :K2
      
:theta :nphi :Inu0 :nnu
      
:intens :expo
   
intensity=intensity+intens*I0
end

to draw
   
repeat 1
   
[
;      computeIntensityRatios
;stop
      
smoothedIntensity=:intensity
;comment[
      
smoothedIntensity=GaussianSmooth 
         
:nnu :smoothwidth :compwidth :intensity

      
mi=(max :smoothedIntensity)
      
ifelse :mi != 0
      
[   intensityScaled=(:smoothedIntensity/:mi)*I0*400-maxy
      
][   intensityScaled=:intensity
      
]
      
hideTurtle
      
clearScreen
      
WindowMode
      
setpensize 0
      
penup
      
setXY -400 :intensityScaled.1
      
pendown
      
setXY :x :intensityScaled
comment [
      specxsc=(:specx*:gamma+:xmax)/w*maxx*(-2)+maxx
      setPC HSB 120 1 1
      penup
      setXY :specxsc.1 :specy.1
      pendown
      setXY :specxsc :specy
      penup
      setPC 0

      specxsc2=(:specx2*:gamma+:xmax)/w*maxx*(-2)+maxx
      setPC HSB 0 1 1
      penup
      setXY :specxsc2.1 :specy2.1
      pendown
      setXY :specxsc2 :specy2
      penup
      setPC 0
]

      
markerxsc=maxx-(:markerx+:xmax)/w*maxx*2
      
setPC HSB 240 1 1
      
penup
      
setXY :markerxsc -:maxy
      
pendown
      
setXY :markerxsc :maxy
      
penup
      
setPC 0

      
setY -:maxy
      
for [-:ticksx 2*:ticksx]
      
[   hx=:wq*(:x/:ticksx-0.5)
         
hx=:hx+(remainder (:xmax+:xmin)/:wq/:ticksx)
         
rx=:hx-(:xmax+:xmin)/2
         
hx=:hx*:maxx*2/:w
         
if :hx :maxx or2 :hx < -:maxx [continueLoop]
         
setX :hx
         
PenDown
         
setY -:maxy+:tick
         
setY -:maxy
         
PenUp
         
setY :maxy-:tick
         
PenDown
         
setY :maxy
         
PenUp
         
setY -:maxy-:txtx
         
seth 90
         
label :rx/1e6
         
setY -:maxy
      
]

      
setXY -250
      
Label "f (MHz)

      
setXY -280
      
Label :p
      
updateGraph

      
if Key? 
      
[   ch=readChar
         
if :ch==Char 27 [break]
         
if :ch=="s 
         
[   penup
            
setpensize 0
         
;   boundingbox
            
catch "error
            
[   saveScreenVector filename
            
]
            
err=error
            
if :err != []
            
[   print :err.2
            
]
         
]
      
]
      
(GC "true)
   
]
end

to computeIntensityRatios
   
r=(FloatArray 2*:I -:I+1/2)
   
j=1
   
ratios={{1}@0 {4 3}@0 {9 8 5}@0 {16 15 12 7}@0 {25 24 12 16 9}@0}
   
for [-:I+:I]
   
[   j=Int :m-1/2
      
factor=:ratios.(Int :I+1/2).abs :j
      
intensity=FloatArray :ni
      
intensity=NMRCarterIntensity_m
         
:I :nu0 :nuQ :nuref 
         
:eta :K1 :K2
         
:ntheta :nphi :Inu0 :nnu
         
:intensity :m
      
smoothedIntensity=GaussianSmooth :nnu :smoothwidth :intensity
      
mi=(max :smoothedIntensity)
      
if :mi != 0
      
[   intensityScaled=:smoothedIntensity/:mi*factor*40-200
      
]
      
penup
      
setpc HSB 180+180*:m/:I 1 1
      
setXY -400 :intensityScaled.1
      
pendown
      
setXY :x :intensityScaled
      
setitem :j :r 0+:intensity
   
]
;      show :r
end

to readfile f
   
local [x y d]
   
x=[]
   
y=[]
   
openRead :f
   
setReader :f
   
while [not eof?]
   
[   d=readlist
      
x=fput :d.1 :x
      
y=fput :d.2 :y
   
]
   
setReader []
   
close :f
   
output list reverse FloatArray :x reverse FloatArray :y
end