00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef SEQDIFFWEIGHT_H
00019 #define SEQDIFFWEIGHT_H
00020
00021 #include <odinseq/seqparallel.h>
00022 #include <odinseq/seqlist.h>
00023 #include <odinseq/seqgrad.h>
00024 #include <odinseq/seqgradpulse.h>
00025 #include <odinseq/seqgradconst.h>
00026 #include <odinseq/seqsimvec.h>
00027
00053 class SeqDiffWeight : public SeqObjList, public SeqSimultanVector, public virtual SeqGradInterface {
00054
00055 public:
00056
00068 SeqDiffWeight(const STD_string& object_label, const fvector& bvals, float maxgradstrength,
00069 const SeqObjBase& midpart, direction chan, bool stejskalTanner=false, const STD_string& nucleus = "" );
00070
00071
00084 SeqDiffWeight(const STD_string& object_label, unsigned int ndir, const fvector& bvals, float maxgradstrength,
00085 const SeqObjBase& midpart, unsigned int baseline_rep=0, bool stejskalTanner=false, const STD_string& nucleus = "" );
00086
00087
00091 SeqDiffWeight(const STD_string& object_label = "unnamedSeqDiffWeight" );
00092
00096 SeqDiffWeight(const SeqDiffWeight& sgdw) {SeqDiffWeight::operator = (sgdw);}
00097
00101 SeqDiffWeight& operator = (const SeqDiffWeight& sgdw);
00102
00106 const SeqGradInterface& get_grad1() const {return par1;}
00107
00111 const SeqGradInterface& get_grad2() const {return par2;}
00112
00116 double get_grad1_duration() const {return par1.get_duration();}
00117
00121 double get_grad2_duration() const {return par2.get_duration();}
00122
00126 double get_midpart_duration() const {return middle_part.get_duration();}
00127
00131 const darray& get_b_vectors() const {return b_vectors_cache;}
00132
00133
00134
00135
00136 SeqGradInterface& set_strength(float gradstrength);
00137 SeqGradInterface& invert_strength();
00138 float get_strength() const;
00139 fvector get_gradintegral() const;
00140 double get_gradduration() const;
00141 SeqGradInterface& set_gradrotmatrix(const RotMatrix& matrix);
00142
00143
00144
00145 void clear_container() {SeqObjList::clear(); SeqSimultanVector::clear();}
00146
00147
00148
00149 bool is_qualvector() const {return false;}
00150
00151 private:
00152
00153 void build_seq();
00154
00155
00156 SeqGradVectorPulse pfg1[n_directions];
00157 SeqGradVectorPulse pfg2[n_directions];
00158
00159
00160 SeqParallel par1;
00161 SeqParallel par2;
00162
00163 SeqObjList middle_part;
00164
00165 darray b_vectors_cache;
00166
00167 };
00168
00169
00171
00179 class SeqDiffWeightFlowComp : public SeqGradChanList, public SeqSimultanVector {
00180
00181 public:
00182
00193 SeqDiffWeightFlowComp(const STD_string& object_label, const fvector& bvals, float maxgradstrength,
00194 direction chan, double stimdelay=1.0, const STD_string& nucleus = "" );
00195
00199 SeqDiffWeightFlowComp(const STD_string& object_label = "unnamedSeqDiffWeightFlowComp" );
00200
00204 SeqDiffWeightFlowComp(const SeqDiffWeightFlowComp& sgdwfc) {SeqDiffWeightFlowComp::operator = (sgdwfc);}
00205
00209 SeqDiffWeightFlowComp& operator = (const SeqDiffWeightFlowComp& sgdwfc);
00210
00211
00212
00213 void clear_container() {SeqGradChanList::clear(); SeqSimultanVector::clear();}
00214
00215
00216
00217 bool is_qualvector() const {return false;}
00218
00219 private:
00220
00221 void build_seq();
00222
00223 SeqGradVectorPulse pfg1;
00224 SeqGradVectorPulse pfg2;
00225 SeqGradVectorPulse pfg3;
00226 SeqGradDelay delay;
00227 };
00228
00229
00230
00231
00236 #endif