QXRD  0.11.16
qxrdintegrator.h
Go to the documentation of this file.
1 #ifndef QXRDINTEGRATOR_H
2 #define QXRDINTEGRATOR_H
3 
4 #include "qcepmacros.h"
5 
6 #include "qcepobject.h"
7 #include "qcepproperty.h"
8 
9 #include "qxrdexperiment-ptr.h"
10 #include "qcepintegrateddata.h"
11 #include "qcepintegrateddata-ptr.h"
12 #include "qxrdintegratorcache.h"
14 #include "qcepsettingssaver-ptr.h"
15 #include "qxrdcenterfinder-ptr.h"
16 #include "qcepallocator-ptr.h"
17 #include "qcepimagedata.h"
18 #include "qcepimagedata-ptr.h"
19 #include "qcepmaskdata.h"
20 #include "qcepmaskdata-ptr.h"
21 #include "qxrddataprocessor-ptr.h"
22 
23 class QxrdIntegrator : public QcepObject, public QEnableSharedFromThis<QxrdIntegrator>
24 {
25  Q_OBJECT
26 
27 public:
29  virtual ~QxrdIntegrator();
30 
31 public:
32  Q_PROPERTY(int oversample READ get_Oversample WRITE set_Oversample)
33  QCEP_INTEGER_PROPERTY(Oversample)
34 
35  Q_PROPERTY(double integrationStep READ get_IntegrationStep WRITE set_IntegrationStep)
36  QCEP_DOUBLE_PROPERTY(IntegrationStep)
37 
38  Q_PROPERTY(int integrationNSteps READ get_IntegrationNSteps WRITE set_IntegrationNSteps)
39  QCEP_INTEGER_PROPERTY(IntegrationNSteps)
40 
41  Q_PROPERTY(double integrationMinimum READ get_IntegrationMinimum WRITE set_IntegrationMinimum)
42  QCEP_DOUBLE_PROPERTY(IntegrationMinimum)
43 
44  Q_PROPERTY(double integrationMaximum READ get_IntegrationMaximum WRITE set_IntegrationMaximum)
45  QCEP_DOUBLE_PROPERTY(IntegrationMaximum)
46 
47  Q_PROPERTY(int integrationXUnits READ get_IntegrationXUnits WRITE set_IntegrationXUnits)
48  QCEP_INTEGER_PROPERTY(IntegrationXUnits)
49 
50  Q_PROPERTY(bool enableGeometricCorrections READ get_EnableGeometricCorrections WRITE set_EnableGeometricCorrections)
51  QCEP_BOOLEAN_PROPERTY(EnableGeometricCorrections)
52 
53  Q_PROPERTY(bool enablePolarizationCorrections READ get_EnablePolarizationCorrections WRITE set_EnablePolarizationCorrections)
54  QCEP_BOOLEAN_PROPERTY(EnablePolarizationCorrections)
55 
56  Q_PROPERTY(double polarization READ get_Polarization WRITE set_Polarization)
57  QCEP_DOUBLE_PROPERTY(Polarization)
58 
59  Q_PROPERTY(bool enableAbsorptionCorrections READ get_EnableAbsorptionCorrections WRITE set_EnableAbsorptionCorrections)
60  QCEP_BOOLEAN_PROPERTY(EnableAbsorptionCorrections)
61 
62  Q_PROPERTY(double attenuationLength READ get_AttenuationLength WRITE set_AttenuationLength)
63  QCEP_DOUBLE_PROPERTY(AttenuationLength)
64 
65  Q_PROPERTY(int enableUserGeometry READ get_EnableUserGeometry WRITE set_EnableUserGeometry)
66  QCEP_INTEGER_PROPERTY(EnableUserGeometry)
67 
68  Q_PROPERTY(QString userGeometryScript READ get_UserGeometryScript WRITE set_UserGeometryScript)
69  QCEP_STRING_PROPERTY(UserGeometryScript)
70 
71  Q_PROPERTY(QString userGeometryFunction READ get_UserGeometryFunction WRITE set_UserGeometryFunction)
72  QCEP_STRING_PROPERTY(UserGeometryFunction)
73 
74  Q_PROPERTY(int enableUserAbsorption READ get_EnableUserAbsorption WRITE set_EnableUserAbsorption)
75  QCEP_INTEGER_PROPERTY(EnableUserAbsorption)
76 
77  Q_PROPERTY(QString userAbsorptionScript READ get_UserAbsorptionScript WRITE set_UserAbsorptionScript)
78  QCEP_STRING_PROPERTY(UserAbsorptionScript)
79 
80  Q_PROPERTY(QString userAbsorptionFunction READ get_UserAbsorptionFunction WRITE set_UserAbsorptionFunction)
81  QCEP_STRING_PROPERTY(UserAbsorptionFunction)
82 
83  Q_PROPERTY(double scalingFactor READ get_ScalingFactor WRITE set_ScalingFactor)
84  QCEP_DOUBLE_PROPERTY(ScalingFactor)
85 
86  Q_PROPERTY(bool selfNormalization READ get_SelfNormalization WRITE set_SelfNormalization)
87  QCEP_BOOLEAN_PROPERTY(SelfNormalization)
88 
89  Q_PROPERTY(double selfNormalizationMinimum READ get_SelfNormalizationMinimum WRITE set_SelfNormalizationMinimum)
90  QCEP_DOUBLE_PROPERTY(SelfNormalizationMinimum)
91 
92  Q_PROPERTY(double selfNormalizationMaximum READ get_SelfNormalizationMaximum WRITE set_SelfNormalizationMaximum)
93  QCEP_DOUBLE_PROPERTY(SelfNormalizationMaximum)
94 
95 public:
98 
99  enum {
101  };
102 
103  enum {
105  };
106 
107  double XValue(double x, double y) const;
108  double XValue(QPointF pt) const;
109  double XValue(double x, double y,
110  int xUnits, QxrdCenterFinderPtr cf,
111  double xc, double yc,
112  double dst, double nrg,
113  double pxl, double pxh,
114  double rot, double cosr, double sinr,
115  double cosb, double sinb,
116  double cosa, double sina
117  ) const;
118 
119  QString XLabel() const;
120 
121  static QScriptValue toScriptValue(QScriptEngine *engine, const QxrdIntegratorPtr &proc);
122  static void fromScriptValue(const QScriptValue &obj, QxrdIntegratorPtr &proc);
123 
124 public slots:
125  void clearAccumulator(QString resPath);
126  void prepareAccumulator(QString resPath, int nImages);
127  void completeAccumulator(QString path);
128  void saveAccumulator(QString resPath, QString &fileName, QString filter);
129 
130  void appendIntegration(QString resPath, QcepDoubleImageDataPtr dimg, QcepMaskDataPtr mask = QcepMaskDataPtr());
131  void appendIntegration(QString resPath, QcepIntegratedDataPtr integ);
136 
137 // QcepIntegratedDataPtr integrate(QcepIntegratedDataPtr integ, QcepDoubleImageDataPtr dimg, QcepMaskDataPtr mask, int oversample, int normalize);
138 
139  QcepIntegratedDataPtr sliceLine(QcepIntegratedDataPtr integ, QcepDoubleImageDataPtr dimg, double x0, double y0, double x1, double y1, double width);
140  QcepIntegratedDataPtr slicePolygon(QcepIntegratedDataPtr integ, QcepDoubleImageDataPtr dimg, QVector<QPointF> poly, double width);
141 
142  void integrateVsR();
143  void integrateVsQ();
144  void integrateVsTTH();
145 
147 
150 
151  QString defaultUserGeometryScript();
152  QString defaultUserAbsorptionScript();
153 
154 private:
155  mutable QMutex m_Mutex;
160 };
161 
162 #endif // QXRDINTEGRATOR_H
QcepIntegratedDataPtr slicePolygon(QcepIntegratedDataPtr integ, QcepDoubleImageDataPtr dimg, QVector< QPointF > poly, double width)
void saveAccumulator(QString resPath, QString &fileName, QString filter)
QSharedPointer< QxrdCenterFinder > QxrdCenterFinderPtr
QxrdDataProcessorWPtr dataProcessor() const
double attenuationLength
QxrdExperimentWPtr m_Experiment
QWeakPointer< QxrdDataProcessor > QxrdDataProcessorWPtr
QSharedPointer< QxrdIntegratorCache > QxrdIntegratorCachePtr
QcepInt32ImageDataPtr cachedGeometry()
QWeakPointer< QxrdCenterFinder > QxrdCenterFinderWPtr
#define QCEP_DOUBLE_PROPERTY(propname)
Definition: qcepproperty.h:629
bool enablePolarizationCorrections
QcepIntegratedDataPtr performIntegration(QcepIntegratedDataPtr integ, QcepDoubleImageDataPtr dimg, QcepMaskDataPtr mask)
QString XLabel() const
QxrdExperimentWPtr experiment() const
static void fromScriptValue(const QScriptValue &obj, QxrdIntegratorPtr &proc)
double selfNormalizationMaximum
QString userAbsorptionScript
QWeakPointer< QxrdExperiment > QxrdExperimentWPtr
QSharedPointer< QcepIntegratedData > QcepIntegratedDataPtr
QcepDoubleImageDataPtr cachedIntensity()
double integrationMinimum
void onIntegrationParametersChanged()
double XValue(double x, double y) const
#define QCEP_INTEGER_PROPERTY(propname)
Definition: qcepproperty.h:698
QString userGeometryFunction
QString defaultUserGeometryScript()
QxrdCenterFinderWPtr m_CenterFinder
#define QCEP_STRING_PROPERTY(propname)
Definition: qcepproperty.h:664
QxrdIntegrator(QcepSettingsSaverWPtr saver, QxrdExperimentWPtr exp, QxrdCenterFinderWPtr cfw)
QSharedPointer< QxrdIntegrator > QxrdIntegratorPtr
bool enableGeometricCorrections
void clearAccumulator(QString resPath)
void appendIntegration(QString resPath, QcepDoubleImageDataPtr dimg, QcepMaskDataPtr mask=QcepMaskDataPtr())
#define QCEP_BOOLEAN_PROPERTY(propname)
Definition: qcepproperty.h:732
double selfNormalizationMinimum
bool enableAbsorptionCorrections
void completeAccumulator(QString path)
QSharedPointer< QcepInt32ImageData > QcepInt32ImageDataPtr
QcepSettingsSaverWPtr m_Saver
static QScriptValue toScriptValue(QScriptEngine *engine, const QxrdIntegratorPtr &proc)
QString userAbsorptionFunction
double scalingFactor
double integrationMaximum
QSharedPointer< QcepMaskData > QcepMaskDataPtr
virtual ~QxrdIntegrator()
QString defaultUserAbsorptionScript()
void prepareAccumulator(QString resPath, int nImages)
QxrdIntegratorCachePtr m_IntegratorCache
QWeakPointer< QcepSettingsSaver > QcepSettingsSaverWPtr
double integrationStep
QcepIntegratedDataPtr sliceLine(QcepIntegratedDataPtr integ, QcepDoubleImageDataPtr dimg, double x0, double y0, double x1, double y1, double width)
QString userGeometryScript
QSharedPointer< QcepDoubleImageData > QcepDoubleImageDataPtr