DynExp
Highly flexible laboratory automation for dynamically changing experiments.
Loading...
Searching...
No Matches
WidefieldMicroscope.h
Go to the documentation of this file.
1// This file is part of DynExp.
2
8#pragma once
9
10#include "stdafx.h"
11#include "DynExpCore.h"
12#include "../../MetaInstruments/Stage.h"
13#include "../../MetaInstruments/DigitalOut.h"
14#include "../../MetaInstruments/DigitalIn.h"
15#include "../../MetaInstruments/AnalogOut.h"
16#include "../../MetaInstruments/AnalogIn.h"
17#include "../../MetaInstruments/Camera.h"
18#include "../../MetaInstruments/TimeTagger.h"
19#include "../../Instruments/InterModuleCommunicator.h"
20#include "../../Instruments/WidefieldLocalization.h"
21#include "../../Modules/ImageViewer/ImageViewerEvents.h"
22#include "../../Modules/SpectrumViewer/SpectrumViewerEvents.h"
23
25
27{
29 {
30 public:
39
45
48
51 using LocalizedPositionsMapType = std::map<Util::MarkerGraphicsView::MarkerType::IDType, LocalizedEmitterType>;
52 using SPDTimeType = std::chrono::milliseconds;
53 using QSurfaceDataRowsType = std::vector<std::unique_ptr<QSurfaceDataRow>>;
54
56 {
57 constexpr PositionPoint() noexcept
58 : x(0), y(0), z(0), MeasuredX(0), MeasuredY(0), MeasuredZ(0),
59 UsingX(false), UsingY(false), UsingZ(false), RowIndex(-1), ColumnIndex(-1) {}
60 constexpr PositionPoint(PositionType x) noexcept
61 : x(x), y(0), z(0), MeasuredX(0), MeasuredY(0), MeasuredZ(0),
62 UsingX(true), UsingY(false), UsingZ(false), RowIndex(-1), ColumnIndex(-1) {}
64 : x(x), y(y), z(0), MeasuredX(0), MeasuredY(0), MeasuredZ(0),
65 UsingX(true), UsingY(true), UsingZ(false), RowIndex(-1), ColumnIndex(-1) {}
67 : x(x), y(y), z(z), MeasuredX(0), MeasuredY(0), MeasuredZ(0),
68 UsingX(true), UsingY(true), UsingZ(true), RowIndex(-1), ColumnIndex(-1) {}
69
70 constexpr void Reset() noexcept;
71 constexpr bool IsEmpty() const noexcept { return !UsingX && !UsingY && !UsingZ; }
72 double DistTo(const PositionPoint& Other) const;
73
74 std::string ToStr(std::string_view Prefix = "") const;
75
79
83
84 bool UsingX;
85 bool UsingY;
86 bool UsingZ;
87
90 };
91
93 {
94 constexpr SPDStateType(double Value = 0, bool Ready = false, size_t StreamSamplesWritten = 0) noexcept
96
97 constexpr void Reset() noexcept
98 {
99 Value = 0;
100 Ready = false;
102 }
103
104 double Value;
105 bool Ready;
107 };
108
110 virtual ~WidefieldMicroscopeData() = default;
111
112 auto& GetSampleStageX() noexcept { return SampleStageX; }
113 auto& GetSampleStageX() const noexcept { return SampleStageX; }
114 auto& GetSampleStageY() noexcept { return SampleStageY; }
115 auto& GetSampleStageY() const noexcept { return SampleStageY; }
116 auto& GetSampleStageZ() noexcept { return SampleStageZ; }
117 auto& GetSampleStageZ() const noexcept { return SampleStageZ; }
118 auto& GetSampleFocusPiezoZ() noexcept { return FocusPiezoZ; }
119 auto& GetSampleFocusPiezoZ() const noexcept { return FocusPiezoZ; }
120 auto& GetLEDSwitch() noexcept { return LEDSwitch; }
121 auto& GetLEDSwitch() const noexcept { return LEDSwitch; }
122 auto& GetPumpSwitch() noexcept { return PumpSwitch; }
123 auto& GetPumpSwitch() const noexcept { return PumpSwitch; }
125 auto& GetWidefieldConfocalSwitch() const noexcept { return WidefieldConfocalSwitch; }
128 auto& GetWidefieldHBTSwitch() noexcept { return WidefieldHBTSwitch; }
129 auto& GetWidefieldHBTSwitch() const noexcept { return WidefieldHBTSwitch; }
130 auto& GetPumpPower() noexcept { return PumpPower; }
131 auto& GetPumpPower() const noexcept { return PumpPower; }
132 auto& GetPumpPowerIndicator() noexcept { return PumpPowerIndicator; }
133 auto& GetPumpPowerIndicator() const noexcept { return PumpPowerIndicator; }
134 auto& GetWidefieldCamera() noexcept { return WidefieldCamera; }
135 auto& GetWidefieldCamera() const noexcept { return WidefieldCamera; }
136 auto& GetWidefieldLocalizer() noexcept { return WidefieldLocalizer; }
137 auto& GetWidefieldLocalizer() const noexcept { return WidefieldLocalizer; }
138 auto& GetSPD1() noexcept { return SPD1; }
139 auto& GetSPD1() const noexcept { return SPD1; }
140 auto& GetSPD2() noexcept { return SPD2; }
141 auto& GetSPD2() const noexcept { return SPD2; }
142 auto& GetAcqCommunicator() noexcept { return AcqCommunicator; }
143 auto& GetAcqCommunicator() const noexcept { return AcqCommunicator; }
144
145 template <size_t N>
146 bool TestFeature(const std::array<FeatureType, N>& Flags) const { return Features.Test(Flags); }
147
148 bool TestFeature(FeatureType Flag) const { return Features.Test(Flag); }
149 void SetFeature(FeatureType Flag) { Features.Set(Flag); }
150
151 std::string_view GetUIMessage() const noexcept { return UIMessage; }
152 void SetUIMessage(const std::string& Message) { UIMessage = Message; }
153 void ClearUIMessage() { UIMessage = ""; }
154
155 PositionPoint GetSamplePosition() const;
156 std::stringstream AssembleCSVHeader(bool IncludeConfocalScan, bool IncludeHBT, bool IncludeAutoMeasure) const;
157 void WriteConfocalScanResults(std::stringstream& Stream) const;
158 void WriteHBTResults(std::stringstream& Stream) const;
159
160 SetupModeType GetSetupMode() const noexcept { return SetupMode; }
161 void SetSetupMode(SetupModeType NewMode) noexcept { SetupMode = NewMode; }
162 bool GetLEDLightTurnedOn() const noexcept { return LEDLightTurnedOn; }
163 void SetLEDLightTurnedOn(bool State);
164 bool GetPumpLightTurnedOn() const noexcept { return PumpLightTurnedOn; }
165 void SetPumpLightTurnedOn(bool State);
166 double GetMinPumpPower() const noexcept { return MinPumpPower; }
167 void SetMinPumpPower(double MinPower) noexcept { MinPumpPower = MinPower; }
168 double GetMaxPumpPower() const noexcept { return MaxPumpPower; }
169 void SetMaxPumpPower(double MaxPower) noexcept { MaxPumpPower = MaxPower; }
170 double GetWidefieldPumpPower() const noexcept { return WidefieldPumpPower; }
171 void SetWidefieldPumpPower(double Power) noexcept { WidefieldPumpPower = Power; }
172 double GetConfocalPumpPower() const noexcept { return ConfocalPumpPower; }
173 void SetConfocalPumpPower(double Power) noexcept { ConfocalPumpPower = Power; }
174 double GetMeasuredPumpPower() const noexcept { return MeasuredPumpPower; }
175 void SetMeasuredPumpPower(double MeasuredPower) noexcept { MeasuredPumpPower = MeasuredPower; }
176 double GetMinFocusVoltage() const noexcept { return MinFocusVoltage; }
177 void SetMinFocusVoltage(double MinVoltage) noexcept { MinFocusVoltage = MinVoltage; }
178 double GetMaxFocusVoltage() const noexcept { return MaxFocusVoltage; }
179 void SetMaxFocusVoltage(double MaxVoltage) noexcept { MaxFocusVoltage = MaxVoltage; }
180 double GetFocusCurrentVoltage() const noexcept { return FocusCurrentVoltage; }
181 void SetFocusCurrentVoltage(double CurrentVoltage) noexcept { FocusCurrentVoltage = CurrentVoltage; }
182 double GetFocusZeroVoltage() const noexcept { return FocusZeroVoltage; }
183 void SetFocusZeroVoltage(double ZeroVoltage) noexcept { FocusZeroVoltage = ZeroVoltage; }
185 void SetFocusConfocalOffsetVoltage(double ConfocalOffsetVoltage) noexcept { FocusConfocalOffsetVoltage = ConfocalOffsetVoltage; }
186 bool IsAutofocusFinished() const noexcept { return AutofocusFinished; }
187 void SetAutofocusFinished() noexcept { AutofocusFinished = true; }
188 void ResetAutofocusFinished() noexcept { AutofocusFinished = false; }
189
198 QPoint GetConfocalSpotImagePosition() const noexcept { return ConfocalSpotImagePosition; }
199 void SetConfocalSpotImagePosition(const QPoint& Position) noexcept { ConfocalSpotImagePosition = Position; }
200 const PositionPoint& GetWidefieldPosition() const noexcept { return WidefieldPosition; }
201 void SetWidefieldPosition(const PositionPoint& Position) noexcept { WidefieldPosition = Position; }
202
203 const QImage& GetCurrentImage() const noexcept { return CurrentImage; }
204 void SetCurrentImage(QImage&& Image) { CurrentImage = std::move(Image); CurrentImageChanged = true; }
205 bool IsCurrentImageAvlbl() const { return !CurrentImage.isNull() && CurrentImageChanged; }
206 void ResetCurrentImageAvlbl() noexcept { CurrentImageChanged = false; }
207 const auto& GetCellID() const noexcept { return CurrentCellID; }
208 const auto& GetLastCellID() const noexcept { return LastCellID; }
211 void IncrementCellID();
212 void ResetCellID() { CurrentCellID = {}; LastCellID = {}; }
213 bool HasCellID() const noexcept { return CurrentCellID.Valid; }
214 auto& GetLocalizedPositions() noexcept { return LocalizedPositions; }
215 const auto& GetLocalizedPositions() const noexcept { return LocalizedPositions; }
217 size_t GetNumFailedLocalizedPositions() const;
218 void AppendLocalizedPosition(LocalizedPositionsMapType::value_type&& Position);
226
227 const PositionPoint& GetSampleHomePosition() const noexcept { return SampleHomePosition; }
228 void SetSampleHomePosition(const PositionPoint& Position) noexcept { SampleHomePosition = Position; }
229 int GetConfocalScanWidth() const noexcept { return ConfocalScanWidth; }
230 void SetConfocalScanWidth(int Width) noexcept { ConfocalScanWidth = Width; }
231 int GetConfocalScanHeight() const noexcept { return ConfocalScanHeight; }
232 void SetConfocalScanHeight(int Length) noexcept { ConfocalScanHeight = Length; }
234 void SetConfocalScanDistPerPixel(int DistPerPixel) noexcept { ConfocalScanDistPerPixel = DistPerPixel; }
235 SPDTimeType GetSPDExposureTime() const noexcept { return SPDExposureTime; }
236 void SetSPDExposureTime(SPDTimeType Time) noexcept { SPDExposureTime = Time; }
237 auto GetSPD1SamplesWritten() const noexcept { return SPD1State.StreamSamplesWritten; }
238 bool GetSPD1Ready() const noexcept { return SPD1State.Ready; }
239 auto GetSPD1Value() const noexcept { return SPD1State.Value; }
240 void SetSPD1SamplesWritten(size_t SamplesWritten) noexcept { SPD1State.StreamSamplesWritten = SamplesWritten; }
241 void SetSPD1Ready(double Value) noexcept { SPD1State.Value = Value; SPD1State.Ready = true; }
242 void ResetSPD1State() noexcept { SPD1State.Reset(); }
243 auto GetSPD2SamplesWritten() const noexcept { return SPD2State.StreamSamplesWritten; }
244 bool GetSPD2Ready() const noexcept { return SPD2State.Ready; }
245 auto GetSPD2Value() const noexcept { return SPD2State.Value; }
246 void SetSPD2SamplesWritten(size_t SamplesWritten) noexcept { SPD2State.StreamSamplesWritten = SamplesWritten; }
247 void SetSPD2Ready(double Value) noexcept { SPD2State.Value = Value; SPD2State.Ready = true; }
248 void ResetSPD2State() noexcept { SPD2State.Reset(); }
249
250 auto& GetConfocalScanResults() noexcept { return ConfocalScanResults; }
251 const auto& GetConfocalScanResults() const noexcept { return ConfocalScanResults; }
253 auto GetConfocalScanSurfacePlotRows() noexcept { return std::move(ConfocalScanSurfacePlotRows); }
254 void SetConfocalScanSurfacePlotRows(QSurfaceDataRowsType&& QSurfaceDataRows) noexcept { ConfocalScanSurfacePlotRows = std::move(QSurfaceDataRows); }
255 bool HasConfocalScanSurfacePlotRows() const noexcept { return !ConfocalScanSurfacePlotRows.empty(); }
257
261 void SetConfocalOptimizationInitZStepSize(double StepSize) noexcept { ConfocalOptimizationInitZStepSize = StepSize; }
263 void SetConfocalOptimizationTolerance(double Tolerance) noexcept { ConfocalOptimizationTolerance = Tolerance; }
264 double GetLastCountRate() const noexcept { return LastCountRate; }
265 void SetLastCountRate(double CountRate) noexcept { LastCountRate = CountRate; }
266
267 auto GetHBTBinWidth() const noexcept { return HBTBinWidth; }
268 void SetHBTBinWidth(Util::picoseconds BinWidth) noexcept { HBTBinWidth = BinWidth; }
269 auto GetHBTBinCount() const noexcept { return HBTBinCount; }
270 void SetHBTBinCount(size_t BinCount) noexcept { HBTBinCount = BinCount; }
271 auto GetHBTMaxIntegrationTime() const noexcept { return HBTMaxIntegrationTime; }
272 void SetHBTMaxIntegrationTime(std::chrono::microseconds MaxIntegrationTime) noexcept { HBTMaxIntegrationTime = MaxIntegrationTime; }
273 const PositionPoint& GetHBTSamplePosition() const noexcept { return HBTSamplePosition; }
274 void SetHBTSamplePosition(const PositionPoint& Position) noexcept { HBTSamplePosition = Position; }
275 auto GetHBTNumEventCounts() const noexcept { return HBTNumEventCounts; }
276 void SetHBTNumEventCounts(long long NumEventCounts) noexcept { HBTNumEventCounts = NumEventCounts; }
277 auto GetHBTTotalIntegrationTime() const noexcept { return HBTTotalIntegrationTime; }
278 void SetHBTTotalIntegrationTime(std::chrono::microseconds TotalIntegrationTime) noexcept { HBTTotalIntegrationTime = TotalIntegrationTime; }
279 auto& GetHBTDataPoints() noexcept { return HBTDataPoints; }
280 const auto& GetHBTDataPoints() const noexcept { return HBTDataPoints; }
282 auto GetHBTDataPointsMinValues() const noexcept { return HBTDataPointsMinValues; }
283 void SetHBTDataPointsMinValues(const QPointF& DataPointsMinValues) noexcept { HBTDataPointsMinValues = DataPointsMinValues; }
284 auto GetHBTDataPointsMaxValues() const noexcept { return HBTDataPointsMaxValues; }
285 void SetHBTDataPointsMaxValues(const QPointF& DataPointsMaxValues) noexcept { HBTDataPointsMaxValues = DataPointsMaxValues; }
286
287 bool IsAutoMeasureRunning() const noexcept { return AutoMeasureRunning; }
288 void SetAutoMeasureRunning(bool Running) noexcept { AutoMeasureRunning = Running; }
289 std::filesystem::path GetAutoMeasureSavePath() const;
290 void SetAutoMeasureSavePath(std::filesystem::path SavePath) noexcept { AutoMeasureSavePath = SavePath; }
294 void SetAutoMeasureNumberImageSets(int NumberImageSets) noexcept { AutoMeasureNumberImageSets = NumberImageSets; }
298 std::chrono::seconds GetAutoMeasureInitialImageSetWaitTime() const noexcept { return AutoMeasureInitialImageSetWaitTime; }
299 void SetAutoMeasureInitialImageSetWaitTime(std::chrono::seconds Time) noexcept { AutoMeasureInitialImageSetWaitTime = Time; }
301 void SetAutoMeasureImagePositionScatterRadius(int ScatterRadius) noexcept { AutoMeasureImagePositionScatterRadius = ScatterRadius; }
305 void SetAutoMeasureOptimizeEnabled(bool Enabled) noexcept { AutoMeasureOptimizeEnabled = Enabled; }
307 void SetAutoMeasureSpectrumEnabled(bool Enabled) noexcept { AutoMeasureSpectrumEnabled = Enabled; }
308 auto GetAutoMeasureHBTEnabled() const noexcept { return AutoMeasureHBTEnabled; }
309 void SetAutoMeasureHBTEnabled(bool Enabled) noexcept { AutoMeasureHBTEnabled = Enabled; }
311 void SetAutoMeasureNumOptimizationAttempts(int NumOptimizationAttempts) noexcept { AutoMeasureNumOptimizationAttempts = NumOptimizationAttempts; }
316 void SetAutoMeasureMaxOptimizationReruns(int MaxOptimizationReruns) noexcept { AutoMeasureMaxOptimizationReruns = MaxOptimizationReruns; }
321 void SetAutoMeasureOptimizationMaxDistance(int OptimizationMaxDistance) noexcept { AutoMeasureOptimizationMaxDistance = OptimizationMaxDistance; }
323 void SetAutoMeasureCountRateThreshold(int CountRateThreshold) noexcept { AutoMeasureCountRateThreshold = CountRateThreshold; }
324 auto& GetAutoMeasureCellRangeFrom() const noexcept { return AutoMeasureCellRangeFrom; }
326 auto& GetAutoMeasureCellRangeTo() const noexcept { return AutoMeasureCellRangeTo; }
328 bool IsCellRangeValid() const noexcept;
329 int GetAutoMeasureCellLineLength() const noexcept;
330 int GetAutoMeasureCellColumnLength() const noexcept;
331 int GetAutoMeasureCellCount() const noexcept;
333 auto& GetAutoMeasureCellSkip() const noexcept { return AutoMeasureCellSkip; }
334 auto& GetAutoMeasureCellSkip() noexcept { return AutoMeasureCellSkip; }
335 auto GetAutoMeasureFirstEmitter() const noexcept { return AutoMeasureFirstEmitter; }
338 void ResetAutoMeasureCurrentEmitter() noexcept;
340
341 private:
342 void ResetImpl(dispatch_tag<QModuleDataBase>) override final;
344
345 void Init();
346
363
365 std::string UIMessage;
366
367 // General
382
383 // Widefield imaging
390
398
399 // Confocal scanning
407
408 // Confocal optimization
413
414 // vector of pairs <sample stage positions in nm, count rate in Hz>
415 std::vector<std::pair<PositionPoint, double>> ConfocalScanResults;
417
418 // HBT
421 std::chrono::microseconds HBTMaxIntegrationTime;
424 std::chrono::microseconds HBTTotalIntegrationTime;
425
426 // x is time in ps, y is g2.
427 QList<QPointF> HBTDataPoints;
430
431 // Auto measure
433 std::filesystem::path AutoMeasureSavePath;
452 LocalizedPositionsMapType::iterator AutoMeasureFirstEmitter;
453 LocalizedPositionsMapType::iterator AutoMeasureCurrentEmitter;
454 };
455
458
460 {
461 public:
463 virtual ~WidefieldMicroscopeParams() = default;
464
465 virtual const char* GetParamClassTag() const noexcept override { return "WidefieldMicroscopeParams"; }
466
468 "SampleStageX", "Sample stage X", "Positioner to move sample along x coordinate", DynExpUI::Icons::Instrument, true };
470 "SampleStageY", "Sample stage Y", "Positioner to move sample along y coordinate", DynExpUI::Icons::Instrument, true };
472 "SampleStageZ", "Sample stage Z", "Positioner to move sample along z coordinate", DynExpUI::Icons::Instrument, true };
474 "FocusPiezoZ", "Focusing piezo (AO)", "Piezo to adjust the focus of the microscope", DynExpUI::Icons::Instrument, true };
476 "LEDSwitch", "LED switch (DO)", "Digital switch to turn the LED light source on and off", DynExpUI::Icons::Instrument, true };
478 "PumpSwitch", "Pump switch (DO)", "Digital switch to turn the pump light source on and off", DynExpUI::Icons::Instrument, true };
480 "WidefieldConfocalSwitch", "Widefield/confocal mode switch (DO)",
481 "Digital switch to change from widefield mode (LOW) to confocal mode (HIGH)", DynExpUI::Icons::Instrument, true };
483 "WidefieldConfocalIndicator", "Widefield/confocal mode indicator (DI)",
484 "Digital indicator which is LOW if in widefield mode and HIGH if in confocal mode", DynExpUI::Icons::Instrument, true };
485 Param<ParamsConfigDialog::NumberType> WidefieldConfocalTransitionTime = { *this, "WidefieldConfocalTransitionTime",
486 "Widefield/confocal transition time (ms)",
487 "Time it takes to transition from widefield into confocal mode or vice versa once the widefield/confocal mode switch has been triggered",
488 false, 500, 0, 10000, 10, 0 };
490 "WidefieldHBTSwitch", "HBT flip mirror servo actuator (DO)", "Servo actuator to switch to HBT measurement mode", DynExpUI::Icons::Instrument, true };
492 "HBT flip mirror low duty cycle",
493 "Duty cycle of rectangular pulses applied to the HBT flip mirror servo actuator in order to make it flip the mirror into the low position",
494 false, .2, 0, 1, .1, 2 };
495 Param<ParamsConfigDialog::NumberType> WidefieldHBTSwitchHighDutyCycle = { *this, "WidefieldHBTSwitchHighDutyCycle",
496 "HBT flip mirror high duty cycle",
497 "Duty cycle of rectangular pulses applied to the HBT flip mirror servo actuator in order to make it flip the mirror into the high position",
498 false, .8, 0, 1, .1, 2 };
500 "HBT flip mirror transition time (ms)",
501 "Time it takes to flip the HBT mirror once the duty cycle of the rectangular pulses applied to the flip mirror servo actuator has changed",
502 false, 500, 0, 10000, 10, 0 };
504 "PumpPower", "Pump power (AO)", "Analog output to adjust the power of the pump light source", DynExpUI::Icons::Instrument, true };
506 "PumpPowerIndicator", "Pump power indicator (AI)", "Analog input to measure the current power of the pump light source",
508 Param<ParamsConfigDialog::NumberType> DefaultPowerWidefieldMode = { *this, "DefaultPowerWidefieldMode", "Default pump power (widefield mode)",
509 "Defines the pump power in units of the pump power (AO) parameter which is initially used in the widefield mode",
510 true, 1, 0, std::numeric_limits<ParamsConfigDialog::NumberType>::max(), .1, 3 };
511 Param<ParamsConfigDialog::NumberType> DefaultPowerConfocalMode = { *this, "DefaultPowerConfocalMode", "Default pump power (confocal mode)",
512 "Defines the pump power in units of the pump power (AO) parameter which is initially used in the confocal mode",
513 true, .1, 0, std::numeric_limits<ParamsConfigDialog::NumberType>::max(), .1, 3 };
515 "WidefieldCamera", "Widefield camera", "Camera to record widefield images of the sample", DynExpUI::Icons::Instrument, true };
517 "WidefieldLocalizer", "Widefield localizer", "gRPC service to perform widefield localization of emitters within a recorded camera image",
519 Param<ParamsConfigDialog::NumberType> WidefieldCameraMagnification = { *this, "WidefieldCameraMagnification", "Widefield camera magnification factor",
520 "Magnification factor of the optical system between the sample and the widefield camera",
521 false, 100, .01, 10000, 1, 2 };
523 "SPD1", "SPD 1", "First single photon detector for confocal light collection", DynExpUI::Icons::Instrument, true };
525 "SPD2", "SPD 2", "Second single photon detector for confocal light collection", DynExpUI::Icons::Instrument, true };
527 "AcqInterModuleCommunicator", "Acq. inter-module communicator", "Inter-module communicator to control image and spectrum capturing modules with", DynExpUI::Icons::Instrument, true };
528
529 private:
531 };
532
534 {
535 public:
538
541
542 private:
543 virtual DynExp::ParamsBasePtrType MakeParams(DynExp::ItemIDType ID, const DynExp::DynExpCore& Core) const override final { return DynExp::MakeParams<WidefieldMicroscopeConfigurator>(ID, Core); }
544 };
545
547 {
550
551 using AtomicPositionerStateType = std::atomic<PositionerStateType>;
552 using AtomicWidefieldImageProcessingStateType = std::atomic<WidefieldImageProcessingStateType>;
553
554 public:
558
559 constexpr static auto Name() noexcept { return "Widefield Microscope"; }
560 constexpr static auto Category() noexcept { return "Experiments"; }
561
563 virtual ~WidefieldMicroscope();
564
565 virtual std::string GetName() const override { return Name(); }
566 virtual std::string GetCategory() const override { return Category(); }
567
568 std::chrono::milliseconds GetMainLoopDelay() const override final;
569
570 // Events which the UI thread might enqueue.
571 void OnSaveCurrentImage(DynExp::ModuleInstance* Instance, QString Filename) const;
572 void OnGoToSamplePos(DynExp::ModuleInstance* Instance, QPointF SamplePos) const;
573 void OnBringMarkerToConfocalSpot(DynExp::ModuleInstance* Instance, QPoint MarkerPos, QPointF SamplePos) const;
574 void OnRunCharacterizationFromID(DynExp::ModuleInstance* Instance, Util::MarkerGraphicsView::MarkerType::IDType ID) const;
575
576 private:
577 Util::DynExpErrorCodes::DynExpErrorCodes ModuleMainLoop(DynExp::ModuleInstance& Instance) override final;
578
579 void ResetImpl(dispatch_tag<QModuleBase>) override final;
580
581 std::unique_ptr<DynExp::QModuleWidget> MakeUIWidget() override final;
582 void UpdateUIChild(const ModuleBase::ModuleDataGetterType& ModuleDataGetter) override final;
583
584 // Helper functions
585 // ->
586 template <typename PosT>
587 static ModuleDataType::PositionPoint PositionPointFromPixelDist(Util::SynchronizedPointer<const ParamsType>& ModuleParams, Util::SynchronizedPointer<ModuleDataType>& ModuleData,
588 const PosT x, const PosT y)
589 {
590 return {
591 Util::NumToT<WidefieldMicroscopeData::PositionType>(x * ModuleData->GetWidefieldCamera()->GetPixelSizeInMicrons() * 1000 / ModuleParams->WidefieldCameraMagnification),
592 Util::NumToT<WidefieldMicroscopeData::PositionType>(y * ModuleData->GetWidefieldCamera()->GetPixelSizeInMicrons() * 1000 / ModuleParams->WidefieldCameraMagnification)
593 };
594 }
595
596 bool IsReadyState() const noexcept { return StateMachine.GetCurrentState()->GetState() == StateType::Ready; }
598 bool IsCharacterizingSample() const noexcept;
599 void MoveSampleTo(const ModuleDataType::PositionPoint& Point, Util::SynchronizedPointer<ModuleDataType>& ModuleData) const;
600 bool IsSampleMoving(Util::SynchronizedPointer<ModuleDataType>& ModuleData) const;
601 void SetFocus(Util::SynchronizedPointer<ModuleDataType>& ModuleData, double Voltage, bool IgnoreOffset = false) const;
602 ModuleDataType::PositionPoint CalcMarkerToConfocalSpotDestiny(Util::SynchronizedPointer<const ParamsType>& ModuleParams, Util::SynchronizedPointer<ModuleDataType>& ModuleData,
603 QPoint MarkerPos, QPointF SamplePos) const;
604 void BringMarkerToConfocalSpot(Util::SynchronizedPointer<const ParamsType>& ModuleParams, Util::SynchronizedPointer<ModuleDataType>& ModuleData,
605 QPoint MarkerPos, QPointF SamplePos) const;
606 ModuleDataType::QSurfaceDataRowsType CalculateConfocalScanPositions(const int Width, const int Height,
607 const int DistPerPixel, const WidefieldMicroscopeData::PositionPoint CenterPosition) const;
608 void UpdatePumpPower(Util::SynchronizedPointer<ModuleDataType>& ModuleData) const;
609 void PrepareImageRecording(Util::SynchronizedPointer<ModuleDataType>& ModuleData) const;
610 void RecordImage(Util::SynchronizedPointer<ModuleDataType>& ModuleData) const;
613 void PrepareAPDsForConfocalMode(Util::SynchronizedPointer<ModuleDataType>& ModuleData) const;
614 void InitializeConfocalOptimizer(Util::SynchronizedPointer<ModuleDataType>& ModuleData) const;
615 void SetHBTSwitch(Util::SynchronizedPointer<const ParamsType>& ModuleParams,
616 Util::SynchronizedPointer<ModuleDataType>& ModuleData, bool IsHBTMode) const;
617 void InitializeHBT(Util::SynchronizedPointer<ModuleDataType>& ModuleData) const;
618 void StopHBT(Util::SynchronizedPointer<ModuleDataType>& ModuleData) const;
619 StateType StartAutofocus(Util::SynchronizedPointer<ModuleDataType>& ModuleData) const;
621 StateType StartAutoMeasureCharacterization(Util::SynchronizedPointer<ModuleDataType>& ModuleData, Util::MarkerGraphicsView::MarkerType::IDType FirstEmitterID = -1) const;
623 std::filesystem::path BuildFilename(Util::SynchronizedPointer<ModuleDataType>& ModuleData, std::string_view FilenameSuffix) const;
624 ModuleDataType::PositionPoint RandomPointInCircle(ModuleDataType::PositionType Radius) const;
625 // <-
626
627 // Function and types for automatical optimization of the sample's position to maximize the count rate
628 // ->
635
637
639
642 static double ConfocalOptimizationFuncForwarder(const gsl_vector* vector, void* params);
643 double ConfocalOptimizationFunc(const gsl_vector* vector) noexcept;
644 // <-
645
646 // Events, run in module thread
647 void OnInit(DynExp::ModuleInstance* Instance) const override final;
648 void OnExit(DynExp::ModuleInstance* Instance) const override final;
649 void OnTerminate(DynExp::ModuleInstance* Instance, bool) const;
650 void OnStopAction(DynExp::ModuleInstance* Instance, bool) const;
651 void OnSetHomePosition(DynExp::ModuleInstance* Instance, bool) const;
652 void OnGoToHomePosition(DynExp::ModuleInstance* Instance, bool) const;
653 void OnToggleLEDLightSource(DynExp::ModuleInstance* Instance, bool State) const;
654 void OnTogglePumpLightSource(DynExp::ModuleInstance* Instance, bool State) const;
655 void OnSetupModeChanged(DynExp::ModuleInstance* Instance, QAction* Action) const;
656 void OnAutofocus(DynExp::ModuleInstance* Instance, bool) const;
657 void OnOptimizePositions(DynExp::ModuleInstance* Instance, bool) const;
658 void OnToggleHBTMirror(DynExp::ModuleInstance* Instance, bool Checked) const;
659 void OnResetCellID(DynExp::ModuleInstance* Instance, bool) const;
660 void OnGeneralWidefieldPowerChanged(DynExp::ModuleInstance* Instance, double Value) const;
661 void OnGeneralConfocalPowerChanged(DynExp::ModuleInstance* Instance, double Value) const;
662 void OnGeneralFocusCurrentVoltageChanged(DynExp::ModuleInstance* Instance, double Value) const;
663 void OnGeneralFocusZeroVoltageChanged(DynExp::ModuleInstance* Instance, double Value) const;
664 void OnGeneralFocusConfocalOffsetVoltageChanged(DynExp::ModuleInstance* Instance, double Value) const;
665 void OnGeneralSetZeroFocus(DynExp::ModuleInstance* Instance, bool) const;
666 void OnGeneralApplyZeroFocus(DynExp::ModuleInstance* Instance, bool) const;
667 void OnWidefieldLEDExposureTimeChanged(DynExp::ModuleInstance* Instance, int Value) const;
669 void OnWidefieldPumpExposureTimeChanged(DynExp::ModuleInstance* Instance, int Value) const;
671 void OnWidefieldFindConfocalSpot(DynExp::ModuleInstance* Instance, bool) const;
672 void OnCaptureLEDImage(DynExp::ModuleInstance* Instance, bool) const;
673 void OnCaptureWidefieldImage(DynExp::ModuleInstance* Instance, bool) const;
674 void OnWidefieldReadCellID(DynExp::ModuleInstance* Instance, bool) const;
676 void OnWidefieldLocalizeEmitters(DynExp::ModuleInstance* Instance, bool) const;
677 void OnWidefieldImageClicked(DynExp::ModuleInstance* Instance, QPoint Position) const;
678 void OnConfocalConfocalWidthChanged(DynExp::ModuleInstance* Instance, int Value) const;
679 void OnConfocalConfocalHeightChanged(DynExp::ModuleInstance* Instance, int Value) const;
680 void OnConfocalConfocalDistPerPixelChanged(DynExp::ModuleInstance* Instance, int Value) const;
681 void OnConfocalSPDExposureTimeChanged(DynExp::ModuleInstance* Instance, int Value) const;
683 void OnConfocalOptimizationInitZStepSizeChanged(DynExp::ModuleInstance* Instance, double Value) const;
684 void OnConfocalOptimizationToleranceChanged(DynExp::ModuleInstance* Instance, double Value) const;
685 void OnPerformConfocalScan(DynExp::ModuleInstance* Instance, bool) const;
686 void ConfocalSurfaceSelectedPointChanged(DynExp::ModuleInstance* Instance, QPoint Position) const;
687 void OnHBTBinWidthChanged(DynExp::ModuleInstance* Instance, int Value) const;
688 void OnHBTBinCountChanged(DynExp::ModuleInstance* Instance, int Value) const;
689 void OnHHBTMaxIntegrationTimeChanged(DynExp::ModuleInstance* Instance, double Value) const;
690 void OnMeasureHBT(DynExp::ModuleInstance* Instance, bool) const;
692 void OnFinishedAutofocus(DynExp::ModuleInstance* Instance, bool Success, double Voltage) const;
694 void OnAutoMeasureSavePathChanged(DynExp::ModuleInstance* Instance, QString Path) const;
695 void OnAutoMeasureNumberImageSetsChanged(DynExp::ModuleInstance* Instance, int Value) const;
698 void OnAutoMeasureLocalizationTypeChanged(DynExp::ModuleInstance* Instance, int Value) const;
699 void OnToggleAutoMeasureOptimizeEnabled(DynExp::ModuleInstance* Instance, int State) const;
700 void OnToggleAutoMeasureSpectrumEnabled(DynExp::ModuleInstance* Instance, int State) const;
701 void OnToggleAutoMeasureHBTEnabled(DynExp::ModuleInstance* Instance, int State) const;
705 void OnAutoMeasureCountRateThresholdChanged(DynExp::ModuleInstance* Instance, int Value) const;
706 void OnAutoMeasureCellRangeFromXChanged(DynExp::ModuleInstance* Instance, int Value) const;
707 void OnAutoMeasureCellRangeFromYChanged(DynExp::ModuleInstance* Instance, int Value) const;
708 void OnAutoMeasureCellRangeToXChanged(DynExp::ModuleInstance* Instance, int Value) const;
709 void OnAutoMeasureCellRangeToYChanged(DynExp::ModuleInstance* Instance, int Value) const;
710 void OnAutoMeasureCellSkipXChanged(DynExp::ModuleInstance* Instance, int Value) const;
711 void OnAutoMeasureCellSkipYChanged(DynExp::ModuleInstance* Instance, int Value) const;
712 void OnAutoMeasureRunLocalization(DynExp::ModuleInstance* Instance, bool) const;
715
716 // State functions for state machine
765
766 // States for state machine
768 &WidefieldMicroscope::InitializingStateFunc, "Initializing module...");
788 &WidefieldMicroscope::WidefieldImageAcquisitionBeginStateFunc, "Recording widefield image...");
792 &WidefieldMicroscope::WaitingForImageStateFunc, "Recording LED image...");
796 &WidefieldMicroscope::WaitingForImageReadyToCaptureStateFunc, "Recording widefield image...");
798 &WidefieldMicroscope::WaitingForImageStateFunc, "Recording widefield image...");
802 &WidefieldMicroscope::WaitingForWidefieldCellIDStateFunc, "Waiting for cell ID to be read from image...");
804 &WidefieldMicroscope::WidefieldCellWaitUntilCenteredStateFunc, "Waiting for cell to be centered in FOV...");
808 &WidefieldMicroscope::WaitingForWidefieldLocalizationStateFunc, "Waiting for localization of emitters from image...");
818 &WidefieldMicroscope::ConfocalScanStepStateFunc, "Performing confocal scan...");
820 &WidefieldMicroscope::ConfocalScanWaitUntilMovedStateFunc, "Performing confocal scan...");
822 &WidefieldMicroscope::ConfocalScanCaptureStateFunc, "Performing confocal scan...");
836 &WidefieldMicroscope::HBTAcquiringStateFunc, "HBT acquiring...");
854 &WidefieldMicroscope::AutoMeasureLocalizationMovingStateFunc, "Moving to next image capturing position...");
891
892 // Contexts for state machine
957
958 // Logical const-ness: allow events to set the state machine's current state.
960
961 // shared_ptr since in principle PositionerStages' tasks can outlive this module instance.
962 const std::shared_ptr<AtomicPositionerStateType> ConfocalScanPositionerStateX;
963 const std::shared_ptr<AtomicPositionerStateType> ConfocalScanPositionerStateY;
964 const std::shared_ptr<AtomicPositionerStateType> ConfocalScanPositionerStateZ;
965
966 // shared_ptr since in principle WidefieldLocalizer's tasks can outlive this module instance.
967 const std::shared_ptr<AtomicWidefieldImageProcessingStateType> WidefieldCellIDState;
968 const std::shared_ptr<AtomicWidefieldImageProcessingStateType> WidefieldLocalizationState;
969
970 mutable std::list<WidefieldMicroscopeData::PositionPoint> ConfocalScanPositions;
971
972 // Variables for automatical optimization of the sample's position to maximize the count rate
973 static constexpr size_t GSLConfocalOptimizationNumDimensions = 3;
974 const gsl_multimin_fminimizer_type* const GSLConfocalOptimizationMinimizer = gsl_multimin_fminimizer_nmsimplex2;
976 gsl_multimin_fminimizer* const GSLConfocalOptimizationState;
979 mutable std::atomic<size_t> ConfocalOptimizationNumStepsPerformed = 0; // To be accessed by ConfocalOptimizationThread and WidefieldMicroscope thread.
980 mutable std::atomic_bool ConfocalOptimizationPromisesRenewed = false; // To be accessed by ConfocalOptimizationThread and WidefieldMicroscope thread.
981 std::promise<ConfocalOptimizationStateType> ConfocalOptimizationStatePromise; // To be solely accessed by ConfocalOptimizationThread.
982 std::future<ConfocalOptimizationStateType> ConfocalOptimizationStateFuture; // To be solely accessed by WidefieldMicroscope thread.
983 mutable std::promise<ConfocalOptimizationFeedbackType> ConfocalOptimizationFeedbackPromise; // To be solely accessed by WidefieldMicroscope thread.
984 std::future<ConfocalOptimizationFeedbackType> ConfocalOptimizationFeedbackFuture; // To be solely accessed by ConfocalOptimizationThread.
985 std::future<ConfocalOptimizationThreadReturnType> ConfocalOptimizationThreadReturnFuture; // To be solely accessed by WidefieldMicroscope thread.
986
987 // Variables for switching from a confocal to a widefield setup.
988 std::chrono::system_clock::time_point SetupTransitionFinishedTimePoint;
990
991 // Variables for widefield image capturing.
992 mutable bool ImageCapturingPaused = false;
993
994 // Variables for managing wait times within measurements.
995 mutable std::chrono::system_clock::time_point WaitingEndTimePoint;
996 mutable std::chrono::microseconds HBTIntegrationTimeBeforeReset{ 0 };
997
998 // General
1000 mutable bool LogUIMessagesOnly = false;
1001 };
1002}
Defines DynExp's core module as an interface between the UI and DynExp objects.
User interface belonging to the DynExpModule::Widefield::WidefieldMicroscope module.
std::chrono::milliseconds TimeType
Time type describing the camera's times like its exposure time.
Definition Camera.h:101
SampleT SampleType
Alias for SampleT.
signed long long PositionType
Numeric type to store the stage positions.
Definition Stage.h:71
virtual DynExp::ParamsBasePtrType MakeParams(DynExp::ItemIDType ID, const DynExp::DynExpCore &Core) const override final
Override to make derived classes call DynExp::MakeParams with the correct configurator type derived f...
void SetCellID(const DynExpInstr::WidefieldLocalizationCellIDType &CellID)
CameraTimeType GetMinCameraExposureTime() const noexcept
void SetAutoMeasureOptimizationMaxDistance(int OptimizationMaxDistance) noexcept
void SetSPD2SamplesWritten(size_t SamplesWritten) noexcept
DynExp::LinkedObjectWrapperContainer< DynExpInstr::PositionerStage > SampleStageZ
void SetMaxFocusVoltage(double MaxVoltage) noexcept
PositionPoint SampleHomePosition
Location set by the user as a home position in nm.
void SetFocusZeroVoltage(double ZeroVoltage) noexcept
void SetAutoMeasureNumOptimizationAttempts(int NumOptimizationAttempts) noexcept
void SetWidefieldPosition(const PositionPoint &Position) noexcept
void SetMinCameraExposureTime(CameraTimeType Time) noexcept
void SetFocusConfocalOffsetVoltage(double ConfocalOffsetVoltage) noexcept
const PositionPoint & GetHBTSamplePosition() const noexcept
const PositionPoint & GetSampleHomePosition() const noexcept
CameraTimeType GetMaxCameraExposureTime() const noexcept
DynExpInstr::WidefieldLocalizationCellIDType LastCellID
void SetAutoMeasureInitialImageSetWaitTime(std::chrono::seconds Time) noexcept
DynExp::LinkedObjectWrapperContainer< DynExpInstr::DigitalOut > LEDSwitch
DynExp::LinkedObjectWrapperContainer< DynExpInstr::DigitalOut > WidefieldConfocalSwitch
static QColor GetLocalizedEmitterColor(LocalizedEmitterStateType State)
void SetHBTBinWidth(Util::picoseconds BinWidth) noexcept
DynExp::LinkedObjectWrapperContainer< DynExpInstr::AnalogOut > FocusPiezoZ
void SetAutoMeasureImagePositionScatterRadius(int ScatterRadius) noexcept
DynExp::LinkedObjectWrapperContainer< DynExpInstr::PositionerStage > SampleStageX
void WriteConfocalScanResults(std::stringstream &Stream) const
void SetConfocalOptimizationInitXYStepSize(double StepSize) noexcept
std::vector< std::pair< PositionPoint, double > > ConfocalScanResults
virtual void ResetImpl(dispatch_tag< WidefieldMicroscopeData >)
void SetHBTNumEventCounts(long long NumEventCounts) noexcept
DynExp::LinkedObjectWrapperContainer< DynExpInstr::TimeTagger > SPD2
WidefieldMicroscopeWidget::LocalizationType AutoMeasureLocalizationType
PositionPoint WidefieldPosition
Location where the current widefield image has been taken in nm.
LocalizedPositionsMapType::iterator AutoMeasureCurrentEmitter
Iterator to the emitter being characterized.
DynExp::LinkedObjectWrapperContainer< DynExpInstr::PositionerStage > SampleStageY
DynExpInstr::WidefieldLocalizationCellIDType CurrentCellID
void SetMeasuredPumpPower(double MeasuredPower) noexcept
bool SetAutoMeasureFirstEmitter(Util::MarkerGraphicsView::MarkerType::IDType FirstEmitterID) noexcept
Returns true in case of success, false otherwise.
LocalizedPositionsMapType::iterator AutoMeasureFirstEmitter
Iterator to the first emitter to be characterized.
void SetMinFocusVoltage(double MinVoltage) noexcept
void SetAutoMeasureCurrentCellPosition(const PositionPoint &Position) noexcept
void SetSetupMode(SetupModeType NewMode) noexcept
void SetLEDCameraExposureTime(CameraTimeType Time) noexcept
void SetAutoMeasureMaxOptimizationReruns(int MaxOptimizationReruns) noexcept
void SetConfocalScanDistPerPixel(int DistPerPixel) noexcept
const PositionPoint & GetAutoMeasureCurrentCellPosition() const noexcept
void SetConfocalOptimizationTolerance(double Tolerance) noexcept
void SetConfocalSpotImagePosition(const QPoint &Position) noexcept
PositionPoint GetSamplePosition() const
Returns current sample position.
std::chrono::seconds GetAutoMeasureInitialImageSetWaitTime() const noexcept
DynExp::LinkedObjectWrapperContainer< DynExpInstr::AnalogIn > PumpPowerIndicator
void SetHBTMaxIntegrationTime(std::chrono::microseconds MaxIntegrationTime) noexcept
void SetAutoMeasureCountRateThreshold(int CountRateThreshold) noexcept
void SetConfocalScanSurfacePlotRows(QSurfaceDataRowsType &&QSurfaceDataRows) noexcept
QPoint ConfocalSpotImagePosition
Location of confocal spot in units of px within widefield image.
DynExpInstr::CameraData::TimeType CameraTimeType
DynExp::LinkedObjectWrapperContainer< DynExpInstr::DigitalIn > WidefieldConfocalIndicator
void SetSPD1SamplesWritten(size_t SamplesWritten) noexcept
void SetMaxCameraExposureTime(CameraTimeType Time) noexcept
DynExpInstr::PositionerStageData::PositionType PositionType
DynExp::LinkedObjectWrapperContainer< DynExpInstr::DigitalOut > PumpSwitch
std::vector< std::unique_ptr< QSurfaceDataRow > > QSurfaceDataRowsType
void SetHBTDataPointsMinValues(const QPointF &DataPointsMinValues) noexcept
void SetHBTSamplePosition(const PositionPoint &Position) noexcept
void SetFocusCurrentVoltage(double CurrentVoltage) noexcept
void SetAutoMeasureNumberImageSets(int NumberImageSets) noexcept
void SetSampleHomePosition(const PositionPoint &Position) noexcept
DynExp::LinkedObjectWrapperContainer< DynExpInstr::Camera > WidefieldCamera
PositionPoint AutoMeasureCurrentCellPosition
Center position of the current cell in nm where an automated measurement takes place.
void SetHBTTotalIntegrationTime(std::chrono::microseconds TotalIntegrationTime) noexcept
void SetAutoMeasureLocalizationType(WidefieldMicroscopeWidget::LocalizationType LocalizationType) noexcept
void ResetImpl(dispatch_tag< QModuleDataBase >) override final
DynExp::LinkedObjectWrapperContainer< DynExpInstr::FunctionGenerator > WidefieldHBTSwitch
void WriteHBTResults(std::stringstream &Stream) const
void SetLocalizedPositions(LocalizedPositionsMapType &&Positions)
void SetAutoMeasureSavePath(std::filesystem::path SavePath) noexcept
static const char * GetLocalizedEmitterStateString(LocalizedEmitterStateType State)
std::map< Util::MarkerGraphicsView::MarkerType::IDType, LocalizedEmitterType > LocalizedPositionsMapType
void AppendLocalizedPosition(LocalizedPositionsMapType::value_type &&Position)
CameraTimeType GetLEDCameraExposureTime() const noexcept
void SetConfocalOptimizationInitZStepSize(double StepSize) noexcept
PositionPoint HBTSamplePosition
Location in nm where the HBT measurement has been started.
int AutoMeasureCurrentImageSet
Index of the image set being recorded if auto-measure localization is running, -1 otherwise.
void SetHBTDataPointsMaxValues(const QPointF &DataPointsMaxValues) noexcept
bool TestFeature(const std::array< FeatureType, N > &Flags) const
void SetWidefieldCameraExposureTime(CameraTimeType Time) noexcept
DynExp::LinkedObjectWrapperContainer< DynExpInstr::InterModuleCommunicator > AcqCommunicator
DynExp::LinkedObjectWrapperContainer< DynExpInstr::WidefieldLocalization > WidefieldLocalizer
std::stringstream AssembleCSVHeader(bool IncludeConfocalScan, bool IncludeHBT, bool IncludeAutoMeasure) const
DynExp::LinkedObjectWrapperContainer< DynExpInstr::AnalogOut > PumpPower
CameraTimeType GetWidefieldCameraExposureTime() const noexcept
const PositionPoint & GetWidefieldPosition() const noexcept
DynExp::LinkedObjectWrapperContainer< DynExpInstr::TimeTagger > SPD1
WidefieldMicroscopeParams(DynExp::ItemIDType ID, const DynExp::DynExpCore &Core)
Param< DynExp::ObjectLink< DynExpInstr::AnalogIn > > PumpPowerIndicator
Param< ParamsConfigDialog::NumberType > DefaultPowerConfocalMode
Param< DynExp::ObjectLink< DynExpInstr::Camera > > WidefieldCamera
Param< DynExp::ObjectLink< DynExpInstr::PositionerStage > > SampleStageX
Param< DynExp::ObjectLink< DynExpInstr::WidefieldLocalization > > WidefieldLocalizer
Param< ParamsConfigDialog::NumberType > WidefieldHBTSwitchLowDutyCycle
Param< DynExp::ObjectLink< DynExpInstr::FunctionGenerator > > WidefieldHBTSwitch
void ConfigureParamsImpl(dispatch_tag< QModuleParamsBase >) override final
Param< DynExp::ObjectLink< DynExpInstr::DigitalOut > > WidefieldConfocalSwitch
Param< DynExp::ObjectLink< DynExpInstr::AnalogOut > > PumpPower
Param< ParamsConfigDialog::NumberType > WidefieldHBTSwitchHighDutyCycle
virtual const char * GetParamClassTag() const noexcept override
This function is intended to be overridden once in each derived class returning the name of the respe...
Param< DynExp::ObjectLink< DynExpInstr::PositionerStage > > SampleStageY
Param< DynExp::ObjectLink< DynExpInstr::PositionerStage > > SampleStageZ
Param< ParamsConfigDialog::NumberType > WidefieldConfocalTransitionTime
Param< ParamsConfigDialog::NumberType > WidefieldHBTTransitionTime
Param< DynExp::ObjectLink< DynExpInstr::InterModuleCommunicator > > AcqCommunicator
Param< DynExp::ObjectLink< DynExpInstr::DigitalOut > > PumpSwitch
Param< DynExp::ObjectLink< DynExpInstr::DigitalOut > > LEDSwitch
Param< DynExp::ObjectLink< DynExpInstr::DigitalIn > > WidefieldConfocalIndicator
Param< ParamsConfigDialog::NumberType > DefaultPowerWidefieldMode
Param< DynExp::ObjectLink< DynExpInstr::TimeTagger > > SPD2
Param< ParamsConfigDialog::NumberType > WidefieldCameraMagnification
Param< DynExp::ObjectLink< DynExpInstr::AnalogOut > > FocusPiezoZ
Param< DynExp::ObjectLink< DynExpInstr::TimeTagger > > SPD1
void OnCaptureWidefieldImage(DynExp::ModuleInstance *Instance, bool) const
void OnConfocalSPDExposureTimeChanged(DynExp::ModuleInstance *Instance, int Value) const
const gsl_multimin_fminimizer_type *const GSLConfocalOptimizationMinimizer
static constexpr auto AutoMeasureCharacterizationHBTFinishedState
const Util::StateMachineContext< StateMachineStateType > AutoMeasureSampleCharacterizationContext
void OnAutofocus(DynExp::ModuleInstance *Instance, bool) const
void OnOptimizePositions(DynExp::ModuleInstance *Instance, bool) const
void OnAutoMeasureCellRangeFromXChanged(DynExp::ModuleInstance *Instance, int Value) const
StateType AutoMeasureCharacterizationHBTFinishedStateFunc(DynExp::ModuleInstance &Instance)
StateType HBTAcquiringStateFunc(DynExp::ModuleInstance &Instance)
ModuleDataType::PositionPoint RandomPointInCircle(ModuleDataType::PositionType Radius) const
Returns a uniformly-distributed random coordinate within a circle of radius Radius,...
const Util::StateMachineContext< StateMachineStateType > AutoMeasureSampleContext
void OnRunCharacterizationFromID(DynExp::ModuleInstance *Instance, Util::MarkerGraphicsView::MarkerType::IDType ID) const
const Util::StateMachineContext< StateMachineStateType > AutoMeasureSampleLocalizationContext
StateType AutoMeasureCharacterizationOptimizationFinishedStateFunc(DynExp::ModuleInstance &Instance)
void OnHBTBinWidthChanged(DynExp::ModuleInstance *Instance, int Value) const
void OnGoToHomePosition(DynExp::ModuleInstance *Instance, bool) const
void PrepareAPDsForConfocalMode(Util::SynchronizedPointer< ModuleDataType > &ModuleData) const
void OnAutoMeasureMaxOptimizationRerunsChanged(DynExp::ModuleInstance *Instance, int Value) const
void OnConfocalConfocalWidthChanged(DynExp::ModuleInstance *Instance, int Value) const
StateType InitiateReadCellIDFromImage(Util::SynchronizedPointer< ModuleDataType > &ModuleData) const
void MoveSampleTo(const ModuleDataType::PositionPoint &Point, Util::SynchronizedPointer< ModuleDataType > &ModuleData) const
static ModuleDataType::PositionPoint PositionPointFromPixelDist(Util::SynchronizedPointer< const ParamsType > &ModuleParams, Util::SynchronizedPointer< ModuleDataType > &ModuleData, const PosT x, const PosT y)
StateType ConfocalOptimizationInitSubStepStateFunc(DynExp::ModuleInstance &Instance)
std::unique_ptr< DynExp::QModuleWidget > MakeUIWidget() override final
Used by InitUI() as a factory function for the module's user interface widget. Create the widget here...
StateType WaitingForImageStateFunc(DynExp::ModuleInstance &Instance)
bool IsCharacterizingSample() const noexcept
Returns true if an entire sample (multiple cells) are processed, false if only a single cell is proce...
const Util::StateMachineContext< StateMachineStateType > AutoMeasureSampleRecenterCellContext
void OnConfocalConfocalDistPerPixelChanged(DynExp::ModuleInstance *Instance, int Value) const
StateType FindingConfocalSpotAfterTransitioningToConfocalModeStateFunc(DynExp::ModuleInstance &Instance)
StateType AutoMeasureSampleStepStateFunc(DynExp::ModuleInstance &Instance)
const Util::StateMachineContext< StateMachineStateType > WidefieldImageAcquisitionSetupTransitioningContext
void OnAutoMeasureNumberImageSetsChanged(DynExp::ModuleInstance *Instance, int Value) const
const std::shared_ptr< AtomicWidefieldImageProcessingStateType > WidefieldCellIDState
const Util::StateMachineContext< StateMachineStateType > ConfocalOptimizationContext
void OnAutoMeasureCountRateThresholdChanged(DynExp::ModuleInstance *Instance, int Value) const
StateType StartAutoMeasureLocalization(Util::SynchronizedPointer< ModuleDataType > &ModuleData) const
void OnWidefieldLEDExposureTimeChanged(DynExp::ModuleInstance *Instance, int Value) const
StateType AutoMeasureLocalizationSaveLEDImageStateFunc(DynExp::ModuleInstance &Instance)
static constexpr auto AutoMeasureCharacterizationSpectrumBeginState
StateType AutoMeasureCharacterizationStepStateFunc(DynExp::ModuleInstance &Instance)
void OnInit(DynExp::ModuleInstance *Instance) const override final
This event is triggered right before the module thread starts. Override it to lock instruments this m...
StateType AutoMeasureCharacterizationSpectrumBeginStateFunc(DynExp::ModuleInstance &Instance)
StateType WidefieldCellWaitUntilCenteredStateFunc(DynExp::ModuleInstance &Instance)
void OnGeneralConfocalPowerChanged(DynExp::ModuleInstance *Instance, double Value) const
void OnAutoMeasureOptimizationMaxDistanceChanged(DynExp::ModuleInstance *Instance, int Value) const
void OnToggleAutoMeasureSpectrumEnabled(DynExp::ModuleInstance *Instance, int State) const
StateType ReadyStateFunc(DynExp::ModuleInstance &Instance)
const std::shared_ptr< AtomicPositionerStateType > ConfocalScanPositionerStateY
StateType AutoMeasureCharacterizationGotoEmitterStateFunc(DynExp::ModuleInstance &Instance)
void OnConfocalOptimizationInitZStepSizeChanged(DynExp::ModuleInstance *Instance, double Value) const
ModuleDataType::PositionPoint CalcMarkerToConfocalSpotDestiny(Util::SynchronizedPointer< const ParamsType > &ModuleParams, Util::SynchronizedPointer< ModuleDataType > &ModuleData, QPoint MarkerPos, QPointF SamplePos) const
StateType ConfocalOptimizationInitStateFunc(DynExp::ModuleInstance &Instance)
StateType FindingConfocalSpotBeginStateFunc(DynExp::ModuleInstance &Instance)
StateType AutofocusBeginStateFunc(DynExp::ModuleInstance &Instance)
void OnConfocalOptimizationInitXYStepSizeChanged(DynExp::ModuleInstance *Instance, double Value) const
void OnGeneralFocusConfocalOffsetVoltageChanged(DynExp::ModuleInstance *Instance, double Value) const
void OnGoToSamplePos(DynExp::ModuleInstance *Instance, QPointF SamplePos) const
void OnAutoMeasureCellRangeToXChanged(DynExp::ModuleInstance *Instance, int Value) const
void OnResetCellID(DynExp::ModuleInstance *Instance, bool) const
static double ConfocalOptimizationFuncForwarder(const gsl_vector *vector, void *params)
const Util::StateMachineContext< StateMachineStateType > AutofocusSetupTransitioningContext
StateType SetupTransitionEndStateFunc(DynExp::ModuleInstance &Instance)
StateType WaitingForImageReadyToCaptureStateFunc(DynExp::ModuleInstance &Instance)
std::future< ConfocalOptimizationThreadReturnType > ConfocalOptimizationThreadReturnFuture
const std::shared_ptr< AtomicWidefieldImageProcessingStateType > WidefieldLocalizationState
void OnSaveCurrentImage(DynExp::ModuleInstance *Instance, QString Filename) const
void OnAutoMeasureImagePositionScatterRadius(DynExp::ModuleInstance *Instance, int Value) const
void UpdateUIChild(const ModuleBase::ModuleDataGetterType &ModuleDataGetter) override final
void OnCaptureLEDImage(DynExp::ModuleInstance *Instance, bool) const
void OnToggleAutoMeasureHBTEnabled(DynExp::ModuleInstance *Instance, int State) const
void OnConfocalConfocalHeightChanged(DynExp::ModuleInstance *Instance, int Value) const
void OnAutoMeasureSavePathChanged(DynExp::ModuleInstance *Instance, QString Path) const
const Util::StateMachineContext< StateMachineStateType > AutoMeasureSampleCharacterizationHBTContext
gsl_multimin_fminimizer *const GSLConfocalOptimizationState
void OnWidefieldLocalizeEmitters(DynExp::ModuleInstance *Instance, bool) const
static constexpr auto WaitingForWidefieldImageReadyToCaptureState
StateType InitiateLocalizationFromImage(Util::SynchronizedPointer< ModuleDataType > &ModuleData) const
const Util::StateMachineContext< StateMachineStateType > AutoMeasureCharacterizationOptimizationContext
StateType AutofocusWaitingStateFunc(DynExp::ModuleInstance &Instance)
void OnConfocalOptimizationToleranceChanged(DynExp::ModuleInstance *Instance, double Value) const
void OnToggleAutoMeasureOptimizeEnabled(DynExp::ModuleInstance *Instance, int State) const
const Util::StateMachineContext< StateMachineStateType > AutoMeasureCharacterizationContext
void OnHHBTMaxIntegrationTimeChanged(DynExp::ModuleInstance *Instance, double Value) const
std::future< ConfocalOptimizationFeedbackType > ConfocalOptimizationFeedbackFuture
Util::DynExpErrorCodes::DynExpErrorCodes ModuleMainLoop(DynExp::ModuleInstance &Instance) override final
Module main loop. The function is executed periodically by the module thread. Also refer to GetMainLo...
void SetHBTSwitch(Util::SynchronizedPointer< const ParamsType > &ModuleParams, Util::SynchronizedPointer< ModuleDataType > &ModuleData, bool IsHBTMode) const
static constexpr auto FindingConfocalSpotAfterRecordingWidefieldImageState
void OnPerformConfocalScan(DynExp::ModuleInstance *Instance, bool) const
const std::shared_ptr< AtomicPositionerStateType > ConfocalScanPositionerStateX
void OnSpectrumFinishedRecording(DynExp::ModuleInstance *Instance) const
void OnTogglePumpLightSource(DynExp::ModuleInstance *Instance, bool State) const
static constexpr auto AutoMeasureCharacterizationGotoEmitterState
StateType ConfocalScanWaitUntilMovedStateFunc(DynExp::ModuleInstance &Instance)
StateType WaitingForWidefieldLocalizationStateFunc(DynExp::ModuleInstance &Instance)
StateType StartAutofocus(Util::SynchronizedPointer< ModuleDataType > &ModuleData) const
StateType ReturnToReadyStateFunc(DynExp::ModuleInstance &Instance)
void OnWidefieldApplyPumpExposureTime(DynExp::ModuleInstance *Instance, bool) const
std::promise< ConfocalOptimizationFeedbackType > ConfocalOptimizationFeedbackPromise
StateType InitializingStateFunc(DynExp::ModuleInstance &Instance)
void RecordImage(Util::SynchronizedPointer< ModuleDataType > &ModuleData) const
StateType FindingConfocalSpotAfterRecordingWidefieldImageStateFunc(DynExp::ModuleInstance &Instance)
void OnFinishedAutofocus(DynExp::ModuleInstance *Instance, bool Success, double Voltage) const
StateType ConfocalOptimizationWaitStateFunc(DynExp::ModuleInstance &Instance)
void ConfocalSurfaceSelectedPointChanged(DynExp::ModuleInstance *Instance, QPoint Position) const
const std::shared_ptr< AtomicPositionerStateType > ConfocalScanPositionerStateZ
void OnWidefieldApplyLEDExposureTime(DynExp::ModuleInstance *Instance, bool) const
virtual std::string GetName() const override
Returns the name of this Object type.
bool IsSampleMoving(Util::SynchronizedPointer< ModuleDataType > &ModuleData) const
Checks whether the sample is moving in x- or y-direction. The z-direction is ignored currently since ...
virtual std::string GetCategory() const override
Returns the category of this Object type.
const Util::StateMachineContext< StateMachineStateType > AutoMeasureLocalizationContext
StateType AutoMeasureCharacterizationHBTBeginStateFunc(DynExp::ModuleInstance &Instance)
StateType WidefieldImageAcquisitionBeginStateFunc(DynExp::ModuleInstance &Instance)
StateType StartAutoMeasureSampleCharacterization(Util::SynchronizedPointer< ModuleDataType > &ModuleData) const
void OnAutoMeasureInitialImageSetWaitTimeChanged(DynExp::ModuleInstance *Instance, int Value) const
static constexpr auto AutoMeasureCharacterizationSpectrumFinishedState
void OnToggleHBTMirror(DynExp::ModuleInstance *Instance, bool Checked) const
const Util::StateMachineContext< StateMachineStateType > LEDImageAcquisitionSetupTransitioningContext
StateType AutoMeasureSampleAdvanceCellStateFunc(DynExp::ModuleInstance &Instance)
Checks whether the last cell within the sample characterization range (specified as a square region b...
void OnAutoMeasureRunLocalization(DynExp::ModuleInstance *Instance, bool) const
StateType AutoMeasureCharacterizationSpectrumFinishedStateFunc(DynExp::ModuleInstance &Instance)
void InitializeHBT(Util::SynchronizedPointer< ModuleDataType > &ModuleData) const
std::atomic< PositionerStateType > AtomicPositionerStateType
std::chrono::system_clock::time_point WaitingEndTimePoint
static constexpr auto AutoMeasureCharacterizationOptimizationFinishedState
void OnHBTBinCountChanged(DynExp::ModuleInstance *Instance, int Value) const
void OnGeneralFocusZeroVoltageChanged(DynExp::ModuleInstance *Instance, double Value) const
StateType SetupTransitionBeginStateFunc(DynExp::ModuleInstance &Instance)
StateType SetupTransitioningStateFunc(DynExp::ModuleInstance &Instance)
Util::StateMachine< StateMachineStateType > StateMachine
void OnAutoMeasureLocalizationTypeChanged(DynExp::ModuleInstance *Instance, int Value) const
const Util::StateMachineContext< StateMachineStateType > AutoMeasureCharacterizationHBTContext
void OnWidefieldReadCellID(DynExp::ModuleInstance *Instance, bool) const
StateType WaitingStateFunc(DynExp::ModuleInstance &Instance)
StateType AutoMeasureLocalizationMovingStateFunc(DynExp::ModuleInstance &Instance)
StateType ResetState(Util::SynchronizedPointer< ModuleDataType > &ModuleData) const
Aborts a measurement or experimental sequence and continues with the ready state.
void OnSetupModeChanged(DynExp::ModuleInstance *Instance, QAction *Action) const
std::future< ConfocalOptimizationStateType > ConfocalOptimizationStateFuture
void OnAutoMeasureCellSkipYChanged(DynExp::ModuleInstance *Instance, int Value) const
const Util::StateMachineContext< StateMachineStateType > AutoMeasureSampleCharacterizationSpectrumContext
StateType WaitingForWidefieldCellIDStateFunc(DynExp::ModuleInstance &Instance)
void StopHBT(Util::SynchronizedPointer< ModuleDataType > &ModuleData) const
static constexpr auto AutoMeasureCharacterizationHBTWaitForInitState
void OnExit(DynExp::ModuleInstance *Instance) const override final
This event is triggered right before the module thread terminates (not due to an exception,...
double ConfocalOptimizationFunc(const gsl_vector *vector) noexcept
void OnTerminate(DynExp::ModuleInstance *Instance, bool) const
void OnImageCapturingPaused(DynExp::ModuleInstance *Instance) const
void OnAutoMeasureRunCharacterization(DynExp::ModuleInstance *Instance, bool) const
static ConfocalOptimizationThreadReturnType ConfocalOptimizationThread(WidefieldMicroscope *Owner)
void OnWidefieldAnalyzeImageDistortion(DynExp::ModuleInstance *Instance, bool) const
void OnSetHomePosition(DynExp::ModuleInstance *Instance, bool) const
void UpdatePumpPower(Util::SynchronizedPointer< ModuleDataType > &ModuleData) const
static constexpr auto FindingConfocalSpotAfterTransitioningToConfocalModeState
StateType AutoMeasureLocalizationStepStateFunc(DynExp::ModuleInstance &Instance)
void OnAutoMeasureCellRangeToYChanged(DynExp::ModuleInstance *Instance, int Value) const
StateType StartAutoMeasureCharacterization(Util::SynchronizedPointer< ModuleDataType > &ModuleData, Util::MarkerGraphicsView::MarkerType::IDType FirstEmitterID=-1) const
std::atomic< WidefieldImageProcessingStateType > AtomicWidefieldImageProcessingStateType
void OnMeasureHBT(DynExp::ModuleInstance *Instance, bool) const
std::chrono::system_clock::time_point SetupTransitionFinishedTimePoint
const Util::StateMachineContext< StateMachineStateType > FindingConfocalSpotRecordingWidefieldImageContext
void ResetImpl(dispatch_tag< QModuleBase >) override final
StateType AutoMeasureSampleLocalizeStateFunc(DynExp::ModuleInstance &Instance)
StateType AutoMeasureSampleCharacterizeStateFunc(DynExp::ModuleInstance &Instance)
std::list< WidefieldMicroscopeData::PositionPoint > ConfocalScanPositions
void OnGeneralSetZeroFocus(DynExp::ModuleInstance *Instance, bool) const
void OnWidefieldPumpExposureTimeChanged(DynExp::ModuleInstance *Instance, int Value) const
StateType ConfocalScanWaitUntilCapturedStateFunc(DynExp::ModuleInstance &Instance)
void InitializeConfocalOptimizer(Util::SynchronizedPointer< ModuleDataType > &ModuleData) const
StateType AutoMeasureLocalizationSaveWidefieldImageStateFunc(DynExp::ModuleInstance &Instance)
const Util::StateMachineContext< StateMachineStateType > AutoMeasureCharacterizationSpectrumContext
void OnGeneralWidefieldPowerChanged(DynExp::ModuleInstance *Instance, double Value) const
void OnAutoMeasureCellRangeFromYChanged(DynExp::ModuleInstance *Instance, int Value) const
void PrepareImageRecording(Util::SynchronizedPointer< ModuleDataType > &ModuleData) const
StateType ConfocalOptimizationStepStateFunc(DynExp::ModuleInstance &Instance)
void OnToggleLEDLightSource(DynExp::ModuleInstance *Instance, bool State) const
void OnStopAction(DynExp::ModuleInstance *Instance, bool) const
ModuleDataType::QSurfaceDataRowsType CalculateConfocalScanPositions(const int Width, const int Height, const int DistPerPixel, const WidefieldMicroscopeData::PositionPoint CenterPosition) const
void OnBringMarkerToConfocalSpot(DynExp::ModuleInstance *Instance, QPoint MarkerPos, QPointF SamplePos) const
std::promise< ConfocalOptimizationStateType > ConfocalOptimizationStatePromise
std::chrono::milliseconds GetMainLoopDelay() const override final
Specifies in which time intervals the module's event queue runs to handle pending events.
void OnWidefieldImageClicked(DynExp::ModuleInstance *Instance, QPoint Position) const
StateType AutoMeasureSampleReadCellIDStateFunc(DynExp::ModuleInstance &Instance)
void OnAutoMeasureNumOptimizationAttemptsChanged(DynExp::ModuleInstance *Instance, int Value) const
StateType ConfocalScanCaptureStateFunc(DynExp::ModuleInstance &Instance)
const Util::StateMachineContext< StateMachineStateType > AutoMeasureSampleCharacterizationOptimizationContext
StateType ConfocalScanStepStateFunc(DynExp::ModuleInstance &Instance)
void OnGeneralApplyZeroFocus(DynExp::ModuleInstance *Instance, bool) const
StateType AutoMeasureSampleFindEmittersStateFunc(DynExp::ModuleInstance &Instance)
std::filesystem::path BuildFilename(Util::SynchronizedPointer< ModuleDataType > &ModuleData, std::string_view FilenameSuffix) const
StateType LEDImageAcquisitionBeginStateFunc(DynExp::ModuleInstance &Instance)
void BringMarkerToConfocalSpot(Util::SynchronizedPointer< const ParamsType > &ModuleParams, Util::SynchronizedPointer< ModuleDataType > &ModuleData, QPoint MarkerPos, QPointF SamplePos) const
void OnAutoMeasureCellSkipXChanged(DynExp::ModuleInstance *Instance, int Value) const
void OnAutoMeasureRunSampleCharacterization(DynExp::ModuleInstance *Instance, bool) const
void OnGeneralFocusCurrentVoltageChanged(DynExp::ModuleInstance *Instance, double Value) const
void OnWidefieldFindConfocalSpot(DynExp::ModuleInstance *Instance, bool) const
StateType AutoMeasureSampleReadCellIDFinishedStateFunc(DynExp::ModuleInstance &Instance)
StateType AutoMeasureCharacterizationHBTWaitForInitStateFunc(DynExp::ModuleInstance &Instance)
StateType SpectrumAcquisitionWaitingStateFunc(DynExp::ModuleInstance &Instance)
static constexpr auto AutoMeasureLocalizationSaveWidefieldImageState
const Util::StateMachineContext< StateMachineStateType > FindingConfocalSpotBeginContext
DynExp's core class acts as the interface between the user interface and DynExp's internal data like ...
Definition DynExpCore.h:127
This class holds a pointer (LinkedObjectWrapperPointer) to a LinkedObjectWrapper. Intances of this cl...
Definition Object.h:3160
Util::CallableMemberWrapper< ModuleBase, ModuleDataTypeSyncPtrType(ModuleBase::*)(const std::chrono::milliseconds)> ModuleDataGetterType
Invoking an instance of this alias is supposed to call ModuleBase::GetModuleData() of the instance th...
Definition Module.h:587
const std::unique_ptr< ModuleDataType > ModuleData
Module data belonging to this ModuleBase instance.
Definition Module.h:743
ModuleBase(const std::thread::id OwnerThreadID, ParamsBasePtrType &&Params)
Constructs a ModuleBase instance.
Definition Module.cpp:189
Refer to ParamsBase::dispatch_tag.
Definition Module.h:189
Defines data for a thread belonging to a ModuleBase instance. Refer to RunnableInstance.
Definition Module.h:793
const std::thread::id OwnerThreadID
Thread id of the thread which has constructed (and owns) this Object instance.
Definition Object.h:2302
const ParamsBasePtrType Params
Pointer to the parameter class instance belonging to this Object instance.
Definition Object.h:2303
const auto & GetCore() const noexcept
Returns a reference to DynExp's core.
Definition Object.h:1677
const ItemIDType ID
ID of the Object this parameter class instance belongs to.
Definition Object.h:1779
const DynExpCore & Core
Reference to DynExp's core.
Definition Object.h:1780
Tag for function dispatching mechanism within this class used when derived classes are not intended t...
Definition Object.h:349
Base class for modules with a Qt-based user interface. Derive from this class to implement modules wi...
Definition Module.h:1344
void SetFocus() noexcept
Focuses/activates Widget and moves it on top of other windows if possible. Does nothing if any of Wid...
Definition Module.cpp:678
QModuleBase(const std::thread::id OwnerThreadID, DynExp::ParamsBasePtrType &&Params)
Constructs a QModuleBase instance.
Definition Module.cpp:557
Configurator class for QModuleBase.
Definition Module.h:1330
Data class for QModuleBase.
Definition Module.h:1220
Parameter class for QModuleBase.
Definition Module.h:1306
QModuleParamsBase(ItemIDType ID, const DynExpCore &Core)
Constructs the parameters for a QModuleBase instance.
Definition Module.h:1312
Holds a bitset containing flags to indicate which features a certain instrument/ module etc....
Definition Util.h:1231
void Set(EnumType Flag)
Sets a flag.
Definition Util.h:1281
bool Test(const std::array< EnumType, N > &Flags) const
Tests whether all of the flags passed as an array are set.
Definition Util.h:1257
State machine context as used by class StateMachine. A state machine context holds a map with keys an...
Definition Util.h:1362
State machine state as used by class StateMachine. A state mainly wraps a state function of the membe...
Definition Util.h:1305
This class models a state machine. It keeps track of the current state and allows to invoke its assoc...
Definition Util.h:1435
Pointer to lock a class derived from ISynchronizedPointerLockable for synchronizing between threads....
Definition Util.h:170
WidefieldMicroscopeData::PositionPoint operator-(const WidefieldMicroscopeData::PositionPoint &lhs, const WidefieldMicroscopeData::PositionPoint &rhs)
WidefieldMicroscopeData::PositionPoint operator+(const WidefieldMicroscopeData::PositionPoint &lhs, const WidefieldMicroscopeData::PositionPoint &rhs)
constexpr auto Instrument
DynExp's main namespace contains the implementation of DynExp including classes to manage resources (...
std::unique_ptr< ParamsBase > ParamsBasePtrType
Alias for a pointer to the parameter system base class ParamsBase.
Definition Object.h:1807
size_t ItemIDType
ID type of objects/items managed by DynExp.
DynExp's Util namespace contains commonly used functions and templates as well as extensions to Qt an...
std::chrono::duration< double, std::pico > picoseconds
Extends std::chrono by a duration data type for picoseconds.
Definition Util.h:762
Accumulates include statements to provide a precompiled header.
constexpr PositionPoint(PositionType x, PositionType y, PositionType z)
constexpr SPDStateType(double Value=0, bool Ready=false, size_t StreamSamplesWritten=0) noexcept