QXRD  0.11.16
qxrdacquisitioninterface.cpp
Go to the documentation of this file.
2 #include <QThread>
3 #include <QtConcurrentRun>
4 #include "qxrdacquisition.h"
7 #include "qcepmutexlocker.h"
9 
13  QcepAllocatorWPtr allocator)
14  : QcepObject("acquistion", NULL),
15  m_Saver(saver),
17  m_Cancelling(QcepSettingsSaverWPtr(), this, "cancelling", 0, "Cancel Acquisition?"),
18  m_Triggered(QcepSettingsSaverWPtr(), this, "triggered", 0, "Trigger Acquisition"),
19  m_ExposureTime(saver, this,"exposureTime",0.1, "Exposure Time (in sec)"),
20  m_SkippedExposuresAtStart(saver, this,"skippedExposuresAtStart",0, "Exposures to Skip at Start"),
21  m_PhasesInGroup(saver, this,"phasesInGroup",1, "Number of Image Phases"),
22  m_CurrentPhase(QcepSettingsSaverWPtr(), this, "currentPhase", 0, "Current Acquisition Phase"),
23  m_SummedExposures(saver, this,"summedExposures",1, "Summed Exposures per Image"),
24  m_DarkSummedExposures(saver, this,"darkSummedExposures",1, "Summed Exposures in Dark Image"),
25  m_CurrentSummation(QcepSettingsSaverWPtr(), this, "currentSumation", 0, "Current Acquisition Summation"),
26  m_SkippedExposures(saver, this,"skippedExposures",0, "Skipped Exposures between Images"),
27  m_PreTriggerFiles(saver, this,"preTriggerFiles",0, "Number of pre-Trigger Images"),
28  m_PostTriggerFiles(saver, this,"postTriggerFiles",1, "Number of post-Trigger Images"),
29  m_CurrentFile(QcepSettingsSaverWPtr(), this, "currentFile", 0, "File Index of Current File"),
30  m_FilePattern(saver, this,"filePattern","", "File Name Pattern")
31 {
32 }
33 
35 {
38 
39  m_ExecutionThread->start();
40 }
41 
43 {
44 }
45 
47 {
48  if (QThread::currentThread() != thread()) {
49  INVOKE_CHECK(QMetaObject::invokeMethod(this, "acquire", Qt::BlockingQueuedConnection));
50  } else if (sanityCheckAcquire()) {
51  if (m_Acquiring.tryLock()) {
52  set_Cancelling(false);
53  set_Triggered(false);
54 
55  statusMessage("Starting acquisition");
56  emit acquireStarted();
57 
58  // QtConcurrent::run(this, &QxrdAcquisitionInterface::doAcquire, acquisitionParameterPack());
59 
60  if (m_ExecutionThread) {
61  m_ExecutionThread->doAcquire();
62  }
63  } else {
64  statusMessage("Acquisition is already in progress");
65  }
66  }
67 }
68 
70 {
71  if (QThread::currentThread() != thread()) {
72  INVOKE_CHECK(QMetaObject::invokeMethod(this, "acquireDark", Qt::BlockingQueuedConnection));
73  } else if (sanityCheckAcquireDark()) {
74  if (m_Acquiring.tryLock()) {
75  set_Cancelling(false);
76  set_Triggered(true);
77 
78  statusMessage("Starting dark acquisition");
79  emit acquireStarted();
80 
81  // QtConcurrent::run(this, &QxrdAcquisitionInterface::doAcquireDark, darkAcquisitionParameterPack());
82 
83  if (m_ExecutionThread) {
84  m_ExecutionThread->doAcquireDark();
85  }
86  } else {
87  statusMessage("Acquisition is already in progress");
88  }
89  }
90 }
91 
93 {
94  set_Triggered(true);
95 }
96 
98 {
99  set_Cancelling(true);
100 
101 // m_NAcquiredImages.release(1);
102 }
103 
104 //void QxrdAcquisitionInterface::onAcquireComplete()
105 //{
106 // m_Acquiring.unlock();
107 
108 // emit acquireComplete();
109 //}
110 
112 {
113  if (m_Acquiring.tryLock()) {
114  m_Acquiring.unlock();
115 
116  // printf("m_Acquiring.tryLock() succeeded\n");
117 
118  return 1;
119  }
120 
121  QMutex mutex;
122  QcepMutexLocker lock(__FILE__, __LINE__, &mutex);
123 
124  if (m_StatusWaiting.wait(&mutex, (int)(time*1000))) {
125  // printf("m_StatusWaiting.wait succeeded\n");
126  return 1;
127  } else {
128  // printf("m_StatusWaiting.wait failed\n");
129  return 0;
130  }
131 }
132 
134 {
136  new QxrdAcquisitionParameterPack (get_FilePattern(),
137  get_ExposureTime(),
138  get_SummedExposures(),
139  get_PreTriggerFiles(),
140  get_PostTriggerFiles(),
141  get_PhasesInGroup(),
142  get_SkippedExposuresAtStart(),
143  get_SkippedExposures()));
144 }
145 
147 {
149  new QxrdDarkAcquisitionParameterPack(get_FilePattern(),
150  get_ExposureTime(),
151  get_DarkSummedExposures(),
152  get_SkippedExposuresAtStart()));
153 
154 }
155 
156 
QWeakPointer< QxrdDataProcessor > QxrdDataProcessorWPtr
QxrdAcquisitionExecutionThreadPtr m_ExecutionThread
QxrdAcquisitionInterface(QcepSettingsSaverWPtr saver, QxrdExperimentWPtr doc, QxrdDataProcessorWPtr proc, QcepAllocatorWPtr allocator)
virtual bool sanityCheckAcquire()=0
QWeakPointer< QxrdExperiment > QxrdExperimentWPtr
QSharedPointer< QxrdAcquisitionExecutionThread > QxrdAcquisitionExecutionThreadPtr
#define INVOKE_CHECK(res)
Definition: qcepmacros.h:13
QxrdAcquisitionParameterPackPtr acquisitionParameterPack()
QxrdDarkAcquisitionParameterPackPtr darkAcquisitionParameterPack()
QWeakPointer< QcepAllocator > QcepAllocatorWPtr
QSharedPointer< QxrdDarkAcquisitionParameterPack > QxrdDarkAcquisitionParameterPackPtr
virtual bool sanityCheckAcquireDark()=0
virtual void statusMessage(QString msg, QDateTime ts=QDateTime::currentDateTime()) const
Definition: qcepobject.cpp:104
QSharedPointer< QxrdAcquisitionParameterPack > QxrdAcquisitionParameterPackPtr
QWeakPointer< QcepSettingsSaver > QcepSettingsSaverWPtr