QXRD  0.11.16
qxrddetectorthread.cpp
Go to the documentation of this file.
1 #include "qxrddebug.h"
2 #include "qxrddetectorthread.h"
3 #include "qxrdapplication.h"
4 #include "qcepmutexlocker.h"
5 
6 #ifdef HAVE_PERKIN_ELMER
8 #endif
9 
10 //#ifdef HAVE_PILATUS
11 #include "qxrddetectorpilatus.h"
12 //#endif
13 
14 #ifdef HAVE_AREADETECTOR
15 #include "qxrddetectorepicsarea.h"
16 #endif
17 
19 #include "qxrddetectorsimulated.h"
20 
21 #include <stdio.h>
22 
24  QxrdExperimentWPtr expt,
26  int detType, int detNum,
27  QcepObject *parent) :
28  QxrdThread(),
29  m_Saver(saver),
30  m_Experiment(expt),
31  m_Acquisition(acq),
32  m_Detector(),
33  m_DetectorType(detType),
34  m_DetectorNumber(detNum),
35  m_Parent(parent)
36 {
38  printf("QxrdDetectorThread::QxrdDetectorThread(%p)\n", this);
39  }
40 
41  setObjectName(detectorTypeName(detType));
42 }
43 
45 {
46  if (qcepDebug(DEBUG_APP)) {
48 
49  if (expt) {
50  expt->printMessage("QxrdDetectorThread::~QxrdDetectorThread");
51  }
52  }
53 
54  shutdown();
55 
57  printf("QxrdDetectorThread::~QxrdDetectorThread(%p)\n", this);
58  }
59 }
60 
62 {
63  return 6;
64 }
65 
66 QString QxrdDetectorThread::detectorTypeName(int detectorType)
67 {
68  QString res = "unknown";
69  switch (detectorType) {
70  case NoDetector:
71  res = "No Detector";
72  break;
73 
74  case SimulatedDetector:
75  res = "Simulated Detector";
76  break;
77 
79  res = "Perkin Elmer Detector";
80  break;
81 
82  case PilatusDetector:
83  res = "Pilatus Detector";
84  break;
85 
86  case EpicsAreaDetector:
87  res = "Epics Area Detector";
88  break;
89 
91  res = "File Watcher";
92  break;
93  }
94 
95  return res;
96 }
97 
99 {
100  QStringList res;
101 
102  res.append(detectorTypeName(NoDetector));
103  res.append(detectorTypeName(SimulatedDetector));
105  res.append(detectorTypeName(PilatusDetector));
106  res.append(detectorTypeName(EpicsAreaDetector));
108 
109  return res;
110 }
111 
112 QString QxrdDetectorThread::detectorSubTypeNamePE(int detectorSubType)
113 {
114  QString res = "unknown";
115 
116  switch (detectorSubType) {
117  case PCI_SubType:
118  res = "PCI/PCIe Interface";
119  break;
120 
121  case GBIF_IP_SubType:
122  res = "Gigabit Ethernet by IP Address";
123  break;
124 
125  case GBIF_MAC_SubType:
126  res = "Gigabit Ethernet by MAC Address";
127  break;
128 
129  case GBIF_Name_SubType:
130  res = "Gigabit Ethernet by device name";
131  break;
132 
133  case GBIF_Scan_SubType:
134  res = "Gigabit Ethernet by Auto Scan";
135  break;
136  }
137 
138  return res;
139 }
140 
142 {
143  QStringList res;
144 
145  res.append(detectorSubTypeNamePE(PCI_SubType));
150 
151  return res;
152 }
153 
155 {
156  QStringList res;
157 
158  res.append("0.25 pF (High)");
159  res.append("0.5 pF");
160  res.append("1 pF");
161  res.append("2 pF");
162  res.append("4 pF");
163  res.append("8 pF (Low)");
164 
165  return res;
166 }
167 
169 {
170  QString res = "Unkown Binning";
171 
172  switch (binningMode) {
173  case Binning1x1:
174  res = "No Binning";
175  break;
176 
177  case Binning2x2Average:
178  res = "2x2 Averaged Binning";
179  break;
180 
181  case Binning2x2Summed:
182  res = "2x2 Summed Binning";
183  break;
184  }
185 
186  return res;
187 }
188 
190 {
191  QStringList res;
192 
193  for (int i=0; i<BinningModeCount; i++) {
194  res.append(binningModeNamePE(i));
195  }
196 
197  return res;
198 }
199 
201 {
202  if (qcepDebug(DEBUG_THREADS)) {
203  printf("Detector Thread Started\n");
204  }
205 
206  QxrdDetectorPtr p;
207 
208  {
210 
211  if (expt) {
212  switch(m_DetectorType) {
213  case SimulatedDetector:
214  setObjectName("simulatedDetector");
216  m_Experiment,
219  m_Parent));
220  break;
221 
222 #ifdef HAVE_PERKIN_ELMER
223  case PerkinElmerDetector:
224  setObjectName("perkinElmerDetector");
226  m_Experiment,
229  m_Parent));
230  break;
231 #endif
232 
233 //#ifdef HAVE_PILATUS
234  case PilatusDetector:
235  setObjectName("pilatusDetector");
237  m_Experiment,
240  m_Parent));
241  break;
242 //#endif
243 
244 #ifdef HAVE_AREADETECTOR
245  case EpicsAreaDetector:
246  setObjectName("epicsAreaDetector");
247  p = QxrdDetectorPtr(new QxrdDetectorEpicsArea(m_Saver,
248  m_Experiment,
251  m_Parent));
252  break;
253 #endif
254 
255  case FileWatcherDetector:
256  setObjectName("fileWatcherDetector");
258  m_Experiment,
261  m_Parent));
262  break;
263  }
264  }
265  }
266 
267  if (p == NULL) {
268  setObjectName("simulatedDetector");
270  m_Experiment,
273  m_Parent));
274  }
275 
276  int rc = -1;
277 
278  if (p) {
279  p -> initialize();
280 
281  m_Mutex.lock();
282  m_Detector = p;
283  m_Mutex.unlock();
284 
285  rc = exec();
286  }
287 
288  {
289  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
290 
292  }
293 
294  if (qcepDebug(DEBUG_THREADS)) {
295  printf("Detector Thread Terminated with rc %d\n", rc);
296  }
297 }
298 
300 {
301  while (isRunning()) {
302  {
303  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
304 
305  if (m_Detector) return m_Detector;
306  }
307 
308  QThread::msleep(50);
309  }
310 
311  return QxrdDetectorPtr();
312 }
313 
315 {
316  exit();
317 
318  wait();
319 }
320 
322  QxrdDetectorProxyPtr proxy)
323 {
324  switch (detectorType) {
325  case NoDetector:
326  default:
328  break;
329 
330  case SimulatedDetector:
332  break;
333 
334 #ifdef HAVE_PERKIN_ELMER
335  case PerkinElmerDetector:
337  break;
338 #endif
339 
340  case PilatusDetector:
342  break;
343 
344 #ifdef HAVE_AREADETECTOR
345  case EpicsAreaDetector:
346  QxrdDetectorEpicsArea::pushDefaultsToProxy(proxy);
347  break;
348 #endif
349 
350  case FileWatcherDetector:
352  break;
353  }
354 }
QSharedPointer< QxrdExperiment > QxrdExperimentPtr
QSharedPointer< QxrdDetectorProxy > QxrdDetectorProxyPtr
qint64 qcepDebug(int cond)
Definition: qcepdebug.cpp:26
QcepSettingsSaverWPtr m_Saver
static QStringList binningModeNamesPE()
QxrdDetectorPtr detector() const
QWeakPointer< QxrdExperiment > QxrdExperimentWPtr
static QString binningModeNamePE(int binningMode)
static QStringList gainModeNamesPE()
QxrdDetectorPtr m_Detector
QxrdExperimentWPtr m_Experiment
static void pushDefaultsToProxy(QxrdDetectorProxyPtr proxy)
QxrdDetectorThread(QcepSettingsSaverWPtr saver, QxrdExperimentWPtr expt, QxrdAcquisitionWPtr acq, int detType, int detNum, QcepObject *parent)
static void pushDefaultsToProxy(QxrdDetectorProxyPtr proxy)
QMutex m_Mutex
Definition: qcepthread.h:17
static void pushDefaultsToProxy(int detectorType, QxrdDetectorProxyPtr proxy)
QWeakPointer< QxrdAcquisition > QxrdAcquisitionWPtr
static QStringList detectorSubTypeNamesPE()
static QString detectorSubTypeNamePE(int detectorSubType)
static void pushDefaultsToProxy(QxrdDetectorProxyPtr proxy, int detType)
static void pushDefaultsToProxy(QxrdDetectorProxyPtr proxy)
QSharedPointer< QxrdDetector > QxrdDetectorPtr
static int detectorTypeCount()
static QString detectorTypeName(int detectorType)
static void pushDefaultsToProxy(QxrdDetectorProxyPtr proxy)
QxrdAcquisitionWPtr m_Acquisition
QWeakPointer< QcepSettingsSaver > QcepSettingsSaverWPtr
static QStringList detectorTypeNames()