|
qavrg 0.0.28
|
#include <qavrgacquisitionsimulated.h>

Public Member Functions | |
| QavrgAcquisitionSimulated (QavrgAcquisitionThread *acq, QavrgApplication *app, QObject *parent) | |
Protected Member Functions | |
| void | simulatedConfigureAverager (AcquisitionMode mode) |
| void | simulatedStartAcquisition (int rep, int nrep) |
| void | simulatedWaitAcquisition (int rep, int nrep) |
| void | simulatedReadoutAcquisition (int rep, int nrep) |
Private Slots | |
| void | calculateSimulatedAcquisition (int rep, int nrep) |
Private Member Functions | |
| double | randomPoisson (double val) const |
Private Attributes | |
| QavrgAcquisitionThread * | m_AcquisitionThread |
Definition at line 7 of file qavrgacquisitionsimulated.h.
| QavrgAcquisitionSimulated::QavrgAcquisitionSimulated | ( | QavrgAcquisitionThread * | acq, |
| QavrgApplication * | app, | ||
| QObject * | parent | ||
| ) |
Definition at line 10 of file qavrgacquisitionsimulated.cpp.
: QavrgAcquisitionData(acq, app, parent), m_AcquisitionThread(acq) { }
| void QavrgAcquisitionSimulated::calculateSimulatedAcquisition | ( | int | rep, |
| int | nrep | ||
| ) | [private, slot] |
Definition at line 79 of file qavrgacquisitionsimulated.cpp.
References QavrgAcquisitionParms::AcquireDark, QavrgAcquisitionParms::AcquireData, QavrgAcquisitionParms::AcquireDone, QavrgAcquisitionParms::AcquireOnce, QavrgAcquisitionParms::AcquireReference, QavrgAcquisitionParms::AcquireScope, QavrgFitter::darkDataPtr(), QavrgAcquisitionParms::fitter(), QavrgAcquisitionParms::get_AcquisitionMode(), QavrgAcquisitionParms::incr_NQueuedResults(), QavrgAcquisitionData::m_Accumulator, QavrgAcquisitionData::m_AccumulatorMutex, QavrgAcquisitionData::new_DarkData(), QavrgAcquisitionData::new_FitData(), QavrgAcquisitionData::new_FittingResults(), QavrgAcquisitionData::new_RawData(), QavrgAcquisitionData::new_ReferenceData(), QavrgFitter::performCalculation(), QavrgAcquisitionParms::printMessage(), randomPoisson(), QavrgFitter::rawDataPtr(), QavrgFitter::referenceDataPtr(), and QavrgAcquisitionParms::samplesPerOrbit.
Referenced by simulatedReadoutAcquisition().
{
// printf("Calculating simulated acquisition rep %d nrep %d\n", rep, nrep);
int nchan = get_NChannels();
int nsamp = get_NSamples();
for (int chan=0; chan<nchan; chan++) {
QMutexLocker lock(&m_AccumulatorMutex);
double samplesPerOrbit = get_SamplesPerOrbit();
double bunchesPerOrbit = 24;
double samplesPerBunch = samplesPerOrbit / bunchesPerOrbit;
double amplitude = 1.0;
double width = 10.0;
double integ = get_AcquireIntegrationTime();
// printf("NS: %d, SPO: %g, BPO: %g, SPB: %g\n", nsamp, samplesPerOrbit, bunchesPerOrbit, samplesPerBunch);
if (get_AcquisitionMode() != AcquireDark) {
for (double bunch = 0; bunch < nsamp; bunch += samplesPerBunch) {
double amp = randomPoisson(amplitude*integ*10.0)/(10.0*integ);
for (double i = 0; (i < (8*width)) && (((bunch+i) < nsamp)); i++) {
double val = randomPoisson(amp*exp(-(i)/width)*100.0)/(amp*100.0);
m_Accumulator[chan][bunch+i] += val;
}
}
}
for (int i = 0; i<nsamp; i++) {
double val = randomPoisson(0.3*integ*100.0)/(100.0*integ);
m_Accumulator[chan][i] += val;
}
}
if (rep >= (nrep-1)) {
switch (get_AcquisitionMode()) {
case AcquireDone:
printf("Invalid acquisition mode in QavrgAcquisitionSimulated::calculateSimulatedAcquisition\n");
return;
case AcquireData:
case AcquireScope:
case AcquireOnce:
for (int chan=0; chan<nchan; chan++) {
fitter(chan) -> resize(nsamp);
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<nsamp; i++) {
rawData[i] = accum[i]/nrep;
}
}
if (get_AcquisitionMode() == AcquireScope) {
incr_NQueuedResults();
emit new_RawData();
}
break;
case AcquireDark:
for (int chan=0; chan<nchan; chan++) {
fitter(chan) -> resize(nsamp);
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<nsamp; i++) {
darkData[i] = accum[i]/nrep;
}
fitter(chan) -> set_DarkAvailable(true);
}
incr_NQueuedResults();
emit new_DarkData();
break;
case AcquireReference:
for (int chan=0; chan<nchan; chan++) {
fitter(chan) -> resize(nsamp);
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<nsamp; 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;
QTime timer;
timer.start();
for (int chan=0; chan<nchan; 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 took %1 msec").arg(timer.restart()));
}
// printf("Simulated Readout complete...\n");
}
}
| double QavrgAcquisitionSimulated::randomPoisson | ( | double | val | ) | const [private] |
Definition at line 74 of file qavrgacquisitionsimulated.cpp.
Referenced by calculateSimulatedAcquisition().
{
return val+sqrt(val)*(((double)qrand()/(double)RAND_MAX)-0.5);
}
| void QavrgAcquisitionSimulated::simulatedConfigureAverager | ( | AcquisitionMode | mode | ) | [protected] |
Definition at line 16 of file qavrgacquisitionsimulated.cpp.
References QavrgAcquisitionParms::set_AcquisitionMode().
Referenced by QavrgAcquisition::configureAverager().
{
set_AcquisitionMode(mode);
}
| void QavrgAcquisitionSimulated::simulatedReadoutAcquisition | ( | int | rep, |
| int | nrep | ||
| ) | [protected] |
Definition at line 69 of file qavrgacquisitionsimulated.cpp.
References calculateSimulatedAcquisition().
Referenced by QavrgAcquisition::readoutAcquisition().
{
calculateSimulatedAcquisition(rep, nrep);
}
| void QavrgAcquisitionSimulated::simulatedStartAcquisition | ( | int | rep, |
| int | nrep | ||
| ) | [protected] |
Definition at line 21 of file qavrgacquisitionsimulated.cpp.
References QavrgAcquisitionData::m_Accumulator, and QavrgAcquisitionData::m_AccumulatorMutex.
Referenced by QavrgAcquisition::startAcquisition().
{
QMutexLocker lock(&m_AccumulatorMutex);
// printf("Starting simulated acquisition %d of %d\n", rep, nrep);
if (rep == 0) {
int nchan = get_NChannels();
int nsamp = get_NSamples();
m_Accumulator.resize(nchan);
for (int chan=0; chan<nchan; chan++) {
m_Accumulator[chan].resize(nsamp);
m_Accumulator[chan].fill(0);
}
// m_Futures.resize(nchan);
}
}
| void QavrgAcquisitionSimulated::simulatedWaitAcquisition | ( | int | rep, |
| int | nrep | ||
| ) | [protected] |
Definition at line 42 of file qavrgacquisitionsimulated.cpp.
References QavrgAcquisitionData::m_AcquireCancel, m_AcquisitionThread, and QavrgAcquisitionThread::sleepFor().
Referenced by QavrgAcquisition::waitAcquisition().
{
// QMutexLocker lock(&m_Mutex);
//
// QFuture<void> result = QtConcurrent::run(
// this, &QavrgAcquisitionSimulated::calculateSimulatedAcquisition, rep, nrep);
// QTime timer;
//
// timer.start();
double extraTime = get_AcquireIntegrationTime()/* - timer.restart()/1000.0*/;
// printf("Sleep for %g sec\n", extraTime);
while (extraTime > 0.1) {
if (m_AcquireCancel) break;
m_AcquisitionThread->sleepFor(0.1);
extraTime -= 0.1;
}
if (extraTime >= 0) {
m_AcquisitionThread->sleepFor(extraTime);
}
// result.waitForFinished();
}
Reimplemented in QavrgAcquisition.
Definition at line 28 of file qavrgacquisitionsimulated.h.
Referenced by simulatedWaitAcquisition().
1.7.4