Hello!
I am simulating a simple two-spin system from a Tyr DFT.
The system drives to an equilibrium of 0, while I think it should drive to Cz + Hz.
I understand the relaxation operator must be thermalised to account for the equilibrium. Is there anything else that should change in response to this change in defined equilibrium?
I have tried equilibrium(spin_system) (which gives me E).
I also tried to force a 'thermalization' to the equilibrium state of Cz + Hz.
Neither changes the outcome of the system driving to 0.
I also found the below line on the Spinach Wiki, but don't know how to implement this:
"If 'IME' is specified, then the unit state population of the initial condition must be manually set to 1"
Below I'm attaching my spin_system specifications. I ran a small experiment where I set the starting state to -Hz and attempt to observe it's return to +Hz. For this I used the state and evolution functions.
inter.relaxation={'redfield'};
inter.rlx_keep='labframe';
inter.temperature=298;
inter.equilibrium='IME';
inter.tau_c={4e-9};
bas.formalism='sphten-liouv';
bas.approximation='none';
sys.magnet=14.1;
spin_system=create(sys,inter);
spin_system=basis(spin_system,bas);
spin_system=assume(spin_system,'nmr');
H=hamiltonian(spin_system);
R=relaxation(spin_system);
K=kinetics(spin_system);
L=H+1i*R+1i*K;
Thank you very much for the help!
Return to Equilibrium Magnetisation
Return to Equilibrium Magnetisation
- Attachments
-
- Screenshot 2025-06-19 at 18.04.23.png (185.07 KiB) Viewed 66123 times
Re: Return to Equilibrium Magnetisation
Thermal equilibrium in proton-carbon system is actually 1 + alpha*(Hz+0.25*Cz) where alpha is a small number (around 1e-5, quantum tech people like to pretend it does not exist) and the quarter appears because the magnetogyric ratio of carbon is around four times smaller than that of proton.
To take that into account:
1. Specify the temperature in inter.temperature
2. Get the thermal equilibrium state using equilibrium.m
3. Thermalise the relaxation superoperator using that equilibrium state. If you specify inter.equilibrium, that is done automatically when you call relaxation.m function.
4. Start your simulation from that equilibrium state. The common practice of starting it from Hz + Cz is not correct, that state corresponds to 100% spin polarisation which is not what you have at any realistic temperature.
5. Do not use 'labframe' relaxation superoperator option for rotating frame simulations, that is not correct. Change that to 'secular', 'kite', or 'diagonal'.
The following example files have that implemented: relaxation_theory/inv_rec_*.m, nmr_liquids/noe_zq_beats.m
To take that into account:
1. Specify the temperature in inter.temperature
2. Get the thermal equilibrium state using equilibrium.m
3. Thermalise the relaxation superoperator using that equilibrium state. If you specify inter.equilibrium, that is done automatically when you call relaxation.m function.
4. Start your simulation from that equilibrium state. The common practice of starting it from Hz + Cz is not correct, that state corresponds to 100% spin polarisation which is not what you have at any realistic temperature.
5. Do not use 'labframe' relaxation superoperator option for rotating frame simulations, that is not correct. Change that to 'secular', 'kite', or 'diagonal'.
The following example files have that implemented: relaxation_theory/inv_rec_*.m, nmr_liquids/noe_zq_beats.m
Re: Return to Equilibrium Magnetisation
Thank you very much!
Alpha was my critical error, thinking too much about textbook diagrams.
Made your recommended changes, attaching two figures below, everything in order.
Could I be cheeky and ask you another question?
I am trying to consider the incomplete return to thermal equilibrium that takes place in between successive scans of an NMR experiment.
I want to simulate how the differential R1s of 13C and 1H create slightly different starting ratios of magnetisation (ie not 1:4), and how that affects our experiment.
What would be a good way to implement this? I was considering (very) crudely approximating the mixture of states post acquisition, and then adding a 1s delay to allow equilibration prior to pulse program start.
I imagine the most accurate thing would be to loop through a pulse program, taking the density matrix at the end of run 1, as the starting point for run 2. Do you think that's necessary, or do you have an approximation?
Thank you very much again!
Alpha was my critical error, thinking too much about textbook diagrams.
Made your recommended changes, attaching two figures below, everything in order.
Could I be cheeky and ask you another question?
I am trying to consider the incomplete return to thermal equilibrium that takes place in between successive scans of an NMR experiment.
I want to simulate how the differential R1s of 13C and 1H create slightly different starting ratios of magnetisation (ie not 1:4), and how that affects our experiment.
What would be a good way to implement this? I was considering (very) crudely approximating the mixture of states post acquisition, and then adding a 1s delay to allow equilibration prior to pulse program start.
I imagine the most accurate thing would be to loop through a pulse program, taking the density matrix at the end of run 1, as the starting point for run 2. Do you think that's necessary, or do you have an approximation?
Thank you very much again!
- Attachments
-
- Screenshot 2025-06-20 at 09.28.45.png (30.11 KiB) Viewed 66074 times
-
- Screenshot 2025-06-20 at 09.28.39.png (27.07 KiB) Viewed 66074 times
Re: Return to Equilibrium Magnetisation
Yep, loop is best for real-life modelling cases. I normally just implement the sequence literally: pulse by pulse, delay by delay, including any repetitions. Then it's a formally exact simulation that usually just works.
There is a very recent function called steady.m - you could compute the sequence + delay propagator, and it would then give you the stroboscopic steady state after the sequence + delay are applied infinitely many times.
There is a very recent function called steady.m - you could compute the sequence + delay propagator, and it would then give you the stroboscopic steady state after the sequence + delay are applied infinitely many times.