# Crystal.m

Single-crystal interface to pulse sequences. Generates a Liouvillian superoperator and passes it on to the pulse sequence function, which should be supplied as a handle. Syntax:

answer=crystal(spin_system,pulse_sequence,parameters,assumptions)

where pulse sequence is a function handle to one of the pulse sequences located in the experiments directory, assumptions is a string that would be passed to assume.m when the Hamiltonian is built and parameters is a structure with the following subfields:

parameters.spins - a cell array giving the spins that the pulse sequence involves, e.g. {'1H','13C'} parameters.offset - a cell array giving transmitter off- sets in Hz on each of the spins listed in parameters.spins array parameters.orientation - a row vector of the three Euler angles (in radians) giving the orientation of the system relative to the input orien- tation. parameters.rframes - rotating frame specification, e.g. {{'13C',2},{'14N,3}} requests second order rotating frame transformation with respect to carbon-13 and third order rotating frame transformation with respect to nitrogen-14. When this option is used, the assumptions on the respective spins should be laboratory frame.

Additional subfields may be required by the pulse sequence. The parameters structure is passed to the pulse sequence with the following additional parameters set:

parameters.spc_dim - matrix dimension for the spatial dynamics subspace parameters.spn_dim - matrix dimension for the spin dynamics subspace

This function returns whatever it is that the pulse sequence returns.

Note: arbitrary order rotating frame transformation is supported, including infinite order. See rotframe.m for further information.