00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef SEQGRADECHO_H
00019 #define SEQGRADECHO_H
00020
00021 #include <odinseq/seqgradpulse.h>
00022 #include <odinseq/seqgradphase.h>
00023 #include <odinseq/seqacqread.h>
00024 #include <odinseq/seqacqdeph.h>
00025 #include <odinseq/seqpulsar.h>
00026 #include <odinseq/seqsimvec.h>
00027
00028
00045 class SeqGradEcho : public SeqObjList, public virtual SeqGradInterface, public virtual SeqAcqInterface {
00046
00047
00048
00049 public:
00050
00071 SeqGradEcho(const STD_string& object_label, SeqPulsar& exc,
00072 double sweepwidth, unsigned int readnpts, float FOVread,
00073 unsigned int phasenpts, float FOVphase, encodingScheme scheme=linearEncoding,
00074 reorderScheme reorder=noReorder, unsigned int nsegments=1, unsigned int reduction=1, unsigned int acl_bands=DEFAULT_ACL_BANDS,
00075 bool balanced=false, float partial_fourier_phase=0.0, float partial_fourier_read=0.0, bool partial_fourier_read_at_end=false,
00076 float os_factor=1.0, const STD_string& nucleus="");
00077
00078
00098 SeqGradEcho(const STD_string& object_label,
00099 unsigned int readnpts, float FOVread, unsigned int phasenpts, float FOVphase, unsigned int slicenpts, float FOVslice,
00100 SeqPulsar& exc, double sweepwidth,
00101 unsigned int reduction=1, unsigned int acl_bands=DEFAULT_ACL_BANDS,
00102 bool balanced=false, float partial_fourier_phase=0.0, float partial_fourier_read=0.0, bool partial_fourier_read_at_end=false,
00103 float os_factor=1.0, const STD_string& nucleus="");
00104
00105
00109 SeqGradEcho(const STD_string& object_label="unnamedSeqGradEcho");
00110
00114 SeqGradEcho(const SeqGradEcho& sge);
00115
00119 SeqGradEcho& operator = (const SeqGradEcho& sge);
00120
00124 SeqVector& get_pe_vector();
00125
00129 SeqGradEcho& set_pe_reorder_scheme(reorderScheme scheme,unsigned int nsegments);
00130
00134 const SeqVector& get_pe_reorder_vector() const;
00135
00139 SeqVector& get_pe3d_vector();
00140
00144 const SeqVector& get_exc_vector() const {return *pulsptr.get_handled();}
00145
00149 SeqGradEcho& set_freq_reorder_scheme(reorderScheme scheme,unsigned int nsegments=1) {(*pulsptr.get_handled()).set_reorder_scheme(scheme,nsegments); return *this;}
00150
00151
00152
00156 const SeqVector& get_freq_reorder_vector() const {return (*pulsptr.get_handled()).get_reorder_vector();}
00157
00158
00162 double get_echo_time() const;
00163
00164
00168 SeqGradEcho& set_midpart(const SeqObjBase& soa);
00169
00170
00171
00172 SeqGradInterface& set_strength(float gradstrength) {return *this;}
00173 float get_strength() const {return 0.0;}
00174 SeqGradInterface& invert_strength();
00175 double get_gradduration() const {return get_duration();}
00176 SeqGradInterface& set_gradrotmatrix(const RotMatrix& matrix);
00177 fvector get_gradintegral() const;
00178
00179
00180
00181 double get_acquisition_center() const {return get_preacq()+acqread.get_acquisition_center();}
00182 double get_acquisition_start() const {return get_preacq()+acqread.get_acquisition_start();}
00183 SeqAcqInterface& set_template_type(templateType type);
00184
00185
00186
00187
00188 private:
00189 double get_preacq() const;
00190
00191 void common_init(const STD_string& objlabel);
00192
00193 void build_seq();
00194
00195
00196 SeqAcqInterface& set_pe_vector(const SeqVector& pevec) {return *this;}
00197
00198
00199 Handler<SeqPulsNdim*> pulsptr;
00200 SeqPulsarReph pls_reph;
00201 SeqGradVector phase;
00202 SeqGradVector phase3d;
00203 SeqGradVector phase_rew;
00204 SeqGradVector phase3d_rew;
00205 SeqSimultanVector phasesim;
00206 SeqSimultanVector phasesim3d;
00207 SeqSimultanVector phasereordsim;
00208 SeqAcqRead acqread;
00209 SeqGradConst readdeph;
00210 SeqParallel postexcpart;
00211 SeqParallel postacqpart;
00212 SeqObjList midpart;
00213
00214 geometryMode mode;
00215 bool balanced_grads;
00216 };
00217
00223 #endif