QXRD  0.11.16
qxrddetector.cpp
Go to the documentation of this file.
1 #include "qxrddetector.h"
2 #include "qxrddetectorthread.h"
3 #include "qxrddetectorproxy.h"
4 #include "qxrddebug.h"
6 #include <stdio.h>
7 #include "qcepmutexlocker.h"
9 #include "qxrdexperiment.h"
10 #include "qcepimagedata.h"
11 #include "qxrdacquisition.h"
12 #include "qxrdroicalculator.h"
13 
15  QxrdExperimentWPtr expt,
17  int detType,
18  int detNum,
19  QcepObject *parent) :
20  QcepObject("detector", parent),
21  m_Saver(saver),
22  m_Experiment(expt),
23  m_Acquisition(acq),
24  m_Processor(),
27  m_AcquiredImages("acquired"),
28  m_DetectorNumber(QcepSettingsSaverWPtr(), this, "detectorNumber", detNum, "Detector Number"),
29  m_DetectorType(saver, this, "detectorType", detType, "Detector Type"),
30  m_DetectorTypeName(QcepSettingsSaverWPtr(), this, "detectorTypeName", QxrdDetectorThread::detectorTypeName(detType), "Detector Type Name"),
31  m_Enabled(saver, this, "enabled", true, "Is Detector Enabled?"),
32  m_DetectorName(saver, this, "detectorName", QxrdDetectorThread::detectorTypeName(detType), "Detector Name"),
33  m_NCols(QcepSettingsSaverWPtr(), this, "nCols", 0, "No of detector cols"),
34  m_NRows(QcepSettingsSaverWPtr(), this, "nRows", 0, "No of detector rows"),
35  m_HBinning(QcepSettingsSaverWPtr(), this, "hBinning", 0, "Horiz Binning"),
36  m_VBinning(QcepSettingsSaverWPtr(), this, "vBinning", 0, "Vert Binning"),
37  m_Extension(saver, this, "extension", "tif", "File extension")
38 {
40  printf("QxrdDetector::QxrdDetector(%p)\n", this);
41  }
42 }
43 
45 {
46  connect(prop_Enabled(), &QcepBoolProperty::valueChanged,
48 
50 
51  if (exper) {
52  m_Processor =
54  new QxrdDetectorProcessor(m_Saver, m_Experiment, exper->fileSaver(), sharedFromThis()));
55  }
56 
58 
59  if (a) {
60  connect(prop_Enabled(), &QcepBoolProperty::valueChanged,
62  }
63 }
64 
66 {
68  printf("QxrdDetector::~QxrdDetector(%p)\n", this);
69  }
70 
71 // if (m_DetectorControlWindow) {
72 // m_DetectorControlWindow->deleteLater();
73 // }
74 }
75 
77 {
78  return m_Experiment;
79 }
80 
82 {
83  return m_Acquisition;
84 }
85 
87 {
88  return m_Processor;
89 }
90 
92 {
93  int res = 0;
94 
95  if (m_Processor) {
96  QxrdROICalculatorPtr calc = m_Processor->roiCalculator();
97 
98  if (calc) {
99  res = calc->roiCount();
100  }
101  }
102 
103  return res;
104 }
105 
107 {
109 
110  if (m_Processor) {
111  QxrdROICalculatorPtr calc = m_Processor->roiCalculator();
112 
113  if (calc) {
114  res = calc->roi(i);
115  }
116  }
117 
118  return res;
119 }
120 
121 void QxrdDetector::printMessage(QString msg, QDateTime ts) const
122 {
124 
125  if (exp) {
126  exp->printMessage(msg, ts);
127  }
128 }
129 
130 void QxrdDetector::criticalMessage(QString msg, QDateTime ts) const
131 {
133 
134  if (exp) {
135  exp->criticalMessage(msg);
136  }
137 }
138 
139 void QxrdDetector::statusMessage(QString msg, QDateTime ts) const
140 {
142 
143  if (exp) {
144  exp->statusMessage(msg);
145  }
146 }
147 
148 void QxrdDetector::readSettings(QSettings *settings, QString section)
149 {
150  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
151 
152  QcepObject::readSettings(settings, section);
153 
154  if (m_Processor) {
155  m_Processor->readSettings(settings, section+"/processor");
156  }
157 }
158 
159 void QxrdDetector::writeSettings(QSettings *settings, QString section)
160 {
161  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
162 
163  QcepObject::writeSettings(settings, section);
164 
165  if (m_Processor) {
166  m_Processor->writeSettings(settings, section+"/processor");
167  }
168 }
169 
171 {
172  return get_Enabled();
173 }
174 
176 {
177  if (enabled) {
178  startDetector();
179  } else {
180  stopDetector();
181  }
182 }
183 
185 {
186  if (isEnabled()) {
187  return true;
188  } else {
189  criticalMessage("Attempt to use disabled detector");
190  return false;
191  }
192 }
193 
195 {
196 }
197 
199 {
200 }
201 
203 {
204 }
205 
206 void QxrdDetector::beginAcquisition(double exposure)
207 {
208 }
209 
211 {
212 }
213 
215 {
216 }
217 
218 QScriptValue QxrdDetector::toScriptValue(QScriptEngine *engine, const QxrdDetectorPtr &det)
219 {
220  return engine->newQObject(det.data());
221 }
222 
223 void QxrdDetector::fromScriptValue(const QScriptValue &obj, QxrdDetectorPtr &det)
224 {
225  QObject *qobj = obj.toQObject();
226 
227  if (qobj) {
228  QxrdDetector *qdet = qobject_cast<QxrdDetector*>(qobj);
229 
230  if (qdet) {
231  det = QxrdDetectorPtr(qdet);
232  }
233  }
234 }
235 
237 {
238  proxy->clearProperties();
239 
240  if (proxy) {
241  proxy->pushProperty(QxrdDetectorProxy::DetectorNumberProperty, "detectorNumber", "Detector Number", -1);
242  proxy->pushProperty(QxrdDetectorProxy::DetectorTypeProperty, "detectorType", "Detector Type", detType);
243  proxy->pushProperty(QxrdDetectorProxy::BooleanProperty, "enabled", "Detector Enabled?", true);
244  proxy->pushProperty(QxrdDetectorProxy::StringProperty, "detectorName", "Detector Name", "A " + QxrdDetectorThread::detectorTypeName(detType));
245 // proxy->pushProperty(QxrdDetectorProxy::ExtensionProperty, "extension", "File extension", "tif");
246  }
247 }
248 
250 {
251  proxy->clearProperties();
252 
253  if (proxy) {
254  proxy->pushProperty(QxrdDetectorProxy::DetectorNumberProperty, "detectorNumber", "Detector Number", get_DetectorNumber());
255  proxy->pushProperty(QxrdDetectorProxy::DetectorTypeProperty, "detectorType", "Detector Type", get_DetectorType());
256  proxy->pushProperty(QxrdDetectorProxy::BooleanProperty, "enabled", "Detector Enabled?", get_Enabled());
257  proxy->pushProperty(QxrdDetectorProxy::StringProperty, "detectorName", "Detector Name", get_DetectorName());
258 // proxy->pushProperty(QxrdDetectorProxy::ExtensionProperty, "extension", "File extension", get_Extension());
259  }
260 }
261 
263 {
264  if (proxy) {
265  set_Enabled(proxy->property("enabled").toBool());
266  set_DetectorNumber(proxy->property("detectorNumber").toInt());
267  set_DetectorName(proxy->property("detectorName").toString());
268 // set_Extension(proxy->property("extension").toString());
269  }
270 }
271 
273 {
275 
276  if (m_DetectorControlWindow == NULL) {
280  m_Experiment,
282  sharedFromThis(),
283  m_Processor, NULL), &QObject::deleteLater);
284 
286 
287  if (dp) {
288  dp->setControlWindow(m_DetectorControlWindow);
289  }
290  }
291 
293  m_DetectorControlWindow->show();
294  m_DetectorControlWindow->raise();
295  }
296 }
297 
299 {
301 
302  m_NAcquiredImages.release(1);
303 }
304 
306 {
307 }
308 
310 {
312 
313  if (acq) {
314  while (1) {
315  if (m_NAcquiredImages.tryAcquire(1, 100)) {
316  return m_AcquiredImages.dequeue();
317  } else if (acq->get_Cancelling()) {
318  return QcepImageDataBasePtr();
319  }
320  }
321  }
322 
323  return QcepImageDataBasePtr();
324 }
325 
327 {
329 
330  while (m_NAcquiredImages.available() >= 1) {
331  res = acquireFrame();
332  }
333 
334  return res;
335 }
336 
338 {
339  if (m_Processor) {
340  return m_Processor->get_RoiCounts();
341  } else {
342  return QcepDoubleVector();
343  }
344 }
345 
347 {
348  if (m_Processor) {
349  return m_Processor->get_RoiCounts().value(chan);
350  } else {
351  return 0;
352  }
353 }
QSharedPointer< QxrdDetectorControlWindow > QxrdDetectorControlWindowPtr
QSharedPointer< QxrdExperiment > QxrdExperimentPtr
void statusMessage(QString msg, QDateTime ts=QDateTime::currentDateTime()) const
QSharedPointer< QxrdDetectorProxy > QxrdDetectorProxyPtr
virtual void pushPropertiesToProxy(QxrdDetectorProxyPtr proxy)
QxrdExperimentWPtr m_Experiment
Definition: qxrddetector.h:93
QcepImageBaseQueue m_AcquiredImages
Definition: qxrddetector.h:101
qint64 qcepDebug(int cond)
Definition: qcepdebug.cpp:26
QxrdDetector(QcepSettingsSaverWPtr saver, QxrdExperimentWPtr expt, QxrdAcquisitionWPtr acq, int detType, int detNum, QcepObject *parent)
static QScriptValue toScriptValue(QScriptEngine *engine, const QxrdDetectorPtr &det)
virtual void onExposureTimeChanged()
void criticalMessage(QString msg, QDateTime ts=QDateTime::currentDateTime()) const
QSharedPointer< QxrdAcquisition > QxrdAcquisitionPtr
void printMessage(QString msg, QDateTime ts=QDateTime::currentDateTime()) const
virtual void readSettings(QSettings *set, QString section)
Definition: qcepobject.cpp:119
QSharedPointer< QxrdROICoordinates > QxrdROICoordinatesPtr
void detectorStateChanged()
QxrdExperimentWPtr experiment()
#define GUI_THREAD_CHECK
Definition: qcepmacros.h:10
virtual void pullPropertiesfromProxy(QxrdDetectorProxyPtr proxy)
QSharedPointer< QxrdROICalculator > QxrdROICalculatorPtr
QString detectorTypeName
Definition: qxrddetector.h:110
QMutex m_Mutex
Definition: qxrddetector.h:99
QxrdAcquisitionWPtr m_Acquisition
Definition: qxrddetector.h:94
QWeakPointer< QxrdExperiment > QxrdExperimentWPtr
void openControlWindow()
bool checkDetectorEnabled()
void enqueueAcquiredFrame(QcepImageDataBasePtr img)
QxrdROICoordinatesPtr roi(int i)
void startOrStop(bool enabled)
QVector< double > QcepDoubleVector
Definition: qcepmacros.h:19
virtual QcepImageDataBasePtr acquireFrame()
virtual void beginFrame()
static void fromScriptValue(const QScriptValue &obj, QxrdDetectorPtr &det)
QxrdDetectorProcessorPtr m_Processor
Definition: qxrddetector.h:95
void writeSettings(QSettings *settings, QString section)
QSharedPointer< T > dequeue()
void enqueue(QSharedPointer< T > data)
void readSettings(QSettings *settings, QString section)
QcepSettingsSaverWPtr m_Saver
Definition: qxrddetector.h:92
virtual void startDetector()
QSharedPointer< QxrdDetectorProcessor > QxrdDetectorProcessorPtr
QxrdDetectorProcessorPtr processor()
QxrdDetectorControlWindowPtr m_DetectorControlWindow
Definition: qxrddetector.h:96
QxrdAcquisitionWPtr acquisition()
virtual void stopDetector()
virtual ~QxrdDetector()
virtual void writeSettings(QSettings *set, QString section)
Definition: qcepobject.cpp:114
QWeakPointer< QxrdAcquisition > QxrdAcquisitionWPtr
static void pushDefaultsToProxy(QxrdDetectorProxyPtr proxy, int detType)
virtual QcepImageDataBasePtr acquireFrameIfAvailable()
QcepDoubleVector scalerCounts()
virtual void shutdownAcquisition()
QSharedPointer< QxrdDetector > QxrdDetectorPtr
virtual void endAcquisition()
QSharedPointer< QcepImageDataBase > QcepImageDataBasePtr
static QString detectorTypeName(int detectorType)
void initialize()
QSemaphore m_NAcquiredImages
Definition: qxrddetector.h:100
void valueChanged(bool val, int index)
virtual void beginAcquisition(double exposure)
QWeakPointer< QcepSettingsSaver > QcepSettingsSaverWPtr