QXRD  0.11.16
qcepimagedata.h
Go to the documentation of this file.
1 #ifndef QCEPIMAGEDATA_H
2 #define QCEPIMAGEDATA_H
3 
4 #include "qcepmacros.h"
5 #include <QMutex>
6 #include <QString>
7 #include <QVector>
8 #include <QSharedPointer>
9 #include <QFileInfo>
10 #include <QDateTime>
11 #include <qmath.h>
12 #include <stdio.h>
13 
14 #include "qcepdataobject.h"
15 #include "qcepproperty.h"
16 #include "qcepsettingssaver-ptr.h"
17 #include "qcepexperiment-ptr.h"
18 #include "qcepmaskdata-ptr.h"
19 #include "qcepimagedata-ptr.h"
20 
21 typedef struct tiff TIFF;
22 
24 {
25  Q_OBJECT
26 
27 public:
29  virtual ~QcepImageDataBase();
30 
31  Q_PROPERTY(int width READ get_Width WRITE set_Width)
33 
34  Q_PROPERTY(int height READ get_Height WRITE set_Height)
35  QCEP_INTEGER_PROPERTY(Height)
36 
37  Q_PROPERTY(double hStart READ get_HStart WRITE set_HStart)
38  QCEP_DOUBLE_PROPERTY(HStart)
39 
40  Q_PROPERTY(double hStep READ get_HStep WRITE set_HStep)
42 
43  Q_PROPERTY(double vStart READ get_VStart WRITE set_VStart)
44  QCEP_DOUBLE_PROPERTY(VStart)
45 
46  Q_PROPERTY(double vStep READ get_VStep WRITE set_VStep)
48 
49  Q_PROPERTY(QString hLabel READ get_HLabel WRITE set_HLabel)
50  QCEP_STRING_PROPERTY(HLabel)
51 
52  Q_PROPERTY(QString hUnits READ get_HUnits WRITE set_HUnits)
53  QCEP_STRING_PROPERTY(HUnits)
54 
55  Q_PROPERTY(QString vLabel READ get_VLabel WRITE set_VLabel)
56  QCEP_STRING_PROPERTY(VLabel)
57 
58  Q_PROPERTY(QString vUnits READ get_VUnits WRITE set_VUnits)
59  QCEP_STRING_PROPERTY(VUnits)
60 
61  Q_PROPERTY(int dataType READ get_DataType WRITE set_DataType)
62  QCEP_INTEGER_PROPERTY(DataType)
63 
64  Q_PROPERTY(QString dataTypeName READ get_DataTypeName WRITE set_DataTypeName)
65 
66  Q_PROPERTY(QString fileBase READ get_FileBase WRITE set_FileBase)
67  QCEP_STRING_PROPERTY(FileBase)
68 
69  Q_PROPERTY(QString title READ get_Title WRITE set_Title)
71 
72  Q_PROPERTY(int readoutMode READ get_ReadoutMode WRITE set_ReadoutMode)
73  QCEP_INTEGER_PROPERTY(ReadoutMode)
74 
75  Q_PROPERTY(double exposureTime READ get_ExposureTime WRITE set_ExposureTime)
76  QCEP_DOUBLE_PROPERTY(ExposureTime)
77 
78  Q_PROPERTY(int summedExposures READ get_SummedExposures WRITE set_SummedExposures)
79  QCEP_INTEGER_PROPERTY(SummedExposures)
80 
81  Q_PROPERTY(int imageSequenceNumber READ get_ImageSequenceNumber WRITE set_ImageSequenceNumber)
82  QCEP_INTEGER_PROPERTY(ImageSequenceNumber)
83 
84  Q_PROPERTY(int imageNumber READ get_ImageNumber WRITE set_ImageNumber)
85  QCEP_INTEGER_PROPERTY(ImageNumber)
86 
87  Q_PROPERTY(int phaseNumber READ get_PhaseNumber WRITE set_PhaseNumber)
88  QCEP_INTEGER_PROPERTY(PhaseNumber)
89 
90  Q_PROPERTY(int nPhases READ get_NPhases WRITE set_NPhases)
91  QCEP_INTEGER_PROPERTY(NPhases)
92 
93  Q_PROPERTY(QDateTime dateTime READ get_DateTime WRITE set_DateTime)
94  QCEP_DATETIME_PROPERTY(DateTime)
95 
96  Q_PROPERTY(QString dateString READ get_DateString WRITE set_DateString)
97  // QCEP_STRING_PROPERTY(DateString)
98 
99  Q_PROPERTY(double timeStamp READ get_TimeStamp WRITE set_TimeStamp)
100  QCEP_DOUBLE_PROPERTY(TimeStamp)
101 
102  Q_PROPERTY(int hBinning READ get_HBinning WRITE set_HBinning)
103  QCEP_INTEGER_PROPERTY(HBinning)
104 
105  Q_PROPERTY(int vBinning READ get_VBinning WRITE set_VBinning)
106  QCEP_INTEGER_PROPERTY(VBinning)
107 
108  Q_PROPERTY(double cameraGain READ get_CameraGain WRITE set_CameraGain)
109  QCEP_DOUBLE_PROPERTY(CameraGain)
110 
111  Q_PROPERTY(int triggered READ get_Triggered WRITE set_Triggered)
112  QCEP_INTEGER_PROPERTY(Triggered)
113 
114  Q_PROPERTY(QString userComment1 READ get_UserComment1 WRITE set_UserComment1)
115  QCEP_STRING_PROPERTY(UserComment1)
116 
117  Q_PROPERTY(QString userComment2 READ get_UserComment2 WRITE set_UserComment2)
118  QCEP_STRING_PROPERTY(UserComment2)
119 
120  Q_PROPERTY(QString userComment3 READ get_UserComment3 WRITE set_UserComment3)
121  QCEP_STRING_PROPERTY(UserComment3)
122 
123  Q_PROPERTY(QString userComment4 READ get_UserComment4 WRITE set_UserComment4)
124  QCEP_STRING_PROPERTY(UserComment4)
125 
126  Q_PROPERTY(QcepDoubleList normalization READ get_Normalization WRITE set_Normalization)
127  QCEP_DOUBLE_LIST_PROPERTY(Normalization)
128 
129  Q_PROPERTY(QcepDoubleList extraInputs READ get_ExtraInputs WRITE set_ExtraInputs)
130  QCEP_DOUBLE_LIST_PROPERTY(ExtraInputs)
131 
132  Q_PROPERTY(bool used READ get_Used WRITE set_Used)
134 
135 public slots:
136  virtual QString description() const;
137  void printMessage(QString msg, QDateTime ts=QDateTime::currentDateTime()) const;
138 
139  virtual double getImageData(int x, int y) const = 0;
140  virtual QVector<double> getImageData(int x0, int y0, int x1, int y1) const = 0;
141  virtual void setImageData(int x, int y, double v) = 0;
142 
143  virtual void clear() = 0;
144  virtual void resize(int width, int height) = 0;
145  virtual void fill(double val) = 0;
146 
147  virtual double minValue() const = 0;
148  virtual double maxValue() const = 0;
149 
150  virtual QPointF percentileRange(double lowpct, double highpct) = 0;
151 
152  virtual double sumInRectangle(QRectF rect) = 0;
153  virtual double averageInRectangle(QRectF rect) = 0;
154  virtual double maxInRectangle(QRectF rect) = 0;
155  virtual double minInRectangle(QRectF rect) = 0;
156  virtual double sumInEllipse(QRectF rect) = 0;
157  virtual double averageInEllipse(QRectF rect) = 0;
158  virtual double minInEllipse(QRectF rect) = 0;
159  virtual double maxInEllipse(QRectF rect) = 0;
160  virtual double sumInPeak(QRectF rect) = 0;
161 
162  double hValue(int n) const;
163  double vValue(int n) const;
164 
165 public:
166 // int get_Width() const
167 // {
168 // return m_Width;
169 // }
170 
171 // int get_Height() const
172 // {
173 // return m_Height;
174 // }
175 
176 // void set_Width(int width)
177 // {
178 // m_Width = width;
179 // }
180 
181 // void set_Height(int height)
182 // {
183 // m_Height = height;
184 // }
185 
186  QString get_DateString() const
187  {
188  return get_DateTime().toString(tr("yyyy.MM.dd : hh:mm:ss.zzz"));
189  }
190 
191  void set_DateString(QString /*val*/) {}
192 
193  QString get_DataTypeName() const;
194  void set_DataTypeName(QString /*name*/) {}
195 
196  void copyProperties(QcepImageDataBase *dest);
197  void copyPropertiesFrom(QSharedPointer<QcepImageDataBase> src);
198 
199  void loadMetaData();
200  void saveMetaData();
201  void saveMetaData(QString name);
202  void saveTextData(QString name, QString sep, bool transp=false);
203 
204  void setDefaultFileName(QString path);
205 
206  virtual QString fileFormatFilterString();
207  QString fileFormatTIFF();
208  QString fileFormatTabDelimited();
210  QString fileFormatCSV();
211  QString fileFormatTransposedCSV();
212 
213  static double secondsSinceEpoch();
214 
215  enum {
224  };
225 
226  QMutex *mutex();
227 
228 protected:
230 // int m_Width;
231 // int m_Height;
232 
233 private:
234  mutable QMutex m_Mutex;
235 
236 protected:
238 };
239 
240 template <typename T>
241  class QcepImageData : public QcepImageDataBase
242 {
243 public:
244  QcepImageData(QcepSettingsSaverWPtr saver, int width, int height, T def, QcepObject *parent);
245  virtual ~QcepImageData();
246 
247 public:
248  static QSharedPointer< QcepImageData<T> > newImage(QcepSettingsSaverWPtr saver,
249  QString name,
250  int width,
251  int height, QcepObject *parent);
252 
253  bool readImage(QString filename);
254 
255  void resize(int width, int height);
256  void clear();
257  void fill(double val);
258 
259  double getImageData(int x, int y) const;
260  QVector<double> getImageData(int x0, int y0, int x1, int y1) const;
261  void setImageData(int x, int y, double v);
262 
263  virtual void saveData(QString &name, QString filter, Overwrite canOverwrite=NoOverwrite);
264  void saveTIFFData(QString name);
265 
266  double minValue() const;
267  double maxValue() const;
268  QPointF percentileRange(double lowpct, double highpct);
269 
270  double sumInRectangle(QRectF rect);
271  double averageInRectangle(QRectF rect);
272  double minInRectangle(QRectF rect);
273  double maxInRectangle(QRectF rect);
274  double sumInEllipse(QRectF rect);
275  double averageInEllipse(QRectF rect);
276  double minInEllipse(QRectF rect);
277  double maxInEllipse(QRectF rect);
278  double sumInPeak(QRectF rect);
279 
280 public:
281  template <typename T2>
282  void subtractDark(const QSharedPointer< QcepImageData<T2> > dark);
283 
284  void calculateRange();
285  void calculateRangeInCircle();
286 
287  void dumpPixels(int x0, int y0, int x1, int y1);
288 
289  T* data();
290 
291 public:
292  T value(int x, int y) const;
293  T value(double x, double y) const;
294 
295  void setValue(int x, int y, T val);
296  void addValue(int x, int y, T val);
297  void subtractValue(int x, int y, T val);
298  void multiplyValue(int x, int y, T val);
299  void divideValue(int x, int y, T val);
300 // void fill(T val);
301 
302  T defaultValue() const;
303  void setDefaultValue(T def);
304 
305  QString rawFileName();
306 
307  template <typename T2>
308  void copyImage(QSharedPointer< QcepImageData<T2> > dest);
309 
310  template <typename T2>
311  void copyFrom(const QSharedPointer< QcepImageData<T2> > img);
312 
313  template <typename T2>
314  void accumulateImage(QSharedPointer< QcepImageData<T2> > image);
315 
316  template <typename T2>
317  void add(QSharedPointer< QcepImageData<T2> > image);
318 
319  template <typename T2>
320  void subtract(QSharedPointer< QcepImageData<T2> > image);
321 
322  template <typename T2>
323  void multiply(QSharedPointer< QcepImageData<T2> > image);
324 
325  template <typename T2>
326  void divide(QSharedPointer< QcepImageData<T2> > image);
327 
329  QcepMaskDataPtr mask() const;
330  QcepMaskDataPtr overflow() const;
331 
332  double correlate(QSharedPointer< QcepImageData<T> > image, int dx, int dy, int mx, int my);
333 
334  void shiftImage(QSharedPointer< QcepImageData<T> > image, double dx, double dy);
335 
336  T findMin() const;
337  T findMax() const;
338  double findAverage() const;
339 
340  void correctBadBackgroundSubtraction(QcepDoubleImageDataPtr dark, int nImgExposures, int nDarkExposures);
341 
342  static QScriptValue toScriptValue(QScriptEngine *engine, const QSharedPointer< QcepImageData<T> > &data);
343  static void fromScriptValue(const QScriptValue &obj, QSharedPointer< QcepImageData<T> > &data);
344 
345 protected:
346  QVector<T> m_Image;
350 
353 };
354 
355 #endif
void saveTextData(QString name, QString sep, bool transp=false)
double correlate(QSharedPointer< QcepImageData< T > > image, int dx, int dy, int mx, int my)
void shiftImage(QSharedPointer< QcepImageData< T > > image, double dx, double dy)
double sumInPeak(QRectF rect)
QcepMaskDataPtr overflow() const
QcepMaskDataPtr m_Overflow
void subtractValue(int x, int y, T val)
QcepSettingsSaverWPtr m_Saver
void setMask(QcepMaskDataPtr mask, QcepMaskDataPtr overflow)
double maxInRectangle(QRectF rect)
void multiplyValue(int x, int y, T val)
virtual void resize(int width, int height)=0
virtual double maxInRectangle(QRectF rect)=0
QString rawFileName()
QDateTime dateTime
Definition: qcepimagedata.h:93
virtual void fill(double val)=0
#define QCEP_DOUBLE_PROPERTY(propname)
Definition: qcepproperty.h:629
void addValue(int x, int y, T val)
double maxInEllipse(QRectF rect)
double maxValue() const
double minInRectangle(QRectF rect)
static QSharedPointer< QcepImageData< T > > newImage(QcepSettingsSaverWPtr saver, QString name, int width, int height, QcepObject *parent)
QcepDoubleList normalization
virtual double averageInEllipse(QRectF rect)=0
virtual double sumInEllipse(QRectF rect)=0
void resize(int width, int height)
virtual void clear()=0
QcepImageData(QcepSettingsSaverWPtr saver, int width, int height, T def, QcepObject *parent)
QString fileFormatTransposedCSV()
void copyImage(QSharedPointer< QcepImageData< T2 > > dest)
double findAverage() const
double vValue(int n) const
T value(int x, int y) const
QcepImageDataBase(QcepSettingsSaverWPtr saver, int width, int height, int size, QcepObject *parent)
static void fromScriptValue(const QScriptValue &obj, QSharedPointer< QcepImageData< T > > &data)
QcepMaskDataPtr m_Mask
void subtractDark(const QSharedPointer< QcepImageData< T2 > > dark)
void copyProperties(QcepImageDataBase *dest)
void copyPropertiesFrom(QSharedPointer< QcepImageDataBase > src)
void divideValue(int x, int y, T val)
double minInEllipse(QRectF rect)
void calculateRangeInCircle()
static QScriptValue toScriptValue(QScriptEngine *engine, const QSharedPointer< QcepImageData< T > > &data)
T findMax() const
void accumulateImage(QSharedPointer< QcepImageData< T2 > > image)
double sumInRectangle(QRectF rect)
QcepDoubleList extraInputs
QString fileFormatTIFF()
virtual double maxInEllipse(QRectF rect)=0
#define QCEP_INTEGER_PROPERTY(propname)
Definition: qcepproperty.h:698
void setImageData(int x, int y, double v)
virtual double sumInRectangle(QRectF rect)=0
virtual double getImageData(int x, int y) const =0
void fill(double val)
QPointF percentileRange(double lowpct, double highpct)
virtual double minValue() const =0
void add(QSharedPointer< QcepImageData< T2 > > image)
double sumInEllipse(QRectF rect)
bool readImage(QString filename)
void divide(QSharedPointer< QcepImageData< T2 > > image)
QList< double > QcepDoubleList
Definition: qcepmacros.h:28
virtual QString fileFormatFilterString()
#define QCEP_STRING_PROPERTY(propname)
Definition: qcepproperty.h:664
double hValue(int n) const
void saveTIFFData(QString name)
virtual void setImageData(int x, int y, double v)=0
void printMessage(QString msg, QDateTime ts=QDateTime::currentDateTime()) const
void setValue(int x, int y, T val)
T findMin() const
QString get_DateString() const
T defaultValue() const
QString get_DataTypeName() const
void multiply(QSharedPointer< QcepImageData< T2 > > image)
virtual double minInRectangle(QRectF rect)=0
QString fileFormatTabDelimited()
#define QCEP_BOOLEAN_PROPERTY(propname)
Definition: qcepproperty.h:732
void dumpPixels(int x0, int y0, int x1, int y1)
void set_DateString(QString)
void set_DataTypeName(QString)
virtual QString description() const
void subtract(QSharedPointer< QcepImageData< T2 > > image)
virtual void saveData(QString &name, QString filter, Overwrite canOverwrite=NoOverwrite)
QVector< T > m_Image
double getImageData(int x, int y) const
virtual double sumInPeak(QRectF rect)=0
QString name
Definition: qcepobject.h:49
virtual double averageInRectangle(QRectF rect)=0
QString fileFormatTransposedTabDelimited()
virtual ~QcepImageDataBase()
double minValue() const
virtual double maxValue() const =0
void setDefaultValue(T def)
virtual QPointF percentileRange(double lowpct, double highpct)=0
void correctBadBackgroundSubtraction(QcepDoubleImageDataPtr dark, int nImgExposures, int nDarkExposures)
void setDefaultFileName(QString path)
virtual double minInEllipse(QRectF rect)=0
QSharedPointer< QcepMaskData > QcepMaskDataPtr
double averageInRectangle(QRectF rect)
struct tiff TIFF
Definition: qcepimagedata.h:21
void copyFrom(const QSharedPointer< QcepImageData< T2 > > img)
static double secondsSinceEpoch()
#define QCEP_DOUBLE_LIST_PROPERTY(propname)
Definition: qcepproperty.h:805
QWeakPointer< QcepSettingsSaver > QcepSettingsSaverWPtr
#define QCEP_DATETIME_PROPERTY(propname)
Definition: qcepproperty.h:771
double averageInEllipse(QRectF rect)
QcepSettingsSaverWPtr saver()
QSharedPointer< QcepDoubleImageData > QcepDoubleImageDataPtr
virtual ~QcepImageData()
QcepMaskDataPtr mask() const