qavrg 0.0.28
|
#include <qavrgacquisition.h>
Public Slots | |
void | acquireData () |
void | acquireReference () |
void | acquireDark () |
void | acquireOnce () |
void | acquireScope () |
void | acquireCancel () |
int | acquireWait (double time) |
void | loadData (QString fileName) |
void | saveData (QString fileName) |
void | newSaveFile (QString f, int n) |
void | closeSaveFile () |
void | startNewScan (QcepStringVector header) |
void | saveAcquisitionResult (QcepDoubleVector data) |
QVector< double > | readResult (int chan, int parm, int start, int nbins) |
QVector< double > | readResult (int chan, int parm) |
double | readResult (int chan, int parm, int bin) |
QString | resultHeader (int chan, int parm, int bin) |
double | readResultAverage (int chan, int parm, int start, int nbins) |
double | readResultBunchAverage (int chan, int parm, int bunch, int norbits) |
int | orbitNumber (int n) const |
int | bucketNumber (int n) const |
void | fillPatternChanged () |
void | timingResetDefaults () |
void | triggerResetDefaults () |
Signals | |
void | noDeviceAvailable () |
void | acquisitionStarted () |
void | acquisitionCancelled () |
void | acquisitionProgress (double pct) |
void | acquisitionCompleted () |
Public Member Functions | |
QavrgAcquisition (QavrgAcquisitionThread *acq, QavrgApplication *app, QObject *parent) | |
~QavrgAcquisition () | |
void | initialize () |
int | resultSize () |
int | getAcquisitionLock () |
void | releaseAcquisitionLock () |
virtual QcepSettingsSaverWPtr | saver () const |
Private Member Functions | |
void | findDevices () |
void | configureAverager (AcquisitionMode mode) |
void | setupAcquisition (AcquisitionMode mode) |
void | startAcquisition (int rep, int nrep) |
void | waitAcquisition (int rep, int nrep) |
void | readoutAcquisition (int rep, int nrep) |
bool | checkStatus (int line, ViStatus status) |
Private Attributes | |
QMutex | m_AcquisitionMutex |
QMutex | m_SaveFileMutex |
QMutex | m_BufferMutex |
QavrgApplication * | m_Application |
QavrgAcquisitionThread * | m_AcquisitionThread |
ViInt32 | m_NInstruments |
ViSession * | m_InstrumentID |
ViInt32 * | m_CardNChannels |
long | m_TotalChannels |
QTime | m_Time |
FILE * | m_SaveFile |
QVector< double > | m_Buffer |
QMutex | m_Acquiring |
QWaitCondition | m_StatusWaiting |
Definition at line 19 of file qavrgacquisition.h.
QavrgAcquisition::QavrgAcquisition | ( | QavrgAcquisitionThread * | acq, |
QavrgApplication * | app, | ||
QObject * | parent | ||
) |
Definition at line 22 of file qavrgacquisition.cpp.
References fillPatternChanged(), findDevices(), m_CardNChannels, m_InstrumentID, newSaveFile(), and valueChanged().
: QavrgAcquisitionSimulated(acq, app, parent), // m_Mutex(QMutex::Recursive), m_Application(app), m_AcquisitionThread(acq), m_NInstruments(0), m_InstrumentID(NULL), m_CardNChannels(NULL), m_TotalChannels(0), m_SaveFile(NULL) // m_ParametersChanged(false) { m_InstrumentID = new ViSession[20]; m_CardNChannels = new ViInt32[20]; newSaveFile("saveddata",1); findDevices(); connect(prop_FillPatternMode(), SIGNAL(valueChanged(int,int)), this, SLOT(fillPatternChanged())); }
QavrgAcquisition::~QavrgAcquisition | ( | ) |
Definition at line 61 of file qavrgacquisition.cpp.
References m_CardNChannels, QavrgAcquisitionParms::m_Fitters, m_InstrumentID, m_NInstruments, and m_SaveFile.
{ for (int i=0; i<m_NInstruments; i++) { AcqrsD1_stopAcquisition(m_InstrumentID[i]); } Acqrs_closeAll(); delete [] m_InstrumentID; delete [] m_CardNChannels; QavrgFitter *t; foreach(t, m_Fitters) { delete t; } if (m_SaveFile) { fclose(m_SaveFile); } }
void QavrgAcquisition::acquireCancel | ( | ) | [slot] |
Definition at line 181 of file qavrgacquisition.cpp.
References acquisitionCancelled(), QavrgAcquisitionData::m_AcquireCancel, and m_Acquiring.
{ // printf("Acquire cancel\n"); // if (m_Acquiring.tryLock()) { m_Acquiring.unlock(); return; } else { // printf("Emit cancelled\n"); emit acquisitionCancelled(); m_AcquireCancel = 1; } }
void QavrgAcquisition::acquireDark | ( | ) | [slot] |
Definition at line 255 of file qavrgacquisition.cpp.
References QavrgAcquisitionParms::AcquireDark, QavrgAcquisitionParms::AcquireDone, acquisitionCompleted(), acquisitionProgress(), QavrgAcquisitionData::m_AcquireCancel, readoutAcquisition(), releaseAcquisitionLock(), QavrgAcquisitionData::saveDarkData(), setupAcquisition(), startAcquisition(), and waitAcquisition().
{ THREAD_CHECK; // // QMutexLocker lock(&m_Acquiring); setupAcquisition(AcquireDark); int nrep = get_DarkNRepeats(); for (int i=0; i<nrep; i++) { if (m_AcquireCancel) { m_AcquireCancel = 0; break; } else { startAcquisition(i, nrep); waitAcquisition(i, nrep); readoutAcquisition(i, nrep); emit acquisitionProgress((i+1)*100.0/nrep); } } saveDarkData(); releaseAcquisitionLock(); set_Status(AcquireDone); emit acquisitionCompleted(); }
void QavrgAcquisition::acquireData | ( | ) | [slot] |
Definition at line 197 of file qavrgacquisition.cpp.
References QavrgAcquisitionParms::AcquireData, QavrgAcquisitionParms::AcquireDone, acquisitionCompleted(), acquisitionProgress(), QavrgAcquisitionData::m_AcquireCancel, QavrgAcquisitionParms::printMessage(), readoutAcquisition(), releaseAcquisitionLock(), setupAcquisition(), startAcquisition(), and waitAcquisition().
{ THREAD_CHECK; // // QMutexLocker lock(&m_Acquiring); // printf("QavrgAcquisition::acquireData()\n"); QTime tm; tm.start(); int cumultime=0; // cumultime += tm.restart(); // emit printMessage(tr("acquireData: cumulative acquisition time %1 msec").arg(cumultime)); setupAcquisition(AcquireData); // cumultime += tm.restart(); // emit printMessage(tr("setup: cumulative acquisition time %1 msec").arg(cumultime)); int nrep = get_NRepeats(); for (int i=0; i<nrep; i++) { if (m_AcquireCancel) { m_AcquireCancel = 0; break; } else { // cumultime += tm.restart(); // emit printMessage(tr("start: cumulative acquisition time %1 msec").arg(cumultime)); startAcquisition(i, nrep); // cumultime += tm.restart(); // emit printMessage(tr("wait: cumulative acquisition time %1 msec").arg(cumultime)); waitAcquisition(i, nrep); // cumultime += tm.restart(); // emit printMessage(tr("readout: cumulative acquisition time %1 msec").arg(cumultime)); readoutAcquisition(i, nrep); emit acquisitionProgress((i+1)*100.0/nrep); // cumultime += tm.restart(); // emit printMessage(tr("done: cumulative acquisition time %1 msec").arg(cumultime)); } } releaseAcquisitionLock(); set_Status(AcquireDone); emit acquisitionCompleted(); cumultime += tm.restart(); emit printMessage(tr("acquireData(): cumulative acquisition time %1 msec").arg(cumultime)); }
void QavrgAcquisition::acquireOnce | ( | ) | [slot] |
Definition at line 317 of file qavrgacquisition.cpp.
References QavrgAcquisitionParms::AcquireDone, QavrgAcquisitionParms::AcquireOnce, acquisitionCompleted(), acquisitionProgress(), readoutAcquisition(), releaseAcquisitionLock(), setupAcquisition(), startAcquisition(), and waitAcquisition().
{ THREAD_CHECK; // // QMutexLocker lock(&m_Acquiring); setupAcquisition(AcquireOnce); startAcquisition(0,1); waitAcquisition(0,1); readoutAcquisition(0,1); emit acquisitionProgress(100); releaseAcquisitionLock(); set_Status(AcquireDone); emit acquisitionCompleted(); }
void QavrgAcquisition::acquireReference | ( | ) | [slot] |
Definition at line 286 of file qavrgacquisition.cpp.
References QavrgAcquisitionParms::AcquireDone, QavrgAcquisitionParms::AcquireReference, acquisitionCompleted(), acquisitionProgress(), QavrgAcquisitionData::m_AcquireCancel, readoutAcquisition(), releaseAcquisitionLock(), QavrgAcquisitionData::saveReferenceData(), setupAcquisition(), startAcquisition(), and waitAcquisition().
{ THREAD_CHECK; // // QMutexLocker lock(&m_Acquiring); setupAcquisition(AcquireReference); int nrep = get_ReferenceNRepeats(); for (int i=0; i<nrep; i++) { if (m_AcquireCancel) { m_AcquireCancel = 0; break; } else { startAcquisition(i, nrep); waitAcquisition(i, nrep); readoutAcquisition(i, nrep); emit acquisitionProgress((i+1)*100.0/nrep); } } saveReferenceData(); releaseAcquisitionLock(); set_Status(AcquireDone); emit acquisitionCompleted(); }
void QavrgAcquisition::acquireScope | ( | ) | [slot] |
Definition at line 337 of file qavrgacquisition.cpp.
References QavrgAcquisitionParms::AcquireDone, QavrgAcquisitionParms::AcquireScope, acquisitionCompleted(), acquisitionProgress(), configureAverager(), QavrgAcquisitionData::m_AcquireCancel, readoutAcquisition(), releaseAcquisitionLock(), setupAcquisition(), startAcquisition(), and waitAcquisition().
{ THREAD_CHECK; // // QMutexLocker lock(&m_Acquiring); setupAcquisition(AcquireScope); for (int i=0; ; i++) { // printf("m_AcquireCancel = %d\n", (int) m_AcquireCancel); // if (m_AcquireCancel) { m_AcquireCancel = 0; break; } else { configureAverager(AcquireScope); startAcquisition(0,1); waitAcquisition(0,1); readoutAcquisition(0,1); emit acquisitionProgress(-1); } } releaseAcquisitionLock(); set_Status(AcquireDone); emit acquisitionCompleted(); }
int QavrgAcquisition::acquireWait | ( | double | time | ) | [slot] |
Definition at line 159 of file qavrgacquisition.cpp.
References QavrgAcquisitionParms::AcquireData, QavrgAcquisitionParms::AcquireDone, m_Acquiring, and m_StatusWaiting.
{ if (m_Acquiring.tryLock()) { m_Acquiring.unlock(); // printf("Not acquiring\n"); return AcquireDone; } QMutex mutex; QMutexLocker lock(&mutex); if (m_StatusWaiting.wait(&mutex, (int)(time*1000))) { // printf("Waited for %g and succeeded\n", time); return AcquireDone; } else { // printf("Waited for %g and timed out\n", time); return AcquireData/*get_Status()*/; } }
void QavrgAcquisition::acquisitionCancelled | ( | ) | [signal] |
Referenced by acquireCancel().
void QavrgAcquisition::acquisitionCompleted | ( | ) | [signal] |
Referenced by acquireDark(), acquireData(), acquireOnce(), acquireReference(), and acquireScope().
void QavrgAcquisition::acquisitionProgress | ( | double | pct | ) | [signal] |
Referenced by acquireDark(), acquireData(), acquireOnce(), acquireReference(), and acquireScope().
void QavrgAcquisition::acquisitionStarted | ( | ) | [signal] |
Referenced by setupAcquisition().
int QavrgAcquisition::bucketNumber | ( | int | n | ) | const [slot] |
Definition at line 667 of file qavrgacquisition.cpp.
References QavrgAcquisitionParms::get_FilledBucketsPerOrbit().
Referenced by QavrgResultsModel::headerData(), and resultHeader().
{ int norb = get_FilledBucketsPerOrbit(); if (norb) { return n%norb; } else { return 0; } }
bool QavrgAcquisition::checkStatus | ( | int | line, |
ViStatus | status | ||
) | [private] |
Definition at line 388 of file qavrgacquisition.cpp.
void QavrgAcquisition::closeSaveFile | ( | ) | [slot] |
Definition at line 498 of file qavrgacquisition.cpp.
References m_SaveFile, and m_SaveFileMutex.
{ QMutexLocker lock(&m_SaveFileMutex); if (m_SaveFile) { fclose(m_SaveFile); m_SaveFile = NULL; } }
void QavrgAcquisition::configureAverager | ( | AcquisitionMode | mode | ) | [private] |
Definition at line 679 of file qavrgacquisition.cpp.
References QavrgAcquisitionParms::AcquireScope, CHECK_STATUS, QavrgAcquisitionParms::fitter(), m_CardNChannels, m_InstrumentID, m_NInstruments, QavrgAcquisitionParms::printMessage(), QavrgAcquisitionParms::set_AcquisitionMode(), and QavrgAcquisitionSimulated::simulatedConfigureAverager().
Referenced by acquireScope(), and setupAcquisition().
{ THREAD_CHECK; set_AcquisitionMode(mode); if (mode == AcquireScope) { set_AcquireIntegrationTime(get_ScopeIntegrationTime()); } else { set_AcquireIntegrationTime(get_IntegrationTime()); } if (get_SimulationMode()) { simulatedConfigureAverager(mode); } else { // printf("configure averager (thread %p, this-thread() %p\n", QThread::currentThread(), thread()); // QMutexLocker lock(&m_Mutex); double sampInterval = 1.e-9, delayTime = 0.0; long trigCoupling = 0; long trigSlope = (get_TriggerSlope()==0 ? 1 : 0); double trigLevel = get_TriggerLevel()*1000; // ### Configuration parameters for averager ### long nbrSamples = get_NSamples(); long nbrWaveForms = (long)(get_AcquireIntegrationTime()*get_LaserRepRate()); long ditherRange = 0, trigResync = 1; long startDelay = 0, stopDelay = 0; for (int i=0, chan=0; i<m_NInstruments; i++) { // Configure timebase CHECK_STATUS(AcqrsD1_configHorizontal(m_InstrumentID[i], sampInterval, delayTime)); switch (get_TriggerSource()) { case 0: // External trigger CHECK_STATUS(AcqrsD1_configTrigClass(m_InstrumentID[i], 0, 0x80000000, 0, 0, 0.0, 0.0)); CHECK_STATUS(AcqrsD1_configTrigSource(m_InstrumentID[i], -1, trigCoupling, trigSlope, trigLevel, 0.0)); break; case 1: // Channel 0 trigger CHECK_STATUS(AcqrsD1_configTrigClass(m_InstrumentID[i], 0, 0x00000001, 0, 0, 0.0, 0.0)); CHECK_STATUS(AcqrsD1_configTrigSource(m_InstrumentID[i], 1, trigCoupling, trigSlope, trigLevel, 0.0)); break; default: emit printMessage("Unknown trigger source"); break; } ViInt32 temperature; CHECK_STATUS(AcqrsD1_getInstrumentInfo(m_InstrumentID[i], "Temperature", &temperature)); emit printMessage(tr("card %1 temperature %2degC").arg(i).arg(temperature)); for (long channel = 1; channel <= m_CardNChannels[i]; channel++, chan++) { double fullScale = fitter(chan) -> get_InputFullScale(); double offset = fitter(chan) -> get_InputOffset(); long bandwidth = fitter(chan) -> get_InputBandwidth(); long coupling = fitter(chan) -> get_InputCoupling(); // printf("Chan %d : Full Scale %g, Offset %g, Bandwidth %d, Coupling %d\n", chan, fullScale, offset, bandwidth, coupling); // Configure vertical settings CHECK_STATUS(AcqrsD1_configVertical(m_InstrumentID[i], channel, fullScale, offset, coupling, bandwidth)); // number of samples CHECK_STATUS(AcqrsD1_configAvgConfig(m_InstrumentID[i], channel, "NbrSamples", &nbrSamples)); // number of waveforms CHECK_STATUS(AcqrsD1_configAvgConfig(m_InstrumentID[i], channel, "NbrWaveforms", &nbrWaveForms)); // dithering range CHECK_STATUS(AcqrsD1_configAvgConfig(m_InstrumentID[i], channel, "DitherRange", &ditherRange)); // trigger resync CHECK_STATUS(AcqrsD1_configAvgConfig(m_InstrumentID[i], channel, "TrigResync", &trigResync)); // startDelay CHECK_STATUS(AcqrsD1_configAvgConfig(m_InstrumentID[i], channel, "StartDelay", &startDelay)); // stopDelay CHECK_STATUS(AcqrsD1_configAvgConfig(m_InstrumentID[i], channel, "StopDelay", &stopDelay)); } } } }
void QavrgAcquisition::fillPatternChanged | ( | ) | [slot] |
Definition at line 116 of file qavrgacquisition.cpp.
References QavrgAcquisitionParms::fillPattern, QavrgAcquisitionParms::get_CustomFillPattern(), m_Application, and QavrgAcquisitionParms::set_FillPattern().
Referenced by QavrgAcquisition().
{ // printf("QavrgAcquisition::fillPatternChanged\n"); QcepBoolVector patt; int bpo = get_BucketsPerOrbit(); int nbunches; switch (get_FillPatternMode()) { case 0: // Automatic mode if (m_Application -> fillPattern()) { patt = m_Application -> fillPattern() -> fillPattern(); } break; case 1: // 24 bunch mode patt.resize(bpo); for (int i=0; i<24; i++) { patt[i*bpo/24] = true; } break; case 2: // Single bunch mode; patt.resize(bpo); patt[0] = 1; break; case 3: nbunches = get_CustomFilledBucketsPerOrbit(); patt.resize(bpo); for (int i=0; i<nbunches; i++) { patt[i*bpo/nbunches] = true; } break; case 4: // Custom fill mode patt = get_CustomFillPattern(); break; } set_FillPattern(patt); }
void QavrgAcquisition::findDevices | ( | ) | [private] |
Definition at line 403 of file qavrgacquisition.cpp.
References CHECK_STATUS, m_AcquisitionMutex, m_CardNChannels, QavrgAcquisitionParms::m_Fitters, QavrgAcquisitionParms::m_FittersMutex, m_InstrumentID, m_NInstruments, m_TotalChannels, and QavrgAcquisitionParms::status.
Referenced by QavrgAcquisition().
{ QMutexLocker lock(&m_AcquisitionMutex); // printf("QavrgAcquisition::findDevices()\n"); ViStatus status; ViChar options[] = "cal=0 dma=1"; status = AcqrsD1_multiInstrAutoDefine(options, &m_NInstruments); // printf("Status = %d, NInstruments = %ld\n", (int) status, m_NInstruments); if ((!CHECK_STATUS(status)) || (m_NInstruments <= 0)) { set_SimulationMode(true); m_TotalChannels = 4; } // printf("Found %ld Acqiris Instruments\n", m_NInstruments); for (int i=0; i<m_NInstruments; i++) { char resourceName[20]; sprintf(resourceName, "PCI::INSTR%d",i); status = AcqrsD1_InitWithOptions(resourceName, VI_FALSE, VI_FALSE, options, &m_InstrumentID[i]); CHECK_STATUS(status); status = AcqrsD1_getNbrChannels(m_InstrumentID[i], &m_CardNChannels[i]); CHECK_STATUS(status); printf("Instrument %d has %ld channels\n", i, m_CardNChannels[i]); CHECK_STATUS(AcqrsD1_configMode(m_InstrumentID[i], 2, 0, 0)); // 0 for dig, 2 for avg m_TotalChannels += m_CardNChannels[i]; } setdef_NChannels(m_TotalChannels); // printf("Starting fitter threads...\n"); QMutexLocker lock2(&m_FittersMutex); m_Fitters.resize(m_TotalChannels); for (int i=0; i < m_TotalChannels; i++) { m_Fitters[i] = new QavrgFitter(this, i); } // printf("Ready..\n"); }
int QavrgAcquisition::getAcquisitionLock | ( | ) |
Definition at line 368 of file qavrgacquisition.cpp.
References m_Acquiring.
{ if (m_Acquiring.tryLock()) { // printf("Got acquisition lock\n"); return 1; } else { // printf("Failed to get acquisition lock\n"); return 0; } }
void QavrgAcquisition::initialize | ( | ) |
Definition at line 44 of file qavrgacquisition.cpp.
References QavrgAcquisitionData::loadDarkData(), QavrgAcquisitionData::loadReferenceData(), and noDeviceAvailable().
{ THREAD_CHECK; // printf("Enter QavrgAcquisition::initialize(), nChannels = %d\n", get_NChannels()); if (get_SimulationMode()) { emit noDeviceAvailable(); } // loadParameters(); loadReferenceData(); loadDarkData(); // printf("Leave QavrgAcquisition::initialize()\n"); }
void QavrgAcquisition::loadData | ( | QString | fileName | ) | [slot] |
Definition at line 1028 of file qavrgacquisition.cpp.
References QavrgAcquisitionParms::warningMessage().
{ emit warningMessage(tr("QavrgAcquisition::loadData has not been implemented")); }
void QavrgAcquisition::newSaveFile | ( | QString | f, |
int | n | ||
) | [slot] |
Definition at line 457 of file qavrgacquisition.cpp.
References QavrgAcquisitionParms::filePath, m_SaveFile, and m_SaveFileMutex.
Referenced by QavrgAcquisition().
{ printf("QavrgAcquisition::newSaveFile(%s,%d)\n", qPrintable(f), n); QFileInfo finfo(f); QDateTime dt = QDateTime::currentDateTime(); QString datePath = dt.toString("yyyy/MM/dd/"); QString filePath; if (finfo.isRelative()) { QDir od(get_OutputDirectory()); filePath = od.absolutePath()+"/saveddata/"+datePath+f; od.mkpath(od.absolutePath()+"/saveddata/"+datePath); printf("filePath = %s\n", qPrintable(filePath)); } else { filePath = f; } FILE* nf = fopen(qPrintable(filePath),"a+"); if (nf) { QMutexLocker lock(&m_SaveFileMutex); if (m_SaveFile) { fclose(m_SaveFile); m_SaveFile = NULL; } m_SaveFile = nf; set_FileName(f); set_FilePath(filePath); set_ScanNumber(n); fprintf(m_SaveFile, "#F %s\n", qPrintable(f)); fprintf(m_SaveFile, "#E %d\n", (int) ::time(NULL)); fprintf(m_SaveFile, "#D %s\n", qPrintable(QDateTime::currentDateTime().toString())); fprintf(m_SaveFile, "\n"); fflush(m_SaveFile); } }
void QavrgAcquisition::noDeviceAvailable | ( | ) | [signal] |
Referenced by initialize().
int QavrgAcquisition::orbitNumber | ( | int | n | ) | const [slot] |
Definition at line 656 of file qavrgacquisition.cpp.
References QavrgAcquisitionParms::get_FilledBucketsPerOrbit().
Referenced by QavrgResultsModel::headerData(), and resultHeader().
{ int norb = get_FilledBucketsPerOrbit(); if (norb) { return n/norb; } else { return n; } }
void QavrgAcquisition::readoutAcquisition | ( | int | rep, |
int | nrep | ||
) | [private] |
Definition at line 850 of file qavrgacquisition.cpp.
References QavrgAcquisitionParms::AcquireDark, QavrgAcquisitionParms::AcquireData, QavrgAcquisitionParms::AcquireDone, QavrgAcquisitionParms::AcquireOnce, QavrgAcquisitionParms::AcquireReference, QavrgAcquisitionParms::AcquireScope, CHECK_STATUS, QavrgFitter::darkDataPtr(), QavrgAcquisitionParms::fitter(), QavrgAcquisitionParms::get_AcquisitionMode(), QavrgAcquisitionParms::incr_NQueuedResults(), QavrgAcquisitionData::m_Accumulator, QavrgAcquisitionData::m_AccumulatorMutex, m_Buffer, m_CardNChannels, m_InstrumentID, m_NInstruments, m_Time, m_TotalChannels, QavrgAcquisitionData::new_DarkData(), QavrgAcquisitionData::new_FitData(), QavrgAcquisitionData::new_FittingResults(), QavrgAcquisitionData::new_RawData(), QavrgAcquisitionData::new_ReferenceData(), QavrgFitter::performCalculation(), QavrgAcquisitionParms::printMessage(), QavrgFitter::rawDataPtr(), QavrgFitter::referenceDataPtr(), and QavrgAcquisitionSimulated::simulatedReadoutAcquisition().
Referenced by acquireDark(), acquireData(), acquireOnce(), acquireReference(), and acquireScope().
{ THREAD_CHECK; if (get_SimulationMode()) { simulatedReadoutAcquisition(rep, nrep); } else { QTime timer; AqReadParameters readParams; AqDataDescriptor wfDesc; AqSegmentDescriptorAvg segDesc[1]; int chan=0; int nsamples = get_NSamples(); for (int i=0; i<m_NInstruments; i++) { timer.start(); for (int ch=0; ch<m_CardNChannels[i]; ch++, chan++) { readParams.dataType = ReadReal64; readParams.readMode = ReadModeAvgW; // ReadModeStdW; readParams.nbrSegments = 1; readParams.firstSampleInSeg = 0; readParams.firstSegment = 0; readParams.segmentOffset = 0; readParams.segDescArraySize = (long)sizeof(AqSegmentDescriptorAvg) * 1; readParams.nbrSamplesInSeg = nsamples; readParams.dataArraySize = sizeof(double)*nsamples; readParams.flags = 0; readParams.reserved = 0; readParams.reserved2 = 0.0; readParams.reserved3 = 0.0; CHECK_STATUS(AcqrsD1_readData(m_InstrumentID[i], ch+1, &readParams, m_Buffer.data(), &wfDesc, &segDesc)); // printf("rep = %d, nrepetitions = %d\n", rep, nrep); for (int i=0; i<nsamples; i++) { m_Accumulator[chan][i] += m_Buffer[i]; } } } if (rep >= (nrep-1)) { switch (get_AcquisitionMode()) { case AcquireDone: printf("Invalid acquisition mode in QavrgAcquisition::readoutAcquisition\n"); return; case AcquireData: case AcquireScope: case AcquireOnce: for (int chan=0; chan<m_TotalChannels; chan++) { fitter(chan) -> resize(nsamples); QMutexLocker lock(&m_AccumulatorMutex); QMutexLocker lock1(fitter(chan)->mutex()); double *rawData = fitter(chan)->rawDataPtr(); double *accum = m_Accumulator[chan].data(); for (int i = 0; i<nsamples; i++) { rawData[i] = accum[i]/nrep; } } if (get_AcquisitionMode() == AcquireScope) { incr_NQueuedResults(); emit new_RawData(); } break; case AcquireDark: for (int chan=0; chan<m_TotalChannels; chan++) { fitter(chan) -> resize(nsamples); QMutexLocker lock(&m_AccumulatorMutex); QMutexLocker lock1(fitter(chan)->mutex()); double *darkData = fitter(chan)->darkDataPtr(); double *accum = m_Accumulator[chan].data(); for (int i = 0; i<nsamples; i++) { darkData[i] = accum[i]/nrep; } fitter(chan) -> set_DarkAvailable(true); } incr_NQueuedResults(); emit new_DarkData(); break; case AcquireReference: for (int chan=0; chan<m_TotalChannels; chan++) { fitter(chan) -> resize(nsamples); QMutexLocker lock(&m_AccumulatorMutex); QMutexLocker lock1(fitter(chan)->mutex()); double *refData = fitter(chan)->referenceDataPtr(); double *accum = m_Accumulator[chan].data(); for (int i = 0; i<nsamples; i++) { refData[i] = accum[i]/nrep; } fitter(chan) -> set_ReferenceAvailable(true); } incr_NQueuedResults(); emit new_ReferenceData(); break; } if (get_AcquisitionMode() == AcquireData || get_AcquisitionMode() == AcquireOnce) { QList< QFuture<void> > futures; for (int chan=0; chan<m_TotalChannels; chan++) { if (fitter(chan) -> get_ReferenceAvailable()) { // printf("concurrent fitting, max Threads = %d\n", QThreadPool::globalInstance()->maxThreadCount()); futures.append(QtConcurrent::run(fitter(chan), &QavrgFitter::performCalculation)); } } foreach(QFuture<void> f, futures) { f.waitForFinished(); } incr_NQueuedResults(); emit new_FitData(); /* implies new_RawData(), also */ emit new_FittingResults(); emit printMessage(tr("Fitting complete after %1 msec").arg(m_Time.restart())); } } } }
QVector< double > QavrgAcquisition::readResult | ( | int | chan, |
int | parm, | ||
int | start, | ||
int | nbins | ||
) | [slot] |
Definition at line 616 of file qavrgacquisition.cpp.
References QavrgAcquisitionParms::fitter(), and QavrgFitter::readResult().
Referenced by saveAcquisitionResult().
{ QavrgFitter *f = fitter(chan); if (f) { return f->readResult(parm,start,nbins); } else { return QVector<double>(); } }
double QavrgAcquisition::readResult | ( | int | chan, |
int | parm, | ||
int | bin | ||
) | [slot] |
Definition at line 638 of file qavrgacquisition.cpp.
References QavrgAcquisitionParms::fitter(), and QavrgFitter::readResult().
{ QavrgFitter *f = fitter(chan); if (f) { return f->readResult(parm,bin); } else { return 0; } }
QVector< double > QavrgAcquisition::readResult | ( | int | chan, |
int | parm | ||
) | [slot] |
Definition at line 627 of file qavrgacquisition.cpp.
References QavrgAcquisitionParms::fitter(), and QavrgFitter::readResult().
{ QavrgFitter *f = fitter(chan); if (f) { return f->readResult(parm); } else { return QVector<double>(); } }
double QavrgAcquisition::readResultAverage | ( | int | chan, |
int | parm, | ||
int | start, | ||
int | nbins | ||
) | [slot] |
Definition at line 594 of file qavrgacquisition.cpp.
References QavrgAcquisitionParms::fitter(), and QavrgFitter::readResultAverage().
{ QavrgFitter *f = fitter(chan); if (f) { return f->readResultAverage(parm,start,nbins); } else { return 0; } }
double QavrgAcquisition::readResultBunchAverage | ( | int | chan, |
int | parm, | ||
int | bunch, | ||
int | norbits | ||
) | [slot] |
Definition at line 605 of file qavrgacquisition.cpp.
References QavrgAcquisitionParms::fitter(), and QavrgFitter::readResultBunchAverage().
{ QavrgFitter *f = fitter(chan); if (f) { return f->readResultBunchAverage(parm, bunch, norbits); } else { return 0; } }
void QavrgAcquisition::releaseAcquisitionLock | ( | ) |
Definition at line 379 of file qavrgacquisition.cpp.
References m_Acquiring, and m_StatusWaiting.
Referenced by acquireDark(), acquireData(), acquireOnce(), acquireReference(), and acquireScope().
{ // printf("Release acquisition lock\n"); m_Acquiring.unlock(); m_StatusWaiting.wakeAll(); }
QString QavrgAcquisition::resultHeader | ( | int | chan, |
int | parm, | ||
int | bin | ||
) | [slot] |
Definition at line 649 of file qavrgacquisition.cpp.
References bucketNumber(), and orbitNumber().
Referenced by startNewScan().
{ // const char * labels = "BSP"; return tr("c%1o%2b%3").arg(chan).arg(orbitNumber(bin)).arg(bucketNumber(bin)); }
int QavrgAcquisition::resultSize | ( | ) |
Definition at line 96 of file qavrgacquisition.cpp.
References QavrgAcquisitionParms::fitter().
Referenced by QavrgResultsModel::rowCount().
{ int maxsize = 0; int nchan = get_NChannels(); for (int chan=0; chan<nchan; chan++) { QavrgFitter *t = fitter(chan); if (t) { int resultsize = t -> resultSize(); if (resultsize > maxsize) { maxsize = resultsize; } } } return maxsize; }
void QavrgAcquisition::saveAcquisitionResult | ( | QcepDoubleVector | data | ) | [slot] |
Definition at line 559 of file qavrgacquisition.cpp.
References QavrgAcquisitionParms::fitter(), m_SaveFile, m_SaveFileMutex, QavrgFitter::PeakHeight, readResult(), and QavrgFitter::resultSize().
{ QMutexLocker lock(&m_SaveFileMutex); // printf("acquisition data ready\n"); int nhdr = data.size(); for (int i=0; i<nhdr; i++) { if (i == 0) { fprintf(m_SaveFile, "%g", data[i]); } else { fprintf(m_SaveFile, " %g", data[i]); } } for (int ch=0; ch < get_NChannels(); ch++) { QavrgFitter *f = fitter(ch); if (f) { int nbins = f->resultSize(); for (int bin=0; bin < nbins; bin++) { // for (int parm=0; parm<3; parm++) { // fprintf(m_SaveFile, " %g", readResult(ch, parm, bin)); // } fprintf(m_SaveFile, " %g", readResult(ch, QavrgFitter::PeakHeight, bin)); } } } fprintf(m_SaveFile, "\n"); fflush(m_SaveFile); }
void QavrgAcquisition::saveData | ( | QString | fileName | ) | [slot] |
Definition at line 996 of file qavrgacquisition.cpp.
References QavrgAcquisitionParms::fitter(), QavrgFitter::get_RawData(), and QavrgAcquisitionParms::warningMessage().
{ QFile outFile(fileName); if (outFile.open(QIODevice::Append)) { QTextStream out(&outFile); out << "#S 0 qavrg data\n"; out << "#N " << 1+get_NChannels() << "\n"; out << "#L n"; for (int ch=0; ch<get_NChannels(); ch++) { out << " chan" << ch; } out <<"\n"; int nsamples = get_NSamples(); int nchans = get_NChannels(); for (int i=0; i<nsamples; i++) { out << i; for (int ch=0; ch < nchans; ch++) { out << "\t" << fitter(ch)->get_RawData(i); } out << "\n"; } } else { emit warningMessage(tr("Unable to open output file %1").arg(fileName)); } }
QcepSettingsSaverWPtr QavrgAcquisition::saver | ( | ) | const [virtual] |
Implements QavrgAcquisitionParms.
Definition at line 1033 of file qavrgacquisition.cpp.
References m_Application, and QavrgApplication::saver().
{ return m_Application->saver(); }
void QavrgAcquisition::setupAcquisition | ( | AcquisitionMode | mode | ) | [private] |
Definition at line 761 of file qavrgacquisition.cpp.
References acquisitionStarted(), configureAverager(), QavrgAcquisitionData::m_AcquireCancel, and m_Acquiring.
Referenced by acquireDark(), acquireData(), acquireOnce(), acquireReference(), and acquireScope().
{ THREAD_CHECK; m_Acquiring.tryLock(); set_Status(mode); emit acquisitionStarted(); m_AcquireCancel = 0; configureAverager(mode); }
void QavrgAcquisition::startAcquisition | ( | int | rep, |
int | nrep | ||
) | [private] |
Definition at line 774 of file qavrgacquisition.cpp.
References CHECK_STATUS, QavrgAcquisitionData::m_Accumulator, m_Buffer, m_InstrumentID, m_NInstruments, m_Time, m_TotalChannels, and QavrgAcquisitionSimulated::simulatedStartAcquisition().
Referenced by acquireDark(), acquireData(), acquireOnce(), acquireReference(), and acquireScope().
{ THREAD_CHECK; m_Time.start(); if (get_SimulationMode()) { simulatedStartAcquisition(rep, nrep); } else { // printf("start acquisition (thread %p, this-thread() %p\n", QThread::currentThread(), thread()); if (rep == 0) { int nchan = get_NChannels(); int nsamp = get_NSamples(); m_Accumulator.resize(m_TotalChannels); for (int chan=0; chan<m_TotalChannels; chan++) { m_Accumulator[chan].resize(nsamp); m_Accumulator[chan].fill(0); } m_Buffer.resize(nsamp); // // m_Futures.resize(nchan); } for (int i=0; i<m_NInstruments; i++) { CHECK_STATUS(AcqrsD1_acquire(m_InstrumentID[i])); // if (get_TriggerSource() == 1) { // printf("Attempt to force trigger\n"); // CHECK_STATUS(AcqrsD1_forceTrig(m_InstrumentID[i])); // } } } }
void QavrgAcquisition::startNewScan | ( | QcepStringVector | header | ) | [slot] |
Definition at line 508 of file qavrgacquisition.cpp.
References QavrgAcquisitionParms::fitter(), m_SaveFile, m_SaveFileMutex, QavrgFitter::PeakHeight, resultHeader(), and QavrgFitter::resultSize().
{ QMutexLocker lock(&m_SaveFileMutex); int n = get_ScanNumber(); n++; set_ScanNumber(n); fprintf(m_SaveFile, "#S %d qavrgscan\n", n); fprintf(m_SaveFile, "#D %s\n", qPrintable(QDateTime::currentDateTime().toString())); int ncols = 0; for (int ch=0; ch < get_NChannels(); ch++) { QavrgFitter *f = fitter(ch); if (f) { ncols += /*3**/(f->resultSize()); } } int nhdr = header.size(); fprintf(m_SaveFile, "#N %d\n", ncols+nhdr); for (int i=0; i<nhdr; i++) { if (i == 0) { fprintf(m_SaveFile, "#L %s", qPrintable(header[i])); } else { fprintf(m_SaveFile, " %s", qPrintable(header[i])); } } for (int ch=0; ch < get_NChannels(); ch++) { QavrgFitter *f = fitter(ch); if (f) { int nbins = f->resultSize(); for (int bin=0; bin < nbins; bin++) { // for (int parm=0; parm<3; parm++) { // fprintf(m_SaveFile, " %s", qPrintable(resultHeader(ch, parm, bin))); // } fprintf(m_SaveFile, " %s", qPrintable(resultHeader(ch, QavrgFitter::PeakHeight, bin))); } } } fprintf(m_SaveFile, "\n"); fflush(m_SaveFile); }
void QavrgAcquisition::timingResetDefaults | ( | ) | [slot] |
Definition at line 83 of file qavrgacquisition.cpp.
{ reset_NChannels(); reset_NSamples(); }
void QavrgAcquisition::triggerResetDefaults | ( | ) | [slot] |
Definition at line 89 of file qavrgacquisition.cpp.
{ reset_TriggerLevel(); reset_TriggerSlope(); reset_TriggerSource(); }
void QavrgAcquisition::waitAcquisition | ( | int | rep, |
int | nrep | ||
) | [private] |
Definition at line 813 of file qavrgacquisition.cpp.
References CHECK_STATUS, QavrgAcquisitionData::m_AcquireCancel, m_InstrumentID, m_NInstruments, m_Time, QavrgAcquisitionParms::printMessage(), QavrgAcquisitionSimulated::simulatedWaitAcquisition(), and QavrgAcquisitionParms::status.
Referenced by acquireDark(), acquireData(), acquireOnce(), acquireReference(), and acquireScope().
{ THREAD_CHECK; if (get_SimulationMode()) { simulatedWaitAcquisition(rep, nrep); } else { // printf("wait acquisition (thread %p, this-thread() %p\n", QThread::currentThread(), thread()); unsigned int status = VI_SUCCESS; long waitTime = (long)((get_AcquireIntegrationTime()+5.0)*1000); for (int i=0; i<m_NInstruments; i++) { while (waitTime > 0) { status = AcqrsD1_waitForEndOfAcquisition(m_InstrumentID[i], 100); // printf("QavrgAcquisition::waitAcquisition waitTime %ld, status %x, i %d\n", waitTime, status, i); waitTime -= 100; if (status == VI_SUCCESS || m_AcquireCancel) { break; } } waitTime = 2000; if (status == ACQIRIS_ERROR_ACQ_TIMEOUT) { CHECK_STATUS(AcqrsD1_stopAcquisition(m_InstrumentID[i])); emit printMessage("Acquisition timeout"); } } } emit printMessage(tr("Acquisition took %1 msec").arg(m_Time.restart())); }
QMutex QavrgAcquisition::m_Acquiring [private] |
Definition at line 96 of file qavrgacquisition.h.
Referenced by acquireCancel(), acquireWait(), getAcquisitionLock(), releaseAcquisitionLock(), and setupAcquisition().
QMutex QavrgAcquisition::m_AcquisitionMutex [mutable, private] |
Definition at line 83 of file qavrgacquisition.h.
Referenced by findDevices().
Reimplemented from QavrgAcquisitionSimulated.
Definition at line 88 of file qavrgacquisition.h.
QavrgApplication* QavrgAcquisition::m_Application [private] |
Definition at line 87 of file qavrgacquisition.h.
Referenced by fillPatternChanged(), and saver().
QVector<double> QavrgAcquisition::m_Buffer [private] |
Definition at line 95 of file qavrgacquisition.h.
Referenced by readoutAcquisition(), and startAcquisition().
QMutex QavrgAcquisition::m_BufferMutex [mutable, private] |
Definition at line 85 of file qavrgacquisition.h.
ViInt32* QavrgAcquisition::m_CardNChannels [private] |
Definition at line 91 of file qavrgacquisition.h.
Referenced by configureAverager(), findDevices(), QavrgAcquisition(), readoutAcquisition(), and ~QavrgAcquisition().
ViSession* QavrgAcquisition::m_InstrumentID [private] |
Definition at line 90 of file qavrgacquisition.h.
Referenced by configureAverager(), findDevices(), QavrgAcquisition(), readoutAcquisition(), startAcquisition(), waitAcquisition(), and ~QavrgAcquisition().
ViInt32 QavrgAcquisition::m_NInstruments [private] |
Definition at line 89 of file qavrgacquisition.h.
Referenced by configureAverager(), findDevices(), readoutAcquisition(), startAcquisition(), waitAcquisition(), and ~QavrgAcquisition().
FILE* QavrgAcquisition::m_SaveFile [private] |
Definition at line 94 of file qavrgacquisition.h.
Referenced by closeSaveFile(), newSaveFile(), saveAcquisitionResult(), startNewScan(), and ~QavrgAcquisition().
QMutex QavrgAcquisition::m_SaveFileMutex [mutable, private] |
Definition at line 84 of file qavrgacquisition.h.
Referenced by closeSaveFile(), newSaveFile(), saveAcquisitionResult(), and startNewScan().
QWaitCondition QavrgAcquisition::m_StatusWaiting [private] |
Definition at line 97 of file qavrgacquisition.h.
Referenced by acquireWait(), and releaseAcquisitionLock().
QTime QavrgAcquisition::m_Time [private] |
Definition at line 93 of file qavrgacquisition.h.
Referenced by readoutAcquisition(), startAcquisition(), and waitAcquisition().
long QavrgAcquisition::m_TotalChannels [private] |
Definition at line 92 of file qavrgacquisition.h.
Referenced by findDevices(), readoutAcquisition(), and startAcquisition().