We have implemented a code to calculate SABRE dynamics in Spinach and that code that we put together messes with the normalization of the density matrix. The problem is that we add and average density matrices from various chemical pathways. In that context
1. How do you normalize the density matrix in Liouville space within spinach?
2. Along the same lines, how do you calculate the trace of a density matrix in Liouville space in spinach?
3. More to the point: our Sabre simulation is only giving us 1 spin, 2 spin and 3 spin order in our target molecule but to get the simulation to match the experiment we seem to need 4 spin order, which always appears to be exactly 0 at the end of the Sabre simulation.
If we start the density matrix with 4 spinorder (without running the SABRE simulation) we do match the spectrum.
Any comments would be appreciated.
Normalisation with kinetics
Re: Normalisation with kinetics
The answer depends on the formalism that you specify in bas.formalism:
1. For ‘zeeman-hilb’ you get the textbook density matrix in the Pauli basis out of state() function, use the standard textbook math.
2. For ‘zeeman-liouv’ you get the same density matrix, but stretched column by column – call reshape() to reshape back, do what needs doing in Item 1, then stretch again.
3. It is all different for ‘sphten-liouv’, where the state vector that state() returns is a list of coefficients in front of irreducible spherical tensor operators. The trace of the density matrix is basically the coefficient in front T_00. So in that formalism the trace is just the first element of the state vector. Various thermodynamically consistent functions (such as equilibrium.m) automatically set that element to 1.
Because the density matrix is already a square (in the outer product sense) of the wavefunction, the normalisation process consists in making the trace equal to 1. For Items 1 and 2 above, add an appropriate amount of unit matrix; for Item 3, set the first element to 1. The best way to get a consistently normalised initial state is to call equilibrium.m at some specific temperature. It takes care of all such matters internally.
Are your 4-spin orders locked out by symmetry? In that case, the dynamics that starts outside the disconnected subspace will not be able to get inside. Run path_trace.m on your Liouvillian to see what your disconnected subspaces are. Presumably, your 4-spin order is populated by your chemistry, and so it needs to be present in the initial condition or the pumping terms (use magpump.m to set up external sources).
1. For ‘zeeman-hilb’ you get the textbook density matrix in the Pauli basis out of state() function, use the standard textbook math.
2. For ‘zeeman-liouv’ you get the same density matrix, but stretched column by column – call reshape() to reshape back, do what needs doing in Item 1, then stretch again.
3. It is all different for ‘sphten-liouv’, where the state vector that state() returns is a list of coefficients in front of irreducible spherical tensor operators. The trace of the density matrix is basically the coefficient in front T_00. So in that formalism the trace is just the first element of the state vector. Various thermodynamically consistent functions (such as equilibrium.m) automatically set that element to 1.
Because the density matrix is already a square (in the outer product sense) of the wavefunction, the normalisation process consists in making the trace equal to 1. For Items 1 and 2 above, add an appropriate amount of unit matrix; for Item 3, set the first element to 1. The best way to get a consistently normalised initial state is to call equilibrium.m at some specific temperature. It takes care of all such matters internally.
Are your 4-spin orders locked out by symmetry? In that case, the dynamics that starts outside the disconnected subspace will not be able to get inside. Run path_trace.m on your Liouvillian to see what your disconnected subspaces are. Presumably, your 4-spin order is populated by your chemistry, and so it needs to be present in the initial condition or the pumping terms (use magpump.m to set up external sources).