spectrumdoc.h

Go to the documentation of this file.
00001 /* 
00002  * Gnome Chemisty Utils
00003  * spectrumdoc.h
00004  *
00005  * Copyright (C) 2007-2008 Jean Bréfort <jean.brefort@normalesup.org>
00006  *
00007  * This program is free software; you can redistribute it and/or 
00008  * modify it under the terms of the GNU General Public License as 
00009  * published by the Free Software Foundation; either version 2 of the
00010  * License, or (at your option) any later version.
00011  *
00012  * This program is distributed in the hope that it will be useful,
00013  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00014  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00015  * GNU General Public License for more details.
00016  *
00017  * You should have received a copy of the GNU General Public License
00018  * along with this program; if not, write to the Free Software
00019  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301
00020  * USA
00021  */
00022 
00023 #ifndef GCU_SPECTRUM_DOC_H
00024 #define GCU_SPECTRUM_DOC_H
00025 
00026 #include "document.h"
00027 #include "macros.h"
00028 #include "printable.h"
00029 #include <goffice/graph/gog-series.h>
00030 #include <string>
00031 #include <vector>
00032 
00034 namespace gcu
00035 {
00036 
00041 typedef enum {
00045         GCU_SPECTRUM_INFRARED,
00049         GCU_SPECTRUM_RAMAN,
00053         GCU_SPECTRUM_INFRARED_PEAK_TABLE,
00057         GCU_SPECTRUM_INFRARED_INTERFEROGRAM,
00061         GCU_SPECTRUM_INFRARED_TRANSFORMED,
00065         GCU_SPECTRUM_UV_VISIBLE,
00069         GCU_SPECTRUM_NMR,
00073         GCU_SPECTRUM_NMR_FID,
00077         GCU_SPECTRUM_NMR_PEAK_TABLE,
00081         GCU_SPECTRUM_NMR_PEAK_ASSIGNMENTS,
00085         GCU_SPECTRUM_MASS,
00090         GCU_SPECTRUM_MAX
00091 } SpectrumType;
00092 
00093 
00097 typedef enum {
00101         GCU_SPECTRUM_UNIT_CM_1,
00105         GCU_SPECTRUM_UNIT_TRANSMITTANCE,
00109         GCU_SPECTRUM_UNIT_ABSORBANCE,
00113         GCU_SPECTRUM_UNIT_PPM,
00117         GCU_SPECTRUM_UNIT_NANOMETERS,
00121         GCU_SPECTRUM_UNIT_MICROMETERS,
00125         GCU_SPECTRUM_UNIT_SECONDS,
00129         GCU_SPECTRUM_UNIT_HZ,
00133         GCU_SPECTRUM_UNIT_M_Z,
00137         GCU_SPECTRUM_UNIT_REL_ABUNDANCE,
00142         GCU_SPECTRUM_UNIT_MAX
00143 } SpectrumUnitType;
00144 
00149 typedef enum {
00153         GCU_SPECTRUM_TYPE_INDEPENDENT,
00157         GCU_SPECTRUM_TYPE_DEPENDENT,
00161         GCU_SPECTRUM_TYPE_PAGE,
00166         GCU_SPECTRUM_TYPE_MAX
00167 } SpectrumVarType;
00168 
00174 typedef enum {
00178         GCU_SPECTRUM_FORMAT_ASDF,
00182         GCU_SPECTRUM_FORMAT_AFFN,
00186         GCU_SPECTRUM_FORMAT_PAC,
00190         GCU_SPECTRUM_FORMAT_SQZ,
00194         GCU_SPECTRUM_FORMAT_DIF,
00199         GCU_SPECTRUM_FORMAT_MAX
00200 } SpectrumFormatType;
00201 
00202 class Application;
00203 class SpectrumView;
00204 
00208 typedef struct  {
00212         std::string Name;
00216         char Symbol;
00220         SpectrumVarType Type;
00224         SpectrumUnitType Unit;
00228         SpectrumFormatType Format;
00232         unsigned NbValues;
00236         double First;
00240         double Last;
00244         double Min;
00248         double Max;
00253         double Factor;
00257         double *Values;
00262         GogSeries *Series;
00263 } JdxVar;
00264 
00269 class SpectrumDocument: public Document, public Printable
00270 {
00271 public:
00275         SpectrumDocument ();
00280         SpectrumDocument (Application *app, SpectrumView *view = NULL);
00281 
00285         ~SpectrumDocument ();
00286 
00294         void Load (char const *uri, char const *mime_type = NULL);
00295 
00303         void OnXUnitChanged (int i);
00304 
00312         void OnYUnitChanged (int i);
00313 
00320         void OnXAxisInvert (bool inverted);
00321 
00325         void OnShowIntegral ();
00326 
00333         void OnTransformFID (GtkButton *btn);
00334 
00335 private:
00336         void LoadJcampDx (char const *data);
00337         void ReadDataLine (char const *data, std::list<double> &l);
00338         void DoPrint (GtkPrintOperation *print, GtkPrintContext *context) const;
00339         GtkWindow *GetGtkWindow ();
00340         void ReadDataTable (std::istream &s, double *x, double *y);
00341         double (*GetConversionFunction (SpectrumUnitType oldu, SpectrumUnitType newu, double &factor, double &offset)) (double, double, double);
00342 
00343 private:
00344         double *x, *y;
00345         unsigned npoints;
00346         double maxx, maxy, minx, miny;
00347         double firstx, lastx, deltax, firsty;
00348         double xfactor, yfactor;
00349         std::vector <JdxVar> variables;
00350         int X, Y, R, I, integral, Rt, It, Rp;
00351         double freq;
00352         double offset, refpoint;
00353         GtkWidget *m_XAxisInvertBtn;
00354         guint m_XAxisInvertSgn;
00355 
00362 GCU_PROT_PROP (SpectrumView*, View)
00366 GCU_RO_PROP (bool, Empty)
00370 GCU_RO_PROP (SpectrumType, SpectrumType)
00375 GCU_RO_PROP (SpectrumUnitType, XUnit)
00380 GCU_RO_PROP (SpectrumUnitType, YUnit)
00385 GCU_RO_PROP (bool, IntegralVisible)
00386 };
00387 
00388 }
00389 
00390 #endif  //      GCU_SPECTRUM_DOC_H

Generated on Sat Nov 15 10:13:34 2008 for The Gnome Chemistry Utils by  doxygen 1.5.6