20 #include <odinpara/jdxblock.h>
27 enum funcType {shapeFunc=0, trajFunc, filterFunc};
39 enum funcMode {zeroDeeMode=0,oneDeeMode,twoDeeMode,n_dimModes};
107 shape_info() : ref_x_pos(0), ref_y_pos(0), ref_z_pos(0), adiabatic(
false), fixed_size(-1), spatial_extent(0.0) {}
114 float spatial_extent;
121 traj_info() : rel_center(0), max_kspace_step(0) {}
124 float max_kspace_step;
133 JDXfunctionPlugIn(
const STD_string& funclabel) :
JcampDxBlock(funclabel) {}
135 JDXfunctionPlugIn(
const JDXfunctionPlugIn& jfp) :
JcampDxBlock(jfp) {}
137 virtual ~JDXfunctionPlugIn() {}
141 JDXfunctionPlugIn& register_function(funcType type,
funcMode mode);
144 virtual void init_shape() {}
145 virtual STD_complex calculate_shape(
const kspace_coord& coord )
const {
return STD_complex(0.0);}
146 virtual STD_complex calculate_shape(
float s,
float Tp)
const {
return STD_complex(0.0);}
147 virtual const shape_info& get_shape_properties()
const {
return shape_info_retval;}
151 virtual void init_trajectory(
OdinPulse* pls) {}
152 virtual const kspace_coord& calculate_traj(
float s)
const {
return coord_retval;}
153 virtual const traj_info& get_traj_properties()
const {
return traj_info_retval;}
156 virtual float calculate_filter(
float rel_kradius)
const {
return 0;}
161 virtual JDXfunctionPlugIn* clone()
const = 0;
166 static shape_info shape_info_retval;
167 static traj_info traj_info_retval;
176 struct JDXfunctionEntry {
178 JDXfunctionEntry(JDXfunctionPlugIn* func_plugin, funcType func_type,
funcMode func_mode)
179 : plugin(func_plugin), type(func_type), mode(func_mode) {}
181 JDXfunctionPlugIn* plugin;
186 bool operator == (
const JDXfunctionEntry& jfe)
const;
187 bool operator < (
const JDXfunctionEntry& jfe)
const;
198 ~JDXfunction() {new_plugin(0);}
200 JDXfunction& set_function_mode(
funcMode newmode);
201 funcMode get_function_mode()
const {
return mode;}
203 const STD_string& get_function_label(
unsigned int index)
const;
204 JDXfunction& set_function(
const STD_string& funclabel);
205 JDXfunction& set_function(
unsigned int index);
206 unsigned int get_function_index()
const;
210 JDXfunction& set_funcpars(
const svector& funcpars);
211 JDXfunction& set_funcpars(
const STD_string& funcpars) {STD_string tt(funcpars);
parsevalstring(tt);
return *
this;}
214 bool set_parameter(
const STD_string& parameter_label,
const STD_string& value);
215 STD_string get_parameter(
const STD_string& parameter_label)
const;
217 STD_string get_function_name()
const;
219 const STD_string& get_funcdescription()
const;
223 JDXfunction* cast(JDXfunction*) {
return this;}
232 static void init_static();
233 static void destroy_static();
239 JDXfunction(funcType function_type,
const STD_string& jdxlabel);
240 JDXfunction(
const JDXfunction& jf);
241 JDXfunction& operator = (
const JDXfunction& jf);
244 JDXfunctionPlugIn* allocated_function;
247 friend class JDXfunctionPlugIn;
252 void new_plugin(JDXfunctionPlugIn* pi);
257 static STD_list<JDXfunctionEntry>* registered_functions;