13 #include <QtConcurrentRun>
15 #include <QMetaProperty>
32 m_DetectorCount(
m_Saver, this,
"detectorCount", 0,
"Number of Detectors"),
34 m_FileIndex(saver, this,
"fileIndex",0,
"File Index"),
35 m_FileIndexWidth(saver, this,
"fileIndexWidth", 5,
"Digits in File Index Field"),
36 m_FilePhaseWidth(saver, this,
"filePhaseWidth", 3,
"Digits in Phase Number Field"),
37 m_FileOverflowWidth(saver, this,
"fileOverflowWidth", 5,
"Digits in Overflow Index Field"),
38 m_DetectorNumberWidth(saver, this,
"detectorNumberWidth", 2,
"Digits in detector number field"),
39 m_FileBase(saver, this,
"fileBase",
"",
"File Base"),
40 m_OverflowLevel(saver, this,
"overflowLevel", 65500,
"Overflow level (per exposure)"),
41 m_Raw16SaveTime(saver, this,
"raw16SaveTime", 0.1,
"Time to save 16 bit images"),
42 m_Raw32SaveTime(saver, this,
"raw32SaveTime", 0.2,
"Time to save 32 bit images"),
43 m_RawSaveTime(saver, this,
"rawSaveTime", 0.2,
"Time to save raw images"),
44 m_DarkSaveTime(saver, this,
"darkSaveTime", 0.2,
"Time to save dark images"),
45 m_UserComment1(saver, this,
"userComment1",
"",
"User Comment 1"),
46 m_UserComment2(saver, this,
"userComment2",
"",
"User Comment 2"),
47 m_UserComment3(saver, this,
"userComment3",
"",
"User Comment 3"),
48 m_UserComment4(saver, this,
"userComment4",
"",
"User Comment 4"),
49 m_Normalization(saver, this,
"normalization",
QcepDoubleList(),
"Normalization Values"),
51 m_LiveViewAtIdle(saver, this,
"liveViewAtIdle", false,
"Live View during Idle"),
52 m_AcquisitionCancelsLiveView(saver, this,
"acquisitionCancelsLiveView", true,
"Acquisition operations cancel live view"),
53 m_RetryDropped(saver, this,
"retryDropped", false,
"Automatically retry dropped frames during acquisition"),
66 printf(
"QxrdAcquisition::QxrdAcquisition(%p)\n",
this);
112 if (
sizeof(
void*) == 4) {
137 printf(
"Deleting acquisition\n");
141 printf(
"QxrdAcquisition::~QxrdAcquisition(%p)\n",
this);
170 for (
int i=0; i<get_DetectorCount(); i++) {
171 detector(i) -> shutdownAcquisition();
179 if (get_SummedExposures() <= 1) {
180 set_RawSaveTime(get_Raw16SaveTime());
182 set_RawSaveTime(get_Raw32SaveTime());
185 if (get_DarkSummedExposures() <= 1) {
186 set_DarkSaveTime(get_Raw16SaveTime());
188 set_DarkSaveTime(get_Raw32SaveTime());
197 foreach(name, dynamicPropertyNames()) {
208 foreach(name, dynamicPropertyNames()) {
209 dest -> setProperty(name.data(), property(name.data()));
228 settings->beginWriteArray(section+
"/detectors");
231 settings->setArrayIndex(i);
236 det->writeSettings(settings,
"");
240 settings->endArray();
257 int n = settings->beginReadArray(section+
"/detectors");
262 for (
int i=0; i<n; i++) {
263 settings->setArrayIndex(i);
265 int detType = settings->value(
"detectorType", 0).toInt();
282 det->readSettings(settings,
"");
289 if (app && app->get_StartDetectors() == 0) {
290 det->set_Enabled(
false);
293 det->startOrStop(det->isEnabled());
300 settings->endArray();
305 if (QThread::currentThread() != thread()) {
306 QMetaObject::invokeMethod(
this,
"appendDetector", Qt::BlockingQueuedConnection,
307 Q_ARG(
int, detType));
309 int nDet = get_DetectorCount();
336 if (QThread::currentThread() != thread()) {
337 QMetaObject::invokeMethod(
this,
"appendDetectorProxy", Qt::BlockingQueuedConnection,
344 int nDet = get_DetectorCount();
346 if (detThread==NULL || detector==NULL) {
347 int detType = proxy->detectorType();
358 detector = detThread->detector();
366 detector->pullPropertiesfromProxy(proxy);
373 if (QThread::currentThread() != thread()) {
374 QMetaObject::invokeMethod(
this,
"clearDetectors", Qt::BlockingQueuedConnection);
378 set_DetectorCount(0);
402 exp->printMessage(msg, ts);
411 exp->criticalMessage(msg, ts);
420 exp->statusMessage(msg, ts);
429 alloc -> changedSizeMB(newMB);
440 if (get_DetectorCount() == 0) {
447 for (
int i=0; i<get_DetectorCount(); i++) {
450 if (det && det->isEnabled()) {
460 if (get_FilePattern() ==
"") {
473 }
else if (get_PreTriggerFiles() < 0) {
475 }
else if (get_PostTriggerFiles() < 0) {
477 }
else if (get_PreTriggerFiles() + get_PostTriggerFiles() <= 0) {
479 }
else if (get_SummedExposures() <= 0) {
481 }
else if (get_SkippedExposures() < 0) {
483 }
else if (get_ExposureTime() <= 0) {
497 }
else if (get_DarkSummedExposures() <= 0) {
499 }
else if (get_ExposureTime() <= 0) {
511 det->onExposureTimeChanged();
523 if (proxy && proxy->configureDetector()) {
524 det->pullPropertiesfromProxy(proxy);
533 det->openControlWindow();
539 prop_DroppedFrames() -> setValue(0);
547 QString msg = tr(
"Frame %1 dropped [%2/%3 MB Used]")
549 .arg(alloc->allocatedMemoryMB())
550 .arg(alloc->maximumMemoryMB());
555 prop_DroppedFrames() -> incValue(1);
571 printMessage(
"type conversion failed in QxrdAcquisition::accumulateAcquiredImage");
578 if (image && accum && overflow) {
579 long nPixels = image->get_Height()*image->get_Width();
580 int ovflwlvl = get_OverflowLevel();
581 quint16* src = image->data();
582 quint32* dst = accum->data();
583 short int* ovf = overflow->data();
584 int nsummed = accum->get_SummedExposures();
591 for (
long i=0; i<nPixels; i++) {
592 quint16 val = *src++;
603 accum->set_Normalization(image->get_Normalization());
604 accum->set_ExtraInputs(image->get_ExtraInputs());
605 accum->set_SummedExposures(1);
606 accum->set_ImageSequenceNumber(image->get_ImageSequenceNumber());
612 for (
long i=0; i<nPixels; i++) {
613 quint16 val = *src++;
624 accum->prop_Normalization() -> incValue(image->get_Normalization());
625 accum->prop_ExtraInputs() -> incValue(image->get_ExtraInputs());
626 accum->prop_SummedExposures() -> incValue(1);
627 accum->prop_ImageSequenceNumber() -> incValue(image->get_ImageSequenceNumber());
634 if (image && accum && overflow) {
635 long nPixels = image->get_Height()*image->get_Width();
636 int ovflwlvl = get_OverflowLevel();
637 quint32* src = image->data();
638 quint32* dst = accum->data();
639 short int* ovf = overflow->data();
640 int nsummed = accum->get_SummedExposures();
647 for (
long i=0; i<nPixels; i++) {
648 quint32 val = *src++;
659 accum->set_Normalization(image->get_Normalization());
660 accum->set_ExtraInputs(image->get_ExtraInputs());
661 accum->set_SummedExposures(1);
662 accum->set_ImageSequenceNumber(image->get_ImageSequenceNumber());
668 for (
long i=0; i<nPixels; i++) {
669 quint32 val = *src++;
680 accum->prop_Normalization() -> incValue(image->get_Normalization());
681 accum->prop_ExtraInputs() -> incValue(image->get_ExtraInputs());
682 accum->prop_SummedExposures() -> incValue(1);
683 accum->prop_ImageSequenceNumber() -> incValue(image->get_ImageSequenceNumber());
695 if (extension.length()) {
698 extent = det->get_Extension();
717 int width = get_FileIndexWidth();
718 int detWidth = get_DetectorNumberWidth();
723 int nDet = get_DetectorCount();
726 if (nphases == 0 || phase < 0) {
728 fileBase = tr(
"%1-%2.dark.%3")
729 .arg(filePattern).arg(fileIndex,width,10,QChar(
'0')).arg(extent);
731 fileBase = tr(
"%1-%2-%3.dark.%4")
732 .arg(filePattern).arg(detNum,detWidth,10,QChar(
'0')).arg(fileIndex,width,10,QChar(
'0')).arg(extent);
735 fileName = proc -> filePathInDarkOutputDirectory(fileBase);
738 int phswidth = get_FilePhaseWidth();
740 fileBase = tr(
"%1-%2-%3.%4")
741 .arg(filePattern).arg(fileIndex,width,10,QChar(
'0')).arg(phase,phswidth,10,QChar(
'0')).arg(extent);
743 fileBase = tr(
"%1-%2-%3-%4.%5")
744 .arg(filePattern).arg(detNum,detWidth,10,QChar(
'0')).arg(fileIndex,width,10,QChar(
'0'))
745 .arg(phase,phswidth,10,QChar(
'0')).arg(extent);
749 fileBase = tr(
"%1-%2.%3")
750 .arg(filePattern).arg(fileIndex,width,10,QChar(
'0')).arg(extent);
752 fileBase = tr(
"%1-%2-%3.%4")
753 .arg(filePattern).arg(detNum,detWidth,10,QChar(
'0')).arg(fileIndex,width,10,QChar(
'0')).arg(extent);
756 fileName = proc -> filePathInRawOutputDirectory(fileBase);
766 printMessage(tr(
"processAcquiredImage(%1,%2) %3 summed exposures")
767 .arg(fileIndex).arg(phase).arg(image->get_SummedExposures()));
773 getFileBaseAndName(filePattern, extent, 0, fileIndex, phase, nPhases, fileBase, fileName);
777 .arg(fileName).arg(fileIndex).arg(phase));
780 set_FileBase(fileBase);
783 QFileInfo finfo(fileName);
785 QDateTime now = QDateTime::currentDateTime();
788 image -> set_FileBase(fileBase);
789 image -> set_FileName(fileName);
790 image -> set_Title(finfo.fileName());
791 image -> set_ExposureTime(get_ExposureTime());
792 image -> set_DateTime(now);
793 image -> set_TimeStamp(msec);
794 image -> set_HBinning(1);
795 image -> set_VBinning(1);
797 image -> set_UserComment1(get_UserComment1());
798 image -> set_UserComment2(get_UserComment2());
799 image -> set_UserComment3(get_UserComment3());
800 image -> set_UserComment4(get_UserComment4());
801 image -> set_ObjectSaved(
false);
802 image -> set_Triggered(trig);
803 image -> set_Normalization(get_Normalization());
812 image -> set_ImageNumber(-1);
813 image -> set_PhaseNumber(-1);
814 image -> set_NPhases(0);
817 printMessage(tr(
"32 bit Image %1 acquired").arg(fileIndex));
820 image -> set_ImageNumber(fileIndex);
821 image -> set_PhaseNumber(phase);
822 image -> set_NPhases(nPhases);
828 processor -> acquiredInt32Image(image, overflow);
855 printMessage(tr(
"QxrdAcquisition::processAcquiredImage %1 %2 %3 (%4)").arg(filePattern).arg(fileIndex).arg(phase).arg((image?image->get_ImageNumber():-1)));
859 QxrdProcessArgs(filePattern, extent, fileIndex, phase, nPhases, trig, image, overflow));
866 processImage(filePattern, extent, fileIndex, -1, 0,
true, image, overflow);
918 int res = get_Cancelling();
938 QString
fileBase = parmsp->fileBase();
940 double exposure = parmsp->exposure();
941 int nsummed = parmsp->nsummed();
942 int preTrigger = parmsp->preTrigger();
943 int postTrigger = parmsp->postTrigger();
944 int nphases = parmsp->nphases();
945 int skipBefore = parmsp->skipBefore();
947 if (skipBefore <= 0) {
948 if (get_LastAcquired() != 1) {
955 int skipBetween = parmsp->skipBetween();
956 int nPreTriggered = 0;
958 if (preTrigger <= 0) {
963 QVector<QxrdDetectorPtr> dets;
964 QVector<QxrdDetectorProcessorPtr> procs;
965 QVector<QVector<QVector<QcepInt32ImageDataPtr> > >res;
966 QVector<QVector<QVector<QcepMaskDataPtr> > > ovf;
968 for (
int i=0; i<get_DetectorCount(); i++) {
971 if (det && det->isEnabled()) {
974 procs.append(det->processor());
979 res[nDet-1].resize(nphases);
980 ovf[nDet-1].resize(nphases);
982 for (
int p=0; p<nphases; p++) {
983 res[nDet-1][p].resize(preTrigger+1);
984 ovf[nDet-1][p].resize(preTrigger+1);
998 for (
int d=0; d<nDet; d++) {
999 dets[d] -> beginAcquisition(exposure);
1002 printMessage(tr(
"acquire(\"%1\", %2, %3, %4, %5, %6) // fileIndex = %7")
1003 .arg(fileBase).arg(exposure).arg(nsummed).arg(postTrigger).arg(preTrigger).arg(nphases).arg(fileIndex));
1006 set_CurrentPhase(0);
1007 set_CurrentSummation(-1);
1008 set_CurrentFile(fileIndex);
1010 for (
int i=0; i<skipBefore; i++) {
1013 printMessage(tr(
"Skipping %1 of %2").arg(i+1).arg(skipBefore));
1016 for (
int d=0; d<nDet; d++) {
1017 dets[d]->beginFrame();
1020 for (
int d=0; d<nDet; d++) {
1021 dets[d]->acquireFrame();
1025 for (
int i=0; i<postTrigger; i += (get_Triggered() ? 1:0)) {
1028 set_CurrentFile(fileIndex);
1031 for (
int k=0; k<skipBetween; k++) {
1034 printMessage(tr(
"Skipping %1 of %2").arg(k+1).arg(skipBetween));
1037 for (
int d=0; d<nDet; d++) {
1038 dets[d]->acquireFrame();
1042 printMessage(tr(
"Frame after %1 msec").arg(acqTimer.restart()));
1049 for (
int s=0; s<nsummed;) {
1050 set_CurrentSummation(s);
1052 for (
int p=0; p<nphases; p++) {
1053 set_CurrentPhase(p);
1055 for (
int d=0; d<nDet; d++) {
1061 for (
int d=0; d<nDet; d++) {
1063 int nCols = det->get_NCols();
1064 int nRows = det->get_NRows();
1066 if (res[d][p][0] == NULL) {
1068 nCols, nRows,
this);
1070 res[d][p][0] = nres;
1080 printMessage(tr(
"Newly allocated image number %1").arg(nres->get_ImageNumber()));
1083 nres -> set_SummedExposures(0);
1086 det->get_DetectorNumber(),
1089 nres -> set_FileBase(fb);
1090 nres -> set_FileName(fn);
1094 if (ovf[d][p][0] == NULL) {
1096 nCols, nRows, 0,
this);
1097 ovf[d][p][0] = novf;
1106 printMessage(tr(
"Newly allocated mask number %1").arg(novf->get_ImageNumber()));
1110 if (novf) ovf[d][p][0] -> set_SummedExposures(0);
1122 if (img && res[d][p][0] && ovf[d][p][0]) {
1129 printMessage(tr(
"accumulateAcquiredImage %1 msec idx:%2 post:%3 sum: %4 ph:%5")
1130 .arg(acqTimer.restart())
1142 if (get_RetryDropped()) {
1143 int minSum = nsummed+10;
1145 for (
int p=0; p<nphases; p++) {
1146 for (
int d=0; d<nDet; d++) {
1148 int ns = res[d][p][0]->get_SummedExposures();
1160 printMessage(tr(
"i = %1, Minsum = %2, s = %3, nsummed = %4").arg(i).arg(minSum).arg(s).arg(nsummed));
1163 if (minSum == nsummed+10) {
1177 if (get_Triggered()) {
1178 int nPre = qMin(preTrigger, nPreTriggered);
1180 for (
int ii=nPre; ii >= 1; ii--) {
1181 for (
int p=0; p<nphases; p++) {
1182 for (
int d=0; d<nDet; d++) {
1187 printMessage(tr(
"processAcquiredImage(line %1) %2 msec idx:%3 pre:%4 ph:%5")
1189 .arg(acqTimer.restart())
1196 res[d][p].pop_back();
1197 ovf[d][p].pop_back();
1202 set_FileIndex(fileIndex);
1207 for (
int p=0; p<nphases; p++) {
1208 for (
int d=0; d<nDet; d++) {
1212 printMessage(tr(
"processAcquiredImage(line %1) %2 msec idx:%3 pre:%4 ph:%5")
1214 .arg(acqTimer.restart())
1226 set_FileIndex(fileIndex);
1229 for (
int p=0; p<nphases; p++) {
1230 for (
int d=0; d<nDet; d++) {
1233 res[d][p].pop_back();
1234 ovf[d][p].pop_back();
1248 for (
int d=0; d<nDet; d++) {
1249 dets[d]->endAcquisition();
1252 QVector<double> scalers;
1254 scalers.append(get_FileIndex()-1);
1260 for (
int d=0; d<nDet; d++) {
1261 scalers += dets[d]->scalerCounts();
1264 set_ScalerValues(scalers);
1281 QString
fileBase = parmsp->fileBase();
1283 double exposure = parmsp->exposure();
1284 int nsummed = parmsp->nsummed();
1285 int skipBefore = parmsp->skipBefore();
1287 if (skipBefore <= 0) {
1288 if (get_LastAcquired() != -1) {
1293 set_LastAcquired(-1);
1295 printMessage(tr(
"acquireDark(\"%1\", %2, %3) // fileIndex = %4")
1296 .arg(fileBase).arg(exposure).arg(nsummed).arg(fileIndex));
1299 QVector<QxrdDetectorPtr> dets;
1300 QVector<QxrdDetectorProcessorPtr> procs;
1301 QVector<QcepInt32ImageDataPtr> res;
1302 QVector<QcepMaskDataPtr> overflow;
1304 set_CurrentPhase(-1);
1305 set_CurrentSummation(0);
1306 set_CurrentFile(fileIndex);
1308 for (
int i=0; i<get_DetectorCount(); i++) {
1311 if (det && det->isEnabled()) {
1314 procs.append(det->processor());
1317 det->get_NCols(), det->get_NRows(),
this);
1322 det->get_NCols(), det->get_NRows(),0,
this);
1324 overflow.append(msk);
1334 for (
int d=0; d<nDet; d++) {
1335 if (res[d] == NULL || overflow[d] == NULL) {
1341 for (
int d=0; d<nDet; d++) {
1342 dets[d] -> beginAcquisition(exposure);
1345 for (
int d=0; d<nDet; d++) {
1350 res[d] -> set_FileBase(fb);
1351 res[d] -> set_FileName(fn);
1354 for (
int i=0; i<skipBefore; i++) {
1357 set_CurrentSummation(-1);
1359 for (
int d=0; d<nDet; d++) {
1360 dets[i] -> beginFrame();
1364 printMessage(tr(
"Skipping %1 of %2").arg(i+1).arg(skipBefore));
1367 for (
int d=0; d<nDet; d++) {
1368 dets[i] -> acquireFrame();
1372 for (
int i=0; i<nsummed;) {
1375 set_CurrentSummation(i);
1377 for (
int d=0; d<nDet; d++) {
1378 dets[d] -> beginFrame();
1381 for (
int d=0; d<nDet; d++) {
1382 emit
acquiredFrame(res[d]->get_FileBase(), 0, 1, i, nsummed, 0, 1);
1385 dets[d] -> acquireFrame();
1398 if (get_RetryDropped()) {
1399 int minSum = nsummed+10;
1401 for (
int d=0; d<nDet; d++) {
1403 int ns = res[d]->get_SummedExposures();
1421 for (
int d=0; d<nDet; d++) {
1422 procs[d]->processDarkImage(res[d], overflow[d], fileIndex);
1446 if (get_AcquisitionCancelsLiveView()) {
1447 set_LiveViewAtIdle(
false);
1458 if (
m_Idling.fetchAndAddOrdered(0)) {
1459 for (
int i=0; i<get_DetectorCount(); i++) {
1462 if (det && det->isEnabled()) {
1468 proc->processIdleImage(res);
1480 expt->statusMessage(msg);
1488 const QMetaObject *meta = metaObject();
1490 int count = meta->propertyCount();
1493 for (
int i=offset; i<count; i++) {
1494 QMetaProperty metaproperty = meta->property(i);
1496 const char *
name = metaproperty.name();
1497 QVariant value = property(name);
1504 QList<QByteArray> dynProps = dynamicPropertyNames();
1506 foreach(QByteArray
name, dynProps) {
1517 return get_ScalerValues().value(i);
QSharedPointer< QxrdExperiment > QxrdExperimentPtr
QSharedPointer< QxrdDetectorProxy > QxrdDetectorProxyPtr
void indicateDroppedFrame(int n)
QWeakPointer< QxrdDataProcessor > QxrdDataProcessorWPtr
QVector< QxrdDetectorPtr > m_Detectors
QxrdSynchronizedAcquisitionPtr m_SynchronizedAcquisition
qint64 qcepDebug(int cond)
QxrdDataProcessorWPtr m_DataProcessor
QxrdExperimentWPtr experiment()
QcepInt32ImageDataPtr m_Image
QSharedPointer< QxrdAcquisition > QxrdAcquisitionPtr
virtual void readSettings(QSettings *set, QString section)
void getFileBaseAndName(QString filePattern, QString extent, int detNum, int fileIndex, int phase, int nphases, QString &fileBase, QString &fileName)
QString currentFileBase(int detNum, QString extension="")
void acquiredFrame(QString fileName, int iphase, int nphases, int isum, int nsum, int igroup, int ngroup)
void statusMessage(QString msg, QDateTime ts=QDateTime::currentDateTime()) const
QSharedPointer< QxrdDataProcessor > QxrdDataProcessorPtr
QxrdAcquisitionScalerModelPtr m_ScalerModel
void configureDetector(int i)
virtual void stopIdling()
virtual void initialize()
void appendDetectorProxy(QxrdDetectorProxyPtr proxy)
QWeakPointer< QxrdExperiment > QxrdExperimentWPtr
void processImage(const QxrdProcessArgs &args)
QxrdDetectorPtr detector(int n)
QSharedPointer< QxrdAcquisitionScalerModel > QxrdAcquisitionScalerModelPtr
bool sanityCheckAcquireDark()
QVector< double > QcepDoubleVector
QxrdDataProcessorWPtr dataProcessor()
void appendDetector(int detType)
virtual void startIdling()
QSharedPointer< QxrdSynchronizedAcquisition > QxrdSynchronizedAcquisitionPtr
void setWindow(QxrdWindowWPtr win)
void openDetectorControlWindow(int i)
double scalerValue(int i)
QxrdSynchronizedAcquisitionPtr synchronizedAcquisition() const
QxrdAcquisitionParameterPackPtr acquisitionParameterPack()
void copyDynamicProperties(QObject *dest)
QWeakPointer< QxrdWindow > QxrdWindowWPtr
virtual void setupExposureMenu(QDoubleSpinBox *cb)
QxrdDetectorThreadPtr detectorThread(int n)
void setNIDAQPlugin(QxrdNIDAQPluginInterfacePtr nidaqPlugin)
void extraInputsChanged()
QxrdAcquisitionPtr myself()
QList< double > QcepDoubleList
void accumulateAcquiredImage(QcepInt16ImageDataPtr image, QcepInt32ImageDataPtr accum, QcepMaskDataPtr overflow)
QSharedPointer< QxrdDetectorProcessor > QxrdDetectorProcessorPtr
QxrdDarkAcquisitionParameterPackPtr darkAcquisitionParameterPack()
QxrdExperimentWPtr m_Experiment
virtual void onExposureTimeChanged()
QWeakPointer< QcepAllocator > QcepAllocatorWPtr
QSharedPointer< QxrdDarkAcquisitionParameterPack > QxrdDarkAcquisitionParameterPackPtr
void onBufferSizeChanged(int newMB)
QSharedPointer< QxrdNIDAQPluginInterface > QxrdNIDAQPluginInterfacePtr
virtual QxrdAcquisitionDialogPtr controlPanel(QxrdWindowWPtr win)
QVector< QxrdDetectorThreadPtr > m_DetectorThreads
void processAcquiredImage(QString filePattern, QString extent, int fileIndex, int phase, int nPhases, bool trig, QcepInt32ImageDataPtr image, QcepMaskDataPtr overflow)
void printMessage(QString msg, QDateTime ts=QDateTime::currentDateTime()) const
void readSettings(QSettings *settings, QString section)
QxrdAcquisitionExtraInputsPtr acquisitionExtraInputs() const
void writeSettings(QSettings *settings, QString section)
virtual void writeSettings(QSettings *set, QString section)
virtual void printMessage(QString msg, QDateTime ts=QDateTime::currentDateTime())=0
QSharedPointer< QcepInt32ImageData > QcepInt32ImageDataPtr
void processDarkImage(QString filePattern, QString extent, int fileIndex, QcepInt32ImageDataPtr image, QcepMaskDataPtr overflow)
QxrdAcquisition(QcepSettingsSaverWPtr saver, QxrdExperimentWPtr doc, QxrdDataProcessorWPtr proc, QcepAllocatorWPtr allocator)
QcepApplication * g_Application
QcepAllocatorWPtr allocator() const
QSharedPointer< QcepAllocator > QcepAllocatorPtr
void criticalMessage(QString msg, QDateTime ts=QDateTime::currentDateTime()) const
void valueChanged(double val, int index)
QSharedPointer< QxrdAcquisitionParameterPack > QxrdAcquisitionParameterPackPtr
QSharedPointer< QxrdDetectorThread > QxrdDetectorThreadPtr
QSharedPointer< QxrdDetector > QxrdDetectorPtr
QcepAllocatorWPtr m_Allocator
QcepMaskDataPtr m_Overflow
QcepSettingsSaverWPtr m_Saver
static QcepMaskDataPtr newMask(AllocationStrategy strat, int width, int height, int def, QcepObject *parent)
void valueChanged(int val, int index)
QSharedPointer< QcepImageDataBase > QcepImageDataBasePtr
QSharedPointer< QcepInt16ImageData > QcepInt16ImageDataPtr
bool sanityCheckAcquire()
QSharedPointer< QcepMaskData > QcepMaskDataPtr
static QcepInt32ImageDataPtr newInt32Image(AllocationStrategy strat, int width, int height, QcepObject *parent)
static double secondsSinceEpoch()
QxrdAcquisitionDialogPtr m_ControlPanel
QxrdAcquisitionExtraInputsPtr m_AcquisitionExtraInputs
QWeakPointer< QcepSettingsSaver > QcepSettingsSaverWPtr
void Message(QString cmd)
QxrdNIDAQPluginInterfacePtr nidaqPlugin() const
QxrdAcquisitionScalerModelPtr acquisitionScalerModel() const