Cross Polarization
Here we will use GAMMA to have a simple look at cross-polarization, specifically
the the evolution of magnetization on the x-axis in an experiment on an I2S system.
The three spins are taken to be dominated by the secular parts of dipolar coupling,
i.e. they evolve under the effects of the secular dipolar and rf-field Hamiltonians only.
We will also just use CW irradiation for the spin-locking.
In GAMMA operators are a data type so it is very easy to manipulate
them. There are also functions which construct any spin operator so there
is little difficulty in construction any operator. This example does just
that, it builds an appropriate Hamiltonian then uses other basic GAMMA functions
for acquisition and graphical output.
#include <gamma.h>
int main()
{
double DIS1 = 10.0 * 1.e3;
double DIS2 = 8.29 * 1.e3;
double DII = 11.4 * 1.e3;
double WS = 3.0 * 1.e3;
double WI = 3.2 * 1.e3;
double dt = 0.001;
double npts = 2000;
spin_sys sys(3); // Set up I=1/2 spins
sys.isotope(0, "13C"); // Now system is SI2
gen_op HIS = DIS1*Iz(sys,0)*Iz(sys,1) // Mock dipolar Ham
+ DIS2*Iz(sys,0)*Iz(sys,2); // between S(0) & I(1,2)
gen_op HII = DII*(Iz(sys,1)*Iz(sys,2) // Mock dipolar Ham
- 0.25*Ip(sys,1)*Im(sys,2) // between I1 & I2
- 0.25*Im(sys,1)*Ip(sys,2));
gen_op HRF = WS*Ix(sys,0) // Mock rf field Ham
+ WI*(Ix(sys,1)+Ix(sys,2)); // irradiation on I&S
gen_op H = HIS + HII + HRF; // Full Hamiltonian
gen_op D = 0.5*(Ix(sys,1)+Ix(sys,2)) // Detection operator
+ complex(0,sqrt(0.5))*Ix(sys,0); // Ix1+Ix2 + iSx
gen_op rho = 0.5*(Ix(sys,1)+Ix(sys,2)); // Start with Fx
row_vector data = FID(rho,D,H,dt,npts); // Evolve, track magnetization
GP_xy("crosspol.asc", data); // Output to Gnuplot ASCII
GP_xyplot("crosspol.gnu", "crosspol.asc"); // Plot to screen
cout << "\n\n"; // Keep screen nice
}
The figure on this page used a similar program with FrameMaker output instead.
FrameMaker was used to color the magnetization trajectory, put in the cirle,
and make nicer axes. With some work, I am sure gnuplot could do the same.
|