00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef SEQPLATFORM_H
00019 #define SEQPLATFORM_H
00020
00021 #include <tjutils/tjhandler.h>
00022
00023 #include <odinseq/seqtree.h>
00024 #include <odinseq/seqplot.h>
00025 #include <odinseq/seqcmdline.h>
00026
00027
00028 #define REFGAIN_FILE "odin_refgain"
00029 #define MAINNUC_FILE "odin_mainnuc"
00030
00031
00032
00033
00034 class SeqAcqDriver;
00035 class SeqEpiDriver;
00036 class SeqDecouplingDriver;
00037 class SeqDelayDriver;
00038 class SeqDelayVecDriver;
00039 class SeqFreqChanDriver;
00040 class SeqGradChanDriver;
00041 class SeqGradChanParallelDriver;
00042 class SeqGradTrapezDriver;
00043 class SeqListDriver;
00044 class SeqCounterDriver;
00045 class SeqParallelDriver;
00046 class SeqPhaseDriver;
00047 class SeqPulsDriver;
00048 class SeqTriggerDriver;
00049
00050
00051 class eventContext;
00052
00053 class ProgressMeter;
00054
00056
00063 enum recoMode {odinReco=0, rawData};
00064
00066
00072 class PlatformRegistration {};
00073
00074
00076
00082 class SeqPlatform : public virtual SeqClass {
00083
00084 public:
00085 enum eventLogging {noLogging=0,loggEvent};
00086
00090 virtual void init() = 0;
00091
00095 virtual void reset_before_prep() = 0;
00096
00101 virtual void prepare_measurement(unsigned int nacqs_total) = 0;
00102
00103
00104
00105 virtual SeqAcqDriver* create_driver(SeqAcqDriver*) const = 0;
00106 virtual SeqEpiDriver* create_driver(SeqEpiDriver*) const = 0;
00107 virtual SeqDecouplingDriver* create_driver(SeqDecouplingDriver*) const = 0;
00108 virtual SeqDelayDriver* create_driver(SeqDelayDriver*) const = 0;
00109 virtual SeqDelayVecDriver* create_driver(SeqDelayVecDriver*) const = 0;
00110 virtual SeqFreqChanDriver* create_driver(SeqFreqChanDriver*) const = 0;
00111 virtual SeqGradChanDriver* create_driver(SeqGradChanDriver*) const = 0;
00112 virtual SeqGradChanParallelDriver* create_driver(SeqGradChanParallelDriver*) const = 0;
00113 virtual SeqGradTrapezDriver* create_driver(SeqGradTrapezDriver*) const = 0;
00114 virtual SeqListDriver* create_driver(SeqListDriver*) const = 0;
00115 virtual SeqCounterDriver* create_driver(SeqCounterDriver*) const = 0;
00116 virtual SeqParallelDriver* create_driver(SeqParallelDriver*) const = 0;
00117 virtual SeqPhaseDriver* create_driver(SeqPhaseDriver*) const = 0;
00118 virtual SeqPulsDriver* create_driver(SeqPulsDriver*) const = 0;
00119 virtual SeqTriggerDriver* create_driver(SeqTriggerDriver*) const = 0;
00120
00121 virtual int process(int argc, char *argv[]) = 0;
00122 virtual SeqCmdlineActionList get_actions_usage() const = 0;
00123
00124 virtual void pre_event (eventContext& context) const = 0;
00125 virtual void post_event(eventContext& context) const = 0;
00126
00127 virtual fvector get_acq_channel_scale_factors() const = 0;
00128
00129 virtual STD_string get_program(programContext& context) const = 0;
00130
00131 virtual STD_string get_rawfile() const = 0;
00132 virtual STD_string get_rawdatatype() const = 0;
00133 virtual unsigned int get_rawheader_size() const = 0;
00134 virtual STD_string get_image_proc() const = 0;
00135 virtual bool create_recoInfo() const = 0;
00136
00137 virtual int write_rf_waveform (const STD_string& filename, const cvector& waveform) const = 0;
00138 virtual int load_rf_waveform (const STD_string& filename, cvector& result) const = 0;
00139
00140 virtual int get_max_methodname_length() const = 0;
00141
00142 virtual void set_eventlogging(eventLogging loggflag) = 0;
00143
00144
00145 virtual bool pv_pilot(ProgressMeter* progmeter) {return true;}
00146 virtual STD_string pv_pilot_scan() const {return "";}
00147 virtual bool pv_gop(bool autorg, ProgressMeter* progmeter) {return true;}
00148 virtual bool pv_stop() {return true;}
00149
00150
00151 virtual void set_idea_pars(void* pMrProt,void* pSeqLim,void* pSeqExpo, recoMode reco_mode) {}
00152
00153
00154 virtual SeqPlotDataAbstract* get_plot_data() {return 0;}
00155 virtual bool create_plot_events(ProgressMeter* progmeter) {return true;}
00156
00157 virtual ~SeqPlatform() {}
00158
00159 protected:
00160 SeqPlatform() {}
00161 };
00162
00163
00165
00166
00171 class SeqPlatformInstances : public SeqClass {
00172
00173 public:
00174 SeqPlatformInstances();
00175 ~SeqPlatformInstances();
00176
00177 bool set_current(odinPlatform pf);
00178 SeqPlatform* get_current() {return instance[get_current_platform_id()];}
00179 odinPlatform get_current_platform_id() {return SystemInterface::get_current_pf();}
00180
00181 private:
00182 friend class SeqPlatformProxy;
00183
00184 SeqPlatform* instance[numof_platforms];
00185 static odinPlatform pf_during_platform_construction;
00186 };
00187
00188
00190
00191
00196 class SeqPlatformProxy : public virtual SeqClass, public StaticHandler<SeqPlatformProxy> {
00197 public:
00198
00199 SeqPlatformProxy() {set_label("SeqPlatformProxy");}
00200
00201 static void set_current_platform(odinPlatform pF);
00202 static odinPlatform get_current_platform();
00203
00204 static int load_systemInfo(const STD_string& filename);
00205
00206 static STD_string get_platform_str(odinPlatform pF);
00207 static svector get_possible_platforms();
00208
00209 static STD_string get_platforms_usage();
00210
00211 static int get_platform_for_action(const STD_string& action);
00212
00213
00214 SeqPlatform& operator * () {return *get_platform_ptr();}
00215 SeqPlatform* operator -> () {return get_platform_ptr();}
00216
00217
00218 static void init_static();
00219 static void destroy_static();
00220
00221 private:
00222 friend class SeqPlatform;
00223
00224
00225 static void create_platform_instances();
00226
00227 static SeqPlatform* get_platform_ptr();
00228
00229
00230 static SingletonHandler<SeqPlatformInstances,false> platforms;
00231 };
00232
00233
00234
00235
00236 #endif