QXRD  0.11.16
Public Types | Public Slots | Public Member Functions | Properties | Private Attributes | List of all members
QxrdSynchronizedAcquisition Class Reference

#include <qxrdsynchronizedacquisition.h>

Inheritance diagram for QxrdSynchronizedAcquisition:
Inheritance graph
[legend]
Collaboration diagram for QxrdSynchronizedAcquisition:
Collaboration graph
[legend]

Public Types

enum  { SyncAcquisitionModeNone, SyncAcquisitionModeStepped, SyncAcquisitionModeContinuous }
 
enum  {
  SyncAcquisitionWaveformSquare, SyncAcquisitionWaveformSine, SyncAcquisitionWaveformTriangle, SyncAcquisitionWaveformSawtooth,
  SyncAcquisitionWaveformBipolarTriangle
}
 

Public Slots

void setManualOutput ()
 
void triggerOnce ()
 
- Public Slots inherited from QcepObject
virtual void printLine (QString line)
 
virtual void printMessage (QString msg, QDateTime dt=QDateTime::currentDateTime()) const
 
virtual void criticalMessage (QString msg, QDateTime ts=QDateTime::currentDateTime()) const
 
virtual void statusMessage (QString msg, QDateTime ts=QDateTime::currentDateTime()) const
 
virtual QString settingsScript ()
 
QString scriptValueLiteral (QVariant v)
 

Public Member Functions

 QxrdSynchronizedAcquisition (QcepSettingsSaverWPtr saver, QxrdAcquisitionWPtr acq)
 
virtual ~QxrdSynchronizedAcquisition ()
 
void prepareForAcquisition (QxrdAcquisitionParameterPackWPtr parms)
 
void prepareForDarkAcquisition (QxrdDarkAcquisitionParameterPackWPtr parms)
 
void finishedAcquisition ()
 
void acquiredFrameAvailable (int currentPhase)
 
void setNIDAQPlugin (QxrdNIDAQPluginInterfaceWPtr nidaqPlugin)
 
QxrdNIDAQPluginInterfaceWPtr nidaqPlugin () const
 
QVector< double > outputTimes ()
 
QVector< double > outputVoltage ()
 
QxrdAcquisitionParameterPackWPtr parms ()
 
- Public Member Functions inherited from QcepObject
 QcepObject (QString name, QcepObject *parent)
 
virtual ~QcepObject ()
 
virtual void writeSettings (QSettings *set, QString section)
 
virtual void readSettings (QSettings *set, QString section)
 
QString get_Name () const
 
void set_Name (QString name)
 

Properties

int syncAcquisitionMode
 
int syncAcquisitionWaveform
 
QString syncAcquisitionOutputDevice
 
QString syncAcquisitionOutputChannel
 
double syncAcquisitionMinimum
 
double syncAcquisitionMaximum
 
double syncAcquisitionSymmetry
 
double syncAcquisitionPhaseShift
 
double syncAcquisitionManualValue
 
- Properties inherited from QcepObject
QString name
 

Private Attributes

QMutex m_Mutex
 
QxrdAcquisitionWPtr m_Acquisition
 
QxrdAcquisitionParameterPackWPtr m_AcquisitionParms
 
QxrdNIDAQPluginInterfaceWPtr m_NIDAQPlugin
 
int m_SyncMode
 
QVector< double > m_OutputTimes
 
QVector< double > m_OutputVoltage
 

Additional Inherited Members

- Static Public Member Functions inherited from QcepObject
static int allocatedObjects ()
 
static int deletedObjects ()
 
static QSet< QcepObject * > allocatedObjectsSet ()
 
static QString addSlashes (QString str)
 

Detailed Description

Definition at line 15 of file qxrdsynchronizedacquisition.h.

Member Enumeration Documentation

anonymous enum
anonymous enum

Constructor & Destructor Documentation

QxrdSynchronizedAcquisition::QxrdSynchronizedAcquisition ( QcepSettingsSaverWPtr  saver,
QxrdAcquisitionWPtr  acq 
)
explicit

Definition at line 9 of file qxrdsynchronizedacquisition.cpp.

9  :
10  QcepObject("synchronization", NULL),
11  m_SyncAcquisitionMode(saver, this,"syncAcquisitionMode", 0, "Synchronized Acquisition Mode (0 = None, 1 = Stepped, 2 = Continuous)"),
12  m_SyncAcquisitionWaveform(saver, this,"syncAcquisitionWaveform", 0,
13  "Synchronized Acquisition Waveform (0 = Square, 1 = Sine, 2 = Triangle, 3 = Sawtooth, 4 = Bipolar Triangle)"),
14  m_SyncAcquisitionOutputDevice(saver, this,"syncAcquisitionOutputDevice", "", "Synchronized Acquisition Output Device"),
15  m_SyncAcquisitionOutputChannel(saver, this,"syncAcquisitionOutputChannel", "", "Synchronized Acquisition Output Channel"),
16 // m_SyncAcquisitionFlagChannel(saver, this,"syncAcquisitionFlagChannel", 0, "Synchronized Acquisition Flags"),
17  m_SyncAcquisitionMinimum(saver, this,"syncAcquisitionMinimum", 0.0, "Synchronized Acquisition Minimum (in Volts)"),
18  m_SyncAcquisitionMaximum(saver, this,"syncAcquisitionMaximum", 5.0, "Synchronized Acquisition Maximum (in Volts)"),
19  m_SyncAcquisitionSymmetry(saver, this,"syncAcquisitionSymmetry", 0.0, "Synchronized Acquisition Symmetry (0 = symmetric)"),
20  m_SyncAcquisitionPhaseShift(saver, this,"syncAcquisitionPhaseShift", 0.0, "Synchronized Acquisition Phase Shift (deg)"),
21  m_SyncAcquisitionManualValue(saver, this,"syncAcquisitionManualValue", 0.0, "Manual Output Voltage (in Volts)"),
22  m_Acquisition(acq),
23  m_SyncMode(0)
24 {
25 }
QcepObject(QString name, QcepObject *parent)
Definition: qcepobject.cpp:16
QxrdSynchronizedAcquisition::~QxrdSynchronizedAcquisition ( )
virtual

Definition at line 27 of file qxrdsynchronizedacquisition.cpp.

28 {
29 #ifndef QT_NO_DEBUG
30  printf("Deleting synchronized acquisition\n");
31 #endif
32 }

Member Function Documentation

void QxrdSynchronizedAcquisition::acquiredFrameAvailable ( int  currentPhase)

Definition at line 188 of file qxrdsynchronizedacquisition.cpp.

References m_Acquisition, m_AcquisitionParms, m_NIDAQPlugin, m_SyncMode, and parms().

189 {
191 
192  if (nidaq) {
193  nidaq->pulseOutput();
194  }
195 
198 
199  if (m_SyncMode && acq && parms) {
200  if (acq->acquisitionStatus(0.0) == 0) {
201 // printf("QxrdSynchronizedAcquisition::acquiredFrameAvailable(%d)\n", frameNumber);
202 
203  int skipBefore = parms->skipBefore();
204  int skipBetween = parms->skipBetween();
205  int nPhases = parms->nphases();
206  int nSummed = parms->nsummed();
207  int nGroups = parms->postTrigger();
208  int perGroup = nPhases*nSummed+skipBetween;
209  int inGroup = (frameNumber-skipBefore) % perGroup;
210  int phase = inGroup % nPhases;
211 
212  if (nPhases > 0) {
213  if ((frameNumber >= skipBefore) && (frameNumber < (nGroups*perGroup-skipBetween+skipBefore))) {
214  if (inGroup < nPhases*nSummed) {
215  if (phase == 0) {
216  if (nidaq) {
217 // printf("Triggered on frame %d\n", frameNumber);
218  nidaq->triggerAnalogWaveform();
219  }
220  }
221  }
222  }
223  }
224 // printf("elapsed[%d] %d msec\n", currentPhase, tick.restart());
225  }
226  }
227 }
QxrdNIDAQPluginInterfaceWPtr m_NIDAQPlugin
QSharedPointer< QxrdAcquisition > QxrdAcquisitionPtr
QxrdAcquisitionParameterPackWPtr m_AcquisitionParms
QSharedPointer< QxrdNIDAQPluginInterface > QxrdNIDAQPluginInterfacePtr
QxrdAcquisitionParameterPackWPtr parms()
QSharedPointer< QxrdAcquisitionParameterPack > QxrdAcquisitionParameterPackPtr

Here is the call graph for this function:

void QxrdSynchronizedAcquisition::finishedAcquisition ( )

Definition at line 49 of file qxrdsynchronizedacquisition.cpp.

References m_AcquisitionParms, and m_SyncMode.

50 {
52  m_SyncMode = 0;
53 }
QxrdAcquisitionParameterPackWPtr m_AcquisitionParms
QWeakPointer< QxrdAcquisitionParameterPack > QxrdAcquisitionParameterPackWPtr
QxrdNIDAQPluginInterfaceWPtr QxrdSynchronizedAcquisition::nidaqPlugin ( ) const

Definition at line 39 of file qxrdsynchronizedacquisition.cpp.

References m_NIDAQPlugin.

Referenced by setNIDAQPlugin().

40 {
41  return m_NIDAQPlugin;
42 }
QxrdNIDAQPluginInterfaceWPtr m_NIDAQPlugin

Here is the caller graph for this function:

QVector< double > QxrdSynchronizedAcquisition::outputTimes ( )

Definition at line 257 of file qxrdsynchronizedacquisition.cpp.

References m_Mutex, and m_OutputTimes.

Referenced by prepareForAcquisition().

258 {
259  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
260 
261  return m_OutputTimes;
262 }

Here is the caller graph for this function:

QVector< double > QxrdSynchronizedAcquisition::outputVoltage ( )

Definition at line 264 of file qxrdsynchronizedacquisition.cpp.

References m_Mutex, and m_OutputVoltage.

Referenced by prepareForAcquisition().

265 {
266  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
267 
268  return m_OutputVoltage;
269 }

Here is the caller graph for this function:

QxrdAcquisitionParameterPackWPtr QxrdSynchronizedAcquisition::parms ( )

Definition at line 44 of file qxrdsynchronizedacquisition.cpp.

References m_AcquisitionParms.

Referenced by acquiredFrameAvailable(), prepareForAcquisition(), and triggerOnce().

45 {
46  return m_AcquisitionParms;
47 }
QxrdAcquisitionParameterPackWPtr m_AcquisitionParms

Here is the caller graph for this function:

void QxrdSynchronizedAcquisition::prepareForAcquisition ( QxrdAcquisitionParameterPackWPtr  parms)

nsummed

Definition at line 60 of file qxrdsynchronizedacquisition.cpp.

References m_AcquisitionParms, m_Mutex, m_NIDAQPlugin, m_OutputTimes, m_OutputVoltage, m_SyncMode, outputTimes(), outputVoltage(), parms(), SyncAcquisitionWaveformBipolarTriangle, SyncAcquisitionWaveformSawtooth, SyncAcquisitionWaveformSine, SyncAcquisitionWaveformSquare, and SyncAcquisitionWaveformTriangle.

Referenced by triggerOnce().

61 {
63 
65 
66  if (parmsp) {
67  m_SyncMode = 0;
69 
70  double exposureTime = parmsp->exposure();
71  int nphases = parmsp->nphases();
72  double cycleTime = exposureTime*nphases;
73  double sampleRate = 1000;
74  double nSamples = cycleTime*sampleRate;
75  double minVal = get_SyncAcquisitionMinimum();
76  double maxVal = get_SyncAcquisitionMaximum();
77  QString chan = get_SyncAcquisitionOutputChannel();
78  int wfm = get_SyncAcquisitionWaveform();
79  m_SyncMode = get_SyncAcquisitionMode();
80  double symm = get_SyncAcquisitionSymmetry();
81  double phase = get_SyncAcquisitionPhaseShift();
82 
83  if (symm > 1.0) {
84  symm = 1.0;
85  } else if (symm < -1.0) {
86  symm = -1.0;
87  }
88 
89  if (nphases <= 0) {
90  m_SyncMode = 0;
91  } else if (m_SyncMode) {
92 
93  while (nSamples > 10000) {
94  sampleRate /= 10;
95  nSamples = cycleTime*sampleRate;
96  }
97 
98  int iSamples = (int) nSamples;
99  double divide = iSamples * (0.5 + symm/2.0);
100  double divideBy2 = divide/2;
101  int shift = (int)((double) phase*iSamples/360.0 + nphases) % iSamples;
102 
103  QVector<double> outputTimes(iSamples+1);
104  QVector<double> outputVoltage(iSamples+1);
105 
106  for (int i=0; i<=iSamples; i++) {
107  outputTimes[i] = ((double)i)/((double) sampleRate);
108  }
109 
110  switch (wfm) {
112  for (int ii=0; ii<iSamples; ii++) {
113  int i = (ii+iSamples-shift) % iSamples;
114  if (i<divide) {
115  outputVoltage[ii] = minVal;
116  } else {
117  outputVoltage[ii] = maxVal;
118  }
119  }
120  break;
121 
123  for (int ii=0; ii<iSamples; ii++) {
124  int i = (ii+iSamples-shift) % iSamples;
125  double x;
126  if (i<divide) {
127  x = M_PI*i/divide;
128  } else {
129  x = M_PI+M_PI*(i-divide)/(iSamples-divide);
130  }
131  outputVoltage[ii] = minVal + (maxVal-minVal)*(1.0 - cos(x))/2.0;
132  }
133  break;
134 
136  for (int ii=0; ii<iSamples; ii++) {
137  int i = (ii+iSamples-shift) % iSamples;
138  if (i<divide) {
139  outputVoltage[ii] = minVal + i*(maxVal-minVal)/divide;
140  } else {
141  outputVoltage[ii] = maxVal - (i-divide)*(maxVal-minVal)/(iSamples-divide);
142  }
143  }
144  break;
145 
147  for (int ii=0; ii<iSamples; ii++) {
148  int i = (ii+iSamples-shift) % iSamples;
149  if (i < divideBy2) {
150  outputVoltage[ii] = minVal + i*(maxVal-minVal)/divideBy2;
151  } else if (i < (iSamples-divideBy2)) {
152  outputVoltage[ii] = maxVal - (i-divideBy2)*(maxVal-minVal)/((iSamples-divide)/2);
153  } else {
154  outputVoltage[ii] = minVal - (iSamples-i)*(maxVal-minVal)/divideBy2;
155  }
156  }
157  break;
158 
160  default:
161  for (int ii=0; ii<iSamples; ii++) {
162  int i = (ii+iSamples-shift) % iSamples;
163  outputVoltage[ii] = minVal + i*(maxVal-minVal)/iSamples;
164  }
165  break;
166  }
167 
168  outputVoltage[iSamples] = outputVoltage[0]; // Return output voltage to starting value at the end of the waveform
169 
171 
172  if (nidaq) {
173  nidaq->setAnalogWaveform(chan, sampleRate, outputVoltage.data(), iSamples+1);
174  }
175 
176  {
177  QcepMutexLocker lock(__FILE__, __LINE__, &m_Mutex);
178 
181  }
182  }
183  }
184 }
QxrdNIDAQPluginInterfaceWPtr m_NIDAQPlugin
QxrdAcquisitionParameterPackWPtr m_AcquisitionParms
QSharedPointer< QxrdNIDAQPluginInterface > QxrdNIDAQPluginInterfacePtr
QxrdAcquisitionParameterPackWPtr parms()
QSharedPointer< QxrdAcquisitionParameterPack > QxrdAcquisitionParameterPackPtr

Here is the call graph for this function:

Here is the caller graph for this function:

void QxrdSynchronizedAcquisition::prepareForDarkAcquisition ( QxrdDarkAcquisitionParameterPackWPtr  parms)

Definition at line 55 of file qxrdsynchronizedacquisition.cpp.

References m_SyncMode.

void QxrdSynchronizedAcquisition::setManualOutput ( )
slot

Definition at line 229 of file qxrdsynchronizedacquisition.cpp.

References m_Acquisition, and m_NIDAQPlugin.

Referenced by QxrdSynchronizedAcquisitionDialog::QxrdSynchronizedAcquisitionDialog().

230 {
233 
234  if (acq && nidaq) {
235  QString fullChannel = get_SyncAcquisitionOutputChannel();
236 
237  acq->printMessage(tr("Manually Setting %1 to %2 V")
238  .arg(fullChannel)
239  .arg(get_SyncAcquisitionManualValue()));
240 
241  nidaq->setAnalogOutput(fullChannel, get_SyncAcquisitionManualValue());
242  }
243 }
QxrdNIDAQPluginInterfaceWPtr m_NIDAQPlugin
QSharedPointer< QxrdAcquisition > QxrdAcquisitionPtr
QSharedPointer< QxrdNIDAQPluginInterface > QxrdNIDAQPluginInterfacePtr

Here is the caller graph for this function:

void QxrdSynchronizedAcquisition::setNIDAQPlugin ( QxrdNIDAQPluginInterfaceWPtr  nidaqPlugin)

Definition at line 34 of file qxrdsynchronizedacquisition.cpp.

References m_NIDAQPlugin, and nidaqPlugin().

35 {
37 }
QxrdNIDAQPluginInterfaceWPtr m_NIDAQPlugin
QxrdNIDAQPluginInterfaceWPtr nidaqPlugin() const

Here is the call graph for this function:

void QxrdSynchronizedAcquisition::triggerOnce ( )
slot

Definition at line 245 of file qxrdsynchronizedacquisition.cpp.

References m_Acquisition, m_AcquisitionParms, m_NIDAQPlugin, parms(), and prepareForAcquisition().

Referenced by QxrdSynchronizedAcquisitionDialog::QxrdSynchronizedAcquisitionDialog().

246 {
250 
251  if (acq && nidaq && parms) {
253  nidaq->triggerAnalogWaveform();
254  }
255 }
QxrdNIDAQPluginInterfaceWPtr m_NIDAQPlugin
QSharedPointer< QxrdAcquisition > QxrdAcquisitionPtr
QxrdAcquisitionParameterPackWPtr m_AcquisitionParms
QSharedPointer< QxrdNIDAQPluginInterface > QxrdNIDAQPluginInterfacePtr
QxrdAcquisitionParameterPackWPtr parms()
void prepareForAcquisition(QxrdAcquisitionParameterPackWPtr parms)
QSharedPointer< QxrdAcquisitionParameterPack > QxrdAcquisitionParameterPackPtr

Here is the call graph for this function:

Here is the caller graph for this function:

Member Data Documentation

QxrdAcquisitionWPtr QxrdSynchronizedAcquisition::m_Acquisition
private
QxrdAcquisitionParameterPackWPtr QxrdSynchronizedAcquisition::m_AcquisitionParms
private
QMutex QxrdSynchronizedAcquisition::m_Mutex
mutableprivate

Definition at line 87 of file qxrdsynchronizedacquisition.h.

Referenced by outputTimes(), outputVoltage(), and prepareForAcquisition().

QxrdNIDAQPluginInterfaceWPtr QxrdSynchronizedAcquisition::m_NIDAQPlugin
private
QVector<double> QxrdSynchronizedAcquisition::m_OutputTimes
private

Definition at line 92 of file qxrdsynchronizedacquisition.h.

Referenced by outputTimes(), and prepareForAcquisition().

QVector<double> QxrdSynchronizedAcquisition::m_OutputVoltage
private

Definition at line 93 of file qxrdsynchronizedacquisition.h.

Referenced by outputVoltage(), and prepareForAcquisition().

int QxrdSynchronizedAcquisition::m_SyncMode
private

Property Documentation

double QxrdSynchronizedAcquisition::syncAcquisitionManualValue
readwrite

Definition at line 64 of file qxrdsynchronizedacquisition.h.

double QxrdSynchronizedAcquisition::syncAcquisitionMaximum
readwrite

Definition at line 55 of file qxrdsynchronizedacquisition.h.

double QxrdSynchronizedAcquisition::syncAcquisitionMinimum
readwrite

Definition at line 52 of file qxrdsynchronizedacquisition.h.

int QxrdSynchronizedAcquisition::syncAcquisitionMode
readwrite

Definition at line 23 of file qxrdsynchronizedacquisition.h.

QString QxrdSynchronizedAcquisition::syncAcquisitionOutputChannel
readwrite

Definition at line 46 of file qxrdsynchronizedacquisition.h.

QString QxrdSynchronizedAcquisition::syncAcquisitionOutputDevice
readwrite

Definition at line 43 of file qxrdsynchronizedacquisition.h.

double QxrdSynchronizedAcquisition::syncAcquisitionPhaseShift
readwrite

Definition at line 61 of file qxrdsynchronizedacquisition.h.

double QxrdSynchronizedAcquisition::syncAcquisitionSymmetry
readwrite

Definition at line 58 of file qxrdsynchronizedacquisition.h.

int QxrdSynchronizedAcquisition::syncAcquisitionWaveform
readwrite

Definition at line 32 of file qxrdsynchronizedacquisition.h.


The documentation for this class was generated from the following files: