QXRD  0.11.16
qxrddetectorprocessor.cpp
Go to the documentation of this file.
1 #include "qcepmacros.h"
3 #include "qxrdcenterfinder.h"
4 #include "qxrdintegrator.h"
5 #include "qcepmutexlocker.h"
6 #include "qxrdroicalculator.h"
7 #include "qxrddebug.h"
8 #include "qxrdexperiment.h"
10 #include "qxrdacquisition.h"
11 #include <QDir>
12 #include "qxrdfilesaver.h"
13 #include "qcepallocator.h"
14 
18  QxrdFileSaverWPtr fsav,
19  QxrdDetectorWPtr det)
20  : QcepObject("acquisitionProcessor", doc.data()),
21  m_Saver(saver),
22  m_DetectorDisplayMode(saver, this, "detectorDisplayMode", ImageDisplayMode, "Detector Display Mode"),
23  m_PerformDarkSubtraction(saver, this, "performDarkSubtraction", true, "Perform Dark Subtraction?"),
24  m_SaveRawImages(saver, this, "saveRawImages", true, "Save Raw Images?"),
25  m_SaveDarkImages(saver, this, "saveDarkImages", true, "Save Dark Images?"),
26  m_PerformBadPixels(saver, this, "performBadPixels", true, "Perform Bad Pixel Correction?"),
27  m_PerformGainCorrection(saver, this, "performGainCorrection", true, "Perform Gain Correction?"),
28  m_SaveSubtracted(saver, this, "saveSubtracted", true, "Save Dark Subtracted Data?"),
29  m_DarkImagePath(saver, this, "darkImagePath", "", "Dark Images Path"),
30  m_RawDataSubdir(saver, this, "rawDataSubdir", "", "Raw Data Subdirectory"),
31  m_DarkDataSubdir(saver, this, "darkDataSubdir", "", "Dark Data Subdirectory"),
32  m_BadPixelsPath(saver, this, "badPixelsPath", "", "Bad Pixels Path"),
33  m_GainMapPath(saver, this, "gainMapPath", "", "Gain Map Path"),
34  m_SubtractedSubdir(saver, this, "subtractedSubdir", "", "Subtracted Data Subdirectory"),
35  m_MaskPath(saver, this, "maskPath", "", "Mask Path"),
36 
37  m_PerformIntegration(saver, this, "performIntegration", true, "Perform Circular Integration?"),
38  m_DisplayIntegratedData(saver, this, "displayIntegratedData", true, "Display Integrated Data?"),
39  m_SaveIntegratedData(saver, this, "saveIntegratedData", true, "Save Integrated Data?"),
40  m_IntegratedDataFile(saver, this, "integratedDataFile", "", "Integrated Data File"),
41  m_SaveIntegratedDataSeparate(saver, this, "saveIntegratedDataSeparate", false, "Save Integrated Data in Separate Files?"),
42  m_IntegratedDataSubdir(saver, this, "integratedDataSubdir", "", "Integrated Data Subdir"),
43 
44  m_AccumulateIntegrated2D(saver, this, "accumulateIntegrated2D", 0, "Accumulate integrated data in 2-d dataset"),
45  m_AccumulateIntegratedName(saver, this, "accumulateIntegratedName", "", "Dataset name for accumulated data"),
46 
47  m_CalculateROICounts(saver, this, "calculateROICounts", true, "Calculate ROI Counts"),
48  m_DisplayROIBorders(saver, this, "displayROIBorders", true, "Display ROIs in image"),
49 
50  m_RoiCounts(QcepSettingsSaverWPtr(), this, "roiCounts", QcepDoubleVector(), "ROI Counts"),
51 
52  m_Experiment(doc),
53  m_FileSaver(fsav),
54  m_Detector(det),
56  m_Integrator(),
60 {
62  printf("QxrdDetectorProcessor::QxrdDetectorProcessor(%p)\n", this);
63  }
64 
68 
73 }
74 
76 {
78  printf("QxrdDetectorProcessor::~QxrdDetectorProcessor(%p)\n", this);
79  }
80 }
81 
83 {
84  m_ControlWindow = ctrl;
85 }
86 
87 void QxrdDetectorProcessor::readSettings(QSettings *settings, QString section)
88 {
89  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
90 
91  QcepObject::readSettings(settings, section);
92 
93  if (m_CenterFinder) {
94  m_CenterFinder->readSettings(settings, section+"/centerFinder");
95  }
96 
97  if (m_Integrator) {
98  m_Integrator->readSettings(settings, section+"/integrator");
99  }
100 
101  if (m_ROICalculator) {
102  m_ROICalculator->readSettings(settings, section+"/roiCalculator");
103  }
104 
105  if (m_ImagePlotSettings) {
106  m_ImagePlotSettings->readSettings(settings, section+"/imagePlotSettings");
107  }
108 }
109 
110 void QxrdDetectorProcessor::writeSettings(QSettings *settings, QString section)
111 {
112  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
113 
114  QcepObject::writeSettings(settings, section);
115 
116  if (m_CenterFinder) {
117  m_CenterFinder->writeSettings(settings, section+"/centerFinder");
118  }
119 
120  if (m_Integrator) {
121  m_Integrator->writeSettings(settings, section+"/integrator");
122  }
123 
124  if (m_ROICalculator) {
125  m_ROICalculator->writeSettings(settings, section+"/roiCalculator");
126  }
127 
128  if (m_ImagePlotSettings) {
129  m_ImagePlotSettings->writeSettings(settings, section+"/imagePlotSettings");
130  }
131 }
132 
133 QScriptValue QxrdDetectorProcessor::toScriptValue(QScriptEngine *engine, const QxrdDetectorProcessorPtr &proc)
134 {
135  return engine->newQObject(proc.data());
136 }
137 
139 {
140  QObject *qobj = obj.toQObject();
141 
142  if (qobj) {
143  QxrdDetectorProcessor *qproc = qobject_cast<QxrdDetectorProcessor*>(qobj);
144 
145  if (qproc) {
146  proc = QxrdDetectorProcessorPtr(qproc);
147  }
148  }
149 }
150 
152 {
153  return m_CenterFinder;
154 }
155 
157 {
158  return m_Integrator;
159 }
160 
162 {
163  return m_ROICalculator;
164 }
165 
167 {
168  return m_Data;
169 }
170 
172 {
173  return m_DarkImage;
174 }
175 
177 {
178  return m_BadPixels;
179 }
180 
182 {
183  return m_GainMap;
184 }
185 
187 {
188  return m_Mask;
189 }
190 
192 {
193  return m_Overflow;
194 }
195 
197  int fileIndex,
198  int phase,
199  int nPhases,
200  bool trig)
201 {
203 
204  if (det) {
205  QxrdAcquisitionPtr acq(det->acquisition());
206 
207  if (image && acq) {
208  QDateTime now = QDateTime::currentDateTime();
209  double msec = QcepImageDataBase::secondsSinceEpoch();
210 
211  image -> set_Title (image -> get_FileBase());
212  image -> set_ExposureTime (acq -> get_ExposureTime());
213  image -> set_DateTime (now);
214  image -> set_TimeStamp (msec);
215  image -> set_HBinning (det -> get_HBinning());
216  image -> set_VBinning (det -> get_VBinning());
217 
218  image -> set_DataType(QcepInt32ImageData::Raw32Data);
219 
220  image -> set_UserComment1 (acq -> get_UserComment1());
221  image -> set_UserComment2 (acq -> get_UserComment2());
222  image -> set_UserComment3 (acq -> get_UserComment3());
223  image -> set_UserComment4 (acq -> get_UserComment4());
224  image -> set_ObjectSaved (false);
225  image -> set_Triggered (trig);
226  image -> set_Normalization (acq -> get_Normalization());
227 
228  image -> set_ImageNumber (fileIndex);
229  image -> set_PhaseNumber (phase);
230  image -> set_NPhases (nPhases);
231 
232  acq -> copyDynamicProperties(image.data());
233  }
234  }
235 }
236 
239  int fileIndex,
240  int phase,
241  int nPhases,
242  bool trig)
243 {
244  if (QThread::currentThread() != thread()) {
245  QMetaObject::invokeMethod(this, "processAcquiredImage",
246  Q_ARG(QcepInt32ImageDataPtr, image),
247  Q_ARG(QcepMaskDataPtr, overflow),
248  Q_ARG(int, fileIndex),
249  Q_ARG(int, phase),
250  Q_ARG(int, nPhases),
251  Q_ARG(bool, trig));
252  } else {
253  if (image) {
254  m_Data = image;
256 
257  QcepDoubleVector scalers;
258 
259  QcepImageDataBasePtr img = image;
260 
261  if (qcepDebug(DEBUG_ACQUIRE)) {
262  printMessage(tr("QxrdDetectorProcessor::processAcquiredImage(\"%1\",...)")
263  .arg(img->get_FileName()));
264  }
265 
266  QTime tic;
267  tic.start();
268 
269  setAcquiredImageProperties(img, fileIndex, phase, nPhases, trig);
270 
272 
273  if (get_SaveRawImages()) {
274  doSaveRawImage(img, overflow);
275 
276  int saveTime = tic.restart();
277 
279  printMessage(tr("Save took %1 msec").arg(saveTime));
280  }
281  }
282 
283  if (img && get_PerformDarkSubtraction()) {
284  img = doDarkSubtraction(img);
285 
286  int subTime = tic.restart();
287 
289  printMessage(tr("Subtraction took %1 msec").arg(subTime));
290  }
291  }
292 
293  if (img && get_PerformBadPixels()) {
294  img = doBadPixels(img);
295 
296  int pxlTime = tic.restart();
297 
299  printMessage(tr("Bd pixels took %1 msec").arg(pxlTime));
300  }
301  }
302 
303  if (img && get_PerformGainCorrection()) {
304  img = doGainCorrection(img);
305 
306  int gainTime = tic.restart();
307 
309  printMessage(tr("Gain correction took %1 msec").arg(gainTime));
310  }
311  }
312 
313  if (ctrl && get_DetectorDisplayMode() == ImageDisplayMode) {
314  ctrl->displayNewData(img, overflow);
315 
316  int displayTime = tic.restart();
317 
319  printMessage(tr("Display took %1 msec").arg(displayTime));
320  }
321  }
322 
323  if (img && get_CalculateROICounts()) {
324  const QcepDoubleVector s = doCalculateROICounts(img);
325 
326  scalers += s;
327 
328  set_RoiCounts(scalers);
329 
330  int roiTime = tic.restart();
331 
333  printMessage(tr("ROI calculation took %1 msec").arg(roiTime));
334  }
335  }
336 
337  if (img && get_SaveSubtracted()) {
338  doSaveSubtractedImage(img, overflow);
339 
340  int saveTime = tic.restart();
341 
343  printMessage(tr("Save Subtracted took %1 msec").arg(saveTime));
344  }
345  }
346 
347  // if (get_PerformIntegration()) {
348  // integ = doPerformIntegration(img);
349 
350  // if (ctrl && get_DisplayIntegratedData()) {
351  // ctrl->displayIntegratedData(integ);
352  // }
353 
354  // if (get_SaveIntegratedData()) {
355  // doSaveIntegratedData(integ);
356  // }
357 
358  // if (get_SaveIntegratedDataSeparate()) {
359  // doSaveIntegratedDataSeparate(integ);
360  // }
361 
362  // if (get_AccumulateIntegrated2D()) {
363  // doAccumulateIntegrated2D(integ);
364  // }
365  // }
366  }
367  }
368 }
369 
372  int fileIndex)
373 {
374  if (QThread::currentThread() != thread()) {
375  QMetaObject::invokeMethod(this, "processDarkImage",
376  Q_ARG(QcepInt32ImageDataPtr, image),
377  Q_ARG(QcepMaskDataPtr, overflow),
378  Q_ARG(int, fileIndex));
379  } else {
380  if (image) {
381  if (qcepDebug(DEBUG_ACQUIRE)) {
382  printMessage(tr("QxrdDetectorProcessor::processDarkImage(\"%1\",...)")
383  .arg(image->get_FileName()));
384  }
385 
386  setAcquiredImageProperties(image, fileIndex, -1, 0, true);
387 
388  if (get_SaveDarkImages()) {
389  doSaveDarkImage(image, overflow);
390 
391  set_DarkImagePath(image->get_FileName());
392  }
393 
394  m_DarkImage = image;
395  }
396  }
397 }
398 
400 {
401  if (QThread::currentThread() != thread()) {
402  QMetaObject::invokeMethod(this, "processIdleImage",
403  Q_ARG(QcepImageDataBasePtr, image));
404  } else {
405  if (image) {
407 
408  if (expt) {
409  QxrdAcquisitionPtr acq(expt->acquisition());
410 
411  if (acq && acq->get_LiveViewAtIdle()) {
412  QcepDoubleVector scalers;
413 
414  QcepImageDataBasePtr img = image;
415 
416  if (qcepDebug(DEBUG_ACQUIRE)) {
417  printMessage(tr("QxrdDetectorProcessor::processIdleImage(\"%1\")")
418  .arg(image->get_FileName()));
419  }
420 
421  QTime tic;
422  tic.start();
423 
424  setAcquiredImageProperties(img, -1, -1, 0, true);
425 
427 
428  if (img && get_PerformDarkSubtraction()) {
429  img = doDarkSubtraction(img);
430 
431  int subTime = tic.restart();
432 
434  printMessage(tr("Subtraction took %1 msec").arg(subTime));
435  }
436  }
437 
438  if (img && get_PerformBadPixels()) {
439  img = doBadPixels(img);
440 
441  int pxlTime = tic.restart();
442 
444  printMessage(tr("Bd pixels took %1 msec").arg(pxlTime));
445  }
446  }
447 
448  if (img && get_PerformGainCorrection()) {
449  img = doGainCorrection(img);
450 
451  int gainTime = tic.restart();
452 
454  printMessage(tr("Gain correction took %1 msec").arg(gainTime));
455  }
456  }
457 
458  if (ctrl && get_DetectorDisplayMode() == ImageDisplayMode) {
459  ctrl->displayNewData(img, QcepMaskDataWPtr());
460 
461  int displayTime = tic.restart();
462 
464  printMessage(tr("Display took %1 msec").arg(displayTime));
465  }
466  }
467 
468  if (img && get_CalculateROICounts()) {
469  const QcepDoubleVector s = doCalculateROICounts(img);
470 
471  scalers += s;
472 
473  set_RoiCounts(scalers);
474 
475  int roiTime = tic.restart();
476 
478  printMessage(tr("ROI calculation took %1 msec").arg(roiTime));
479  }
480  }
481  }
482  }
483  }
484  }
485 }
486 
488 {
489  return m_ImagePlotSettings;
490 }
491 
493 {
495  QcepImageDataBasePtr res = img;
496 
497  if (img && dark) {
498  if (img->get_ExposureTime() != dark->get_ExposureTime()) {
499  printMessage("Exposure times of acquired data and dark image are different, skipping");
500  return img;
501  }
502 
503  if (img->get_Width() != dark->get_Width() ||
504  img->get_Height() != dark->get_Height()) {
505  printMessage("Dimensions of acquired data and dark image are different, skipping");
506  return img;
507  }
508 
509  if (img->get_CameraGain() != dark->get_CameraGain()) {
510  printMessage("Gains of acquired data and dark image are different, skipping");
511  return img;
512  }
513 
514  int height = img->get_Height();
515  int width = img->get_Width();
516  int nres = img -> get_SummedExposures();
517  int ndrk = dark -> get_SummedExposures();
518  int npixels = width*height;
519 
520  if (nres <= 0) nres = 1;
521 
522 
523  double ratio = ((double) nres)/((double) ndrk);
524 
526 
527  if (result) {
528  result->copyPropertiesFrom(img);
529 
530  double sumraw = 0, sumdark = 0;
531 
532  double *resptr = result->data();
533  quint32 *drkptr = dark->data();
534 
535  QcepInt16ImageDataPtr i16 = qSharedPointerDynamicCast<QcepInt16ImageData>(img);
536 
537  if (i16) {
538  quint16 *imgptr = i16->data();
539 
540  for (int i=0; i<npixels; i++) {
541  double valraw = imgptr[i];
542  double valdark = drkptr[i];
543 
544  sumraw += valraw;
545  sumdark += valdark;
546 
547  resptr[i] = valraw - ratio*valdark;
548  }
549  } else {
550  QcepInt32ImageDataPtr i32 = qSharedPointerDynamicCast<QcepInt32ImageData>(img);
551 
552  if (i32) {
553  quint32 *imgptr = i32->data();
554 
555  for (int i=0; i<npixels; i++) {
556  double valraw = imgptr[i];
557  double valdark = drkptr[i];
558 
559  sumraw += valraw;
560  sumdark += valdark;
561 
562  resptr[i] = valraw - ratio*valdark;
563  }
564  } else {
565  npixels = 0;
566 
567  for (int row=0; row<height; row++) {
568  for (int col=0; col<width; col++) {
569  double valraw = img -> getImageData(col, row);
570  double valdark = dark -> getImageData(col, row);
571  if (valraw == valraw && valdark == valdark) { // Check for NaNs
572  sumraw += valraw; sumdark += valdark;
573  npixels += 1;
574  double resval = valraw - ratio*valdark;
575 
576  result->setImageData(col, row, resval);
577  }
578  }
579  }
580  }
581  }
582  }
583 
584  res = result;
585  }
586 
587  return res;
588 }
589 
591 {
592  printMessage("Bad Pixel Correction not yet implemented");
593 
594  return img;
595 }
596 
598 {
599  printMessage("Gain Correction not yet implemented");
600 
601  return img;
602 }
603 
605 {
606  QcepDoubleVector res;
607 
608  if (img && m_ROICalculator) {
609  res = m_ROICalculator->values(img, m_Mask);
610  }
611 
612  if (qcepDebug(DEBUG_ACQUIRE)) {
613  QString s = "[";
614 
615  for (int i=0; i<res.count(); i++) {
616  if (i == 0) {
617  s.append(tr("%1").arg(res.value(i)));
618  } else {
619  s.append(tr(", %1").arg(res.value(i)));
620  }
621  }
622 
623  s.append("]");
624 
625  printMessage(tr("ROI Values = %1").arg(s));
626  }
627 
628  return res;
629 }
630 
632 {
635 
636  if (fsav && expt && img) {
637  QString fullPath = filePathInRawOutputDirectory(img->get_FileBase());
638 
639  fsav->saveImageData(fullPath, img, ovf, QxrdFileSaver::NoOverwrite);
640  }
641 }
642 
644 {
647 
648  if (fsav && expt && img) {
649  QString fullPath = filePathInDarkOutputDirectory(img->get_FileBase());
650 
651  fsav->saveImageData(fullPath, img, ovf, QxrdFileSaver::NoOverwrite);
652  }
653 }
654 
656 {
659 
660  if (fsav && expt && img) {
661  QString fullPath = filePathInSubtractedOutputDirectory(img->get_FileBase());
662 
663  fsav->saveImageData(fullPath, img, ovf, QxrdFileSaver::NoOverwrite);
664  }
665 }
666 
668 {
670 
671  if (expt) {
672  return QDir(expt->get_ExperimentDirectory()).filePath(expt->get_DataDirectory());
673  } else {
674  return QString();
675  }
676 }
677 
678 QString QxrdDetectorProcessor::existingOutputDirectory(QString dir, QString subdir) const
679 {
680  return QDir(dir).filePath(subdir);
681 }
682 
684 {
685  return existingOutputDirectory(dataDirectory(), get_DarkDataSubdir());
686 }
687 
689 {
690  return QDir(darkOutputDirectory()).filePath(fileName);
691 }
692 
694 {
695  return existingOutputDirectory(dataDirectory(), get_RawDataSubdir());
696 }
697 
699 {
700  return QDir(rawOutputDirectory()).filePath(fileName);
701 }
702 
704 {
705  return existingOutputDirectory(dataDirectory(), get_SubtractedSubdir());
706 }
707 
709 {
710  return QDir(subtractedOutputDirectory()).filePath(fileName);
711 }
712 
714 {
715  return existingOutputDirectory(dataDirectory(), get_IntegratedDataSubdir());
716 }
717 
719 {
720  return QDir(integratedOutputDirectory()).filePath(fileName);
721 }
722 
724 {
725  if (newPath.length() == 0) {
726  printMessage("Clear Mask");
728  } else {
729  printMessage(tr("Load mask from %1").arg(newPath));
730 
732 
733  if (mask && mask->readImage(newPath)) {
734  m_Mask = mask;
735 
737 
738  if (ctl) {
739  ctl->displayNewMask(m_Mask);
740  }
741  }
742  }
743 }
744 
746 {
747  if (newPath.length() == 0) {
748  printMessage("Clear Dark Image");
750  } else {
751  printMessage(tr("Load Dark Image from %1").arg(newPath));
752 
754 
755  if (dark && dark -> readImage(newPath)) {
756  m_DarkImage = dark;
757  }
758  }
759 }
760 
762 {
763  if (newPath.length() == 0) {
764  printMessage("Clear Bad Pixels");
766  } else {
767  printMessage(tr("Load Bad Pixels from %1").arg(newPath));
768 
770 
771  if (bad && bad->readImage(newPath)) {
772  m_BadPixels = bad;
773  }
774  }
775 }
776 
778 {
779  if (newPath.length() == 0) {
780  printMessage("Clear Gain Map");
781  } else {
782  printMessage(tr("Load Gain Map from %1").arg(newPath));
783  }
784 }
QSharedPointer< QxrdDetectorControlWindow > QxrdDetectorControlWindowPtr
QSharedPointer< QxrdExperiment > QxrdExperimentPtr
void processAcquiredImage(QcepInt32ImageDataPtr image, QcepMaskDataPtr overflow, int fileIndex, int phase, int nPhases, bool trig)
QSharedPointer< QxrdCenterFinder > QxrdCenterFinderPtr
QString darkOutputDirectory() const
void onBadPixelsPathChanged(QString newPath)
QxrdDetectorProcessor(QcepSettingsSaverWPtr saver, QxrdExperimentWPtr doc, QxrdFileSaverWPtr fsav, QxrdDetectorWPtr det)
QcepDoubleImageDataPtr badPixels()
qint64 qcepDebug(int cond)
Definition: qcepdebug.cpp:26
void valueChanged(QString val, int index)
static void fromScriptValue(const QScriptValue &obj, QxrdDetectorProcessorPtr &proc)
QxrdDetectorControlWindowWPtr m_ControlWindow
QcepImageDataBasePtr doGainCorrection(QcepImageDataBasePtr img)
QSharedPointer< QxrdAcquisition > QxrdAcquisitionPtr
virtual void readSettings(QSettings *set, QString section)
Definition: qcepobject.cpp:119
QcepDoubleImageDataPtr m_BadPixels
QWeakPointer< QxrdDetectorControlWindow > QxrdDetectorControlWindowWPtr
void onDarkImagePathChanged(QString newPath)
void processIdleImage(QcepImageDataBasePtr image)
QString integratedOutputDirectory() const
static QScriptValue toScriptValue(QScriptEngine *engine, const QxrdDetectorProcessorPtr &proc)
QString filePathInDarkOutputDirectory(QString fileName) const
QWeakPointer< QcepMaskData > QcepMaskDataWPtr
QSharedPointer< QxrdROICalculator > QxrdROICalculatorPtr
QcepDoubleImageDataPtr gainCorrection()
void doSaveSubtractedImage(QcepImageDataBasePtr img, QcepMaskDataPtr ovf)
QxrdROICalculatorPtr roiCalculator()
QWeakPointer< QxrdExperiment > QxrdExperimentWPtr
QxrdIntegratorPtr m_Integrator
QxrdIntegratorPtr integrator()
QWeakPointer< QxrdImagePlotSettings > QxrdImagePlotSettingsWPtr
QVector< double > QcepDoubleVector
Definition: qcepmacros.h:19
QxrdExperimentWPtr m_Experiment
QxrdImagePlotSettingsPtr m_ImagePlotSettings
static QcepDoubleImageDataPtr newDoubleImage(AllocationStrategy strat, int width, int height, QcepObject *parent)
void onMaskPathChanged(QString newPath)
QString subtractedOutputDirectory() const
QxrdImagePlotSettingsWPtr imagePlotSettings()
QString filePathInRawOutputDirectory(QString fileName) const
void setControlWindow(QxrdDetectorControlWindowWPtr ctrl)
QcepImageDataBasePtr doBadPixels(QcepImageDataBasePtr img)
QString existingOutputDirectory(QString dir, QString subdir) const
void doSaveDarkImage(QcepImageDataBasePtr img, QcepMaskDataPtr ovf)
QcepSettingsSaverWPtr m_Saver
QWeakPointer< QxrdFileSaver > QxrdFileSaverWPtr
void readSettings(QSettings *settings, QString section)
QSharedPointer< QxrdDetectorProcessor > QxrdDetectorProcessorPtr
QWeakPointer< QxrdDetector > QxrdDetectorWPtr
QSharedPointer< QxrdIntegrator > QxrdIntegratorPtr
void writeSettings(QSettings *settings, QString section)
QxrdROICalculatorPtr m_ROICalculator
QcepImageDataBasePtr m_Data
QcepDoubleImageDataPtr m_GainMap
void doSaveRawImage(QcepImageDataBasePtr img, QcepMaskDataPtr ovf)
virtual void printMessage(QString msg, QDateTime dt=QDateTime::currentDateTime()) const
Definition: qcepobject.cpp:84
void setAcquiredImageProperties(QcepImageDataBasePtr image, int fileIndex, int phase, int nPhases, bool trig)
QcepImageDataBasePtr doDarkSubtraction(QcepImageDataBasePtr img)
virtual void writeSettings(QSettings *set, QString section)
Definition: qcepobject.cpp:114
QcepInt32ImageDataPtr dark()
QSharedPointer< QcepInt32ImageData > QcepInt32ImageDataPtr
QSharedPointer< QxrdFileSaver > QxrdFileSaverPtr
void processDarkImage(QcepInt32ImageDataPtr image, QcepMaskDataPtr overflow, int fileIndex)
QcepDoubleVector doCalculateROICounts(QcepImageDataBasePtr img)
QSharedPointer< QxrdDetector > QxrdDetectorPtr
QxrdCenterFinderPtr m_CenterFinder
QString filePathInSubtractedOutputDirectory(QString fileName) const
QxrdFileSaverWPtr m_FileSaver
static QcepMaskDataPtr newMask(AllocationStrategy strat, int width, int height, int def, QcepObject *parent)
void onGainMapPathChanged(QString newPath)
QSharedPointer< QcepImageDataBase > QcepImageDataBasePtr
QSharedPointer< QcepInt16ImageData > QcepInt16ImageDataPtr
QSharedPointer< QcepMaskData > QcepMaskDataPtr
QString filePathInIntegratedOutputDirectory(QString fileName) const
QcepImageDataBasePtr data()
static QcepInt32ImageDataPtr newInt32Image(AllocationStrategy strat, int width, int height, QcepObject *parent)
QcepInt32ImageDataPtr m_DarkImage
static double secondsSinceEpoch()
QWeakPointer< QcepSettingsSaver > QcepSettingsSaverWPtr
QxrdCenterFinderPtr centerFinder()
QString rawOutputDirectory() const
QSharedPointer< QcepDoubleImageData > QcepDoubleImageDataPtr