QXRD  0.11.16
qxrddataprocessorthreaded.cpp
Go to the documentation of this file.
1 #include "qxrddebug.h"
2 #include "qcepmutexlocker.h"
4 #include "qxrdintegrator.h"
5 #include "qxrdcenterfinder.h"
6 #include "qcepimagedata.h"
7 #include "qcepallocator.h"
8 #include "qxrdfilesaverthread.h"
9 #include "qxrdfilesaver.h"
10 #include "qxrdapplication.h"
11 #include "qxrdroidata.h"
12 #include "qcepintegrateddata.h"
13 #include "qxrdhistogramdata.h"
14 #include "qxrdexperiment.h"
15 #include <QtConcurrentRun>
16 #include <QDirIterator>
17 
21  QxrdFileSaverWPtr filesaver)
22  : QxrdDataProcessorBase(saver, doc, acq, filesaver),
23  m_CorrectedImages(prop_CorrectionQueueLength(), this),
24  m_IntegratedData(prop_IntegrationQueueLength(), this),
25  m_ROIData(NULL, this),
26  m_HistogramData(NULL, this)
27 {
32 
33 // prop_CorrectionQueueLength()->setDebug(true);
34 // prop_IntegrationQueueLength()->setDebug(true);
35 }
36 
38 {
39 }
40 
42 {
43 }
44 
46 {
47  QcepMutexLocker lock(__FILE__, __LINE__, image->mutex());
48  int height = image->get_Height();
49  int width = image->get_Width();
50  int nres = image-> get_SummedExposures();
51  int npixels = width*height;
52  if (nres <= 0) nres = 1;
53  double avgraw = 0;
54  quint16 *img = image->data();
55 
56  for (int i=0; i<npixels; i++) {
57  avgraw += *img++;
58  }
59 
60  set_AverageRaw(avgraw/npixels/nres);
61  set_Average(get_AverageRaw() - get_AverageDark());
62 
63  if (liveView) {
64  if (qcepDebug(DEBUG_PROCESS)) {
65  printMessage("Image Live View");
66  }
67 
68  QcepDoubleImageDataPtr corrected = takeNextFreeImage(image->get_Width(), image->get_Height());
70 
71  corrected->copyFrom(image);
72  subtractDarkImage(corrected, dark);
73 
74  newData(corrected, QcepMaskDataPtr());
75 
76  m_LiveData = corrected;
77  }
78 }
79 
81 {
82  QcepDoubleImageDataPtr corrected = takeNextFreeImage(image->get_Width(), image->get_Height());
83 
84  m_CorrectedImages.enqueue(QtConcurrent::run(this,
86  corrected, image, darkImage(), mask(), overflow));
87 }
88 
90 {
91  QcepDoubleImageDataPtr corrected = takeNextFreeImage(image->get_Width(), image->get_Height());
92 
93  m_CorrectedImages.enqueue(QtConcurrent::run(this,
95  corrected, image, darkImage(), mask(), overflow));
96 }
97 
99 {
100  QcepDoubleImageDataPtr corrected = takeNextFreeImage(image->get_Width(), image->get_Height());
101 
104 
105  m_CorrectedImages.enqueue(QtConcurrent::run(this,
106  p,
107  corrected, image, darkImage(), mask(), overflow));
108 }
109 
111 {
112  QcepDoubleImageDataPtr corrected = takeNextFreeImage(image->get_Width(), image->get_Height());
113 
116 
117  m_CorrectedImages.enqueue(QtConcurrent::run(this,
118  p,
119  corrected, image, darkImage(), overflow, v));
120 }
121 
124 {
125  QThread::currentThread()->setObjectName("correctInt16Image");
126 
127  if (qcepDebug(DEBUG_PROCESS)) {
128  printMessage(tr("QxrdDataProcessorThreaded::correctInt16Image"));
129  }
130 
131  if (image) {
132  if ((image -> get_ImageNumber()) >= 0) {
133  return processAcquiredInt16Image(corrected, image, dark, mask, overflow);
134  } else {
135  if (get_SaveDarkImages()) {
136  saveNamedImageData(image->get_FileName(), image, overflow);
137  set_DarkImagePath(image->get_FileName());
138  }
139 
140  newDarkImage(image);
141  }
142  }
143 
144  return QcepDoubleImageDataPtr();
145 }
146 
149 {
150  QThread::currentThread()->setObjectName("correctInt32Image");
151 
152  if (qcepDebug(DEBUG_PROCESS)) {
153  printMessage(tr("QxrdDataProcessorThreaded::correctInt32Image"));
154  }
155 
156  if (image) {
157  if ((image -> get_ImageNumber()) >= 0) {
158  return processAcquiredInt32Image(corrected, image, dark, mask, overflow);
159  } else {
160  if (get_SaveDarkImages()) {
161  saveNamedImageData(image->get_FileName(), image, overflow);
162 
163  set_DarkImagePath(image->get_FileName());
164  }
165 
166  newDarkImage(image);
167  }
168  }
169 
170  return QcepDoubleImageDataPtr();
171 }
172 
175 {
176  QThread::currentThread()->setObjectName("correctDoubleImage");
177 
178  if (qcepDebug(DEBUG_PROCESS)) {
179  printMessage(tr("QxrdDataProcessorThreaded::correctDoubleImage"));
180  }
181 
182  if (image) {
183  if ((image -> get_ImageNumber()) >= 0) {
184  return processAcquiredDoubleImage(corrected, image, dark, mask, overflow);
185  } else {
186  if (get_SaveDarkImages()) {
187  saveNamedImageData(image->get_FileName(), image, overflow);
188 
189  set_DarkImagePath(image->get_FileName());
190  }
191 
192  newDarkImage(image);
193  }
194  }
195 
196  return QcepDoubleImageDataPtr();
197 }
198 
201 {
202  QThread::currentThread()->setObjectName("correctDoubleImage");
203 
204  if (qcepDebug(DEBUG_PROCESS)) {
205  printMessage(tr("QxrdDataProcessorThreaded::correctDoubleImage"));
206  }
207 
208  if (image) {
209  if ((image -> get_ImageNumber()) >= 0) {
210  return processAcquiredDoubleImage(corrected, image, dark, image->mask(), overflow, v);
211  } else {
212  if (get_SaveDarkImages()) {
213  saveNamedImageData(image->get_FileName(), image, overflow);
214 
215  set_DarkImagePath(image->get_FileName());
216  }
217 
218  newDarkImage(image);
219  }
220  }
221 
222  return QcepDoubleImageDataPtr();
223 }
224 
226 {
228  QcepMaskDataPtr mask = (img ? img->mask() : QcepMaskDataPtr());
230 
231  if (img) {
233  integ,
234  img, mask,
235  centerFinder() -> get_CenterX(),
236  centerFinder() -> get_CenterY()));
237 
239  img, mask));
240 
242  img, mask));
243  }
244 }
245 
247  (QcepIntegratedDataPtr integ, QcepDoubleImageDataPtr image, QcepMaskDataPtr mask, double /*cx*/, double /*cy*/)
248 {
249  QThread::currentThread()->setObjectName("integrateImage");
250 
251  if (qcepDebug(DEBUG_PROCESS)) {
252  printMessage(tr("QxrdDataProcessorThreaded::integrateImage"));
253  }
254 
255  if (image && get_PerformIntegration()) {
256  QTime tic;
257  tic.start();
258 
259  m_Integrator -> performIntegration(integ, image, mask);
260 
261  updateEstimatedTime(prop_PerformIntegrationTime(), tic.restart());
262 
263  return integ;
264  }
265 
266  return QcepIntegratedDataPtr();
267 }
268 
270 {
271  if (qcepDebug(DEBUG_PROCESS)) {
272  printMessage(tr("QxrdDataProcessorThreaded::onIntegratedDataAvailable"));
273  }
274 
276 
277  if (integ) {
278  writeOutputScan(integ);
279  displayIntegratedData(integ);
280 
281  if (get_AccumulateIntegrated2D()) {
282  m_Integrator -> appendIntegration(get_AccumulateIntegratedName(), integ);
283  }
284  }
285 }
286 
289 {
290  QThread::currentThread()->setObjectName("calculateROI");
291 
292  if (qcepDebug(DEBUG_PROCESS)) {
293  printMessage(tr("QxrdDataProcessorThreaded::calculateROI"));
294  }
295 
296  return QxrdROIDataPtr();
297 }
298 
300 {
301  if (qcepDebug(DEBUG_PROCESS)) {
302  printMessage(tr("QxrdDataProcessorThreaded::onROIDataAvailable"));
303  }
304 
305  QxrdROIDataPtr roiData = m_ROIData.dequeue();
306 }
307 
310 {
311  QThread::currentThread()->setObjectName("calculateHistogram");
312 
313  if (qcepDebug(DEBUG_PROCESS)) {
314  printMessage(tr("QxrdDataProcessorThreaded::calculateHistogram"));
315  }
316 
317  return QxrdHistogramDataPtr();
318 }
319 
321 {
322  if (qcepDebug(DEBUG_PROCESS)) {
323  printMessage(tr("QxrdDataProcessorThreaded::onHistogramDataAvailable"));
324  }
325 
327 }
328 
329 double QxrdDataProcessorThreaded::estimatedProcessingTime(double estSerialTime, double estParallelTime)
330 {
331  int nThreads = QThreadPool::globalInstance()->maxThreadCount();
332 
333  if (nThreads >= 2) {
334  return qMax(estSerialTime, estParallelTime/((double)nThreads));
335  } else {
336  return estSerialTime + estParallelTime;
337  }
338 }
339 
341 {
343  int first = true;
344 
345  foreach(QString name, names) {
347  QString path = filePathInDataDirectory(name);
348 
349  if (img->readImage(path)) {
350  printMessage(tr("Load image from %1").arg(path));
351  statusMessage(tr("Load image from %1").arg(path));
352 
353  img -> loadMetaData();
354 
355  int typ = img->get_DataType();
356 
357  if ((typ == QcepDoubleImageData::Raw16Data) ||
359  {
361  }
362 
363  if (first) {
364  summed->copyFrom(img);
365  first = false;
366  } else {
367  summed->accumulateImage(img);
368  }
369  } else {
370  printMessage(tr("Couldn't load %1").arg(path));
371  statusMessage(tr("Couldn't load %1").arg(path));
372  }
373  }
374 
375  if (first) {
376  printMessage(tr("No images were loaded"));
377  statusMessage(tr("No images were loaded"));
378  } else {
379  newData(summed, QcepMaskDataPtr());
380  }
381 }
382 
384 {
385  QcepDoubleImageDataPtr summed = data();
386 
387  foreach(QString name, names) {
389  QString path = filePathInDataDirectory(name);
390 
391  if (img->readImage(path)) {
392  printMessage(tr("Load image from %1").arg(path));
393  statusMessage(tr("Load image from %1").arg(path));
394 
395  img -> loadMetaData();
396 
397  int typ = img->get_DataType();
398 
399  if ((typ == QcepDoubleImageData::Raw16Data) ||
401  {
403  }
404 
405  summed->add(img);
406  } else {
407  printMessage(tr("Couldn't load %1").arg(path));
408  statusMessage(tr("Couldn't load %1").arg(path));
409  }
410  }
411 
412  newData(summed, QcepMaskDataPtr());
413 }
414 
416 {
417  QcepDoubleImageDataPtr summed = data();
418 
419  foreach(QString name, names) {
421  QString path = filePathInDataDirectory(name);
422 
423  if (img->readImage(path)) {
424  printMessage(tr("Load image from %1").arg(path));
425  statusMessage(tr("Load image from %1").arg(path));
426 
427  img -> loadMetaData();
428 
429  int typ = img->get_DataType();
430 
431  if ((typ == QcepDoubleImageData::Raw16Data) ||
433  {
435  }
436 
437  summed->subtract(img);
438  } else {
439  printMessage(tr("Couldn't load %1").arg(path));
440  statusMessage(tr("Couldn't load %1").arg(path));
441  }
442  }
443 
444  newData(summed, QcepMaskDataPtr());
445 }
446 
448 {
449  m_Integrator -> clearAccumulator(get_AccumulateIntegratedName());
450 }
451 
453 {
454  int nImages = names.count();
455  m_Integrator -> prepareAccumulator(get_AccumulateIntegratedName(), nImages);
456 
457  foreach(QString name, names) {
459  QString path = filePathInDataDirectory(name);
460 
461  if (img->readImage(path)) {
462  printMessage(tr("Load image from %1").arg(path));
463  statusMessage(tr("Load image from %1").arg(path));
464 
465  img -> loadMetaData();
466 
467  m_Integrator -> appendIntegration(get_AccumulateIntegratedName(), img, mask());
468  } else {
469  printMessage(tr("Couldn't load %1").arg(path));
470  statusMessage(tr("Couldn't load %1").arg(path));
471  }
472  }
473 
474  m_Integrator -> completeAccumulator(get_AccumulateIntegratedName());
475 }
476 
477 void QxrdDataProcessorThreaded::saveAccumulator(QString &path, QString filter)
478 {
479  m_Integrator -> saveAccumulator(get_AccumulateIntegratedName(), path, filter);
480 }
481 
483 {
484  QcepDoubleImageDataPtr image = data();
485 
486  if (image) {
487  int wid = image->get_Width();
488  int hgt = image->get_Height();
489 
490  for (int y=0; y<hgt; y++) {
491  for (int x=0; x<wid/2; x++) {
492  double val1 = image->getImageData(x,y);
493  double val2 = image->getImageData(wid-x-1, y);
494 
495  image->setValue(wid-x-1, y, val1);
496  image->setValue(x,y, val2);
497  }
498  }
499  }
500 
501  newData(image, QcepMaskDataPtr());
502 }
503 
505 {
506  QcepDoubleImageDataPtr image = data();
507 
508  if (image) {
509  int wid = image->get_Width();
510  int hgt = image->get_Height();
511 
512  for (int x=0; x<wid; x++) {
513  for (int y=0; y<hgt/2; y++) {
514  double val1 = image->getImageData(x,y);
515  double val2 = image->getImageData(x, hgt-y-1);
516 
517  image->setValue(x, hgt-y-1, val1);
518  image->setValue(x,y, val2);
519  }
520  }
521  }
522 
523  newData(image, QcepMaskDataPtr());
524 }
525 
526 void QxrdDataProcessorThreaded::projectImages(QStringList names, int px, int py, int pz)
527 {
528  QcepDoubleImageDataPtr sumx, sumy, sumz;
529 
530  int nx = 0;
531  int ny = 0;
532  int nz = names.count();
533  int first = true;
534 
535  if (px) {
536  sumx = takeNextFreeImage(0,0);
537  printMessage(tr("Projecting %1 images onto X").arg(nz));
538  }
539 
540  if (py) {
541  sumy = takeNextFreeImage(0,0);
542  printMessage(tr("Projecting %1 images onto Y").arg(nz));
543  }
544 
545  if (pz) {
546  sumz = takeNextFreeImage(0,0);
547  printMessage(tr("Projecting %1 images onto Z").arg(nz));
548  }
549 
551 
552  if (expt) {
553  expt->commenceWork(nz);
554  }
555 
556  for (int i=0; i<nz; i++) {
558  QString path = filePathInDataDirectory(names[i]);
559 
560  if (img->readImage(path)) {
561  printMessage(tr("Load image from %1").arg(path));
562  statusMessage(tr("Load image from %1").arg(path));
563 
564  img->loadMetaData();
565  int typ = img->get_DataType();
566 
567  if ((typ == QcepDoubleImageData::Raw16Data) ||
569  {
571  }
572 
573  if (first) {
574  nx = img->get_Width();
575  ny = img->get_Height();
576 
577  if (px) {
578  sumx->copyPropertiesFrom(img);
579  sumx->resize(nz,ny);
580  sumx->clear();
581  sumx->set_SummedExposures(0);
582  }
583 
584  if (py) {
585  sumy->copyPropertiesFrom(img);
586  sumy->resize(nz,nx);
587  sumy->clear();
588  sumy->set_SummedExposures(0);
589  }
590 
591  if (pz) {
592  sumz->copyPropertiesFrom(img);
593  sumz->resize(nx,ny);
594  sumz->clear();
595  sumz->set_SummedExposures(0);
596  }
597 
598  first = false;
599  }
600 
601  if (px) {
602  sumx->prop_SummedExposures()->incValue(1);
603 
604  for (int y=0; y<ny; y++) {
605  double sum=0;
606 
607  for (int x=0; x<nx; x++) {
608  sum += img->getImageData(x,y);
609  }
610 
611  sumx->addValue(i,y, sum);
612  }
613  }
614 
615  if (py) {
616  sumy->prop_SummedExposures()->incValue(1);
617 
618  for (int x=0; x<nx; x++) {
619  double sum=0;
620 
621  for (int y=0; y<ny; y++) {
622  sum += img->getImageData(x,y);
623  }
624 
625  sumy->addValue(i,x, sum);
626  }
627  }
628 
629  if (pz) {
630  sumz->prop_SummedExposures()->incValue(1);
631 
632  for (int x=0; x<nx; x++) {
633  for (int y=0; y<ny; y++) {
634  sumz->addValue(x,y, img->getImageData(x,y));
635  }
636  }
637  }
638  }
639 
640  if (expt) {
641  expt->completeWork(1);
642  }
643  }
644 
645  if (px) {
646  newData(sumx, QcepMaskDataPtr());
647  }
648 
649  if (py) {
650  newData(sumy, QcepMaskDataPtr());
651  }
652 
653  if (pz) {
654  newData(sumz, QcepMaskDataPtr());
655  }
656 
657  if (expt) {
658  expt->finishedWork(nz);
659  }
660 }
661 
663 {
664  QcepDoubleImageDataPtr imga = data();
665 
666  foreach(QString name, names) {
668  QString path = filePathInDataDirectory(name);
669 
670  if (imgb->readImage(path)) {
671  printMessage(tr("Load image from %1").arg(path));
672  statusMessage(tr("Load image from %1").arg(path));
673 
674  imgb -> loadMetaData();
675 
676  int typ = imgb->get_DataType();
677 
678  if ((typ == QcepDoubleImageData::Raw16Data) ||
680  {
681  subtractDarkImage(imgb, darkImage());
682  }
683 
684  printMessage("dx\tdy\tcorr");
685 
686  for (int dy = -10; dy<=10; dy++) {
687  for (int dx = -10; dx<=10; dx++) {
688  double corr = imga->correlate(imgb, dx, dy, 10, 10);
689 
690  printMessage(tr("%1\t%2\t%3").arg(dx).arg(dy).arg(corr));
691  }
692  }
693  } else {
694  printMessage(tr("Couldn't load %1").arg(path));
695  statusMessage(tr("Couldn't load %1").arg(path));
696  }
697  }
698 }
699 
701 {
703 
704  if (img) {
705  QcepDoubleImageDataPtr shft = takeNextFreeImage(img->get_Width(), img->get_Height());
706 
707  shft->shiftImage(img, dx, dy);
708 
709  newData(shft, QcepMaskDataPtr());
710  }
711 }
712 
714 {
715  QThread::currentThread()->setObjectName("integrateData");
716 
718  QcepIntegratedDataPtr result;
719 
721 
722  QString path = filePathInDataDirectory(name);
723 
724  if (img -> readImage(path)) {
725  printMessage(tr("Load image from %1").arg(path));
726  statusMessage(tr("Load image from %1").arg(path));
727 
728  // printf("Read %d x %d image\n", res->get_Width(), res->get_Height());
729 
730  img -> loadMetaData();
731 
733  result,
734  img, mask(),
735  centerFinder() -> get_CenterX(),
736  centerFinder() -> get_CenterY()));
737  } else {
738  printMessage(tr("Couldn't load %1").arg(path));
739  statusMessage(tr("Couldn't load %1").arg(path));
740  }
741 }
742 
744 {
746 
747  QString path = filePathInDataDirectory(name);
748 
749  if (res -> readImage(path)) {
750  printMessage(tr("Load image from %1").arg(path));
751  statusMessage(tr("Load image from %1").arg(path));
752 
753  // printf("Read %d x %d image\n", res->get_Width(), res->get_Height());
754 
755  res -> loadMetaData();
756 
757  acquiredDoubleImage(res, /*darkImage(), mask(),*/ QcepMaskDataPtr());
758 
759  set_DataPath(res -> get_FileName());
760  } else {
761  printMessage(tr("Couldn't load %1").arg(path));
762  statusMessage(tr("Couldn't load %1").arg(path));
763  }
764 }
765 
766 void QxrdDataProcessorThreaded::processDataSequence(QString path, QString filter)
767 {
768  QDirIterator iter(path, QStringList(filter));
769 
770  while (iter.hasNext()) {
771  QString path = iter.next();
772 
773  printMessage(path);
774 
775  processData(path);
776  }
777 }
778 
780 {
781  QString path;
782 
783  foreach(path, paths) {
784  printMessage(path);
785 
786  processData(path);
787  }
788 }
789 
790 void QxrdDataProcessorThreaded::processDataSequence(QString path, QStringList filters)
791 {
792  QDirIterator iter(path, filters);
793 
794  while (iter.hasNext()) {
795  QString path = iter.next();
796 
797  printMessage(path);
798 
799  processData(path);
800  }
801 }
802 
804 {
805  QList<double> v;
806  v << v1;
807 
808  processNormalizedFile(path, v);
809 }
810 
811 void QxrdDataProcessorThreaded::processNormalizedFile(QString path, double v1, double v2)
812 {
813  QList<double> v;
814  v << v1 << v2;
815 
816  processNormalizedFile(path, v);
817 }
818 
819 void QxrdDataProcessorThreaded::processNormalizedFile(QString name, QList<double> v)
820 {
822 
823  QString path = filePathInDataDirectory(name);
824 
825  if (res -> readImage(path)) {
826 
827  // printf("Read %d x %d image\n", res->get_Width(), res->get_Height());
828 
829  res -> loadMetaData();
830  res -> setMask(mask(), QcepMaskDataPtr());
831 
832  acquiredDoubleImage(res, /*darkImage(), mask(),*/ QcepMaskDataPtr(), v);
833 
834  set_DataPath(res -> get_FileName());
835  } else {
836  printMessage(tr("Couldn't load %1").arg(path));
837  }
838 }
839 
841 {
842  QList<double> v;
843  v << v1;
844 
845  setFileNormalization(path, v);
846 }
847 
848 void QxrdDataProcessorThreaded::setFileNormalization(QString path, double v1, double v2)
849 {
850  QList<double> v;
851  v << v1 << v2;
852 
853  setFileNormalization(path, v);
854 }
855 
856 void QxrdDataProcessorThreaded::setFileNormalization(QString name, QList<double> v)
857 {
859 
860  QString path = filePathInDataDirectory(name);
861 
862  if (res -> readImage(path)) {
863 
864  // printf("Read %d x %d image\n", res->get_Width(), res->get_Height());
865 
867 
868  res -> loadMetaData();
869  res -> setMask(mask(), QcepMaskDataPtr());
870  res -> set_Normalization(v);
871  res -> saveMetaData(name);
872  } else {
873  printMessage(tr("Couldn't load %1").arg(path));
874  }
875 }
876 
877 void QxrdDataProcessorThreaded::slicePolygon(QVector<QPointF> poly)
878 {
880 
882  QtConcurrent::run(m_Integrator.data(),
884  integ,
885  m_Data, poly, 0));
886 }
887 
889 {
891  printMessage(tr("processor.integrateSaveAndDisplay: %1, %2, %3")
892  .arg(data()->get_FileName()).arg(m_CenterFinder->get_CenterX()).arg(m_CenterFinder->get_CenterY()));
893  }
894 
896 
898  QtConcurrent::run(m_Integrator.data(),
900  integ,
901  data(), mask()));
902 }
903 
904 void QxrdDataProcessorThreaded::fixupBadBackgroundSubtraction(QString imagePattern, int nImgExposures, QString darkPath, int nDarkExposures)
905 {
906  QDirIterator imagePaths(dataDirectory(), QStringList(imagePattern));
907 
909  QString path = filePathInDataDirectory(darkPath);
910 
911  if (dark->readImage(path)) {
912  dark->loadMetaData();
913 
914  int nFileDarkExposures = dark->get_SummedExposures();
915 
916  printMessage(tr("Loaded Dark image from %1 (%2 summed)").arg(path).arg(nFileDarkExposures));
917 
918  while (imagePaths.hasNext()) {
919  QString imagePath=imagePaths.next();
920 
921  QString path = filePathInDataDirectory(imagePath);
923 
924  if (image->readImage(path)) {
925  image->loadMetaData();
926 
927  int nFileImageExposures = image->get_SummedExposures();
928 
929  printMessage(tr("Loaded image from %1 (%2 summed)").arg(path).arg(nFileImageExposures));
930 
931  image->correctBadBackgroundSubtraction(dark,nImgExposures,nDarkExposures);
932 
934 
935  if (saver) {
936  saver->saveDoubleData(path, image, QcepMaskDataPtr(), NoOverwrite);
937  }
938  } else {
939  printMessage(tr("Failed to load image from %1").arg(path));
940  }
941  }
942  } else {
943  printMessage(tr("Failed to load Dark image from %1").arg(path));
944  }
945 }
946 
948 {
950 
951  if (cf) {
952  cf->fitPeakNear(x,y);
953  }
954 }
QSharedPointer< QxrdExperiment > QxrdExperimentPtr
QcepIntegratedDataPtr slicePolygon(QcepIntegratedDataPtr integ, QcepDoubleImageDataPtr dimg, QVector< QPointF > poly, double width)
QSharedPointer< QxrdCenterFinder > QxrdCenterFinderPtr
void setFileNormalization(QString path, double v1)
QcepMaskDataPtr mask() const
static QcepIntegratedDataPtr newIntegratedData(AllocationStrategy strat, QcepDoubleImageDataPtr image, QcepObject *parent)
qint64 qcepDebug(int cond)
Definition: qcepdebug.cpp:26
void subtractDarkImage(QcepDoubleImageDataPtr image, QcepDoubleImageDataPtr dark)
QxrdResultSerializer< QxrdHistogramDataPtr > m_HistogramData
QxrdResultSerializer< QcepIntegratedDataPtr > m_IntegratedData
QcepDoubleImageDataPtr darkImage() const
QxrdCenterFinderPtr m_CenterFinder
void acquiredDoubleImage(QcepDoubleImageDataPtr image, QcepMaskDataPtr overflow)
QxrdResultSerializer< QcepDoubleImageDataPtr > m_CorrectedImages
QcepIntegratedDataPtr performIntegration(QcepIntegratedDataPtr integ, QcepDoubleImageDataPtr dimg, QcepMaskDataPtr mask)
QcepDoubleImageDataPtr takeNextFreeImage(int width, int height)
void processDataSequence(QString path, QString filter="*.tif")
static void newDoubleImageAndIntegratedData(AllocationStrategy strat, int width, int height, QcepObject *parent, QcepDoubleImageDataPtr &img, QcepIntegratedDataPtr &integ)
void fixupBadBackgroundSubtraction(QString imagePattern, int nImgExposures, QString darkPath, int nDarkExposures)
void processNormalizedFile(QString path, double v1)
double estimatedProcessingTime(double estSerTime, double estParallelTime)
void newData(QcepDoubleImageDataPtr image, QcepMaskDataPtr overflow)
QxrdDataProcessorThreaded(QcepSettingsSaverWPtr saver, QxrdExperimentWPtr doc, QxrdAcquisitionWPtr acq, QxrdFileSaverWPtr filesaver)
QWeakPointer< QxrdExperiment > QxrdExperimentWPtr
void statusMessage(QString msg, QDateTime ts=QDateTime::currentDateTime()) const
QSharedPointer< QcepIntegratedData > QcepIntegratedDataPtr
void correlateImages(QStringList names)
void fitPeakNear(double x, double y)
QcepDoubleImageDataPtr correctInt16Image(QcepDoubleImageDataPtr corrected, QcepInt16ImageDataPtr image, QcepDoubleImageDataPtr dark, QcepMaskDataPtr mask, QcepMaskDataPtr overflow)
void enqueue(QFuture< T > future)
void integrateAndAccumulate(QStringList names)
QcepDoubleImageDataPtr data() const
QcepIntegratedDataPtr integrateImage(QcepIntegratedDataPtr integ, QcepDoubleImageDataPtr image, QcepMaskDataPtr mask, double cx, double cy)
QcepDoubleImageDataPtr correctInt32Image(QcepDoubleImageDataPtr corrected, QcepInt32ImageDataPtr image, QcepDoubleImageDataPtr dark, QcepMaskDataPtr mask, QcepMaskDataPtr overflow)
QSharedPointer< QxrdROIData > QxrdROIDataPtr
QcepDoubleImageDataPtr correctDoubleImage(QcepDoubleImageDataPtr corrected, QcepDoubleImageDataPtr image, QcepDoubleImageDataPtr dark, QcepMaskDataPtr mask, QcepMaskDataPtr overflow)
QWeakPointer< QxrdFileSaver > QxrdFileSaverWPtr
QList< double > QcepDoubleList
Definition: qcepmacros.h:28
QxrdExperimentWPtr m_Experiment
QcepDoubleImageDataPtr m_Data
void slicePolygon(QVector< QPointF > poly)
void projectImages(QStringList names, int px, int py, int pz)
QxrdIntegratorPtr m_Integrator
void acquiredInt16Image(QcepInt16ImageDataPtr image, QcepMaskDataPtr overflow)
void writeOutputScan(QcepIntegratedDataPtr d)
void idleInt16Image(QcepInt16ImageDataPtr image, bool liveView)
QxrdResultSerializer< QxrdROIDataPtr > m_ROIData
void subtractImages(QStringList names)
QcepDoubleImageDataPtr m_LiveData
QWeakPointer< QxrdAcquisition > QxrdAcquisitionWPtr
QSharedPointer< QcepInt32ImageData > QcepInt32ImageDataPtr
QSharedPointer< QxrdFileSaver > QxrdFileSaverPtr
void printMessage(QString msg, QDateTime ts=QDateTime::currentDateTime()) const
QString name
Definition: qcepobject.h:49
QString filePathInDataDirectory(QString name) const
QSharedPointer< QxrdHistogramData > QxrdHistogramDataPtr
QxrdCenterFinderPtr centerFinder() const
void acquiredInt32Image(QcepInt32ImageDataPtr image, QcepMaskDataPtr overflow)
QSharedPointer< QcepInt16ImageData > QcepInt16ImageDataPtr
QSharedPointer< QcepMaskData > QcepMaskDataPtr
QxrdFileSaverWPtr m_FileSaver
QWeakPointer< QcepSettingsSaver > QcepSettingsSaverWPtr
void saveAccumulator(QString &path, QString filter)
QSharedPointer< QcepDoubleImageData > QcepDoubleImageDataPtr