00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef OdinPlot_H
00019 #define OdinPlot_H
00020
00021 #include <qwidget.h>
00022
00023 #include <odinpara/jdxtypes.h>
00024 #include <odinpara/jdxnumbers.h>
00025
00026 #include <odinqt/plot.h>
00027 #include <odinqt/jdxwidget.h>
00028
00029 #include <odinseq/seqplot.h>
00030
00031 #include "odinplot_vtk.h"
00032
00033
00034 #define MIN_HEIGHT_PER_CHAN 120
00035 #define MIN_WIDTH_PER_CHAN 1000
00036
00037 #define CLOSEST_CURVE_MAX 30
00038 #define PLOT_SYMBOLS_MAX_RANGE 10
00039 #define MAX_HIGHRES_INTERVAL 1000.0
00040 #define MAX_MARKER_INTERVAL 400.0
00041 #define MAX_START_RANGE 10000
00042
00043 #define MAGN_PLOT_PAGE_DURATION 20.0
00044
00045
00046 class RangeWidget;
00047
00049
00050 class PlotView : public QWidget, public SeqSimFeedbackAbstract {
00051
00052 Q_OBJECT
00053
00054 public:
00055 PlotView(const char* method, const STD_string& nucleus, GuiMainWindow* parent);
00056
00057 ~PlotView();
00058
00059 const SeqTimecourseData* get_timecourses();
00060 const SeqTimecourseData* get_kspace_trajs();
00061
00062 bool simulate(const STD_string& fidfile, const STD_string& samplefile, ProgressMeter* progmeter);
00063
00064
00065
00066 public slots:
00067
00068 void replot();
00069
00070 void mouseMovedInPlot0(const QMouseEvent& e) {mouseMovedInPlot(0,e);}
00071 void mouseMovedInPlot1(const QMouseEvent& e) {mouseMovedInPlot(1,e);}
00072 void mouseMovedInPlot2(const QMouseEvent& e) {mouseMovedInPlot(2,e);}
00073 void mouseMovedInPlot3(const QMouseEvent& e) {mouseMovedInPlot(3,e);}
00074 void mouseMovedInPlot4(const QMouseEvent& e) {mouseMovedInPlot(4,e);}
00075 void mouseMovedInPlot5(const QMouseEvent& e) {mouseMovedInPlot(5,e);}
00076 void mouseMovedInPlot6(const QMouseEvent& e) {mouseMovedInPlot(6,e);}
00077 void mouseMovedInPlot7(const QMouseEvent& e) {mouseMovedInPlot(7,e);}
00078 void mouseMovedInPlot8(const QMouseEvent& e) {mouseMovedInPlot(8,e);}
00079
00080 void mousePressedInPlot0(const QMouseEvent& e) {mousePressedInPlot(0,e);}
00081 void mousePressedInPlot1(const QMouseEvent& e) {mousePressedInPlot(1,e);}
00082 void mousePressedInPlot2(const QMouseEvent& e) {mousePressedInPlot(2,e);}
00083 void mousePressedInPlot3(const QMouseEvent& e) {mousePressedInPlot(3,e);}
00084 void mousePressedInPlot4(const QMouseEvent& e) {mousePressedInPlot(4,e);}
00085 void mousePressedInPlot5(const QMouseEvent& e) {mousePressedInPlot(5,e);}
00086 void mousePressedInPlot6(const QMouseEvent& e) {mousePressedInPlot(6,e);}
00087 void mousePressedInPlot7(const QMouseEvent& e) {mousePressedInPlot(7,e);}
00088 void mousePressedInPlot8(const QMouseEvent& e) {mousePressedInPlot(8,e);}
00089
00090 void mouseReleasedInPlot0(const QMouseEvent& e) {mouseReleasedInPlot(0,e);}
00091 void mouseReleasedInPlot1(const QMouseEvent& e) {mouseReleasedInPlot(1,e);}
00092 void mouseReleasedInPlot2(const QMouseEvent& e) {mouseReleasedInPlot(2,e);}
00093 void mouseReleasedInPlot3(const QMouseEvent& e) {mouseReleasedInPlot(3,e);}
00094 void mouseReleasedInPlot4(const QMouseEvent& e) {mouseReleasedInPlot(4,e);}
00095 void mouseReleasedInPlot5(const QMouseEvent& e) {mouseReleasedInPlot(5,e);}
00096 void mouseReleasedInPlot6(const QMouseEvent& e) {mouseReleasedInPlot(6,e);}
00097 void mouseReleasedInPlot7(const QMouseEvent& e) {mouseReleasedInPlot(7,e);}
00098 void mouseReleasedInPlot8(const QMouseEvent& e) {mouseReleasedInPlot(8,e);}
00099
00100 void autoscalePlot0() {autoscale_y(0);}
00101 void autoscalePlot1() {autoscale_y(1);}
00102 void autoscalePlot2() {autoscale_y(2);}
00103 void autoscalePlot3() {autoscale_y(3);}
00104 void autoscalePlot4() {autoscale_y(4);}
00105 void autoscalePlot5() {autoscale_y(5);}
00106 void autoscalePlot6() {autoscale_y(6);}
00107 void autoscalePlot7() {autoscale_y(7);}
00108 void autoscalePlot8() {autoscale_y(8);}
00109
00110 void rescalePlot0(double val) {rescale_y(0,val);}
00111 void rescalePlot1(double val) {rescale_y(1,val);}
00112 void rescalePlot2(double val) {rescale_y(2,val);}
00113 void rescalePlot3(double val) {rescale_y(3,val);}
00114 void rescalePlot4(double val) {rescale_y(4,val);}
00115 void rescalePlot5(double val) {rescale_y(5,val);}
00116 void rescalePlot6(double val) {rescale_y(6,val);}
00117 void rescalePlot7(double val) {rescale_y(7,val);}
00118 void rescalePlot8(double val) {rescale_y(8,val);}
00119
00120
00121 void update_x_axes();
00122
00123 void autoscale_x();
00124
00125 void hide_and_show();
00126
00127 void set_rect_zoom_tool() {set_zoom_tool(rect);}
00128 void set_hort_zoom_tool() {set_zoom_tool(horizontal);}
00129 void set_vert_zoom_tool() {set_zoom_tool(vertical);}
00130
00131
00132 void change_toolbar();
00133
00134 void plot_all();
00135
00136 void osci();
00137
00138 void print();
00139
00140 void save();
00141
00142
00143 void close();
00144
00145 void changeMode(int newmode);
00146
00147 void settingsChanged();
00148
00149 void save_closest_curve_data();
00150 void save_current_channel_data();
00151
00152 signals:
00153 void setMessage(const char* text);
00154
00155 void closeMe();
00156
00157 private:
00158 friend class PlotWindow;
00159
00160
00161 double get_x(int iplot, int x_pixel);
00162 double get_y(int iplot, int y_pixel);
00163
00164
00165 void mouseMovedInPlot (int iplot, const QMouseEvent& e);
00166 void mousePressedInPlot (int iplot, const QMouseEvent& e);
00167 void mouseReleasedInPlot(int iplot, const QMouseEvent& e);
00168
00169 void set_range_and_update_x_axes(double min, double max, bool discard_scrollbar=false);
00170
00171 void autoscale_all_y();
00172 void autoscale_y(int iplot);
00173 void rescale_y(int iplot, double val);
00174
00175
00176 void get_plot_label(int iplot, STD_string& label, STD_string& unit) const;
00177 void set_plot_labels(bool extra_space=false);
00178
00179 void set_curve_pens(bool thick_lines=false);
00180
00181 void create_baseline();
00182
00183 void add_plotcurve(const Curve4Qwt& curve);
00184 void create_plotcurves();
00185
00186 void add_marker(const Marker4Qwt& marker);
00187 void add_tc_marker(const TimecourseMarker4Qwt& marker);
00188 void create_markers();
00189
00190 void create_plotcurves_and_markers();
00191
00192
00193 bool create_timecourses(timecourseMode type);
00194
00195 void create_timecourse_markers();
00196
00197 void plot_timecourses(timecourseMode type);
00198
00199
00200
00201 SeqPlotDataAbstract* plotdata;
00202
00203 double totaldur;
00204 STD_string nuc;
00205
00206 int plot_pressed,x_pressed,y_pressed;
00207
00208 static int lastplot_old;
00209
00210 double baseline_x[2];
00211 double baseline_y[2];
00212 long curveid_baseline[numof_plotchan];
00213
00214
00215 int closest;
00216 int lastplot_closest;
00217 int lastcurve_closest;
00218
00219 int iplot_cache;
00220
00221
00222 GuiToolBar* chan_toolbar;
00223 GuiToolBar* zoom_toolbar;
00224 GuiToolBar* settings_toolbar;
00225
00226 GuiComboBox* plotmode;
00227 timecourseMode oldmode;
00228
00229
00230 GuiGridLayout* grid;
00231 GuiPlot* plotter[numof_plotchan];
00232 GuiWheel* wheel[numof_plotchan];
00233 GuiToolButton* plotflag[numof_plotchan];
00234
00235
00236 GuiToolButton* oscibutton;
00237 GuiToolButton* printbutton;
00238 GuiToolButton* savebutton;
00239 GuiToolButton* closebutton;
00240
00241 RangeWidget* x_range;
00242 GuiPrinter* printer;
00243
00244 GuiToolButton* plotAxes;
00245 GuiToolButton* plotMarkers;
00246 GuiToolButton* plotGrid;
00247
00248
00249 enum zoomMode {rect=0, horizontal, vertical, numof_zoomModes};
00250
00251 void set_zoom_tool(zoomMode mode);
00252
00253 GuiToolButton* zoomflag[numof_zoomModes];
00254
00255 long markid_vertzoom;
00256 long markid_hortzoom;
00257
00258
00259 STD_map<long,Curve4Qwt> curves_map[numof_plotchan];
00260
00261 long timecourse_curve_id[numof_tcmodes][numof_plotchan];
00262
00263
00264
00265 JDXenum TriggerType;
00266 JDXdouble TriggerWidth;
00267 JDXdouble RefreshRate;
00268
00269
00270 VtkMagnPlotter* active_magplot;
00271 long markid_magplot;
00272 int ipage;
00273 void plot_vector(double timepoint, float M[3], float* dM);
00274
00275 };
00276
00278
00279 class PlotWindow : public QObject, public GuiMainWindow {
00280 Q_OBJECT
00281
00282 public:
00283 PlotWindow(const char* method, const STD_string& nucleus, QWidget *parent);
00284 ~PlotWindow();
00285
00286 const SeqTimecourseData* get_timecourses() {return view->get_timecourses();}
00287 const SeqTimecourseData* get_kspace_trajs() {return view->get_kspace_trajs();}
00288
00289 bool simulate(const STD_string& fidfile, const STD_string& samplefile, ProgressMeter* progmeter) {return view->simulate(fidfile,samplefile,progmeter);}
00290
00291 public slots:
00292 void statusBarMessage(const char* text);
00293 void close();
00294
00295 private:
00296 PlotView* view;
00297 };
00298
00299
00300 #endif