/ concept-collection / seqlab
concept-collection / seqlab
seqlab / src / seq / types.ts
132 lines · 2.8 KBBlameHistoryRaw
1// Parsed representation of a pulseq .seq file (format v1.4.x / v1.5.x).
3export interface SeqVersion {
4 major: number
5 minor: number
6 revision: string
7 combined: number // 1000000*major + 1000*minor + numeric revision
8}
10/** One [DEFINITIONS] entry: numeric values when every token parses, else raw string. */
11export type DefinitionValue = number[] | string
13export interface RfEvent {
14 id: number
15 /** Peak amplitude, Hz */
16 amp: number
17 magShapeId: number
18 phaseShapeId: number
19 timeShapeId: number
20 /** Center of the pulse relative to its start, s (NaN in v1.4 files) */
21 center: number
22 /** Delay from block start, s */
23 delay: number
24 freqPPM: number
25 phasePPM: number
26 /** Frequency offset, Hz */
27 freq: number
28 /** Phase offset, rad */
29 phase: number
30 /** Initial of excitation/refocusing/inversion/saturation/preparation/other/undefined */
31 use: string
34export interface TrapGradEvent {
35 id: number
36 kind: 'trap'
37 /** Hz/m */
38 amp: number
39 rise: number
40 flat: number
41 fall: number
42 delay: number
45export interface ArbGradEvent {
46 id: number
47 kind: 'grad'
48 /** Hz/m */
49 amp: number
50 /** Waveform value at the start/end edge, Hz/m (NaN in v1.4 files) */
51 first: number
52 last: number
53 shapeId: number
54 timeShapeId: number
55 delay: number
58export type GradEvent = TrapGradEvent | ArbGradEvent
60export interface AdcEvent {
61 id: number
62 num: number
63 /** s */
64 dwell: number
65 /** s */
66 delay: number
67 freqPPM: number
68 phasePPM: number
69 /** Hz */
70 freq: number
71 /** rad */
72 phase: number
73 phaseShapeId: number
76export interface Shape {
77 id: number
78 numSamples: number
79 /** Decompressed samples (numSamples long) */
80 samples: Float64Array
81 /** Sample count as stored in the file (=== numSamples when uncompressed) */
82 storedSamples: number
85/** One row of the [EXTENSIONS] linked lists: id -> (type, ref) + next row. */
86export interface ExtensionRef {
87 id: number
88 type: number
89 ref: number
90 next: number
93/** One `extension NAME typeId` specification section, rows kept as tokens. */
94export interface ExtensionSpec {
95 name: string
96 typeId: number
97 rows: string[][]
100export interface SeqBlock {
101 id: number
102 /** s */
103 duration: number
104 rfId: number
105 gxId: number
106 gyId: number
107 gzId: number
108 adcId: number
109 extId: number
112export interface ParsedSeq {
113 version: SeqVersion
114 /** Insertion-ordered [DEFINITIONS] */
115 definitions: Map<string, DefinitionValue>
116 rasters: {
117 blockDuration: number
118 gradient: number
119 rf: number
120 adc: number
121 }
122 blocks: SeqBlock[]
123 rf: Map<number, RfEvent>
124 grads: Map<number, GradEvent>
125 adcs: Map<number, AdcEvent>
126 shapes: Map<number, Shape>
127 extensions: Map<number, ExtensionRef>
128 extensionSpecs: ExtensionSpec[]
129 signature?: { type: string; hash: string; valid?: boolean }
130 /** s, sum of block durations */
131 totalDuration: number