00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef SEQGRADSPIRAL_H
00019 #define SEQGRADSPIRAL_H
00020
00021 #include <tjutils/tjnumeric.h>
00022
00023 #include <odinseq/odinpulse.h>
00024 #include <odinseq/seqgradchan.h>
00025 #include <odinseq/seqgradwave.h>
00026 #include <odinseq/seqgradconst.h>
00027 #include <odinseq/seqgradchanparallel.h>
00028
00029
00038 class SeqGradSpiral: public SeqGradChanParallel, public MinimizationFunction {
00039
00040 public:
00053 SeqGradSpiral(const STD_string& object_label, JDXtrajectory& traj, double dt, float resolution, unsigned int sizeRadial, unsigned int numofSegments, bool inwards=false, bool optimize=false, const STD_string& nucleus="");
00054
00058 SeqGradSpiral(const STD_string& object_label = "unnamedSeqGradSpiral" );
00059
00063 SeqGradSpiral(const SeqGradSpiral& sgs);
00064
00068 SeqGradSpiral& operator = (const SeqGradSpiral& sgs);
00069
00070
00074 unsigned int spiral_size() const {return denscomp.size();}
00075
00079 double get_ramp_duration() const {return (get_gradduration()-spiral_dur);}
00080
00081
00085 SeqGradSpiral& set_predelay_duration(double dur);
00086
00091 const fvector& get_denscomp() const {return denscomp;}
00092
00096 fvector get_ktraj(direction channel) const;
00097
00098
00099 private:
00100 void common_init() {traj_cache=0;}
00101 void build_seq();
00102
00103 float readout_npts() const;
00104
00105
00106 float evaluate(float spirpar) const;
00107
00108 SeqGradWave gx;
00109 SeqGradWave gy;
00110
00111 SeqGradDelay gxdelay;
00112 SeqGradDelay gydelay;
00113
00114 fvector kx;
00115 fvector ky;
00116
00117 fvector denscomp;
00118
00119 double spiral_dur;
00120 double predelay;
00121
00122
00123 JDXtrajectory* traj_cache;
00124 double dt_cache;
00125 float resolution_cache;
00126 unsigned int sizeRadial_cache;
00127 float gamma_cache;
00128
00129 };
00130
00132
00133
00134
00138 #endif