msl 1.3.0
Loading...
Searching...
No Matches
Selective.h
Go to the documentation of this file.
1// Copyright 2025 Julien Lamy, ICube, Université de Strasbourg-CNRS.
2// Part of msl, distributed under the terms of the MIT license.
3
4#ifndef _c9329e06_87c5_414b_9794_1aa4bf381bf6
5#define _c9329e06_87c5_414b_9794_1aa4bf381bf6
6
7#include <MrProtSrv/Domain/CoreNative/SeqLim.h>
8#include <MrProtSrv/Domain/MrProtData/MrProt/MrProt.h>
9#include <MrProtSrv/Domain/MrProtData/MrProt/SeqIF/SeqExpo.h>
10
11#include "msl/GradientPulse.h"
12#include "msl/RFPulse.h"
13
14namespace msl
15{
16
17namespace rf_pulses
18{
19
21template<typename TPulse>
22class Selective: public RFPulse
23{
24public:
25 Selective() = default;
26 Selective(Selective<TPulse> const &) = default;
27 Selective(Selective<TPulse> &&) = default;
28 Selective<TPulse> & operator=(Selective<TPulse> const &) = default;
29 Selective<TPulse> & operator=(Selective<TPulse> &&) = default;
30 ~Selective() override = default;
31
33 Type type() const override;
34
36 Selective<TPulse> & setType(Type type) override;
37
39 double flipAngle() const override;
40
42 Selective<TPulse> & setFlipAngle(double flipAngle) override;
43
45 double initialPhase() const override;
46
48 Selective<TPulse> & setInitialPhase(double initialPhase) override;
49
51 double additionalPhase() const override;
52
54 Selective<TPulse> & setAdditionalPhase(double additionalPhase) override;
55
57 long startTime() const override;
58
60 Selective<TPulse> & setStartTime(long startTime) override;
61
63 long duration() const override;
64
66 Selective<TPulse> & setDuration(long duration) override;
67
69 Selective<TPulse> & setRFDuration(long duration);
70
72 long samples() const override;
73
75 Selective<TPulse> & setSamples(long samples) override;
76
78 std::string ident() const override;
79
81 Selective<TPulse> & setIdent(std::string const & ident) override;
82
84 double gamma() const override;
85
87 long peakTime() const override;
88
90 MrProtocolData::SeqExpoRFInfo rfInfo() const override;
91
93 double thickness() const;
94
99 Selective<TPulse> & setThickness(double thickness);
100
102 TPulse const & rf() const;
103
105 TPulse & rf();
106
108 GradientPulse const & gradient() const;
109
111 Selective<TPulse> & setSlice(sSLICE_POS const & slice) override;
112
113 NLSStatus prepare(
114 MrProt & protocol, SeqLim & limits, SeqExpo & exports) override;
115
116 NLSStatus run(
117 MrProt & protocol, SeqLim & limits, SeqExpo & exports) override;
118
119private:
120 long _startTime;
121 TPulse _rf;
122 GradientPulse _gradient;
123};
124
125}
126
127}
128
129#include "Selective.txx"
130
131#endif // _c9329e06_87c5_414b_9794_1aa4bf381bf6
Trapezoidal or arbitrary gradient pulse on three axes.
Definition GradientPulse.h:21
Type
Type of pulse, i.e. its role in the sequence.
Definition RFPulse.h:18
sSLICE_POS const & slice() const
Return the slice used in prepare and run.
MrProtocolData::SeqExpoRFInfo rfInfo() const override
Return the RF information for SAR computation.
GradientPulse const & gradient() const
Return a reference to the child gradient pulse.
Selective< TPulse > & setAdditionalPhase(double additionalPhase) override
Set the additional phase of the RF pulse (deg).
Selective< TPulse > & setType(Type type) override
Set the type of the RF pulse.
NLSStatus run(MrProt &protocol, SeqLim &limits, SeqExpo &exports) override
Run the real-time events.
double initialPhase() const override
Return the initial phase of the RF pulse (deg).
NLSStatus prepare(MrProt &protocol, SeqLim &limits, SeqExpo &exports) override
Prepare the real-time events.
long startTime() const override
Return the start time of the gradient+RF pulse block (µs).
TPulse const & rf() const
Return a reference to the child RF pulse.
Type type() const override
Return the type of the RF pulse.
double thickness() const
Return the thickness.
double additionalPhase() const override
Return the additional phase of the RF pulse (deg).
long duration() const override
Return the duration of the gradient+RF pulse (µs).
Selective< TPulse > & setInitialPhase(double initialPhase) override
Set the initial phase of the RF pulse (deg).
std::string ident() const override
Return the user-defined name of the RF pulse.
Selective< TPulse > & setSlice(sSLICE_POS const &slice) override
Set the slice used in prepare and run.
Selective< TPulse > & setDuration(long duration) override
Set the duration of the gradient+RF pulse (µs).
Selective< TPulse > & setFlipAngle(double flipAngle) override
Set the flip angle (deg).
Selective< TPulse > & setIdent(std::string const &ident) override
Set the user-defined name of the RF pulse.
long samples() const override
Return the number of discrete samples of the RF pulse.
long peakTime() const override
Return the time of the RF peak amplitude (µs).
Selective< TPulse > & setRFDuration(long duration)
Set the duration of the RF pulse (µs).
double flipAngle() const override
Return the flip angle (deg).
double gamma() const override
Return the gyromagnetic ratio of the current nucleus (MHz/T).
Selective< TPulse > & setThickness(double thickness)
Set the thickness.
TPulse & rf()
Return a reference to the child RF pulse.
Selective< TPulse > & setSamples(long samples) override
Set the number of discrete samples of the RF pulse.
Selective< TPulse > & setStartTime(long startTime) override
Set the start time of the gradient+RF pulse block (µs).
Pre-defined RF pulses and pulse modifiers.
Definition External.h:21
Top-level namespace of the msl library.
Definition acceleration.h:17