nqr-blochsimulator/tests/simulation.py

59 lines
1.8 KiB
Python
Raw Normal View History

2023-08-22 14:06:38 +00:00
import unittest
import numpy as np
import matplotlib.pyplot as plt
2023-08-22 14:06:38 +00:00
from nqr_blochsimulator.classes.sample import Sample
from nqr_blochsimulator.classes.simulation import Simulation
from nqr_blochsimulator.classes.pulse import PulseArray
2023-08-22 14:06:38 +00:00
class TestSimulation(unittest.TestCase):
def setUp(self):
2023-08-22 14:06:38 +00:00
self.sample = Sample(
"BiPh3",
density=1.585e6 ,#g/m^3
molar_mass=440.3, #g/mol
resonant_frequency=83.56e6, #Hz
gamma=4.342e7, #Hz/T
nuclear_spin=9/2,
spin_factor=2,
powder_factor=1,
filling_factor=0.7,
T1=82.6e-5, #s
T2=396e-6, #s
T2_star=50e-6, #s
)
simulation_length = 300e-6
dwell_time = 1e-6
self.time_array = np.arange(0, simulation_length, dwell_time)
pulse_length = 3e-6
# Simple FID sequence with pulse length of 3µs
pulse_amplitude_array = np.zeros(int(simulation_length/dwell_time))
pulse_amplitude_array[:int(pulse_length/dwell_time)] = 1
pulse_phase_array = np.zeros(int(simulation_length/dwell_time))
self.pulse = PulseArray(
pulseamplitude=pulse_amplitude_array,
pulsephase=pulse_phase_array,
dwell_time=dwell_time
2023-08-22 14:06:38 +00:00
)
self.simulation = Simulation(
sample=self.sample,
number_isochromats=1000,
initial_magnetization=1,
gradient=1,
noise=0,
length_coil=6e-3,
diameter_coil=3e-3,
number_turns=9,
power_amplifier_power=500,
pulse = self.pulse
)
def test_simulation(self):
M = self.simulation.simulate()
# Plotting the results
plt.plot(self.time_array, abs(M))
plt.show()