# 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.