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
22#include "CommonModuleEvents.h"
23#include "../../Modules/ImageViewer/ImageViewerEvents.h"
24#include "../../Modules/SpectrumViewer/SpectrumViewerEvents.h"
25
27
29{
31 {
32 public:
42
48
51
54 using LocalizedPositionsMapType = std::map<Util::MarkerGraphicsView::MarkerType::IDType, LocalizedEmitterType>;
55 using SPDTimeType = std::chrono::milliseconds;
56
58 {
59 constexpr PositionPoint() noexcept
60 : x(0), y(0), z(0), MeasuredX(0), MeasuredY(0), MeasuredZ(0),
61 UsingX(false), UsingY(false), UsingZ(false), RowIndex(-1), ColumnIndex(-1) {}
62 constexpr PositionPoint(PositionType x) noexcept
63 : x(x), y(0), z(0), MeasuredX(0), MeasuredY(0), MeasuredZ(0),
64 UsingX(true), UsingY(false), UsingZ(false), RowIndex(-1), ColumnIndex(-1) {}
66 : x(x), y(y), z(0), MeasuredX(0), MeasuredY(0), MeasuredZ(0),
67 UsingX(true), UsingY(true), UsingZ(false), RowIndex(-1), ColumnIndex(-1) {}
69 : x(x), y(y), z(z), MeasuredX(0), MeasuredY(0), MeasuredZ(0),
70 UsingX(true), UsingY(true), UsingZ(true), RowIndex(-1), ColumnIndex(-1) {}
71
72 constexpr void Reset() noexcept;
73 constexpr bool IsEmpty() const noexcept { return !UsingX && !UsingY && !UsingZ; }
74 double DistTo(const PositionPoint& Other) const;
75
76 std::string ToStr(std::string_view Prefix = "") const;
77
81
85
86 bool UsingX;
87 bool UsingY;
88 bool UsingZ;
89
92 };
93
95 {
96 constexpr SPDStateType(double Value = 0, bool Ready = false, size_t StreamSamplesWritten = 0) noexcept
98
99 constexpr void Reset() noexcept
100 {
101 Value = 0;
102 Ready = false;
104 }
105
106 double Value;
107 bool Ready;
109 };
110
112 virtual ~WidefieldMicroscopeData() = default;
113
114 auto& GetSampleStageX() noexcept { return SampleStageX; }
115 auto& GetSampleStageX() const noexcept { return SampleStageX; }
116 auto& GetSampleStageY() noexcept { return SampleStageY; }
117 auto& GetSampleStageY() const noexcept { return SampleStageY; }
118 auto& GetSampleStageZ() noexcept { return SampleStageZ; }
119 auto& GetSampleStageZ() const noexcept { return SampleStageZ; }
120 auto& GetSampleFocusPiezoZ() noexcept { return FocusPiezoZ; }
121 auto& GetSampleFocusPiezoZ() const noexcept { return FocusPiezoZ; }
122 auto& GetLEDSwitch() noexcept { return LEDSwitch; }
123 auto& GetLEDSwitch() const noexcept { return LEDSwitch; }
124 auto& GetPumpSwitch() noexcept { return PumpSwitch; }
125 auto& GetPumpSwitch() const noexcept { return PumpSwitch; }
127 auto& GetWidefieldConfocalSwitch() const noexcept { return WidefieldConfocalSwitch; }
130 auto& GetWidefieldHBTSwitch() noexcept { return WidefieldHBTSwitch; }
131 auto& GetWidefieldHBTSwitch() const noexcept { return WidefieldHBTSwitch; }
132 auto& GetPumpPower() noexcept { return PumpPower; }
133 auto& GetPumpPower() const noexcept { return PumpPower; }
134 auto& GetPumpPowerIndicator() noexcept { return PumpPowerIndicator; }
135 auto& GetPumpPowerIndicator() const noexcept { return PumpPowerIndicator; }
136 auto& GetWidefieldCamera() noexcept { return WidefieldCamera; }
137 auto& GetWidefieldCamera() const noexcept { return WidefieldCamera; }
138 auto& GetWidefieldLocalizer() noexcept { return WidefieldLocalizer; }
139 auto& GetWidefieldLocalizer() const noexcept { return WidefieldLocalizer; }
140 auto& GetSPD1() noexcept { return SPD1; }
141 auto& GetSPD1() const noexcept { return SPD1; }
142 auto& GetSPD2() noexcept { return SPD2; }
143 auto& GetSPD2() const noexcept { return SPD2; }
145 auto& GetImageAcqCommunicator() const noexcept { return ImageAcqCommunicator; }
147 auto& GetSpectrumAcqCommunicator() const noexcept { return SpectrumAcqCommunicator; }
148 auto& GetPLEAcqCommunicator() noexcept { return PLEAcqCommunicator; }
149 auto& GetPLEAcqCommunicator() const noexcept { return PLEAcqCommunicator; }
150
151 template <size_t N>
152 bool TestFeature(const std::array<FeatureType, N>& Flags) const { return Features.Test(Flags); }
153
154 bool TestFeature(FeatureType Flag) const { return Features.Test(Flag); }
155 void SetFeature(FeatureType Flag) { Features.Set(Flag); }
156
157 std::string_view GetUIMessage() const noexcept { return UIMessage; }
158 void SetUIMessage(const std::string& Message) { UIMessage = Message; }
159 void ClearUIMessage() { UIMessage = ""; }
160
161 PositionPoint GetSamplePosition() const;
162 std::stringstream AssembleCSVHeader(bool IncludeConfocalScan, bool IncludeHBT, bool IncludeAutoMeasure) const;
163 void WriteConfocalScanResults(std::stringstream& Stream) const;
164 void WriteHBTResults(std::stringstream& Stream) const;
165
166 SetupModeType GetSetupMode() const noexcept { return SetupMode; }
167 void SetSetupMode(SetupModeType NewMode) noexcept { SetupMode = NewMode; }
168 bool GetLEDLightTurnedOn() const noexcept { return LEDLightTurnedOn; }
169 void SetLEDLightTurnedOn(bool State);
170 bool GetPumpLightTurnedOn() const noexcept { return PumpLightTurnedOn; }
171 void SetPumpLightTurnedOn(bool State);
172 double GetMinPumpPower() const noexcept { return MinPumpPower; }
173 void SetMinPumpPower(double MinPower) noexcept { MinPumpPower = MinPower; }
174 double GetMaxPumpPower() const noexcept { return MaxPumpPower; }
175 void SetMaxPumpPower(double MaxPower) noexcept { MaxPumpPower = MaxPower; }
176 double GetWidefieldPumpPower() const noexcept { return WidefieldPumpPower; }
177 void SetWidefieldPumpPower(double Power) noexcept { WidefieldPumpPower = Power; }
178 double GetConfocalPumpPower() const noexcept { return ConfocalPumpPower; }
179 void SetConfocalPumpPower(double Power) noexcept { ConfocalPumpPower = Power; }
180 double GetMeasuredPumpPower() const noexcept { return MeasuredPumpPower; }
181 void SetMeasuredPumpPower(double MeasuredPower) noexcept { MeasuredPumpPower = MeasuredPower; }
182 double GetMinFocusVoltage() const noexcept { return MinFocusVoltage; }
183 void SetMinFocusVoltage(double MinVoltage) noexcept { MinFocusVoltage = MinVoltage; }
184 double GetMaxFocusVoltage() const noexcept { return MaxFocusVoltage; }
185 void SetMaxFocusVoltage(double MaxVoltage) noexcept { MaxFocusVoltage = MaxVoltage; }
186 double GetFocusCurrentVoltage() const noexcept { return FocusCurrentVoltage; }
187 void SetFocusCurrentVoltage(double CurrentVoltage) noexcept { FocusCurrentVoltage = CurrentVoltage; }
188 double GetFocusZeroVoltage() const noexcept { return FocusZeroVoltage; }
189 void SetFocusZeroVoltage(double ZeroVoltage) noexcept { FocusZeroVoltage = ZeroVoltage; }
191 void SetFocusConfocalOffsetVoltage(double ConfocalOffsetVoltage) noexcept { FocusConfocalOffsetVoltage = ConfocalOffsetVoltage; }
192 bool IsAutofocusFinished() const noexcept { return AutofocusFinished; }
193 void SetAutofocusFinished() noexcept { AutofocusFinished = true; }
194 void ResetAutofocusFinished() noexcept { AutofocusFinished = false; }
195
204 QPoint GetConfocalSpotImagePosition() const noexcept { return ConfocalSpotImagePosition; }
205 void SetConfocalSpotImagePosition(const QPoint& Position) noexcept { ConfocalSpotImagePosition = Position; }
206 const PositionPoint& GetWidefieldPosition() const noexcept { return WidefieldPosition; }
207 void SetWidefieldPosition(const PositionPoint& Position) noexcept { WidefieldPosition = Position; }
208
209 const QImage& GetCurrentImage() const noexcept { return CurrentImage; }
210 void SetCurrentImage(QImage&& Image) { CurrentImage = std::move(Image); CurrentImageChanged = true; }
211 bool IsCurrentImageAvlbl() const { return !CurrentImage.isNull() && CurrentImageChanged; }
212 void ResetCurrentImageAvlbl() noexcept { CurrentImageChanged = false; }
213 const auto& GetCellID() const noexcept { return CurrentCellID; }
214 const auto& GetLastCellID() const noexcept { return LastCellID; }
217 void IncrementCellID();
218 void ResetCellID() { CurrentCellID = {}; LastCellID = {}; }
219 bool HasCellID() const noexcept { return CurrentCellID.Valid; }
220 auto& GetLocalizedPositions() noexcept { return LocalizedPositions; }
221 const auto& GetLocalizedPositions() const noexcept { return LocalizedPositions; }
223 size_t GetNumFailedLocalizedPositions() const;
224 void AppendLocalizedPosition(LocalizedPositionsMapType::value_type&& Position);
232
233 const PositionPoint& GetSampleHomePosition() const noexcept { return SampleHomePosition; }
234 void SetSampleHomePosition(const PositionPoint& Position) noexcept { SampleHomePosition = Position; }
235 int GetConfocalScanWidth() const noexcept { return ConfocalScanWidth; }
236 void SetConfocalScanWidth(int Width) noexcept { ConfocalScanWidth = Width; }
237 int GetConfocalScanHeight() const noexcept { return ConfocalScanHeight; }
238 void SetConfocalScanHeight(int Length) noexcept { ConfocalScanHeight = Length; }
240 void SetConfocalScanDistPerPixel(int DistPerPixel) noexcept { ConfocalScanDistPerPixel = DistPerPixel; }
241 SPDTimeType GetSPDExposureTime() const noexcept { return SPDExposureTime; }
242 void SetSPDExposureTime(SPDTimeType Time) noexcept { SPDExposureTime = Time; }
243 auto GetSPD1SamplesWritten() const noexcept { return SPD1State.StreamSamplesWritten; }
244 bool GetSPD1Ready() const noexcept { return SPD1State.Ready; }
245 auto GetSPD1Value() const noexcept { return SPD1State.Value; }
246 void SetSPD1SamplesWritten(size_t SamplesWritten) noexcept { SPD1State.StreamSamplesWritten = SamplesWritten; }
247 void SetSPD1Ready(double Value) noexcept { SPD1State.Value = Value; SPD1State.Ready = true; }
248 void ResetSPD1State() noexcept { SPD1State.Reset(); }
249 auto GetSPD2SamplesWritten() const noexcept { return SPD2State.StreamSamplesWritten; }
250 bool GetSPD2Ready() const noexcept { return SPD2State.Ready; }
251 auto GetSPD2Value() const noexcept { return SPD2State.Value; }
252 void SetSPD2SamplesWritten(size_t SamplesWritten) noexcept { SPD2State.StreamSamplesWritten = SamplesWritten; }
253 void SetSPD2Ready(double Value) noexcept { SPD2State.Value = Value; SPD2State.Ready = true; }
254 void ResetSPD2State() noexcept { SPD2State.Reset(); }
255
256 auto& GetConfocalScanResults() noexcept { return ConfocalScanResults; }
257 const auto& GetConfocalScanResults() const noexcept { return ConfocalScanResults; }
259 auto GetConfocalScanSurfacePlotRows() noexcept { return std::move(ConfocalScanSurfacePlotRows); }
260 void SetConfocalScanSurfacePlotRows(QSurfaceDataArray&& QSurfaceDataRows) noexcept { ConfocalScanSurfacePlotRows = std::move(QSurfaceDataRows); }
261 bool HasConfocalScanSurfacePlotRows() const noexcept { return !ConfocalScanSurfacePlotRows.empty(); }
263
267 void SetConfocalOptimizationInitZStepSize(double StepSize) noexcept { ConfocalOptimizationInitZStepSize = StepSize; }
269 void SetConfocalOptimizationTolerance(double Tolerance) noexcept { ConfocalOptimizationTolerance = Tolerance; }
270 double GetLastCountRate() const noexcept { return LastCountRate; }
271 void SetLastCountRate(double CountRate) noexcept { LastCountRate = CountRate; }
272
273 auto GetHBTBinWidth() const noexcept { return HBTBinWidth; }
274 void SetHBTBinWidth(Util::picoseconds BinWidth) noexcept { HBTBinWidth = BinWidth; }
275 auto GetHBTBinCount() const noexcept { return HBTBinCount; }
276 void SetHBTBinCount(size_t BinCount) noexcept { HBTBinCount = BinCount; }
277 auto GetHBTMaxIntegrationTime() const noexcept { return HBTMaxIntegrationTime; }
278 void SetHBTMaxIntegrationTime(std::chrono::microseconds MaxIntegrationTime) noexcept { HBTMaxIntegrationTime = MaxIntegrationTime; }
279 const PositionPoint& GetHBTSamplePosition() const noexcept { return HBTSamplePosition; }
280 void SetHBTSamplePosition(const PositionPoint& Position) noexcept { HBTSamplePosition = Position; }
281 auto GetHBTNumEventCounts() const noexcept { return HBTNumEventCounts; }
282 void SetHBTNumEventCounts(long long NumEventCounts) noexcept { HBTNumEventCounts = NumEventCounts; }
283 auto GetHBTTotalIntegrationTime() const noexcept { return HBTTotalIntegrationTime; }
284 void SetHBTTotalIntegrationTime(std::chrono::microseconds TotalIntegrationTime) noexcept { HBTTotalIntegrationTime = TotalIntegrationTime; }
285 auto& GetHBTDataPoints() noexcept { return HBTDataPoints; }
286 const auto& GetHBTDataPoints() const noexcept { return HBTDataPoints; }
288 auto GetHBTDataPointsMinValues() const noexcept { return HBTDataPointsMinValues; }
289 void SetHBTDataPointsMinValues(const QPointF& DataPointsMinValues) noexcept { HBTDataPointsMinValues = DataPointsMinValues; }
290 auto GetHBTDataPointsMaxValues() const noexcept { return HBTDataPointsMaxValues; }
291 void SetHBTDataPointsMaxValues(const QPointF& DataPointsMaxValues) noexcept { HBTDataPointsMaxValues = DataPointsMaxValues; }
292
293 bool IsAutoMeasureRunning() const noexcept { return AutoMeasureRunning; }
294 void SetAutoMeasureRunning(bool Running) noexcept { AutoMeasureRunning = Running; }
295 std::filesystem::path GetAutoMeasureSavePath() const;
296 void SetAutoMeasureSavePath(std::filesystem::path SavePath) noexcept { AutoMeasureSavePath = SavePath; }
300 void SetAutoMeasureNumberImageSets(int NumberImageSets) noexcept { AutoMeasureNumberImageSets = NumberImageSets; }
304 std::chrono::seconds GetAutoMeasureInitialImageSetWaitTime() const noexcept { return AutoMeasureInitialImageSetWaitTime; }
305 void SetAutoMeasureInitialImageSetWaitTime(std::chrono::seconds Time) noexcept { AutoMeasureInitialImageSetWaitTime = Time; }
307 void SetAutoMeasureImagePositionScatterRadius(int ScatterRadius) noexcept { AutoMeasureImagePositionScatterRadius = ScatterRadius; }
311 auto SetAutoMeasureWidefieldPLEEnabled(bool Enabled) noexcept { AutoMeasureWidefieldPLEEnabled = Enabled; }
313 void SetAutoMeasureOptimizeEnabled(bool Enabled) noexcept { AutoMeasureOptimizeEnabled = Enabled; }
315 void SetAutoMeasureSpectrumEnabled(bool Enabled) noexcept { AutoMeasureSpectrumEnabled = Enabled; }
317 auto SetAutoMeasureConfocalPLEEnabled(bool Enabled) noexcept { AutoMeasureConfocalPLEEnabled = Enabled; }
318 auto GetAutoMeasureHBTEnabled() const noexcept { return AutoMeasureHBTEnabled; }
319 void SetAutoMeasureHBTEnabled(bool Enabled) noexcept { AutoMeasureHBTEnabled = Enabled; }
321 void SetAutoMeasureNumOptimizationAttempts(int NumOptimizationAttempts) noexcept { AutoMeasureNumOptimizationAttempts = NumOptimizationAttempts; }
326 void SetAutoMeasureMaxOptimizationReruns(int MaxOptimizationReruns) noexcept { AutoMeasureMaxOptimizationReruns = MaxOptimizationReruns; }
331 void SetAutoMeasureOptimizationMaxDistance(int OptimizationMaxDistance) noexcept { AutoMeasureOptimizationMaxDistance = OptimizationMaxDistance; }
333 void SetAutoMeasureCountRateThreshold(int CountRateThreshold) noexcept { AutoMeasureCountRateThreshold = CountRateThreshold; }
334 auto& GetAutoMeasureCellRangeFrom() const noexcept { return AutoMeasureCellRangeFrom; }
336 auto& GetAutoMeasureCellRangeTo() const noexcept { return AutoMeasureCellRangeTo; }
338 bool IsCellRangeValid() const noexcept;
339 int GetAutoMeasureCellLineLength() const noexcept;
340 int GetAutoMeasureCellColumnLength() const noexcept;
341 int GetAutoMeasureCellCount() const noexcept;
343 auto& GetAutoMeasureCellSkip() const noexcept { return AutoMeasureCellSkip; }
344 auto& GetAutoMeasureCellSkip() noexcept { return AutoMeasureCellSkip; }
346 void SetAutoMeasureSampleRotated(bool IsRotated) noexcept { AutoMeasureSampleRotated = IsRotated; }
347 auto GetAutoMeasureFirstEmitter() const noexcept { return AutoMeasureFirstEmitter; }
350 void ResetAutoMeasureCurrentEmitter() noexcept;
352
353 private:
354 void ResetImpl(dispatch_tag<QModuleDataBase>) override final;
356
357 void Init();
358
377
379 std::string UIMessage;
380
381 // General
396
397 // Widefield imaging
404
412
413 // Confocal scanning
421
422 // Confocal optimization
427
428 // vector of pairs <sample stage positions in nm, count rate in Hz>
429 std::vector<std::pair<PositionPoint, double>> ConfocalScanResults;
431
432 // HBT
435 std::chrono::microseconds HBTMaxIntegrationTime;
438 std::chrono::microseconds HBTTotalIntegrationTime;
439
440 // x is time in ps, y is g2.
441 QList<QPointF> HBTDataPoints;
444
445 // Auto measure
447 std::filesystem::path AutoMeasureSavePath;
469 LocalizedPositionsMapType::iterator AutoMeasureFirstEmitter;
470 LocalizedPositionsMapType::iterator AutoMeasureCurrentEmitter;
471 };
472
475
477 {
478 public:
480 virtual ~WidefieldMicroscopeParams() = default;
481
482 virtual const char* GetParamClassTag() const noexcept override { return "WidefieldMicroscopeParams"; }
483
485 "SampleStageX", "Sample stage X", "Positioner to move sample along x coordinate", DynExpUI::Icons::Instrument, true };
487 "SampleStageY", "Sample stage Y", "Positioner to move sample along y coordinate", DynExpUI::Icons::Instrument, true };
489 "SampleStageZ", "Sample stage Z", "Positioner to move sample along z coordinate", DynExpUI::Icons::Instrument, true };
491 "FocusPiezoZ", "Focusing piezo (AO)", "Piezo to adjust the focus of the microscope", DynExpUI::Icons::Instrument, true };
493 "LEDSwitch", "LED switch (DO)", "Digital switch to turn the LED light source on and off", DynExpUI::Icons::Instrument, true };
495 "PumpSwitch", "Pump switch (DO)", "Digital switch to turn the pump light source on and off", DynExpUI::Icons::Instrument, true };
497 "WidefieldConfocalSwitch", "Widefield/confocal mode switch (DO)",
498 "Digital switch to change from widefield mode (LOW) to confocal mode (HIGH)", DynExpUI::Icons::Instrument, true };
500 "WidefieldConfocalIndicator", "Widefield/confocal mode indicator (DI)",
501 "Digital indicator which is LOW if in widefield mode and HIGH if in confocal mode", DynExpUI::Icons::Instrument, true };
502 Param<ParamsConfigDialog::NumberType> WidefieldConfocalTransitionTime = { *this, "WidefieldConfocalTransitionTime",
503 "Widefield/confocal transition time (ms)",
504 "Time it takes to transition from widefield to confocal mode or vice versa once the widefield/confocal mode switch has been triggered",
505 false, 500, 0, 10000, 10, 0 };
507 "WidefieldHBTSwitch", "Spectrometer/HBT mode switch (DO)",
508 "Digital switch to change from spectrometer mode (LOW) to HBT mode (HIGH)", DynExpUI::Icons::Instrument, true };
510 "Spectrometer/HBT transition time (ms)",
511 "Time it takes to transition from spectrometer to HBT mode or vice versa once the spectrometer/HBT mode switch has been triggered",
512 false, 500, 0, 10000, 10, 0 };
514 "PumpPower", "Pump power (AO)", "Analog output to adjust the power of the pump light source", DynExpUI::Icons::Instrument, true };
516 "PumpPowerIndicator", "Pump power indicator (AI)", "Analog input to measure the current power of the pump light source",
518 Param<ParamsConfigDialog::NumberType> DefaultPowerWidefieldMode = { *this, "DefaultPowerWidefieldMode", "Default pump power (widefield mode)",
519 "Defines the pump power in units of the pump power (AO) parameter which is initially used in the widefield mode",
520 true, 1, 0, std::numeric_limits<ParamsConfigDialog::NumberType>::max(), .1, 3 };
521 Param<ParamsConfigDialog::NumberType> DefaultPowerConfocalMode = { *this, "DefaultPowerConfocalMode", "Default pump power (confocal mode)",
522 "Defines the pump power in units of the pump power (AO) parameter which is initially used in the confocal mode",
523 true, .1, 0, std::numeric_limits<ParamsConfigDialog::NumberType>::max(), .1, 3 };
525 "WidefieldCamera", "Widefield camera", "Camera to record widefield images of the sample", DynExpUI::Icons::Instrument, true };
527 "WidefieldLocalizer", "Widefield localizer", "gRPC service to perform widefield localization of emitters within a recorded camera image",
529 Param<ParamsConfigDialog::NumberType> WidefieldCameraMagnification = { *this, "WidefieldCameraMagnification", "Widefield camera magnification factor",
530 "Magnification factor of the optical system between the sample and the widefield camera",
531 false, 100, .01, 10000, 1, 2 };
533 "SPD1", "SPD 1", "First single photon detector for confocal light collection", DynExpUI::Icons::Instrument, true };
535 "SPD2", "SPD 2", "Second single photon detector for confocal light collection", DynExpUI::Icons::Instrument, true };
537 "ImageAcqInterModuleCommunicator", "Image acq. inter-module communicator", "Inter-module communicator to control image capturing modules", DynExpUI::Icons::Instrument, true };
539 "SpectrumAcqInterModuleCommunicator", "Spectrum acq. inter-module communicator", "Inter-module communicator to control spectrum acquisition modules", DynExpUI::Icons::Instrument, true };
541 "PLEAcqInterModuleCommunicator", "PLE acq. inter-module communicator", "Inter-module communicator to control PLE acquisition modules", DynExpUI::Icons::Instrument, true };
542
543 private:
545 };
546
548 {
549 public:
552
555
556 private:
557 virtual DynExp::ParamsBasePtrType MakeParams(DynExp::ItemIDType ID, const DynExp::DynExpCore& Core) const override final { return DynExp::MakeParams<WidefieldMicroscopeConfigurator>(ID, Core); }
558 };
559
561 {
564
565 using AtomicPositionerStateType = std::atomic<PositionerStateType>;
566 using AtomicWidefieldImageProcessingStateType = std::atomic<WidefieldImageProcessingStateType>;
567
568 public:
572
573 constexpr static auto Name() noexcept { return "Widefield Microscope"; }
574 constexpr static auto Category() noexcept { return "Experiments"; }
575
577 virtual ~WidefieldMicroscope();
578
579 virtual std::string GetName() const override { return Name(); }
580 virtual std::string GetCategory() const override { return Category(); }
581
582 std::chrono::milliseconds GetMainLoopDelay() const override final;
583
584 void RegisterConfocalGraphEvents(DynExpQuick::DynExpSurfaceGraphBackend* ConfocalGraph);
585
586 // Events which the UI thread might enqueue.
587 void OnSaveCurrentImage(DynExp::ModuleInstance* Instance, QString Filename) const;
588 void OnGoToSamplePos(DynExp::ModuleInstance* Instance, QPointF SamplePos) const;
589 void OnBringMarkerToConfocalSpot(DynExp::ModuleInstance* Instance, QPoint MarkerPos, QPointF SamplePos) const;
590 void OnRunCharacterizationFromID(DynExp::ModuleInstance* Instance, Util::MarkerGraphicsView::MarkerType::IDType ID) const;
591
592 private:
593 Util::DynExpErrorCodes::DynExpErrorCodes ModuleMainLoop(DynExp::ModuleInstance& Instance) override final;
594
595 void ResetImpl(dispatch_tag<QModuleBase>) override final;
596
597 std::unique_ptr<DynExp::QModuleWidget> MakeUIWidget() override final;
598 void UpdateUIChild(const ModuleBase::ModuleDataGetterType& ModuleDataGetter) override final;
599
600 // Helper functions
601 // ->
602 template <typename PosT>
603 static ModuleDataType::PositionPoint PositionPointFromPixelDist(Util::SynchronizedPointer<const ParamsType>& ModuleParams, Util::SynchronizedPointer<ModuleDataType>& ModuleData,
604 const PosT x, const PosT y)
605 {
606 return {
607 Util::NumToT<WidefieldMicroscopeData::PositionType>(x * ModuleData->GetWidefieldCamera()->GetPixelSizeInMicrons() * 1000 / ModuleParams->WidefieldCameraMagnification),
608 Util::NumToT<WidefieldMicroscopeData::PositionType>(y * ModuleData->GetWidefieldCamera()->GetPixelSizeInMicrons() * 1000 / ModuleParams->WidefieldCameraMagnification)
609 };
610 }
611
612 bool IsReadyState() const noexcept { return StateMachine.GetCurrentState()->GetState() == StateType::Ready; }
614 bool IsCharacterizingSample() const noexcept;
615 void MoveSampleTo(const ModuleDataType::PositionPoint& Point, Util::SynchronizedPointer<ModuleDataType>& ModuleData) const;
616 bool IsSampleMoving(Util::SynchronizedPointer<ModuleDataType>& ModuleData) const;
617 void SetFocus(Util::SynchronizedPointer<ModuleDataType>& ModuleData, double Voltage, bool IgnoreOffset = false) const;
618 ModuleDataType::PositionPoint CalcMarkerToConfocalSpotDestiny(Util::SynchronizedPointer<const ParamsType>& ModuleParams, Util::SynchronizedPointer<ModuleDataType>& ModuleData,
619 QPoint MarkerPos, QPointF SamplePos) const;
620 void BringMarkerToConfocalSpot(Util::SynchronizedPointer<const ParamsType>& ModuleParams, Util::SynchronizedPointer<ModuleDataType>& ModuleData,
621 QPoint MarkerPos, QPointF SamplePos) const;
622 QSurfaceDataArray CalculateConfocalScanPositions(const int Width, const int Height,
623 const int DistPerPixel, const WidefieldMicroscopeData::PositionPoint CenterPosition) const;
624 void UpdatePumpPower(Util::SynchronizedPointer<ModuleDataType>& ModuleData) const;
625 void PrepareImageRecording(Util::SynchronizedPointer<ModuleDataType>& ModuleData) const;
626 void RecordImage(Util::SynchronizedPointer<ModuleDataType>& ModuleData) const;
629 void PrepareAPDsForConfocalMode(Util::SynchronizedPointer<ModuleDataType>& ModuleData) const;
630 void InitializeConfocalOptimizer(Util::SynchronizedPointer<ModuleDataType>& ModuleData) const;
631 void SetHBTSwitch(Util::SynchronizedPointer<const ParamsType>& ModuleParams,
632 Util::SynchronizedPointer<ModuleDataType>& ModuleData, bool IsHBTMode) const;
633 void InitializeHBT(Util::SynchronizedPointer<ModuleDataType>& ModuleData) const;
634 void StopHBT(Util::SynchronizedPointer<ModuleDataType>& ModuleData) const;
635 StateType StartAutofocus(Util::SynchronizedPointer<ModuleDataType>& ModuleData) const;
637 StateType StartAutoMeasureCharacterization(Util::SynchronizedPointer<ModuleDataType>& ModuleData, Util::MarkerGraphicsView::MarkerType::IDType FirstEmitterID = -1) const;
639 std::filesystem::path BuildFilename(Util::SynchronizedPointer<ModuleDataType>& ModuleData, std::string_view FilenameSuffix) const;
640 ModuleDataType::PositionPoint RandomPointInCircle(ModuleDataType::PositionType Radius) const;
641 // <-
642
643 // Function and types for automatical optimization of the sample's position to maximize the count rate
644 // ->
651
653
655
658 static double ConfocalOptimizationFuncForwarder(const gsl_vector* vector, void* params);
659 double ConfocalOptimizationFunc(const gsl_vector* vector) noexcept;
660 // <-
661
662 // Events, run in module thread
663 void OnInit(DynExp::ModuleInstance* Instance) const override final;
664 void OnExit(DynExp::ModuleInstance* Instance) const override final;
665 void OnTerminate(DynExp::ModuleInstance* Instance, bool) const;
666 void OnStopAction(DynExp::ModuleInstance* Instance, bool) const;
667 void OnSetHomePosition(DynExp::ModuleInstance* Instance, bool) const;
668 void OnGoToHomePosition(DynExp::ModuleInstance* Instance, bool) const;
669 void OnToggleLEDLightSource(DynExp::ModuleInstance* Instance, bool State) const;
670 void OnTogglePumpLightSource(DynExp::ModuleInstance* Instance, bool State) const;
671 void OnSetupModeChanged(DynExp::ModuleInstance* Instance, QAction* Action) const;
672 void OnAutofocus(DynExp::ModuleInstance* Instance, bool) const;
673 void OnOptimizePositions(DynExp::ModuleInstance* Instance, bool) const;
674 void OnToggleHBTMirror(DynExp::ModuleInstance* Instance, bool Checked) const;
675 void OnResetCellID(DynExp::ModuleInstance* Instance, bool) const;
676 void OnGeneralWidefieldPowerChanged(DynExp::ModuleInstance* Instance, double Value) const;
677 void OnGeneralConfocalPowerChanged(DynExp::ModuleInstance* Instance, double Value) const;
678 void OnGeneralFocusCurrentVoltageChanged(DynExp::ModuleInstance* Instance, double Value) const;
679 void OnGeneralFocusZeroVoltageChanged(DynExp::ModuleInstance* Instance, double Value) const;
680 void OnGeneralFocusConfocalOffsetVoltageChanged(DynExp::ModuleInstance* Instance, double Value) const;
681 void OnGeneralSetZeroFocus(DynExp::ModuleInstance* Instance, bool) const;
682 void OnGeneralApplyZeroFocus(DynExp::ModuleInstance* Instance, bool) const;
683 void OnWidefieldLEDExposureTimeChanged(DynExp::ModuleInstance* Instance, int Value) const;
685 void OnWidefieldPumpExposureTimeChanged(DynExp::ModuleInstance* Instance, int Value) const;
687 void OnWidefieldFindConfocalSpot(DynExp::ModuleInstance* Instance, bool) const;
688 void OnCaptureLEDImage(DynExp::ModuleInstance* Instance, bool) const;
689 void OnCaptureWidefieldImage(DynExp::ModuleInstance* Instance, bool) const;
690 void OnWidefieldReadCellID(DynExp::ModuleInstance* Instance, bool) const;
692 void OnWidefieldLocalizeEmitters(DynExp::ModuleInstance* Instance, bool) const;
693 void OnWidefieldImageClicked(DynExp::ModuleInstance* Instance, QPoint Position) const;
694 void OnConfocalConfocalWidthChanged(DynExp::ModuleInstance* Instance, int Value) const;
695 void OnConfocalConfocalHeightChanged(DynExp::ModuleInstance* Instance, int Value) const;
696 void OnConfocalConfocalDistPerPixelChanged(DynExp::ModuleInstance* Instance, int Value) const;
697 void OnConfocalSPDExposureTimeChanged(DynExp::ModuleInstance* Instance, int Value) const;
699 void OnConfocalOptimizationInitZStepSizeChanged(DynExp::ModuleInstance* Instance, double Value) const;
700 void OnConfocalOptimizationToleranceChanged(DynExp::ModuleInstance* Instance, double Value) const;
701 void OnPerformConfocalScan(DynExp::ModuleInstance* Instance, bool) const;
702 void ConfocalSurfaceSelectedPointChanged(DynExp::ModuleInstance* Instance, QPoint Position) const;
703 void OnHBTBinWidthChanged(DynExp::ModuleInstance* Instance, int Value) const;
704 void OnHBTBinCountChanged(DynExp::ModuleInstance* Instance, int Value) const;
705 void OnHHBTMaxIntegrationTimeChanged(DynExp::ModuleInstance* Instance, double Value) const;
706 void OnMeasureHBT(DynExp::ModuleInstance* Instance, bool) const;
708 void OnFinishedAutofocus(DynExp::ModuleInstance* Instance, bool Success, double Voltage) const;
711 void OnAutoMeasureSavePathChanged(DynExp::ModuleInstance* Instance, QString Path) const;
712 void OnAutoMeasureNumberImageSetsChanged(DynExp::ModuleInstance* Instance, int Value) const;
715 void OnAutoMeasureLocalizationTypeChanged(DynExp::ModuleInstance* Instance, int Value) const;
716 void OnToggleAutoMeasureWidefieldPLEEnabled(DynExp::ModuleInstance* Instance, bool State) const;
717 void OnToggleAutoMeasureOptimizeEnabled(DynExp::ModuleInstance* Instance, bool State) const;
718 void OnToggleAutoMeasureSpectrumEnabled(DynExp::ModuleInstance* Instance, bool State) const;
719 void OnToggleAutoMeasureConfocalPLEEnabled(DynExp::ModuleInstance* Instance, bool State) const;
720 void OnToggleAutoMeasureHBTEnabled(DynExp::ModuleInstance* Instance, bool State) const;
724 void OnAutoMeasureCountRateThresholdChanged(DynExp::ModuleInstance* Instance, int Value) const;
725 void OnAutoMeasureCellRangeFromXChanged(DynExp::ModuleInstance* Instance, int Value) const;
726 void OnAutoMeasureCellRangeFromYChanged(DynExp::ModuleInstance* Instance, int Value) const;
727 void OnAutoMeasureCellRangeToXChanged(DynExp::ModuleInstance* Instance, int Value) const;
728 void OnAutoMeasureCellRangeToYChanged(DynExp::ModuleInstance* Instance, int Value) const;
729 void OnAutoMeasureCellSkipXChanged(DynExp::ModuleInstance* Instance, int Value) const;
730 void OnAutoMeasureCellSkipYChanged(DynExp::ModuleInstance* Instance, int Value) const;
731 void OnToggleAutoMeasureSampleRotated(DynExp::ModuleInstance* Instance, Qt::CheckState State) const;
732 void OnAutoMeasureRunLocalization(DynExp::ModuleInstance* Instance, bool) const;
735
736 // State functions for state machine
790
791 // States for state machine
793 &WidefieldMicroscope::InitializingStateFunc, "Initializing module...");
813 &WidefieldMicroscope::WidefieldImageAcquisitionBeginStateFunc, "Recording widefield image...");
817 &WidefieldMicroscope::WaitingForImageStateFunc, "Recording LED image...");
821 &WidefieldMicroscope::WaitingForImageReadyToCaptureStateFunc, "Recording widefield image...");
823 &WidefieldMicroscope::WaitingForImageStateFunc, "Recording widefield image...");
827 &WidefieldMicroscope::WaitingForWidefieldCellIDStateFunc, "Waiting for cell ID to be read from image...");
829 &WidefieldMicroscope::WidefieldCellWaitUntilCenteredStateFunc, "Waiting for cell to be centered in FOV...");
833 &WidefieldMicroscope::WaitingForWidefieldLocalizationStateFunc, "Waiting for localization of emitters from image...");
843 &WidefieldMicroscope::ConfocalScanStepStateFunc, "Performing confocal scan...");
845 &WidefieldMicroscope::ConfocalScanWaitUntilMovedStateFunc, "Performing confocal scan...");
847 &WidefieldMicroscope::ConfocalScanCaptureStateFunc, "Performing confocal scan...");
861 &WidefieldMicroscope::HBTAcquiringStateFunc, "HBT acquiring...");
869 &WidefieldMicroscope::PLEAcquisitionWaitingStateFunc, "Performing widefield PLE...");
883 &WidefieldMicroscope::AutoMeasureLocalizationMovingStateFunc, "Moving to next image capturing position...");
928
929 // Contexts for state machine
1001
1002 // Logical const-ness: allow events to set the state machine's current state.
1004
1005 // shared_ptr since in principle PositionerStages' tasks can outlive this module instance.
1006 const std::shared_ptr<AtomicPositionerStateType> ConfocalScanPositionerStateX;
1007 const std::shared_ptr<AtomicPositionerStateType> ConfocalScanPositionerStateY;
1008 const std::shared_ptr<AtomicPositionerStateType> ConfocalScanPositionerStateZ;
1009
1010 // shared_ptr since in principle WidefieldLocalizer's tasks can outlive this module instance.
1011 const std::shared_ptr<AtomicWidefieldImageProcessingStateType> WidefieldCellIDState;
1012 const std::shared_ptr<AtomicWidefieldImageProcessingStateType> WidefieldLocalizationState;
1013
1014 mutable std::list<WidefieldMicroscopeData::PositionPoint> ConfocalScanPositions;
1015
1016 // Variables for automatical optimization of the sample's position to maximize the count rate
1017 static constexpr size_t GSLConfocalOptimizationNumDimensions = 3;
1018 const gsl_multimin_fminimizer_type* const GSLConfocalOptimizationMinimizer = gsl_multimin_fminimizer_nmsimplex2;
1020 gsl_multimin_fminimizer* const GSLConfocalOptimizationState;
1023 mutable std::atomic<size_t> ConfocalOptimizationNumStepsPerformed = 0; // To be accessed by ConfocalOptimizationThread and WidefieldMicroscope thread.
1024 mutable std::atomic_bool ConfocalOptimizationPromisesRenewed = false; // To be accessed by ConfocalOptimizationThread and WidefieldMicroscope thread.
1025 std::promise<ConfocalOptimizationStateType> ConfocalOptimizationStatePromise; // To be solely accessed by ConfocalOptimizationThread.
1026 std::future<ConfocalOptimizationStateType> ConfocalOptimizationStateFuture; // To be solely accessed by WidefieldMicroscope thread.
1027 mutable std::promise<ConfocalOptimizationFeedbackType> ConfocalOptimizationFeedbackPromise; // To be solely accessed by WidefieldMicroscope thread.
1028 std::future<ConfocalOptimizationFeedbackType> ConfocalOptimizationFeedbackFuture; // To be solely accessed by ConfocalOptimizationThread.
1029 std::future<ConfocalOptimizationThreadReturnType> ConfocalOptimizationThreadReturnFuture; // To be solely accessed by WidefieldMicroscope thread.
1030
1031 // Variables for switching from a confocal to a widefield setup.
1032 std::chrono::system_clock::time_point SetupTransitionFinishedTimePoint;
1034
1035 // Variables for widefield image capturing.
1036 mutable bool ImageCapturingPaused = false;
1037
1038 // Variables for managing wait times within measurements.
1039 mutable std::chrono::system_clock::time_point WaitingEndTimePoint;
1040 mutable std::chrono::microseconds HBTIntegrationTimeBeforeReset{ 0 };
1041
1042 // General
1044 mutable bool LogUIMessagesOnly = false;
1045 };
1046}
Provides common events for inter-module communication. Also refer to DynExp::InterModuleEventBase.
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)
DynExp::LinkedObjectWrapperContainer< DynExpInstr::InterModuleCommunicator > ImageAcqCommunicator
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.
DynExp::LinkedObjectWrapperContainer< DynExpInstr::InterModuleCommunicator > SpectrumAcqCommunicator
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
DynExp::LinkedObjectWrapperContainer< DynExpInstr::DigitalOut > WidefieldHBTSwitch
void SetConfocalScanSurfacePlotRows(QSurfaceDataArray &&QSurfaceDataRows) 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
QPoint ConfocalSpotImagePosition
Location of confocal spot in units of px within widefield image.
DynExp::LinkedObjectWrapperContainer< DynExpInstr::InterModuleCommunicator > PLEAcqCommunicator
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
void SetAutoMeasureSampleRotated(bool IsRotated) noexcept
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
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::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
auto SetAutoMeasureWidefieldPLEEnabled(bool Enabled) noexcept
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< DynExp::ObjectLink< DynExpInstr::InterModuleCommunicator > > SpectrumAcqCommunicator
void ConfigureParamsImpl(dispatch_tag< QModuleParamsBase >) override final
Param< DynExp::ObjectLink< DynExpInstr::InterModuleCommunicator > > PLEAcqCommunicator
Param< DynExp::ObjectLink< DynExpInstr::DigitalOut > > WidefieldConfocalSwitch
Param< DynExp::ObjectLink< DynExpInstr::AnalogOut > > PumpPower
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::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< DynExp::ObjectLink< DynExpInstr::DigitalOut > > WidefieldHBTSwitch
Param< ParamsConfigDialog::NumberType > WidefieldCameraMagnification
Param< DynExp::ObjectLink< DynExpInstr::AnalogOut > > FocusPiezoZ
Param< DynExp::ObjectLink< DynExpInstr::InterModuleCommunicator > > ImageAcqCommunicator
Param< DynExp::ObjectLink< DynExpInstr::TimeTagger > > SPD1
static constexpr auto AutoMeasureCharacterizationPLEFinishedState
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 OnToggleAutoMeasureWidefieldPLEEnabled(DynExp::ModuleInstance *Instance, bool State) 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 PLEAcquisitionWaitingStateFunc(DynExp::ModuleInstance &Instance)
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
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)
const Util::StateMachineContext< StateMachineStateType > AutoMeasureSampleCharacterizationPLEContext
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)
StateType AutoMeasureCharacterizationPLEFinishedStateFunc(DynExp::ModuleInstance &Instance)
const Util::StateMachineContext< StateMachineStateType > AutofocusSetupTransitioningContext
StateType AutoMeasureLocalizationPLEFinishedStateFunc(DynExp::ModuleInstance &Instance)
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 OnConfocalConfocalHeightChanged(DynExp::ModuleInstance *Instance, int Value) const
StateType AutoMeasureCharacterizationPLEBeginStateFunc(DynExp::ModuleInstance &Instance)
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
const Util::StateMachineContext< StateMachineStateType > AutoMeasureCharacterizationPLEContext
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
const Util::StateMachineContext< StateMachineStateType > AutoMeasureCharacterizationContext
void OnHHBTMaxIntegrationTimeChanged(DynExp::ModuleInstance *Instance, double Value) const
QSurfaceDataArray CalculateConfocalScanPositions(const int Width, const int Height, const int DistPerPixel, const WidefieldMicroscopeData::PositionPoint CenterPosition) 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
void OnPLEAcquisitionFinished(DynExp::ModuleInstance *Instance) const
StateType SetupTransitionBeginStateFunc(DynExp::ModuleInstance &Instance)
StateType SetupTransitioningStateFunc(DynExp::ModuleInstance &Instance)
Util::StateMachine< StateMachineStateType > StateMachine
void OnToggleAutoMeasureOptimizeEnabled(DynExp::ModuleInstance *Instance, bool State) const
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 RegisterConfocalGraphEvents(DynExpQuick::DynExpSurfaceGraphBackend *ConfocalGraph)
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
void OnToggleAutoMeasureSampleRotated(DynExp::ModuleInstance *Instance, Qt::CheckState State) 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 OnToggleAutoMeasureHBTEnabled(DynExp::ModuleInstance *Instance, bool State) const
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
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 OnToggleAutoMeasureConfocalPLEEnabled(DynExp::ModuleInstance *Instance, bool State) const
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
StateType AutoMeasureLocalizationPLEBeginStateFunc(DynExp::ModuleInstance &Instance)
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
void OnToggleAutoMeasureSpectrumEnabled(DynExp::ModuleInstance *Instance, bool State) const
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:3176
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:625
const std::unique_ptr< ModuleDataType > ModuleData
Module data belonging to this ModuleBase instance.
Definition Module.h:789
ModuleBase(const std::thread::id OwnerThreadID, ParamsBasePtrType &&Params)
Constructs a ModuleBase instance.
Definition Module.cpp:206
Refer to ParamsBase::dispatch_tag.
Definition Module.h:192
Defines data for a thread belonging to a ModuleBase instance. Refer to RunnableInstance.
Definition Module.h:841
const std::thread::id OwnerThreadID
Thread id of the thread which has constructed (and owns) this Object instance.
Definition Object.h:2310
const ParamsBasePtrType Params
Pointer to the parameter class instance belonging to this Object instance.
Definition Object.h:2311
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:1668
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:738
QModuleBase(const std::thread::id OwnerThreadID, DynExp::ParamsBasePtrType &&Params)
Constructs a QModuleBase instance.
Definition Module.cpp:604
Configurator class for QModuleBase.
Definition Module.h:1654
Data class for QModuleBase.
Definition Module.h:1544
Parameter class for QModuleBase.
Definition Module.h:1630
QModuleParamsBase(ItemIDType ID, const DynExpCore &Core)
Constructs the parameters for a QModuleBase instance.
Definition Module.h:1636
Holds a bitset containing flags to indicate which features a certain instrument/ module etc....
Definition Util.h:1289
void Set(EnumType Flag)
Sets a flag.
Definition Util.h:1339
bool Test(const std::array< EnumType, N > &Flags) const
Tests whether all of the flags passed as an array are set.
Definition Util.h:1315
State machine context as used by class StateMachine. A state machine context holds a map with keys an...
Definition Util.h:1420
State machine state as used by class StateMachine. A state mainly wraps a state function of the membe...
Definition Util.h:1363
This class models a state machine. It keeps track of the current state and allows to invoke its assoc...
Definition Util.h:1493
Pointer to lock a class derived from ISynchronizedPointerLockable for synchronizing between threads....
Definition Util.h:171
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:623
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