PyOR also called Python On Resonance

Author: Vineeth Francis Thalakottoor

Email: vineeth.thalakottoor@ens.psl.eu or vineethfrancis.physics@gmail.com

Example: Shape Pulse (Mx,My and Mz as function of offset frequency)

[1]:
# Define the source path
SourcePath = '/media/HD2/Vineeth/PostDoc_Simulations/Github/PyOR_V1/PyOR_Combined/Source_Doc'

# Add source path
import sys
sys.path.append(SourcePath)
import numpy as np
import time
%matplotlib ipympl

# Import PyOR package
from PyOR_QuantumSystem import QuantumSystem as QunS
from PyOR_Hamiltonian import Hamiltonian
from PyOR_DensityMatrix import DensityMatrix
from PyOR_QuantumObject import QunObj
from PyOR_HardPulse import HardPulse
from PyOR_Basis import Basis
from PyOR_Evolution import Evolutions
from PyOR_Plotting import Plotting
import PyOR_SignalProcessing as Spro
[2]:
# Define the spin system
Spin_list = {"A" : "H1"}
QS = QunS(Spin_list,PrintDefault=False)

# initialize the system
QS.Initialize()
[3]:
# Set Parameters

# Master Equation
QS.PropagationSpace = "Hilbert"
QS.MasterEquation = "Redfield"

# B0 Field in Tesla, Static Magnetic field (B0) along Z
QS.B0 = 9.4

# Offset Frequency in rotating frame (Hz)
QS.OFFSET["A"] = 10.0

# Define initial and final Spin Temperature
QS.I_spintemp["A"] = 300.0
QS.F_spintemp["A"] = 300.0

# Relaxation Process
QS.Rprocess = "No Relaxation"

QS.Update()
Rotating frame frequencies: {'A': -2514706800.0}
Offset frequencies: {'A': 10.0}
Initial spin temperatures: {'A': 300.0}
Final spin temperatures: {'A': 300.0}
Radiation damping gain: {'A': 0}
Radiation damping phase: {'A': 0}

Rprocess = No Relaxation
RelaxParDipole_tau = 0.0
DipolePairs = []
RelaxParDipole_bIS = []
[4]:
# generate Larmor Frequencies
QS.print_Larmor = True
Ham = Hamiltonian(QS)

# Shape file
pulseFile = '/opt/topspin4.1.4/exp/stan/nmr/lists/wave/Rsnob.1000' # Rsnob.1000 or square.1000 or Gaus1.1000
pulseLength = 1000.0e-6
RotatioAngle = 90.0
t, amp, phase = Ham.ShapedPulse_Bruker(pulseFile,pulseLength,RotatioAngle)
Larmor Frequency in MHz:  [-400.22802765]
Nutation frequency of hard pulse (Hz): 250.0
Scaling Factor: 0.21369571573119997
Maximum nuB1 (Hz): 1169.887749712614
Period corresponding to maximum nuB1 (s): 0.0008547828629247999
[5]:
plot = Plotting(QS)
plot.PlotFigureSize = (10,5)
plot.PlotFontSize = 20
plot.PlottingTwin(1,t,amp, phase,"pulse length","Amp","Phase","blue","red")
/media/HD2/Vineeth/PostDoc_Simulations/Github/PyOR_V1/PyOR_Combined/Source_Doc/PyOR_Plotting.py:304: UserWarning: No artists with labels found to put in legend.  Note that artists whose label start with an underscore are ignored when legend() is called with no argument.
  ax1.legend(fontsize=self.PlotFontSize, frameon=False)
[6]:
# Interpolartion
Kind = "previous"
Iamp, Iphase = Ham.ShapedPulse_Interpolate(t,amp,phase,Kind)
[7]:
# Shape Pulse Parameters

EVol = Evolutions(QS,Ham)


EVol.ShapeFunc = "Bruker"
EVol.ShapeParOmega = Iamp
EVol.ShapeParPhase = Iphase
EVol.ShapeParFreq = 0.0
Larmor Frequency in MHz:  [-400.22802765]
[8]:
DM = DensityMatrix(QS,Ham)

Thermal_DensMatrix = False

if Thermal_DensMatrix:
    # High Temperature
    HT_approx = False

    # Initial Density Matrix
    rho_in = DM.EquilibriumDensityMatrix(QS.Ispintemp,HT_approx)

    # Equlibrium Density Matrix
    rhoeq = DM.EquilibriumDensityMatrix(QS.Fspintemp,HT_approx)
else:
    rho_in = QS.Az
    rhoeq = QS.Az
[9]:
# Acquisition parameters

EVol.AcqAQ = pulseLength
Npoints = 1000
EVol.AcqDT = EVol.AcqAQ/Npoints
EVol.PropagationMethod = "ODE Solver ShapedPulse"

# Frequency Offset
Foffset = np.arange(0,3000,100)
MXprofile = np.zeros(len(Foffset))
MYprofile = np.zeros(len(Foffset))
MZprofile = np.zeros(len(Foffset))

j = 0
for i in Foffset:
    # Offset Frequency in rotating frame (Hz)
    Ham.Offset[0] = i

    # generate Larmor Frequencies
    LarmorF = Ham.LarmorFrequency()

    # Rotating Frame Hamiltonian
    Hz = Ham.Zeeman_RotFrame()

    start_time = time.time()
    t, rho_t = EVol.Evolution(rhoQ=rho_in,rhoeqQ=rhoeq,HamiltonianQ=Hz)
    t, Mx1 = EVol.Expectation(rho_t,QS.Ax)
    t, My1 = EVol.Expectation(rho_t,QS.Ay)
    t, Mz1 = EVol.Expectation(rho_t,QS.Az)
    MXprofile[j] =  Mx1[-1].real
    MYprofile[j] =  My1[-1].real
    MZprofile[j] =  Mz1[-1].real
    j = j + 1
    end_time = time.time()
    timetaken = end_time - start_time
    print("Total time = %s seconds " % (timetaken))
Larmor Frequency in MHz:  [-400.22801765]
Total time = 11.356765508651733 seconds
Larmor Frequency in MHz:  [-400.22811765]
Total time = 11.44345474243164 seconds
Larmor Frequency in MHz:  [-400.22821765]
Total time = 11.390703678131104 seconds
Larmor Frequency in MHz:  [-400.22831765]
Total time = 11.012929201126099 seconds
Larmor Frequency in MHz:  [-400.22841765]
Total time = 11.14991807937622 seconds
Larmor Frequency in MHz:  [-400.22851765]
Total time = 10.309876918792725 seconds
Larmor Frequency in MHz:  [-400.22861765]
Total time = 10.010565519332886 seconds
Larmor Frequency in MHz:  [-400.22871765]
Total time = 10.052127122879028 seconds
Larmor Frequency in MHz:  [-400.22881765]
Total time = 10.252934217453003 seconds
Larmor Frequency in MHz:  [-400.22891765]
Total time = 10.783981800079346 seconds
Larmor Frequency in MHz:  [-400.22901765]
Total time = 10.649605989456177 seconds
Larmor Frequency in MHz:  [-400.22911765]
Total time = 10.687446594238281 seconds
Larmor Frequency in MHz:  [-400.22921765]
Total time = 10.366693019866943 seconds
Larmor Frequency in MHz:  [-400.22931765]
Total time = 10.83225965499878 seconds
Larmor Frequency in MHz:  [-400.22941765]
Total time = 10.528071403503418 seconds
Larmor Frequency in MHz:  [-400.22951765]
Total time = 10.146029949188232 seconds
Larmor Frequency in MHz:  [-400.22961765]
Total time = 10.454198598861694 seconds
Larmor Frequency in MHz:  [-400.22971765]
Total time = 10.256021499633789 seconds
Larmor Frequency in MHz:  [-400.22981765]
Total time = 10.478468656539917 seconds
Larmor Frequency in MHz:  [-400.22991765]
Total time = 11.34423542022705 seconds
Larmor Frequency in MHz:  [-400.23001765]
Total time = 11.223270416259766 seconds
Larmor Frequency in MHz:  [-400.23011765]
Total time = 10.904202461242676 seconds
Larmor Frequency in MHz:  [-400.23021765]
Total time = 11.07768201828003 seconds
Larmor Frequency in MHz:  [-400.23031765]
Total time = 10.95982050895691 seconds
Larmor Frequency in MHz:  [-400.23041765]
Total time = 11.01243782043457 seconds
Larmor Frequency in MHz:  [-400.23051765]
Total time = 10.549301147460938 seconds
Larmor Frequency in MHz:  [-400.23061765]
Total time = 10.464799642562866 seconds
Larmor Frequency in MHz:  [-400.23071765]
Total time = 10.500324726104736 seconds
Larmor Frequency in MHz:  [-400.23081765]
Total time = 10.674558162689209 seconds
Larmor Frequency in MHz:  [-400.23091765]
Total time = 10.546167850494385 seconds
[10]:
plot = Plotting(QS)
plot.PlotFigureSize = (10,5)
plot.PlotFontSize = 20
fig,span_selector = plot.PlottingMulti_SpanSelector(3,[Foffset,Foffset,Foffset],[2*MXprofile,2*MYprofile,2*MZprofile],"Frequency Offset", "MX/MY/MZ",["red","blue","green"])
[ ]: