53 lines
1.6 KiB
Python
53 lines
1.6 KiB
Python
#!/usr/bin/python3
|
|
|
|
import spintrum
|
|
import math
|
|
import matplotlib.pyplot as plt
|
|
import numpy as np
|
|
import matplotlib as mpl
|
|
from mpl_toolkits.mplot3d import Axes3D
|
|
|
|
|
|
def run(dirs):
|
|
gammas = [10] #Hz/T
|
|
jCouplings = [[0]]
|
|
|
|
BThermal = 10e0
|
|
T2 = 10
|
|
sampleRate = 1e4
|
|
T= 1/sampleRate
|
|
B0=10.
|
|
B1=0.3e0
|
|
points = 1650
|
|
f = B0*gammas[0]
|
|
bx = np.array([np.sin(2*math.pi*f*t/sampleRate)*B1 for t in range(points)])
|
|
by = np.array([np.cos(2*math.pi*f*t/sampleRate)*B1 for t in range(points)])
|
|
|
|
spinOp = spintrum.SpinOperations()
|
|
spinOp.add_operation(spintrum.SpinOperations.OPERATION__THERMAL_POPULATE,
|
|
{'Bx': 0, 'By': 0, 'Bz': BThermal, 'T': 293.778})
|
|
spinOp.add_operation(spintrum.SpinOperations.OPERATION__SET_HAMILTONIAN,
|
|
{'Bx': 0, 'By': 0, 'Bz': B0})
|
|
spinOp.add_operation(spintrum.SpinOperations.OPERATION__EVOLVE_TIME_DEPENDENT,
|
|
{'threads': 4, 'samplingRate': sampleRate, 'store': dirs,
|
|
'input': {'Bx': bx, 'By': by}})
|
|
|
|
signal = spintrum.simulate(gyromagneticRatios=gammas,
|
|
jCouplings=jCouplings,
|
|
spinOperations=spinOp)
|
|
return signal
|
|
|
|
#this will result in points in the form xyzxyzxyz (order doesn't make a difference)
|
|
data = run('xyz')
|
|
|
|
mpl.rcParams['legend.fontsize'] = 10
|
|
|
|
fig = plt.figure()
|
|
ax = fig.gca(projection='3d')
|
|
datanp = np.transpose(np.split(np.array(data),len(data)/3))
|
|
|
|
ax.plot(datanp[0], datanp[1], datanp[2], label='parametric curve')
|
|
ax.legend()
|
|
|
|
plt.show()
|