Open kousu opened 4 years ago
Great question! A bit of background: The MRI scanner runs what is called a "pulse sequence", ie, a series of instructions as to which RF pulses and magnetic field gradients to turn on when and when to measure the signals that are generated by your object. The "sequence code" is the code, written in C++ (at least for Siemens), that describes these instructions (including reading/writing to external files). Sequence code usually makes use of many libraries that make the sequence flexible in terms of the different acquisition strategies it can use. Usually new researcher-developed sequences are based on a "product" sequence (sequences that are sold and approved for clinical use), this means that they include modifications to those product sequences. This is what was done to develop my custom sequence. There are open-source initiatives for developing sequence code and interfacing with MRI scanners. There are some people at NeuroPoly using RTHawk to develop open-source pulse sequences and investigate how they compare to Siemens (or others) product sequences. So, in short, yes it is possible!
@jaystock you mentioned the next iteration of driver boards will support encoding waveforms. Is your plan to use existing open-source software for this (e.g. the Freiburg group's pulseq tool), or will it be "in-house"?
I've been told that the code which picks up this data file (containing a magnetic field gradient matrix, or something like that, I know my terminology is hazy here)
https://github.com/shimming-toolbox/shimming-toolbox/blob/16dae3169400d7a6e573ce80fde1bd2fc4dfe296/example/realtime_zshim.m#L433
is some C++ code written by @evaalonsoortiz which is locked away under NDA to Siemens. I assume it's under NDA because it's interfacing directly with Siemens' proprietary (serial? parallel?) control protocol, and they guard that closely.
Going out on a limb here, I found both https://pulseq.github.io/ and https://www.opensourceimaging.org/project/sequencetree/ which claim to implement that same communication. Would it be possible to separate the parts of your code, Eva, that take the matrix and generate sequences, from the parts that actually send the sequences, by replacing them with one of these libraries, so that we could open source your C++ code?