10 #ifndef CLASS_EXTERNAL_SEQUENCE
11 #define CLASS_EXTERNAL_SEQUENCE
15 #define PI 3.1415926535897932384626433832795
16 #define TWO_PI 6.283185307179586476925286766558
46 const int NUM_EVENTS=ADC+1;
47 const int NUM_GRADS=ADC-GX;
271 if (
isRF()) type = type +
"RF";
278 if (
isADC()) type +=
" ADC";
279 if (
isDelay()) type +=
" Delay";
293 std::vector<float>().swap(
rfPhase);
355 bool load(std::string path);
441 static std::istream&
getline(std::istream& stream,
char *buffer,
const int MAX_SIZE);
537 return std::vector<double>();
545 #endif //CLASS_EXTERNAL_SEQUENCE
float phaseOffset
Phase offset of receiver (rad)
Definition: ExternalSequence.h:98
RFEvent rf
RF event.
Definition: ExternalSequence.h:233
int phaseShape
ID of shape for phase.
Definition: ExternalSequence.h:59
static std::istream & getline(std::istream &stream, char *buffer, const int MAX_SIZE)
Read a line from the input stream independent of line ending.
Definition: ExternalSequence.cpp:573
Compressed shape data.
Definition: ExternalSequence.h:305
std::map< int, long > m_delayLibrary
Library of delays.
Definition: ExternalSequence.h:522
std::vector< float > samples
Compressed samples.
Definition: ExternalSequence.h:308
MessageType
Output message types.
Definition: ExternalSequence.h:22
int GetIndex()
Return index of this block.
Definition: ExternalSequence.h:251
int GetRFLength()
Return the number of samples of the RF shape.
Definition: ExternalSequence.h:288
static const char COMMENT_CHAR
Character defining the start of a comment line.
Definition: ExternalSequence.h:424
int index
Index of this block.
Definition: ExternalSequence.h:225
long duration
duration of this block (in us) used for error checking
Definition: ExternalSequence.h:231
SeqBlock()
Constructor.
Definition: ExternalSequence.h:126
long delay
delay of this block (in us)
Definition: ExternalSequence.h:230
int shape
ID of shape for arbitrary gradient.
Definition: ExternalSequence.h:81
bool isArbitraryGradient(int channel)
Return true if block has arbitrary event on given channel.
Definition: ExternalSequence.h:255
void buildFileIndex(std::ifstream &stream)
Search the file stream for section headers e.g. [RF], [GRAD] etc.
Definition: ExternalSequence.cpp:362
static void print_msg(MessageType level, std::ostream &ss)
Display an output message.
Definition: ExternalSequence.cpp:28
SeqBlock * GetBlock(int blockIndex)
Construct a sequence block from the library events.
Definition: ExternalSequence.cpp:378
std::map< int, RFEvent > m_rfLibrary
Library of RF events.
Definition: ExternalSequence.h:519
void skipComments(std::ifstream &stream, char *buffer)
Skip the comments and empty lines in the given input stream.
Definition: ExternalSequence.cpp:351
std::vector< float > rfAmplitude
RF amplitude shape (uncompressed)
Definition: ExternalSequence.h:240
GradEvent grad[NUM_GRADS]
gradient events
Definition: ExternalSequence.h:234
void checkRF(SeqBlock &block)
Check the shapes defining the RF event (if present)
Definition: ExternalSequence.cpp:560
std::map< int, GradEvent > m_gradLibrary
Library of gradient events.
Definition: ExternalSequence.h:520
Sequence block.
Definition: ExternalSequence.h:119
static const int MAX_LINE_SIZE
Maximum length of line.
Definition: ExternalSequence.h:423
bool decodeBlock(SeqBlock *block)
Decode a block by looking up indexed events.
Definition: ExternalSequence.cpp:422
float * GetGradientPtr(int channel)
Directly get a pointer to the samples of the arbitrary gradient.
Definition: ExternalSequence.h:283
bool checkBlockReferences(EventIDs &events)
Check the IDs contains references to valid events in the library.
Definition: ExternalSequence.cpp:529
long GetDuration()
Return duration of block.
Definition: ExternalSequence.h:260
bool isRF()
Return true if block has RF event.
Definition: ExternalSequence.h:253
float freqOffset
Frequency offset of transmitter (Hz)
Definition: ExternalSequence.h:60
long rampDownTime
Ramp down time of trapezoid (us)
Definition: ExternalSequence.h:79
long rampUpTime
Ramp up time of trapezoid (us)
Definition: ExternalSequence.h:77
std::map< std::string, int > m_fileIndex
File location of sections, [RF], [ADC] etc.
Definition: ExternalSequence.h:510
RF event data.
Definition: ExternalSequence.h:55
long flatTime
Flat-top time of trapezoid (us)
Definition: ExternalSequence.h:78
int events[NUM_EVENTS]
list of event indices (RF, GX, GY, GZ, ADC)
Definition: ExternalSequence.h:228
static void SetPrintFunction(PrintFunPtr fun)
Set the output print function.
Definition: ExternalSequence.h:541
bool isDelay()
Return true if block has delay.
Definition: ExternalSequence.h:257
float * GetRFAmplitudePtr()
Directly get a pointer to the samples of the RF amplitude shape.
Definition: ExternalSequence.h:286
bool decompressShape(CompressedShape &encoded, float *shape)
Decompress a run-length compressed shape.
Definition: ExternalSequence.cpp:490
int delay
Delay before first sample (us)
Definition: ExternalSequence.h:96
std::vector< EventIDs > m_blocks
List of sequence blocks.
Definition: ExternalSequence.h:513
std::map< std::string, std::vector< double > > m_definitions
Custom definitions provided through [DEFINITIONS] section)
Definition: ExternalSequence.h:516
RFEvent & GetRFEvent()
Return the RF event.
Definition: ExternalSequence.h:265
bool load(std::string path)
Load the sequence from file.
Definition: ExternalSequence.cpp:39
Event
Internal storage order.
Definition: ExternalSequence.h:38
std::map< int, ADCEvent > m_adcLibrary
Library of ADC readouts.
Definition: ExternalSequence.h:521
ADCEvent adc
ADC event.
Definition: ExternalSequence.h:235
std::vector< double > GetDefinition(std::string key)
Lookup the custom definition.
Definition: ExternalSequence.h:533
void free()
Free the memory associated with decompressed shapes of this block.
Definition: ExternalSequence.h:290
List of event IDs.
Definition: ExternalSequence.h:106
Data representing the entire MR sequence.
Definition: ExternalSequence.h:330
bool isTrapGradient(int channel)
Return true if block has trapezoid event on given channel.
Definition: ExternalSequence.h:254
~ExternalSequence()
Destructor.
Definition: ExternalSequence.cpp:25
int GetGradientLength(int channel)
Return the number of samples of the given gradient channel. Only relevant for arbitrary gradients...
Definition: ExternalSequence.h:284
int numUncompressedSamples
Number of samples after decompression.
Definition: ExternalSequence.h:307
GradEvent & GetGradEvent(int channel)
Return the gradient event of the given channel.
Definition: ExternalSequence.h:264
int numSamples
Number of samples.
Definition: ExternalSequence.h:94
bool isADC()
Return true if block has ADC readout event.
Definition: ExternalSequence.h:256
static PrintFunPtr print_fun
Pointer to output print function.
Definition: ExternalSequence.h:506
ExternalSequence()
Constructor.
Definition: ExternalSequence.cpp:18
float phaseOffset
Phase offset of transmitter (rad)
Definition: ExternalSequence.h:61
long GetDelay()
Return delay of block.
Definition: ExternalSequence.h:259
ADC readout event.
Definition: ExternalSequence.h:92
int dwellTime
Dwell time of ADC readout (ns)
Definition: ExternalSequence.h:95
ADCEvent & GetADCEvent()
Return the ADC event.
Definition: ExternalSequence.h:266
std::map< int, CompressedShape > m_shapeLibrary
Library of compressed shapes.
Definition: ExternalSequence.h:525
int GetEventIndex(Event type)
Return ID of the corresponding given event type.
Definition: ExternalSequence.h:262
void(* PrintFunPtr)(const std::string &str)
A pointer-type to the low-level print function.
Definition: ExternalSequence.h:373
float * GetRFPhasePtr()
Directly get a pointer to the samples of the RF phase shape.
Definition: ExternalSequence.h:287
float amplitude
Amplitude of RF event (Hz)
Definition: ExternalSequence.h:57
std::vector< float > rfPhase
RF phase shape (uncompressed)
Definition: ExternalSequence.h:241
static void defaultPrint(const std::string &str)
Print string to standard output (with newline character)
Definition: ExternalSequence.h:540
float freqOffset
Frequency offset of receiver (Hz)
Definition: ExternalSequence.h:97
Gradient event data.
Definition: ExternalSequence.h:73
int magShape
ID of shape for magnitude.
Definition: ExternalSequence.h:58
std::string GetTypeString()
Return a brief string description of the block.
Definition: ExternalSequence.h:269
int GetNumberOfBlocks(void)
Return number of sequence blocks.
Definition: ExternalSequence.h:532
float amplitude
Amplitude of gradient (Hz/m)
Definition: ExternalSequence.h:75
std::vector< std::vector< float > > gradWaveforms
Arbitrary gradient shapes for each channel (uncompressed)
Definition: ExternalSequence.h:244
void checkGradient(SeqBlock &block)
Check the shapes defining the arbitrary gradient events (if present)
Definition: ExternalSequence.cpp:543