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"),
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)"),
30 printf(
"Deleting synchronized acquisition\n");
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();
80 double symm = get_SyncAcquisitionSymmetry();
81 double phase = get_SyncAcquisitionPhaseShift();
85 }
else if (symm < -1.0) {
93 while (nSamples > 10000) {
95 nSamples = cycleTime*sampleRate;
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;
106 for (
int i=0; i<=iSamples; i++) {
107 outputTimes[i] = ((double)i)/((double) sampleRate);
112 for (
int ii=0; ii<iSamples; ii++) {
113 int i = (ii+iSamples-shift) % iSamples;
115 outputVoltage[ii] = minVal;
117 outputVoltage[ii] = maxVal;
123 for (
int ii=0; ii<iSamples; ii++) {
124 int i = (ii+iSamples-shift) % iSamples;
129 x = M_PI+M_PI*(i-divide)/(iSamples-divide);
131 outputVoltage[ii] = minVal + (maxVal-minVal)*(1.0 - cos(x))/2.0;
136 for (
int ii=0; ii<iSamples; ii++) {
137 int i = (ii+iSamples-shift) % iSamples;
139 outputVoltage[ii] = minVal + i*(maxVal-minVal)/divide;
141 outputVoltage[ii] = maxVal - (i-divide)*(maxVal-minVal)/(iSamples-divide);
147 for (
int ii=0; ii<iSamples; ii++) {
148 int i = (ii+iSamples-shift) % iSamples;
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);
154 outputVoltage[ii] = minVal - (iSamples-i)*(maxVal-minVal)/divideBy2;
161 for (
int ii=0; ii<iSamples; ii++) {
162 int i = (ii+iSamples-shift) % iSamples;
163 outputVoltage[ii] = minVal + i*(maxVal-minVal)/iSamples;
168 outputVoltage[iSamples] = outputVoltage[0];
173 nidaq->setAnalogWaveform(chan, sampleRate, outputVoltage.data(), iSamples+1);
193 nidaq->pulseOutput();
200 if (acq->acquisitionStatus(0.0) == 0) {
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;
213 if ((frameNumber >= skipBefore) && (frameNumber < (nGroups*perGroup-skipBetween+skipBefore))) {
214 if (inGroup < nPhases*nSummed) {
218 nidaq->triggerAnalogWaveform();
235 QString fullChannel = get_SyncAcquisitionOutputChannel();
237 acq->printMessage(tr(
"Manually Setting %1 to %2 V")
239 .arg(get_SyncAcquisitionManualValue()));
241 nidaq->setAnalogOutput(fullChannel, get_SyncAcquisitionManualValue());
251 if (acq && nidaq && parms) {
253 nidaq->triggerAnalogWaveform();
void finishedAcquisition()
QWeakPointer< QxrdNIDAQPluginInterface > QxrdNIDAQPluginInterfaceWPtr
QxrdNIDAQPluginInterfaceWPtr m_NIDAQPlugin
QSharedPointer< QxrdAcquisition > QxrdAcquisitionPtr
QxrdAcquisitionWPtr m_Acquisition
QxrdSynchronizedAcquisition(QcepSettingsSaverWPtr saver, QxrdAcquisitionWPtr acq)
QxrdNIDAQPluginInterfaceWPtr nidaqPlugin() const
virtual ~QxrdSynchronizedAcquisition()
QxrdAcquisitionParameterPackWPtr m_AcquisitionParms
QWeakPointer< QxrdDarkAcquisitionParameterPack > QxrdDarkAcquisitionParameterPackWPtr
void prepareForDarkAcquisition(QxrdDarkAcquisitionParameterPackWPtr parms)
QVector< double > m_OutputTimes
void setNIDAQPlugin(QxrdNIDAQPluginInterfaceWPtr nidaqPlugin)
QSharedPointer< QxrdNIDAQPluginInterface > QxrdNIDAQPluginInterfacePtr
QxrdAcquisitionParameterPackWPtr parms()
QVector< double > outputVoltage()
void prepareForAcquisition(QxrdAcquisitionParameterPackWPtr parms)
QVector< double > outputTimes()
QWeakPointer< QxrdAcquisition > QxrdAcquisitionWPtr
QWeakPointer< QxrdAcquisitionParameterPack > QxrdAcquisitionParameterPackWPtr
QSharedPointer< QxrdAcquisitionParameterPack > QxrdAcquisitionParameterPackPtr
void acquiredFrameAvailable(int currentPhase)
QWeakPointer< QcepSettingsSaver > QcepSettingsSaverWPtr
QVector< double > m_OutputVoltage