ODIN
seqgradecho.h
1 /***************************************************************************
2  seqgradecho.h - description
3  -------------------
4  begin : Mon Feb 17 2003
5  copyright : (C) 2000-2021 by Thies H. Jochimsen
6  email : thies@jochimsen.de
7  ***************************************************************************/
8 
9 /***************************************************************************
10  * *
11  * This program is free software; you can redistribute it and/or modify *
12  * it under the terms of the GNU General Public License as published by *
13  * the Free Software Foundation; either version 2 of the License, or *
14  * (at your option) any later version. *
15  * *
16  ***************************************************************************/
17 
18 #ifndef SEQGRADECHO_H
19 #define SEQGRADECHO_H
20 
21 #include <odinseq/seqgradpulse.h>
22 #include <odinseq/seqgradphase.h>
23 #include <odinseq/seqacqread.h>
24 #include <odinseq/seqacqdeph.h>
25 #include <odinseq/seqpulsar.h>
26 #include <odinseq/seqsimvec.h>
27 
28 
45 class SeqGradEcho : public SeqObjList, public virtual SeqGradInterface, public virtual SeqAcqInterface {
46 
47  // virtual functions of SeqFreqChanInterface are marhshalled to acqread
48 
49  public:
50 
71  SeqGradEcho(const STD_string& object_label, SeqPulsar& exc,
72  double sweepwidth, unsigned int readnpts, float FOVread,
73  unsigned int phasenpts, float FOVphase, encodingScheme scheme=linearEncoding,
74  reorderScheme reorder=noReorder, unsigned int nsegments=1, unsigned int reduction=1, unsigned int acl_bands=DEFAULT_ACL_BANDS,
75  bool balanced=false, float partial_fourier_phase=0.0, float partial_fourier_read=0.0, bool partial_fourier_read_at_end=false,
76  float os_factor=1.0, const STD_string& nucleus="");
77 
78 
99  SeqGradEcho(const STD_string& object_label,
100  unsigned int readnpts, float FOVread, unsigned int phasenpts, float FOVphase, unsigned int slicenpts, float FOVslice,
101  SeqPulsar& exc, double sweepwidth,
102  unsigned int reduction=1, unsigned int acl_bands=DEFAULT_ACL_BANDS,
103  bool balanced=false, float partial_fourier_phase=0.0, float partial_fourier_phase3d=0.0,
104  float partial_fourier_read=0.0, bool partial_fourier_read_at_end=false,
105  float os_factor=1.0, const STD_string& nucleus="");
106 
107 
111  SeqGradEcho(const STD_string& object_label="unnamedSeqGradEcho");
112 
117 
122 
127 
131  SeqGradEcho& set_pe_reorder_scheme(reorderScheme scheme,unsigned int nsegments);
132 
137 
142 
146  const SeqVector& get_exc_vector() const {return *pulsptr.get_handled();}
147 
151  SeqGradEcho& set_freq_reorder_scheme(reorderScheme scheme,unsigned int nsegments=1) {(*pulsptr.get_handled()).set_reorder_scheme(scheme,nsegments); return *this;}
152 
153 
154 
158  const SeqVector& get_freq_reorder_vector() const {return (*pulsptr.get_handled()).get_reorder_vector();}
159 
160 
164  double get_echo_time() const;
165 
166 
171 
172 
173  // implementing virtual functions of SeqGradInterface
174  SeqGradInterface& set_strength(float gradstrength) {return *this;} // nothing useful
175  float get_strength() const {return 0.0;} // nothing useful
177  double get_gradduration() const {return get_duration();}
180 
181 
182  // marshalling virtual functions of SeqAcqInterface to acqread, except:
183  double get_acquisition_center() const {return get_preacq()+acqread.get_acquisition_center();}
184  double get_acquisition_start() const {return get_preacq()+acqread.get_acquisition_start();}
186 
187 
188 
189 
190  private:
191  double get_preacq() const;
192 
193  void common_init(const STD_string& objlabel);
194 
195  void build_seq();
196 
197  // hide these functions from the user
198  SeqAcqInterface& set_pe_vector(const SeqVector& pevec) {return *this;}
199 
200 
201  Handler<SeqPulsNdim*> pulsptr;
202  SeqPulsarReph pls_reph;
203  SeqGradVector phase;
204  SeqGradVector phase3d;
205  SeqGradVector phase_rew;
206  SeqGradVector phase3d_rew;
207  SeqSimultanVector phasesim;
208  SeqSimultanVector phasesim3d;
209  SeqSimultanVector phasereordsim;
210  SeqAcqRead acqread;
211  SeqGradConst readdeph;
212  SeqParallel postexcpart;
213  SeqParallel postacqpart;
214  SeqObjList midpart;
215 
216  geometryMode mode;
217  bool balanced_grads;
218 };
219 
225 #endif
Rotation Matrix.
Definition: geometry.h:67
Acquisition + readout gradient.
Definition: seqacqread.h:37
double get_acquisition_start() const
double get_acquisition_center() const
virtual SeqFreqChanInterface & set_reorder_scheme(reorderScheme scheme, unsigned int nsegments=1)
Definition: seqfreq.h:79
Constant gradient.
Definition: seqgradconst.h:33
Gradient echo module.
Definition: seqgradecho.h:45
SeqGradEcho & set_midpart(const SeqObjBase &soa)
SeqGradInterface & invert_strength()
const SeqVector & get_freq_reorder_vector() const
Definition: seqgradecho.h:158
double get_acquisition_center() const
Definition: seqgradecho.h:183
SeqGradEcho & set_freq_reorder_scheme(reorderScheme scheme, unsigned int nsegments=1)
Definition: seqgradecho.h:151
SeqGradInterface & set_gradrotmatrix(const RotMatrix &matrix)
double get_acquisition_start() const
Definition: seqgradecho.h:184
SeqGradEcho(const STD_string &object_label="unnamedSeqGradEcho")
float get_strength() const
Definition: seqgradecho.h:175
SeqGradEcho & set_pe_reorder_scheme(reorderScheme scheme, unsigned int nsegments)
SeqAcqInterface & set_template_type(templateType type)
SeqGradEcho(const SeqGradEcho &sge)
SeqGradEcho(const STD_string &object_label, SeqPulsar &exc, double sweepwidth, unsigned int readnpts, float FOVread, unsigned int phasenpts, float FOVphase, encodingScheme scheme=linearEncoding, reorderScheme reorder=noReorder, unsigned int nsegments=1, unsigned int reduction=1, unsigned int acl_bands=DEFAULT_ACL_BANDS, bool balanced=false, float partial_fourier_phase=0.0, float partial_fourier_read=0.0, bool partial_fourier_read_at_end=false, float os_factor=1.0, const STD_string &nucleus="")
const SeqVector & get_exc_vector() const
Definition: seqgradecho.h:146
SeqGradEcho & operator=(const SeqGradEcho &sge)
SeqGradInterface & set_strength(float gradstrength)
Definition: seqgradecho.h:174
double get_echo_time() const
SeqGradEcho(const STD_string &object_label, unsigned int readnpts, float FOVread, unsigned int phasenpts, float FOVphase, unsigned int slicenpts, float FOVslice, SeqPulsar &exc, double sweepwidth, unsigned int reduction=1, unsigned int acl_bands=DEFAULT_ACL_BANDS, bool balanced=false, float partial_fourier_phase=0.0, float partial_fourier_phase3d=0.0, float partial_fourier_read=0.0, bool partial_fourier_read_at_end=false, float os_factor=1.0, const STD_string &nucleus="")
SeqVector & get_pe3d_vector()
double get_gradduration() const
Definition: seqgradecho.h:177
const SeqVector & get_pe_reorder_vector() const
SeqVector & get_pe_vector()
fvector get_gradintegral() const
Vector of constant gradients.
Definition: seqgradvec.h:38
Container for sequence objects.
Definition: seqlist.h:87
double get_duration() const
Post-pulse rephaser.
Definition: seqpulsar.h:169
Pulsar pulses, combines OdinPulse and SeqPulsNdim.
Definition: seqpulsar.h:41
const SeqVector & get_reorder_vector() const
geometryMode
Definition: geometry.h:56
templateType
Definition: reco.h:91
encodingScheme
Definition: seqvec.h:37
reorderScheme
Definition: seqvec.h:48