3D Representation of H Atom Orbitals
The following code generates different representations of the real H atom orbitals. The wave function and the wave function squared are represented as isosurfaces in different Gizmo plots. The sign of the wave function is represented by color (i.e., blue and red isosurfaces). In a different window, a Monte Carlo simulation is used to generate a probabilistic point cloud representation of the wave function. Graphs of the radial wave function are also generated.
The isosurfaces may need to be tweaked. For people not used to the Gizmo interface, this can be accomplished with the Modify Isosurface macro.
Code to generate the Bohr orbitals is also included.
Sample images are shown after the code.
#pragma TextEncoding = "UTF-8"
#pragma rtGlobals=3 // Use modern global access method and strict wave access
#pragma DefaultTab={3,20,4} // Set default tab width in Igor Pro 9 and later
// Procedures to generate 3D plots of real H wave functions orbitals
// Melissa A. Hines, Cornell University, Melissa.Hines@cornell.edu
Menu "Macros"
"Generate Bohr Orbital"
"Generate H Orbital"
"Modify Isosurface"
End
Proc GenerateHOrbital(n, l, m, genPointCloud)
variable n, l, m, genPointCloud
Prompt n, "n:"
Prompt l, "l:"
Prompt m, "m:"
Prompt genPointCloud, "Generate Point Cloud?", popup "Yes;No"
makeWavefunctions(0, 0, n, l, m, genPointCloud==1)
End
Proc GenerateBohrOrbital(n, amplitude)
variable n, amplitude=0.2
make/n=256/o circle_x, circle_y, bohrOrbital_x, bohrOrbital_y;
SetScale/I x 0,2*pi,"", circle_x,circle_y,bohrOrbital_x,bohrOrbital_y
circle_x = cos(x);circle_y = sin(x)
bohrOrbital_x = (1+amplitude*cos(n*x))*cos(x);bohrOrbital_y =(1+amplitude*cos(n*x))*sin(x)
if(strlen(WinList("bohrOrbitalGraph", ";","")) < 2)
Execute "bohrOrbitalGraph()"
endif
End
Proc ModifyIsosurface(theSurface, larger, factor)
variable theSurface, larger, factor=2
Prompt theSurface, "Which isosurface?", popup "Psi;Psi2"
Prompt larger, "Which direction?", popup "Larger;Smaller"
Prompt factor, "How much?"
PauseUpdate
variable oldIsoValue, multiplier
multiplier = (larger < 2) ? 1/factor : factor
if(theSurface < 2) // Modify Psi
oldIsoValue = currentIsoValue("GizmoPsi", "posSurface")
DoWindow/F GizmoPsi
ModifyGizmo ModifyObject=posSurface,objectType=isoSurface,property={isoValue,oldIsoValue*multiplier}
ModifyGizmo ModifyObject=negSurface,objectType=isoSurface,property={isoValue,oldIsoValue*multiplier}
else
oldIsoValue = currentIsoValue("GizmoPsi2", "psi2Surface")
DoWindow/F GizmoPsi2
ModifyGizmo ModifyObject=psi2Surface,objectType=isoSurface,property={isoValue,oldIsoValue*multiplier}
endif
End
// Calculate H atom wavefunction using real orbitals defined at
// https://en.wikipedia.org/wiki/Atomic_orbital#Real_orbitals
Function calcPsi(n, l, m, rr, theta, phi)
variable n, l, m, rr, theta, phi
if(m < 0)
return sqrt(2)*(-1)^m * Rnl(n, l, rr) * imag(sphericalHarmonics(l,-m,theta,phi))
elseif(m > 0)
return sqrt(2)*(-1)^m * Rnl(n, l, rr) * real(sphericalHarmonics(l,m,theta,phi))
else
return Rnl(n, l, rr) * real(sphericalHarmonics(l,0,theta,phi))
endif
End
// Calculate H atom radial wavefunction as defined at https://en.wikipedia.org/wiki/Hydrogen_atom#:~:text=The%20normalized%20position%20wavefunctions
Function Rnl(n, l, r)
variable n, l, r
variable out, a0 = 0.529, rho
rho = 2*r/n/a0
out = sqrt((2/n/a0)^3*factorial(n - l - 1)/(2 * n * factorial(n + l))) * exp(-rho/2)*(rho)^(l) * LaguerreA(n-l-1, 2*l+1, rho)
return out
End
// This function calculates the radial wavefunction and displays graphs of psi, psi^2, and 4 pi r^2 psi^2.
// Three dimensional waves representing psi^2 and positive and negative regions of psi are generated. These
// are displayed in Gizmo plots. The isosurfaces may need tweaking to generate a pleasing size.
// Finally (if requested) a Monte Carlo algorithm is used to generate a point cloud representing psi.
Function makeWavefunctions(pts, range, n, l, m, doMakeCloud)
// pts = number of points in sqr box. 75 seems to be a good number. Use 0 to autoscale.
// range = Box is defined over the region x, y, z = (-range, range). Use 0 to autoscale.
// n, l, m: Usual hydrogenic quantum numbers
// doMakeCloud = (0, 1) depending on whether the point cloud should be generated.
variable pts, range, n, l, m, doMakeCloud
variable i,j,k,xx,yy,zz,rr,rho,phi,theta, psi
// Validate the quantum numbers
if( (n < 1) || (l >= n) || (l < 0) || (abs(m) > l))
Print "Invalid quantum numbers"
return -1
endif
// Autosizing if pts == 0
if(pts < 1)
pts = 75
endif
variable center=floor(pts/2) // Use odd number of points
// Autoscaling if range == 0
if(!exists("radialPsi"))
make/n=512/o radialPsi, radialPsi2, radialProbability, zero
endif
wave radialPsi, radialPsi2, radialProbability, zero
if(range < 0.01)
range = calcRange(150, n, l) // Set a huge range and do a rough graph
range = calcRange(range, n, l) // Refine the range
endif
// Update radial wavefunction
SetScale/I x 0,range,"", radialPsi,radialPsi2,radialProbability,zero
radialPsi = Rnl(n,l,x)
radialPsi2 = radialPsi^2
radialProbability = 4*pi*x^2*radialPsi2
// If the radial graphs are not displayed, display them
if(strlen(WinList("radialPsiGraph", ";","")) < 2)
Execute "radialPsiGraph()"
endif
if(strlen(WinList("radialPsi2Graph", ";","")) < 2)
Execute "radialPsi2Graph()"
endif
if(strlen(WinList("radialProbabilityGraph", ";","")) < 2)
Execute "radialProbabilityGraph()"
endif
pts = 2*floor(pts/2) + 1
make/o/n=(pts, pts, pts) ddd_psi2, ddd_psiPos, ddd_psiNeg
SetScale/I x -range,range,"", ddd_psi2, ddd_psiPos, ddd_psiNeg
SetScale/I y -range,range,"", ddd_psi2, ddd_psiPos, ddd_psiNeg
SetScale/I z -range,range,"", ddd_psi2, ddd_psiPos, ddd_psiNeg
for(k=0;k<pts;k+=1)
zz=range * (k-center)/center
for(j=0;j<pts;j+=1)
yy=range * (j-center)/center
for(i=0;i<pts;i+=1)
xx=range * (i-center)/center
// compute spherical polar coords
rr=sqrt(xx^2 + yy^2 + zz^2)
phi=atan2(yy,xx)
theta=acos(zz/rr)
psi = calcPsi(n, l, m, rr, theta, phi)
if(psi > 0)
ddd_psiPos[i][j][k] = psi
ddd_psiNeg[i][j][k] = 0
else
ddd_psiPos[i][j][k] = 0
ddd_psiNeg[i][j][k] = -psi
endif
ddd_psi2[i][j][k] = psi^2
endfor
endfor
endfor
if(strlen(WinList("GizmoPsi", ";","")) < 2)
Execute "GizmoPsi()"
endif
if(strlen(WinList("GizmoPsi2", ";","")) < 2)
Execute "GizmoPsi2()"
endif
wavestats/q ddd_psiPos
DoWindow/F GizmoPsi
ModifyGizmo ModifyObject=posSurface,objectType=isoSurface,property={isoValue,V_max/5}
ModifyGizmo ModifyObject=negSurface,objectType=isoSurface,property={isoValue,V_max/5}
wavestats/q ddd_psi2
DoWindow/F GizmoPsi2
ModifyGizmo ModifyObject=psi2Surface,objectType=isoSurface,property={isoValue,V_max/50}
if(doMakeCloud)
if(strlen(WinList("GizmoPointCloud", ";","")) > 2)
DoWindow/F GizmoPointCloud
ModifyGizmo stopUpdates
endif
makeCloud(n, l, m, range, 30000)
if(strlen(WinList("GizmoPointCloud", ";","")) > 2)
ModifyGizmo resumeUpdates
else
Execute "GizmoPointCloud()"
endif
endif
wave W_coef, W_sigma
KillWaves/Z W_coef, W_sigma, scaledWave, M_colors
End
// Calculates an optimal range for the wavefunctions based on the outermost maximum in the radial distribution function
Function calcRange(roughRange, n, l)
variable roughRange, n, l
wave radialPsi, radialPsi2, radialProbability, zero
// Set a huge range and do a rough graph
SetScale/I x 0,roughRange,"", radialPsi,radialPsi2,radialProbability,zero
radialPsi = Rnl(n,l,x)
radialPsi2 = radialPsi^2
radialProbability = 4*pi*x^2*radialPsi2
// Fit the max in the radialProbabily to a Gaussian
wavestats/Q radialProbability
K0 = 0;K1 = V_max;K2 = V_maxLoc;
CurveFit/H="1110"/Q gauss radialProbability
wave W_coef
return ceil(W_coef[2] + 1.5 * W_coef[3])
End
// Returns the currently plotted isoValue for a Gizmo isosurface
Function currentIsoValue(gizmoName, isoSurfaceName)
string gizmoName, isoSurfaceName
string matchStr, theStr
variable cur = 0
GetGizmo/n=$gizmoName objectList
wave/T TW_gizmoObjectList
matchStr = "*ModifyGizmo ModifyObject="+isoSurfaceName+",objectType=isoSurface,property={ isoValue,*"
do
if(stringmatch(TW_gizmoObjectList[cur], matchStr))
theStr = TW_gizmoObjectList[cur]
theStr = theStr[strsearch(theStr, "isoValue,", 0)+9,inf]
theStr = theStr[0, strlen(theStr)-2]
KillWaves TW_gizmoObjectList
return str2num(theStr)
endif
cur += 1
while(cur < numpnts(TW_gizmoObjectList))
KillWaves TW_gizmoObjectList
return NaN
End
Function colorXYZ(n, l, m, xx, yy, zz)
variable n, l, m, xx, yy, zz
variable rr, phi, theta
rr=sqrt(xx^2 + yy^2 + zz^2)
phi=atan2(yy,xx)
theta=acos(zz/rr)
return sign(calcPsi(n, l, m, rr, theta, phi))
End
Function acceptOnePnt(n, l, m, xx, yy, zz, numAccepted)
variable n, l, m, xx, yy, zz, numAccepted
wave pointCloud, colorPnts
pointCloud[numAccepted][0] = xx; pointCloud[numAccepted][1] = yy; pointCloud[numAccepted][2] = zz;
colorPnts[numAccepted] = colorXYZ(n, l, m, xx, yy, zz)
numAccepted += 1
return numAccepted
End
Function acceptPnts(n, l, m, xx, yy, zz, numAccepted)
variable n, l, m, xx, yy, zz, numAccepted
// Take advatage of the symmetry of the orbitals to calculate faster
numAccepted = acceptOnePnt(n, l, m, xx, yy, zz, numAccepted)
numAccepted = acceptOnePnt(n, l, m, -xx, yy, zz, numAccepted)
numAccepted = acceptOnePnt(n, l, m, xx, -yy, zz, numAccepted)
numAccepted = acceptOnePnt(n, l, m, xx, yy, -zz, numAccepted)
numAccepted = acceptOnePnt(n, l, m, -xx, -yy, zz, numAccepted)
numAccepted = acceptOnePnt(n, l, m, -xx, yy, -zz, numAccepted)
numAccepted = acceptOnePnt(n, l, m, -xx, -yy, -zz, numAccepted)
numAccepted = acceptOnePnt(n, l, m, -xx, -yy, -zz, numAccepted)
return numAccepted
End
// This function uses a Monte Carlo algorithm to generate a probabalistic point cloud representing the wavefunction.
// The positive and negative components of the wave function are colored red and blue, respectively.
Function makeCloud(n, l, m, range, numAccepts)
variable n, l, m, range, numAccepts
// range = Box is initiallydefined over the region x, y, z = (-range, range). Autoscales after 10% complete
variable xx, yy, zz, rr, phi, theta, numTries, numAccepted,magnitude, kMax, maxRange, rescale
numAccepts = 8 * ceil(numAccepts/8)
make/n=(numAccepts, 3)/o pointCloud
pointCloud = 0
make/o/n=(numAccepts) colorPnts
numAccepted = 0
numTries = 0
rescale = 1
// Find the maximum value of the wavefuction over the selected range
kMax = findMax(n, l, m, numAccepts, range)
// The efficiency of the algorithm depends on an optimal setting of the range variable.
// We use the input range for 10% of the tries, then reset based on the max value
// found to that point
maxRange = -1
do
xx = enoise(range); yy = enoise(range); zz = enoise(range)
rr=sqrt(xx^2 + yy^2 + zz^2)
phi=atan2(yy,xx)
theta=acos(zz/rr)
magnitude = calcPsi(n, l, m, rr, theta, phi)^2
if(abs(magnitude) > abs(enoise(kMax)))
numAccepted = acceptPnts(n, l, m, xx, yy, zz, numAccepted)
if(rescale && max(xx, yy, zz) > maxRange)
maxRange = max(xx, yy, zz)
endif
endif
numTries += 1
if(rescale && numAccepted > 0.1 * numAccepts)
range = maxRange * 1.15
rescale = 0
print "New range =", range
endif
while(numAccepted < numAccepts)
// To create a color wave for a scatter in Gizmo
ColorTab2Wave Rainbow
wave M_colors
duplicate/o colorPnts, scaledWave
Variable theMin=WaveMin(scaledWave)
Variable theMax=WaveMax(scaledWave)
Variable nor=(DimSize(M_colors,0)-1)/2
MatrixOP/O scaledWave=nor*(scaledWave-theMin)
M_colors/=65535
make/o/n=(numAccepts,4) colorWave=1 // alpha will be 1.
colorWave[][0]= M_colors[scaledWave[p]][0]
colorWave[][1]= M_colors[scaledWave[p]][1]
colorWave[][2]= M_colors[scaledWave[p]][2]
// If calculating radialPsi^2, the following line should be approx 1
//print "The integral is ", numAccepted/numTries * 8 * range^3 * kMax
// print numTries, numAccepted
End
Function findMax(n, l, m, numTries, range)
variable n, l, m, numTries, range
variable theMax = 0, cnt = 0, xx, yy, zz, rr, phi, theta, magnitude
do
xx = enoise(range); yy = enoise(range); zz = enoise(range)
rr=sqrt(xx^2 + yy^2 + zz^2)
phi=atan2(yy,xx)
theta=acos(zz/rr)
magnitude = abs(calcPsi(n, l, m, rr, theta, phi))
if(magnitude > theMax)
theMax = magnitude
endif
cnt += 1
while(cnt < numTries)
return theMax
End
Window GizmoPsi() : GizmoPlot
PauseUpdate; Silent 1 // building window...
// Building Gizmo 9 window...
NewGizmo/W=(35,40,550,500)
ModifyGizmo startRecMacro=901
ModifyGizmo scalingOption=63
AppendToGizmo isoSurface=root:ddd_psiPos,name=posSurface
ModifyGizmo ModifyObject=posSurface,objectType=isoSurface,property={ surfaceColorType,0}
ModifyGizmo ModifyObject=posSurface,objectType=isoSurface,property={ lineColorType,0}
ModifyGizmo ModifyObject=posSurface,objectType=isoSurface,property={ lineWidthType,0}
ModifyGizmo ModifyObject=posSurface,objectType=isoSurface,property={ fillMode,2}
ModifyGizmo ModifyObject=posSurface,objectType=isoSurface,property={ lineWidth,1}
ModifyGizmo ModifyObject=posSurface,objectType=isoSurface,property={ isoValue,0.01}
ModifyGizmo modifyObject=posSurface,objectType=Surface,property={calcNormals,1}
ModifyGizmo setObjectAttribute={posSurface,diffusePos}
ModifyGizmo setObjectAttribute={posSurface,shininess0}
ModifyGizmo setObjectAttribute={posSurface,specular}
AppendToGizmo Axes=boxAxes,name=axes0
ModifyGizmo ModifyObject=axes0,objectType=Axes,property={-1,axisScalingMode,1}
ModifyGizmo ModifyObject=axes0,objectType=Axes,property={0,ticks,3}
ModifyGizmo ModifyObject=axes0,objectType=Axes,property={1,ticks,3}
ModifyGizmo ModifyObject=axes0,objectType=Axes,property={2,ticks,3}
ModifyGizmo modifyObject=axes0,objectType=Axes,property={-1,Clipped,0}
AppendToGizmo isoSurface=root:ddd_psiNeg,name=negSurface
ModifyGizmo ModifyObject=negSurface,objectType=isoSurface,property={ surfaceColorType,0}
ModifyGizmo ModifyObject=negSurface,objectType=isoSurface,property={ lineColorType,0}
ModifyGizmo ModifyObject=negSurface,objectType=isoSurface,property={ lineWidthType,0}
ModifyGizmo ModifyObject=negSurface,objectType=isoSurface,property={ fillMode,2}
ModifyGizmo ModifyObject=negSurface,objectType=isoSurface,property={ lineWidth,1}
ModifyGizmo ModifyObject=negSurface,objectType=isoSurface,property={ isoValue,0.01}
ModifyGizmo modifyObject=negSurface,objectType=Surface,property={calcNormals,1}
ModifyGizmo setObjectAttribute={negSurface,diffuseNeg}
ModifyGizmo setObjectAttribute={negSurface,shininess0}
ModifyGizmo setObjectAttribute={negSurface,specular}
AppendToGizmo freeAxesCue={0,0,0,1},name=freeAxesCue0
ModifyGizmo modifyObject=freeAxesCue0,objectType=freeAxisCue,property={colorType,0}
AppendToGizmo light=Directional,name=light0
ModifyGizmo modifyObject=light0,objectType=light,property={ position,-0.184655,-0.414741,0.891007,0.000000}
ModifyGizmo modifyObject=light0,objectType=light,property={ direction,-0.184655,-0.414741,0.891007}
ModifyGizmo modifyObject=light0,objectType=light,property={ specular,1.000000,1.000000,1.000000,1.000000}
AppendToGizmo attribute diffuse={1,0,0,1,1032},name=diffusePos
AppendToGizmo attribute diffuse={1.5259e-05,0.244434,1,1,1032},name=diffuseNeg
AppendToGizmo attribute shininess={42,42},name=shininess0
AppendToGizmo attribute specular={1,1,1,1,1032},name=specular
ModifyGizmo setDisplayList=0, object=freeAxesCue0
ModifyGizmo setDisplayList=1, object=light0
ModifyGizmo setDisplayList=2, object=posSurface
ModifyGizmo setDisplayList=3, object=negSurface
ModifyGizmo autoscaling=1
ModifyGizmo currentGroupObject=""
ShowTools
ModifyGizmo showInfo
ModifyGizmo infoWindow={551,31,1185,418}
ModifyGizmo SETQUATERNION={0.000000,-0.000000,0.000000,1.000000}
ModifyGizmo endRecMacro
Execute/Q/Z "SetWindow kwTopWin sizeLimit={46,234,inf,inf}" // sizeLimit requires Igor 7 or later
EndMacro
Window GizmoPsi2() : GizmoPlot
PauseUpdate; Silent 1 // building window...
// Building Gizmo 9 window...
NewGizmo/W=(213,605,728,1065)
ModifyGizmo startRecMacro=901
ModifyGizmo scalingOption=63
AppendToGizmo isoSurface=root:ddd_psi2,name=psi2Surface
ModifyGizmo ModifyObject=psi2Surface,objectType=isoSurface,property={ surfaceColorType,0}
ModifyGizmo ModifyObject=psi2Surface,objectType=isoSurface,property={ lineColorType,0}
ModifyGizmo ModifyObject=psi2Surface,objectType=isoSurface,property={ lineWidthType,0}
ModifyGizmo ModifyObject=psi2Surface,objectType=isoSurface,property={ fillMode,2}
ModifyGizmo ModifyObject=psi2Surface,objectType=isoSurface,property={ lineWidth,1}
ModifyGizmo ModifyObject=psi2Surface,objectType=isoSurface,property={ isoValue,0.000225374}
ModifyGizmo modifyObject=psi2Surface,objectType=Surface,property={calcNormals,1}
ModifyGizmo setObjectAttribute={psi2Surface,diffuse}
ModifyGizmo setObjectAttribute={psi2Surface,specular}
ModifyGizmo setObjectAttribute={psi2Surface,shininess}
AppendToGizmo freeAxesCue={0,0,0,1},name=freeAxesCue0
ModifyGizmo modifyObject=freeAxesCue0,objectType=freeAxisCue,property={colorType,0}
AppendToGizmo light=Directional,name=light0
ModifyGizmo modifyObject=light0,objectType=light,property={ position,0.294889,0.694714,0.656059,0.000000}
ModifyGizmo modifyObject=light0,objectType=light,property={ direction,0.294889,0.694714,0.656059}
ModifyGizmo modifyObject=light0,objectType=light,property={ specular,1.000000,1.000000,1.000000,1.000000}
AppendToGizmo attribute diffuse={1,0.250019,0.250019,1,1032},name=diffuse
AppendToGizmo attribute specular={1,1,0,1,1032},name=specular
AppendToGizmo attribute shininess={30,30},name=shininess
ModifyGizmo setDisplayList=0, object=freeAxesCue0
ModifyGizmo setDisplayList=1, object=light0
ModifyGizmo setDisplayList=2, object=psi2Surface
ModifyGizmo setDisplayList=3, opName=clearColor0, operation=clearColor, data={1,1,1,1}
ModifyGizmo autoscaling=1
ModifyGizmo currentGroupObject=""
ShowTools
ModifyGizmo showInfo
ModifyGizmo infoWindow={782,750,1405,1094}
ModifyGizmo SETQUATERNION={0.000000,0.000000,0.000000,1.000000}
ModifyGizmo endRecMacro
Execute/Q/Z "SetWindow kwTopWin sizeLimit={46,234,inf,inf}" // sizeLimit requires Igor 7 or later
EndMacro
Window GizmoPointCloud() : GizmoPlot
PauseUpdate; Silent 1 // building window...
// Building Gizmo 9 window...
NewGizmo/W=(947,721,1512,1219)
ModifyGizmo startRecMacro=901
ModifyGizmo scalingOption=63
AppendToGizmo Scatter=root:pointCloud,name=thePoints
ModifyGizmo ModifyObject=thePoints,objectType=scatter,property={ scatterColorType,1}
ModifyGizmo ModifyObject=thePoints,objectType=scatter,property={ markerType,0}
ModifyGizmo ModifyObject=thePoints,objectType=scatter,property={ sizeType,0}
ModifyGizmo ModifyObject=thePoints,objectType=scatter,property={ rotationType,0}
ModifyGizmo ModifyObject=thePoints,objectType=scatter,property={ Shape,2}
ModifyGizmo ModifyObject=thePoints,objectType=scatter,property={ size,0.05}
ModifyGizmo ModifyObject=thePoints,objectType=scatter,property={ colorWave,root:colorWave}
AppendToGizmo freeAxesCue={0,0,0,1},name=freeAxesCue0
ModifyGizmo modifyObject=freeAxesCue0,objectType=freeAxisCue,property={colorType,0}
ModifyGizmo setDisplayList=0, object=freeAxesCue0
ModifyGizmo setDisplayList=1, object=thePoints
ModifyGizmo autoscaling=1
ModifyGizmo currentGroupObject=""
ShowTools
ModifyGizmo showInfo
ModifyGizmo infoWindow={804,539,1398,783}
ModifyGizmo SETQUATERNION={-0.080336,0.084591,0.010790,0.993114}
ModifyGizmo endRecMacro
Execute/Q/Z "SetWindow kwTopWin sizeLimit={46,234,inf,inf}" // sizeLimit requires Igor 7 or later
EndMacro
Window radialPsiGraph() : Graph
PauseUpdate; Silent 1 // building window...
Display /W=(4,523,399,731) radialPsi,zero
ModifyGraph gFont="Helvetica"
ModifyGraph lStyle(zero)=1
ModifyGraph rgb=(0,0,0)
ModifyGraph mirror=2
ModifyGraph nticks(left)=0
ModifyGraph font="Helvetica"
ModifyGraph fSize=12
ModifyGraph lblMargin(left)=11
ModifyGraph lblLatPos(left)=-1
ModifyGraph btLen=4
Label left "ψ"
Label bottom "\\f02r\\f00 (Å)"
EndMacro
Window radialPsi2Graph() : Graph
PauseUpdate; Silent 1 // building window...
Display /W=(0,771,395,979) radialPsi2
ModifyGraph gFont="Helvetica"
ModifyGraph rgb=(0,0,0)
ModifyGraph mirror=2
ModifyGraph nticks(left)=0
ModifyGraph font="Helvetica"
ModifyGraph fSize=12
ModifyGraph lblMargin(left)=10
ModifyGraph btLen=4
Label left "ψ\\S2\\M"
Label bottom "\\f02r\\f00 (Å)"
EndMacro
Window radialProbabilityGraph() : Graph
PauseUpdate; Silent 1 // building window...
Display /W=(1,1015,396,1223) radialProbability
ModifyGraph gFont="Helvetica"
ModifyGraph rgb=(0,0,0)
ModifyGraph mirror=2
ModifyGraph nticks(left)=0
ModifyGraph font="Helvetica"
ModifyGraph fSize=14
ModifyGraph lblMargin(left)=11
ModifyGraph btLen=4
Label left "4 π \\f02r\\f00\\S2\\M ψ\\S2\\M"
Label bottom "\\f02r\\f00 (Å)"
EndMacro
Window bohrOrbitalGraph() : Graph
PauseUpdate; Silent 1 // building window...
Display /W=(35,520,424,903) circle_y vs circle_x
AppendToGraph bohrOrbital_y vs bohrOrbital_x
ModifyGraph gFont="Helvetica",height={Plan,1,left,bottom}
ModifyGraph lStyle(circle_y)=1
ModifyGraph rgb=(0,0,0)
ModifyGraph nticks=0
ModifyGraph font="Helvetica"
ModifyGraph axThick=0
EndMacro
Forum
Support
Gallery
Igor Pro 10
Learn More
Igor XOP Toolkit
Learn More
Igor NIDAQ Tools MX
Learn More