5 #include "moc_ODMRWidget.cpp"
11 : CurrentState(nullptr),
12 StateLabel(new QLabel(Owner)), SweepStateLabel(new QLabel(Owner)), AcquisitionTimeLabel(new QLabel(Owner))
18 StateLabel->setText(CurrentState ? (QString(
" ") + CurrentState->GetDescription()) :
"< Unknown >");
22 StateLabel->setStyleSheet(
"");
40 ui.ODMRChartView->setRenderHint(QPainter::Antialiasing);
43 ODMRXAxis->setTitleText(
"frequency in GHz");
48 ui.SensitivityChartView->setRenderHint(QPainter::Antialiasing);
69 ui.SBRFPower->setValue(ModuleData->RFPower);
70 ui.SBRFCenter->setValue(ModuleData->RFCenterFreq / 1e6);
71 ui.SBRFSpan->setValue(ModuleData->RFFreqSpan / 1e6);
72 ui.SBRFFreqSpacing->setValue(ModuleData->RFFreqSpacing / 1e3);
73 ui.SBRFDwellTime->setValue(ModuleData->RFDwellTime / 1e-3);
74 ui.RBRFModulationTypeNone->setChecked(
true);
75 ui.SBRFModulationFreq->setValue(ModuleData->RFModulationFreq / 1e3);
76 ui.SBRFModulationDepth->setValue(ModuleData->RFModulationDepth / 1e3);
77 ui.SBDataAcquisitionODMRSamplingRate->setValue(ModuleData->ODMRSamplingRate);
78 ui.LESaveDataPath->setText(QString::fromStdString(ModuleData->SaveDataPath));
79 ui.SBSaveDataCurrentIndex->setValue(ModuleData->CurrentSaveIndex);
80 ui.CBSaveDataEnable->setChecked(ModuleData->AutosaveEnabled);
81 ui.CBSensitivityEnable->setChecked(ModuleData->SensitivityEnabled);
82 ui.CBSensitivityOncePerSweep->setChecked(ModuleData->SensitivityOncePerSweep);
83 ui.CBSensitivityOffResEnable->setChecked(ModuleData->SensitivityOffResonanceEnabled);
84 ui.SBSensitivityFreq->setValue(ModuleData->SensitivityResonanceFreq / 1e6);
85 ui.SBSensitivityOffResFreq->setValue(ModuleData->SensitivityOffResonanceFreq / 1e6);
86 ui.SBSensitivitySpan->setValue(ModuleData->SensitivityResonanceSpan / 1e6);
87 ui.SBSensitivitySamplingRate->setValue(ModuleData->SensitivitySamplingRate);
88 ui.SBSensitivityDuration->setValue(ModuleData->SensitivityDuration);
89 ui.GBSensitivityAnalysis->setChecked(ModuleData->SensitivityAnalysisEnabled);
90 ui.SBGyromagneticRatio->setValue(ModuleData->GyromagneticRatio / 1e6);
91 ui.CBParamSweepEnable->setChecked(ModuleData->SweepSeriesEnabled);
93 ui.CBParamSweepType->insertItem(
ui.CBParamSweepType->count(),
"Auxiliary analog out");
94 ui.CBParamSweepType->setCurrentIndex(0);
95 ui.SBParamSweepStart->setValue(ModuleData->SweepSeriesStart);
96 ui.SBParamSweepStop->setValue(ModuleData->SweepSeriesStop);
97 ui.SBParamSweepStep->setValue(ModuleData->SweepSeriesStep);
98 ui.CBParamSweepRetrace->setChecked(ModuleData->SweepSeriesRetrace);
99 ui.CBParamSweepAdvanceLastValue->setChecked(ModuleData->SweepSeriesAdvanceLastValue);
101 ui.SBRFPower->setMinimum(ModuleData->RFGeneratorMinFuncDesc.Amplitude);
102 ui.SBRFPower->setMaximum(ModuleData->RFGeneratorMaxFuncDesc.Amplitude);
103 ui.SBRFPower->setValue(ModuleData->RFGeneratorDefaultFuncDesc.Amplitude);
104 ui.SBRFPower->setSuffix(QString(
" ") + ModuleData->GetRFGenerator()->GetValueUnitStr());
105 ui.SBRFCenter->setMinimum(ModuleData->RFGeneratorMinFuncDesc.FrequencyInHz / 1e6);
106 ui.SBRFCenter->setMaximum(ModuleData->RFGeneratorMaxFuncDesc.FrequencyInHz / 1e6);
107 ui.SBRFCenter->setValue(ModuleData->RFGeneratorDefaultFuncDesc.FrequencyInHz / 1e6);
108 ui.SBSensitivityFreq->setMinimum(ModuleData->RFGeneratorMinFuncDesc.FrequencyInHz / 1e6);
109 ui.SBSensitivityFreq->setMaximum(ModuleData->RFGeneratorMaxFuncDesc.FrequencyInHz / 1e6);
110 ui.SBSensitivityFreq->setValue(ModuleData->RFGeneratorDefaultFuncDesc.FrequencyInHz / 1e6);
116 ODMRYAxis->setTitleText(QString(
"ODMR signal in ") + ModuleData->GetSignalDetector()->GetValueUnitStr());
137 (QString(
"Sweep ") + QString::number(ModuleData->CurrentSweepIndex + 1) +
" / " + QString::number(ModuleData->GetSweepNumberSteps()))));
139 ui.GBRFSweep->setEnabled(IsReady);
140 ui.GBRFModulation->setEnabled(IsReady);
141 ui.GBDataAcquisition->setEnabled(IsReady);
142 ui.GBSaveData->setEnabled(IsReady);
143 ui.GBSensitivity->setEnabled(IsReady);
144 ui.GBSensitivityAnalysis->setEnabled(IsReady);
145 ui.GBParamSweep->setEnabled(IsReady);
146 ui.BStart->setEnabled(IsReady);
147 ui.BStartSensitivity->setEnabled(IsReady);
148 ui.BStop->setEnabled(!IsReady);
153 ui.LERFNumSamples->setText(QString::number(ModuleData->GetNumSamples()));
154 ui.LODMRCurrentSelection->setText(ModuleData->ODMRPlot.SelectedPoint.isNull() ? QString() : (QString::number(ModuleData->ODMRPlot.SelectedPoint.x() * 1e3,
'f', 3) +
" MHz"));
155 ui.LEODMRFitSlope->setText(QString::number(std::get<1>(ModuleData->ODMRPlot.FitParams) * 1e6) +
" [y]/MHz");
156 ui.LEODMRFitOffset->setText(QString::number(std::get<0>(ModuleData->ODMRPlot.FitParams)) +
" [y]");
158 if (!
ui.SBSaveDataCurrentIndex->hasFocus())
159 ui.SBSaveDataCurrentIndex->setValue(ModuleData->CurrentSaveIndex);
203 ".csv",
" Comma-separated values file (*.csv)");
204 if (Filename.isEmpty())
208 ui.LESaveDataPath->setText(Filename);
213 QDoubleSpinBox* Destiny =
nullptr;
220 Destiny =
ui.SBRFModulationDepth;
223 Destiny =
ui.SBRFPower;
229 ui.SBParamSweepStart->setMinimum(Destiny->minimum());
230 ui.SBParamSweepStart->setMaximum(Destiny->maximum());
231 ui.SBParamSweepStart->setSuffix(Destiny->suffix());
232 ui.SBParamSweepStop->setMinimum(Destiny->minimum());
233 ui.SBParamSweepStop->setMaximum(Destiny->maximum());
234 ui.SBParamSweepStop->setSuffix(Destiny->suffix());
235 ui.SBParamSweepStep->setMinimum(Destiny->minimum());
236 ui.SBParamSweepStep->setMaximum(Destiny->maximum());
237 ui.SBParamSweepStep->setSuffix(Destiny->suffix());
247 ui.SBParamSweepStop->setSuffix(
ui.SBParamSweepStart->suffix());
250 ui.SBParamSweepStep->setSuffix(
ui.SBParamSweepStart->suffix());
Implementation of a module to perform optically detected magnetic resonance (ODMR) measurements.
static const char * UnitTypeToStr(const UnitType &Unit)
Returns a descriptive string of a respective unit to be e.g. used in plots.
State machine state as used by class StateMachine. A state mainly wraps a state function of the membe...
constexpr StateEnumType GetState() const noexcept
Returns the state's unique identifier.
Pointer to lock a class derived from ISynchronizedPointerLockable for synchronizing between threads....
QList< QPointF > DataPoints
QPointF DataPointsMaxValues
QPointF DataPointsMaxValues
QPointF DataPointsMinValues
QPointF DataPointsMinValues
QList< QPointF > DataPoints
QList< QPointF > FitPoints
constexpr auto DefaultQChartTheme
constexpr auto StatusBarBusyStyleSheet
std::string ToStr(const T &Value, int Precision=-1)
Converts a (numeric) value of type T to a std::string using operator<< of std::stringstream.
QString PromptSaveFilePathModule(DynExp::QModuleWidget *Parent, const QString &Title, const QString &DefaultSuffix, const QString &NameFilter)
Works as PromptOpenFilePath() but asks the user to select a single file which does not need to exist....
Accumulates include statements to provide a precompiled header.