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 using QSurfaceDataRowsType = std::vector<std::unique_ptr<QSurfaceDataRow>>;
57
59 {
60 constexpr PositionPoint() noexcept
61 : x(0), y(0), z(0), MeasuredX(0), MeasuredY(0), MeasuredZ(0),
62 UsingX(false), UsingY(false), UsingZ(false), RowIndex(-1), ColumnIndex(-1) {}
63 constexpr PositionPoint(PositionType x) noexcept
64 : x(x), y(0), z(0), MeasuredX(0), MeasuredY(0), MeasuredZ(0),
65 UsingX(true), UsingY(false), UsingZ(false), RowIndex(-1), ColumnIndex(-1) {}
67 : x(x), y(y), z(0), MeasuredX(0), MeasuredY(0), MeasuredZ(0),
68 UsingX(true), UsingY(true), UsingZ(false), RowIndex(-1), ColumnIndex(-1) {}
70 : x(x), y(y), z(z), MeasuredX(0), MeasuredY(0), MeasuredZ(0),
71 UsingX(true), UsingY(true), UsingZ(true), RowIndex(-1), ColumnIndex(-1) {}
72
73 constexpr void Reset() noexcept;
74 constexpr bool IsEmpty() const noexcept { return !UsingX && !UsingY && !UsingZ; }
75 double DistTo(const PositionPoint& Other) const;
76
77 std::string ToStr(std::string_view Prefix = "") const;
78
82
86
87 bool UsingX;
88 bool UsingY;
89 bool UsingZ;
90
93 };
94
96 {
97 constexpr SPDStateType(double Value = 0, bool Ready = false, size_t StreamSamplesWritten = 0) noexcept
99
100 constexpr void Reset() noexcept
101 {
102 Value = 0;
103 Ready = false;
105 }
106
107 double Value;
108 bool Ready;
110 };
111
113 virtual ~WidefieldMicroscopeData() = default;
114
115 auto& GetSampleStageX() noexcept { return SampleStageX; }
116 auto& GetSampleStageX() const noexcept { return SampleStageX; }
117 auto& GetSampleStageY() noexcept { return SampleStageY; }
118 auto& GetSampleStageY() const noexcept { return SampleStageY; }
119 auto& GetSampleStageZ() noexcept { return SampleStageZ; }
120 auto& GetSampleStageZ() const noexcept { return SampleStageZ; }
121 auto& GetSampleFocusPiezoZ() noexcept { return FocusPiezoZ; }
122 auto& GetSampleFocusPiezoZ() const noexcept { return FocusPiezoZ; }
123 auto& GetLEDSwitch() noexcept { return LEDSwitch; }
124 auto& GetLEDSwitch() const noexcept { return LEDSwitch; }
125 auto& GetPumpSwitch() noexcept { return PumpSwitch; }
126 auto& GetPumpSwitch() const noexcept { return PumpSwitch; }
128 auto& GetWidefieldConfocalSwitch() const noexcept { return WidefieldConfocalSwitch; }
131 auto& GetWidefieldHBTSwitch() noexcept { return WidefieldHBTSwitch; }
132 auto& GetWidefieldHBTSwitch() const noexcept { return WidefieldHBTSwitch; }
133 auto& GetPumpPower() noexcept { return PumpPower; }
134 auto& GetPumpPower() const noexcept { return PumpPower; }
135 auto& GetPumpPowerIndicator() noexcept { return PumpPowerIndicator; }
136 auto& GetPumpPowerIndicator() const noexcept { return PumpPowerIndicator; }
137 auto& GetWidefieldCamera() noexcept { return WidefieldCamera; }
138 auto& GetWidefieldCamera() const noexcept { return WidefieldCamera; }
139 auto& GetWidefieldLocalizer() noexcept { return WidefieldLocalizer; }
140 auto& GetWidefieldLocalizer() const noexcept { return WidefieldLocalizer; }
141 auto& GetSPD1() noexcept { return SPD1; }
142 auto& GetSPD1() const noexcept { return SPD1; }
143 auto& GetSPD2() noexcept { return SPD2; }
144 auto& GetSPD2() const noexcept { return SPD2; }
146 auto& GetImageAcqCommunicator() const noexcept { return ImageAcqCommunicator; }
148 auto& GetSpectrumAcqCommunicator() const noexcept { return SpectrumAcqCommunicator; }
149 auto& GetPLEAcqCommunicator() noexcept { return PLEAcqCommunicator; }
150 auto& GetPLEAcqCommunicator() const noexcept { return PLEAcqCommunicator; }
151
152 template <size_t N>
153 bool TestFeature(const std::array<FeatureType, N>& Flags) const { return Features.Test(Flags); }
154
155 bool TestFeature(FeatureType Flag) const { return Features.Test(Flag); }
156 void SetFeature(FeatureType Flag) { Features.Set(Flag); }
157
158 std::string_view GetUIMessage() const noexcept { return UIMessage; }
159 void SetUIMessage(const std::string& Message) { UIMessage = Message; }
160 void ClearUIMessage() { UIMessage = ""; }
161
162 PositionPoint GetSamplePosition() const;
163 std::stringstream AssembleCSVHeader(bool IncludeConfocalScan, bool IncludeHBT, bool IncludeAutoMeasure) const;
164 void WriteConfocalScanResults(std::stringstream& Stream) const;
165 void WriteHBTResults(std::stringstream& Stream) const;
166
167 SetupModeType GetSetupMode() const noexcept { return SetupMode; }
168 void SetSetupMode(SetupModeType NewMode) noexcept { SetupMode = NewMode; }
169 bool GetLEDLightTurnedOn() const noexcept { return LEDLightTurnedOn; }
170 void SetLEDLightTurnedOn(bool State);
171 bool GetPumpLightTurnedOn() const noexcept { return PumpLightTurnedOn; }
172 void SetPumpLightTurnedOn(bool State);
173 double GetMinPumpPower() const noexcept { return MinPumpPower; }
174 void SetMinPumpPower(double MinPower) noexcept { MinPumpPower = MinPower; }
175 double GetMaxPumpPower() const noexcept { return MaxPumpPower; }
176 void SetMaxPumpPower(double MaxPower) noexcept { MaxPumpPower = MaxPower; }
177 double GetWidefieldPumpPower() const noexcept { return WidefieldPumpPower; }
178 void SetWidefieldPumpPower(double Power) noexcept { WidefieldPumpPower = Power; }
179 double GetConfocalPumpPower() const noexcept { return ConfocalPumpPower; }
180 void SetConfocalPumpPower(double Power) noexcept { ConfocalPumpPower = Power; }
181 double GetMeasuredPumpPower() const noexcept { return MeasuredPumpPower; }
182 void SetMeasuredPumpPower(double MeasuredPower) noexcept { MeasuredPumpPower = MeasuredPower; }
183 double GetMinFocusVoltage() const noexcept { return MinFocusVoltage; }
184 void SetMinFocusVoltage(double MinVoltage) noexcept { MinFocusVoltage = MinVoltage; }
185 double GetMaxFocusVoltage() const noexcept { return MaxFocusVoltage; }
186 void SetMaxFocusVoltage(double MaxVoltage) noexcept { MaxFocusVoltage = MaxVoltage; }
187 double GetFocusCurrentVoltage() const noexcept { return FocusCurrentVoltage; }
188 void SetFocusCurrentVoltage(double CurrentVoltage) noexcept { FocusCurrentVoltage = CurrentVoltage; }
189 double GetFocusZeroVoltage() const noexcept { return FocusZeroVoltage; }
190 void SetFocusZeroVoltage(double ZeroVoltage) noexcept { FocusZeroVoltage = ZeroVoltage; }
192 void SetFocusConfocalOffsetVoltage(double ConfocalOffsetVoltage) noexcept { FocusConfocalOffsetVoltage = ConfocalOffsetVoltage; }
193 bool IsAutofocusFinished() const noexcept { return AutofocusFinished; }
194 void SetAutofocusFinished() noexcept { AutofocusFinished = true; }
195 void ResetAutofocusFinished() noexcept { AutofocusFinished = false; }
196
205 QPoint GetConfocalSpotImagePosition() const noexcept { return ConfocalSpotImagePosition; }
206 void SetConfocalSpotImagePosition(const QPoint& Position) noexcept { ConfocalSpotImagePosition = Position; }
207 const PositionPoint& GetWidefieldPosition() const noexcept { return WidefieldPosition; }
208 void SetWidefieldPosition(const PositionPoint& Position) noexcept { WidefieldPosition = Position; }
209
210 const QImage& GetCurrentImage() const noexcept { return CurrentImage; }
211 void SetCurrentImage(QImage&& Image) { CurrentImage = std::move(Image); CurrentImageChanged = true; }
212 bool IsCurrentImageAvlbl() const { return !CurrentImage.isNull() && CurrentImageChanged; }
213 void ResetCurrentImageAvlbl() noexcept { CurrentImageChanged = false; }
214 const auto& GetCellID() const noexcept { return CurrentCellID; }
215 const auto& GetLastCellID() const noexcept { return LastCellID; }
218 void IncrementCellID();
219 void ResetCellID() { CurrentCellID = {}; LastCellID = {}; }
220 bool HasCellID() const noexcept { return CurrentCellID.Valid; }
221 auto& GetLocalizedPositions() noexcept { return LocalizedPositions; }
222 const auto& GetLocalizedPositions() const noexcept { return LocalizedPositions; }
224 size_t GetNumFailedLocalizedPositions() const;
225 void AppendLocalizedPosition(LocalizedPositionsMapType::value_type&& Position);
233
234 const PositionPoint& GetSampleHomePosition() const noexcept { return SampleHomePosition; }
235 void SetSampleHomePosition(const PositionPoint& Position) noexcept { SampleHomePosition = Position; }
236 int GetConfocalScanWidth() const noexcept { return ConfocalScanWidth; }
237 void SetConfocalScanWidth(int Width) noexcept { ConfocalScanWidth = Width; }
238 int GetConfocalScanHeight() const noexcept { return ConfocalScanHeight; }
239 void SetConfocalScanHeight(int Length) noexcept { ConfocalScanHeight = Length; }
241 void SetConfocalScanDistPerPixel(int DistPerPixel) noexcept { ConfocalScanDistPerPixel = DistPerPixel; }
242 SPDTimeType GetSPDExposureTime() const noexcept { return SPDExposureTime; }
243 void SetSPDExposureTime(SPDTimeType Time) noexcept { SPDExposureTime = Time; }
244 auto GetSPD1SamplesWritten() const noexcept { return SPD1State.StreamSamplesWritten; }
245 bool GetSPD1Ready() const noexcept { return SPD1State.Ready; }
246 auto GetSPD1Value() const noexcept { return SPD1State.Value; }
247 void SetSPD1SamplesWritten(size_t SamplesWritten) noexcept { SPD1State.StreamSamplesWritten = SamplesWritten; }
248 void SetSPD1Ready(double Value) noexcept { SPD1State.Value = Value; SPD1State.Ready = true; }
249 void ResetSPD1State() noexcept { SPD1State.Reset(); }
250 auto GetSPD2SamplesWritten() const noexcept { return SPD2State.StreamSamplesWritten; }
251 bool GetSPD2Ready() const noexcept { return SPD2State.Ready; }
252 auto GetSPD2Value() const noexcept { return SPD2State.Value; }
253 void SetSPD2SamplesWritten(size_t SamplesWritten) noexcept { SPD2State.StreamSamplesWritten = SamplesWritten; }
254 void SetSPD2Ready(double Value) noexcept { SPD2State.Value = Value; SPD2State.Ready = true; }
255 void ResetSPD2State() noexcept { SPD2State.Reset(); }
256
257 auto& GetConfocalScanResults() noexcept { return ConfocalScanResults; }
258 const auto& GetConfocalScanResults() const noexcept { return ConfocalScanResults; }
260 auto GetConfocalScanSurfacePlotRows() noexcept { return std::move(ConfocalScanSurfacePlotRows); }
261 void SetConfocalScanSurfacePlotRows(QSurfaceDataRowsType&& QSurfaceDataRows) noexcept { ConfocalScanSurfacePlotRows = std::move(QSurfaceDataRows); }
262 bool HasConfocalScanSurfacePlotRows() const noexcept { return !ConfocalScanSurfacePlotRows.empty(); }
264
268 void SetConfocalOptimizationInitZStepSize(double StepSize) noexcept { ConfocalOptimizationInitZStepSize = StepSize; }
270 void SetConfocalOptimizationTolerance(double Tolerance) noexcept { ConfocalOptimizationTolerance = Tolerance; }
271 double GetLastCountRate() const noexcept { return LastCountRate; }
272 void SetLastCountRate(double CountRate) noexcept { LastCountRate = CountRate; }
273
274 auto GetHBTBinWidth() const noexcept { return HBTBinWidth; }
275 void SetHBTBinWidth(Util::picoseconds BinWidth) noexcept { HBTBinWidth = BinWidth; }
276 auto GetHBTBinCount() const noexcept { return HBTBinCount; }
277 void SetHBTBinCount(size_t BinCount) noexcept { HBTBinCount = BinCount; }
278 auto GetHBTMaxIntegrationTime() const noexcept { return HBTMaxIntegrationTime; }
279 void SetHBTMaxIntegrationTime(std::chrono::microseconds MaxIntegrationTime) noexcept { HBTMaxIntegrationTime = MaxIntegrationTime; }
280 const PositionPoint& GetHBTSamplePosition() const noexcept { return HBTSamplePosition; }
281 void SetHBTSamplePosition(const PositionPoint& Position) noexcept { HBTSamplePosition = Position; }
282 auto GetHBTNumEventCounts() const noexcept { return HBTNumEventCounts; }
283 void SetHBTNumEventCounts(long long NumEventCounts) noexcept { HBTNumEventCounts = NumEventCounts; }
284 auto GetHBTTotalIntegrationTime() const noexcept { return HBTTotalIntegrationTime; }
285 void SetHBTTotalIntegrationTime(std::chrono::microseconds TotalIntegrationTime) noexcept { HBTTotalIntegrationTime = TotalIntegrationTime; }
286 auto& GetHBTDataPoints() noexcept { return HBTDataPoints; }
287 const auto& GetHBTDataPoints() const noexcept { return HBTDataPoints; }
289 auto GetHBTDataPointsMinValues() const noexcept { return HBTDataPointsMinValues; }
290 void SetHBTDataPointsMinValues(const QPointF& DataPointsMinValues) noexcept { HBTDataPointsMinValues = DataPointsMinValues; }
291 auto GetHBTDataPointsMaxValues() const noexcept { return HBTDataPointsMaxValues; }
292 void SetHBTDataPointsMaxValues(const QPointF& DataPointsMaxValues) noexcept { HBTDataPointsMaxValues = DataPointsMaxValues; }
293
294 bool IsAutoMeasureRunning() const noexcept { return AutoMeasureRunning; }
295 void SetAutoMeasureRunning(bool Running) noexcept { AutoMeasureRunning = Running; }
296 std::filesystem::path GetAutoMeasureSavePath() const;
297 void SetAutoMeasureSavePath(std::filesystem::path SavePath) noexcept { AutoMeasureSavePath = SavePath; }
301 void SetAutoMeasureNumberImageSets(int NumberImageSets) noexcept { AutoMeasureNumberImageSets = NumberImageSets; }
305 std::chrono::seconds GetAutoMeasureInitialImageSetWaitTime() const noexcept { return AutoMeasureInitialImageSetWaitTime; }
306 void SetAutoMeasureInitialImageSetWaitTime(std::chrono::seconds Time) noexcept { AutoMeasureInitialImageSetWaitTime = Time; }
308 void SetAutoMeasureImagePositionScatterRadius(int ScatterRadius) noexcept { AutoMeasureImagePositionScatterRadius = ScatterRadius; }
312 auto SetAutoMeasureWidefieldPLEEnabled(bool Enabled) noexcept { AutoMeasureWidefieldPLEEnabled = Enabled; }
314 void SetAutoMeasureOptimizeEnabled(bool Enabled) noexcept { AutoMeasureOptimizeEnabled = Enabled; }
316 void SetAutoMeasureSpectrumEnabled(bool Enabled) noexcept { AutoMeasureSpectrumEnabled = Enabled; }
318 auto SetAutoMeasureConfocalPLEEnabled(bool Enabled) noexcept { AutoMeasureConfocalPLEEnabled = Enabled; }
319 auto GetAutoMeasureHBTEnabled() const noexcept { return AutoMeasureHBTEnabled; }
320 void SetAutoMeasureHBTEnabled(bool Enabled) noexcept { AutoMeasureHBTEnabled = Enabled; }
322 void SetAutoMeasureNumOptimizationAttempts(int NumOptimizationAttempts) noexcept { AutoMeasureNumOptimizationAttempts = NumOptimizationAttempts; }
327 void SetAutoMeasureMaxOptimizationReruns(int MaxOptimizationReruns) noexcept { AutoMeasureMaxOptimizationReruns = MaxOptimizationReruns; }
332 void SetAutoMeasureOptimizationMaxDistance(int OptimizationMaxDistance) noexcept { AutoMeasureOptimizationMaxDistance = OptimizationMaxDistance; }
334 void SetAutoMeasureCountRateThreshold(int CountRateThreshold) noexcept { AutoMeasureCountRateThreshold = CountRateThreshold; }
335 auto& GetAutoMeasureCellRangeFrom() const noexcept { return AutoMeasureCellRangeFrom; }
337 auto& GetAutoMeasureCellRangeTo() const noexcept { return AutoMeasureCellRangeTo; }
339 bool IsCellRangeValid() const noexcept;
340 int GetAutoMeasureCellLineLength() const noexcept;
341 int GetAutoMeasureCellColumnLength() const noexcept;
342 int GetAutoMeasureCellCount() const noexcept;
344 auto& GetAutoMeasureCellSkip() const noexcept { return AutoMeasureCellSkip; }
345 auto& GetAutoMeasureCellSkip() noexcept { return AutoMeasureCellSkip; }
347 void SetAutoMeasureSampleRotated(bool IsRotated) noexcept { AutoMeasureSampleRotated = IsRotated; }
348 auto GetAutoMeasureFirstEmitter() const noexcept { return AutoMeasureFirstEmitter; }
351 void ResetAutoMeasureCurrentEmitter() noexcept;
353
354 private:
355 void ResetImpl(dispatch_tag<QModuleDataBase>) override final;
357
358 void Init();
359
378
380 std::string UIMessage;
381
382 // General
397
398 // Widefield imaging
405
413
414 // Confocal scanning
422
423 // Confocal optimization
428
429 // vector of pairs <sample stage positions in nm, count rate in Hz>
430 std::vector<std::pair<PositionPoint, double>> ConfocalScanResults;
432
433 // HBT
436 std::chrono::microseconds HBTMaxIntegrationTime;
439 std::chrono::microseconds HBTTotalIntegrationTime;
440
441 // x is time in ps, y is g2.
442 QList<QPointF> HBTDataPoints;
445
446 // Auto measure
448 std::filesystem::path AutoMeasureSavePath;
470 LocalizedPositionsMapType::iterator AutoMeasureFirstEmitter;
471 LocalizedPositionsMapType::iterator AutoMeasureCurrentEmitter;
472 };
473
476
478 {
479 public:
481 virtual ~WidefieldMicroscopeParams() = default;
482
483 virtual const char* GetParamClassTag() const noexcept override { return "WidefieldMicroscopeParams"; }
484
486 "SampleStageX", "Sample stage X", "Positioner to move sample along x coordinate", DynExpUI::Icons::Instrument, true };
488 "SampleStageY", "Sample stage Y", "Positioner to move sample along y coordinate", DynExpUI::Icons::Instrument, true };
490 "SampleStageZ", "Sample stage Z", "Positioner to move sample along z coordinate", DynExpUI::Icons::Instrument, true };
492 "FocusPiezoZ", "Focusing piezo (AO)", "Piezo to adjust the focus of the microscope", DynExpUI::Icons::Instrument, true };
494 "LEDSwitch", "LED switch (DO)", "Digital switch to turn the LED light source on and off", DynExpUI::Icons::Instrument, true };
496 "PumpSwitch", "Pump switch (DO)", "Digital switch to turn the pump light source on and off", DynExpUI::Icons::Instrument, true };
498 "WidefieldConfocalSwitch", "Widefield/confocal mode switch (DO)",
499 "Digital switch to change from widefield mode (LOW) to confocal mode (HIGH)", DynExpUI::Icons::Instrument, true };
501 "WidefieldConfocalIndicator", "Widefield/confocal mode indicator (DI)",
502 "Digital indicator which is LOW if in widefield mode and HIGH if in confocal mode", DynExpUI::Icons::Instrument, true };
503 Param<ParamsConfigDialog::NumberType> WidefieldConfocalTransitionTime = { *this, "WidefieldConfocalTransitionTime",
504 "Widefield/confocal transition time (ms)",
505 "Time it takes to transition from widefield to confocal mode or vice versa once the widefield/confocal mode switch has been triggered",
506 false, 500, 0, 10000, 10, 0 };
508 "WidefieldHBTSwitch", "Spectrometer/HBT mode switch (DO)",
509 "Digital switch to change from spectrometer mode (LOW) to HBT mode (HIGH)", DynExpUI::Icons::Instrument, true };
511 "Spectrometer/HBT transition time (ms)",
512 "Time it takes to transition from spectrometer to HBT mode or vice versa once the spectrometer/HBT mode switch has been triggered",
513 false, 500, 0, 10000, 10, 0 };
515 "PumpPower", "Pump power (AO)", "Analog output to adjust the power of the pump light source", DynExpUI::Icons::Instrument, true };
517 "PumpPowerIndicator", "Pump power indicator (AI)", "Analog input to measure the current power of the pump light source",
519 Param<ParamsConfigDialog::NumberType> DefaultPowerWidefieldMode = { *this, "DefaultPowerWidefieldMode", "Default pump power (widefield mode)",
520 "Defines the pump power in units of the pump power (AO) parameter which is initially used in the widefield mode",
521 true, 1, 0, std::numeric_limits<ParamsConfigDialog::NumberType>::max(), .1, 3 };
522 Param<ParamsConfigDialog::NumberType> DefaultPowerConfocalMode = { *this, "DefaultPowerConfocalMode", "Default pump power (confocal mode)",
523 "Defines the pump power in units of the pump power (AO) parameter which is initially used in the confocal mode",
524 true, .1, 0, std::numeric_limits<ParamsConfigDialog::NumberType>::max(), .1, 3 };
526 "WidefieldCamera", "Widefield camera", "Camera to record widefield images of the sample", DynExpUI::Icons::Instrument, true };
528 "WidefieldLocalizer", "Widefield localizer", "gRPC service to perform widefield localization of emitters within a recorded camera image",
530 Param<ParamsConfigDialog::NumberType> WidefieldCameraMagnification = { *this, "WidefieldCameraMagnification", "Widefield camera magnification factor",
531 "Magnification factor of the optical system between the sample and the widefield camera",
532 false, 100, .01, 10000, 1, 2 };
534 "SPD1", "SPD 1", "First single photon detector for confocal light collection", DynExpUI::Icons::Instrument, true };
536 "SPD2", "SPD 2", "Second single photon detector for confocal light collection", DynExpUI::Icons::Instrument, true };
538 "ImageAcqInterModuleCommunicator", "Image acq. inter-module communicator", "Inter-module communicator to control image capturing modules", DynExpUI::Icons::Instrument, true };
540 "SpectrumAcqInterModuleCommunicator", "Spectrum acq. inter-module communicator", "Inter-module communicator to control spectrum acquisition modules", DynExpUI::Icons::Instrument, true };
542 "PLEAcqInterModuleCommunicator", "PLE acq. inter-module communicator", "Inter-module communicator to control PLE acquisition modules", DynExpUI::Icons::Instrument, true };
543
544 private:
546 };
547
549 {
550 public:
553
556
557 private:
558 virtual DynExp::ParamsBasePtrType MakeParams(DynExp::ItemIDType ID, const DynExp::DynExpCore& Core) const override final { return DynExp::MakeParams<WidefieldMicroscopeConfigurator>(ID, Core); }
559 };
560
562 {
565
566 using AtomicPositionerStateType = std::atomic<PositionerStateType>;
567 using AtomicWidefieldImageProcessingStateType = std::atomic<WidefieldImageProcessingStateType>;
568
569 public:
573
574 constexpr static auto Name() noexcept { return "Widefield Microscope"; }
575 constexpr static auto Category() noexcept { return "Experiments"; }
576
578 virtual ~WidefieldMicroscope();
579
580 virtual std::string GetName() const override { return Name(); }
581 virtual std::string GetCategory() const override { return Category(); }
582
583 std::chrono::milliseconds GetMainLoopDelay() const override final;
584
585 // Events which the UI thread might enqueue.
586 void OnSaveCurrentImage(DynExp::ModuleInstance* Instance, QString Filename) const;
587 void OnGoToSamplePos(DynExp::ModuleInstance* Instance, QPointF SamplePos) const;
588 void OnBringMarkerToConfocalSpot(DynExp::ModuleInstance* Instance, QPoint MarkerPos, QPointF SamplePos) const;
589 void OnRunCharacterizationFromID(DynExp::ModuleInstance* Instance, Util::MarkerGraphicsView::MarkerType::IDType ID) const;
590
591 private:
592 Util::DynExpErrorCodes::DynExpErrorCodes ModuleMainLoop(DynExp::ModuleInstance& Instance) override final;
593
594 void ResetImpl(dispatch_tag<QModuleBase>) override final;
595
596 std::unique_ptr<DynExp::QModuleWidget> MakeUIWidget() override final;
597 void UpdateUIChild(const ModuleBase::ModuleDataGetterType& ModuleDataGetter) override final;
598
599 // Helper functions
600 // ->
601 template <typename PosT>
602 static ModuleDataType::PositionPoint PositionPointFromPixelDist(Util::SynchronizedPointer<const ParamsType>& ModuleParams, Util::SynchronizedPointer<ModuleDataType>& ModuleData,
603 const PosT x, const PosT y)
604 {
605 return {
606 Util::NumToT<WidefieldMicroscopeData::PositionType>(x * ModuleData->GetWidefieldCamera()->GetPixelSizeInMicrons() * 1000 / ModuleParams->WidefieldCameraMagnification),
607 Util::NumToT<WidefieldMicroscopeData::PositionType>(y * ModuleData->GetWidefieldCamera()->GetPixelSizeInMicrons() * 1000 / ModuleParams->WidefieldCameraMagnification)
608 };
609 }
610
611 bool IsReadyState() const noexcept { return StateMachine.GetCurrentState()->GetState() == StateType::Ready; }
613 bool IsCharacterizingSample() const noexcept;
614 void MoveSampleTo(const ModuleDataType::PositionPoint& Point, Util::SynchronizedPointer<ModuleDataType>& ModuleData) const;
615 bool IsSampleMoving(Util::SynchronizedPointer<ModuleDataType>& ModuleData) const;
616 void SetFocus(Util::SynchronizedPointer<ModuleDataType>& ModuleData, double Voltage, bool IgnoreOffset = false) const;
617 ModuleDataType::PositionPoint CalcMarkerToConfocalSpotDestiny(Util::SynchronizedPointer<const ParamsType>& ModuleParams, Util::SynchronizedPointer<ModuleDataType>& ModuleData,
618 QPoint MarkerPos, QPointF SamplePos) const;
619 void BringMarkerToConfocalSpot(Util::SynchronizedPointer<const ParamsType>& ModuleParams, Util::SynchronizedPointer<ModuleDataType>& ModuleData,
620 QPoint MarkerPos, QPointF SamplePos) const;
621 ModuleDataType::QSurfaceDataRowsType CalculateConfocalScanPositions(const int Width, const int Height,
622 const int DistPerPixel, const WidefieldMicroscopeData::PositionPoint CenterPosition) const;
623 void UpdatePumpPower(Util::SynchronizedPointer<ModuleDataType>& ModuleData) const;
624 void PrepareImageRecording(Util::SynchronizedPointer<ModuleDataType>& ModuleData) const;
625 void RecordImage(Util::SynchronizedPointer<ModuleDataType>& ModuleData) const;
628 void PrepareAPDsForConfocalMode(Util::SynchronizedPointer<ModuleDataType>& ModuleData) const;
629 void InitializeConfocalOptimizer(Util::SynchronizedPointer<ModuleDataType>& ModuleData) const;
630 void SetHBTSwitch(Util::SynchronizedPointer<const ParamsType>& ModuleParams,
631 Util::SynchronizedPointer<ModuleDataType>& ModuleData, bool IsHBTMode) const;
632 void InitializeHBT(Util::SynchronizedPointer<ModuleDataType>& ModuleData) const;
633 void StopHBT(Util::SynchronizedPointer<ModuleDataType>& ModuleData) const;
634 StateType StartAutofocus(Util::SynchronizedPointer<ModuleDataType>& ModuleData) const;
636 StateType StartAutoMeasureCharacterization(Util::SynchronizedPointer<ModuleDataType>& ModuleData, Util::MarkerGraphicsView::MarkerType::IDType FirstEmitterID = -1) const;
638 std::filesystem::path BuildFilename(Util::SynchronizedPointer<ModuleDataType>& ModuleData, std::string_view FilenameSuffix) const;
639 ModuleDataType::PositionPoint RandomPointInCircle(ModuleDataType::PositionType Radius) const;
640 // <-
641
642 // Function and types for automatical optimization of the sample's position to maximize the count rate
643 // ->
650
652
654
657 static double ConfocalOptimizationFuncForwarder(const gsl_vector* vector, void* params);
658 double ConfocalOptimizationFunc(const gsl_vector* vector) noexcept;
659 // <-
660
661 // Events, run in module thread
662 void OnInit(DynExp::ModuleInstance* Instance) const override final;
663 void OnExit(DynExp::ModuleInstance* Instance) const override final;
664 void OnTerminate(DynExp::ModuleInstance* Instance, bool) const;
665 void OnStopAction(DynExp::ModuleInstance* Instance, bool) const;
666 void OnSetHomePosition(DynExp::ModuleInstance* Instance, bool) const;
667 void OnGoToHomePosition(DynExp::ModuleInstance* Instance, bool) const;
668 void OnToggleLEDLightSource(DynExp::ModuleInstance* Instance, bool State) const;
669 void OnTogglePumpLightSource(DynExp::ModuleInstance* Instance, bool State) const;
670 void OnSetupModeChanged(DynExp::ModuleInstance* Instance, QAction* Action) const;
671 void OnAutofocus(DynExp::ModuleInstance* Instance, bool) const;
672 void OnOptimizePositions(DynExp::ModuleInstance* Instance, bool) const;
673 void OnToggleHBTMirror(DynExp::ModuleInstance* Instance, bool Checked) const;
674 void OnResetCellID(DynExp::ModuleInstance* Instance, bool) const;
675 void OnGeneralWidefieldPowerChanged(DynExp::ModuleInstance* Instance, double Value) const;
676 void OnGeneralConfocalPowerChanged(DynExp::ModuleInstance* Instance, double Value) const;
677 void OnGeneralFocusCurrentVoltageChanged(DynExp::ModuleInstance* Instance, double Value) const;
678 void OnGeneralFocusZeroVoltageChanged(DynExp::ModuleInstance* Instance, double Value) const;
679 void OnGeneralFocusConfocalOffsetVoltageChanged(DynExp::ModuleInstance* Instance, double Value) const;
680 void OnGeneralSetZeroFocus(DynExp::ModuleInstance* Instance, bool) const;
681 void OnGeneralApplyZeroFocus(DynExp::ModuleInstance* Instance, bool) const;
682 void OnWidefieldLEDExposureTimeChanged(DynExp::ModuleInstance* Instance, int Value) const;
684 void OnWidefieldPumpExposureTimeChanged(DynExp::ModuleInstance* Instance, int Value) const;
686 void OnWidefieldFindConfocalSpot(DynExp::ModuleInstance* Instance, bool) const;
687 void OnCaptureLEDImage(DynExp::ModuleInstance* Instance, bool) const;
688 void OnCaptureWidefieldImage(DynExp::ModuleInstance* Instance, bool) const;
689 void OnWidefieldReadCellID(DynExp::ModuleInstance* Instance, bool) const;
691 void OnWidefieldLocalizeEmitters(DynExp::ModuleInstance* Instance, bool) const;
692 void OnWidefieldImageClicked(DynExp::ModuleInstance* Instance, QPoint Position) const;
693 void OnConfocalConfocalWidthChanged(DynExp::ModuleInstance* Instance, int Value) const;
694 void OnConfocalConfocalHeightChanged(DynExp::ModuleInstance* Instance, int Value) const;
695 void OnConfocalConfocalDistPerPixelChanged(DynExp::ModuleInstance* Instance, int Value) const;
696 void OnConfocalSPDExposureTimeChanged(DynExp::ModuleInstance* Instance, int Value) const;
698 void OnConfocalOptimizationInitZStepSizeChanged(DynExp::ModuleInstance* Instance, double Value) const;
699 void OnConfocalOptimizationToleranceChanged(DynExp::ModuleInstance* Instance, double Value) const;
700 void OnPerformConfocalScan(DynExp::ModuleInstance* Instance, bool) const;
701 void ConfocalSurfaceSelectedPointChanged(DynExp::ModuleInstance* Instance, QPoint Position) const;
702 void OnHBTBinWidthChanged(DynExp::ModuleInstance* Instance, int Value) const;
703 void OnHBTBinCountChanged(DynExp::ModuleInstance* Instance, int Value) const;
704 void OnHHBTMaxIntegrationTimeChanged(DynExp::ModuleInstance* Instance, double Value) const;
705 void OnMeasureHBT(DynExp::ModuleInstance* Instance, bool) const;
707 void OnFinishedAutofocus(DynExp::ModuleInstance* Instance, bool Success, double Voltage) const;
710 void OnAutoMeasureSavePathChanged(DynExp::ModuleInstance* Instance, QString Path) const;
711 void OnAutoMeasureNumberImageSetsChanged(DynExp::ModuleInstance* Instance, int Value) const;
714 void OnAutoMeasureLocalizationTypeChanged(DynExp::ModuleInstance* Instance, int Value) const;
715 void OnToggleAutoMeasureWidefieldPLEEnabled(DynExp::ModuleInstance* Instance, bool State) const;
716 void OnToggleAutoMeasureOptimizeEnabled(DynExp::ModuleInstance* Instance, bool State) const;
717 void OnToggleAutoMeasureSpectrumEnabled(DynExp::ModuleInstance* Instance, bool State) const;
718 void OnToggleAutoMeasureConfocalPLEEnabled(DynExp::ModuleInstance* Instance, bool State) const;
719 void OnToggleAutoMeasureHBTEnabled(DynExp::ModuleInstance* Instance, bool State) const;
723 void OnAutoMeasureCountRateThresholdChanged(DynExp::ModuleInstance* Instance, int Value) const;
724 void OnAutoMeasureCellRangeFromXChanged(DynExp::ModuleInstance* Instance, int Value) const;
725 void OnAutoMeasureCellRangeFromYChanged(DynExp::ModuleInstance* Instance, int Value) const;
726 void OnAutoMeasureCellRangeToXChanged(DynExp::ModuleInstance* Instance, int Value) const;
727 void OnAutoMeasureCellRangeToYChanged(DynExp::ModuleInstance* Instance, int Value) const;
728 void OnAutoMeasureCellSkipXChanged(DynExp::ModuleInstance* Instance, int Value) const;
729 void OnAutoMeasureCellSkipYChanged(DynExp::ModuleInstance* Instance, int Value) const;
730 void OnToggleAutoMeasureSampleRotated(DynExp::ModuleInstance* Instance, Qt::CheckState State) const;
731 void OnAutoMeasureRunLocalization(DynExp::ModuleInstance* Instance, bool) const;
734
735 // State functions for state machine
789
790 // States for state machine
792 &WidefieldMicroscope::InitializingStateFunc, "Initializing module...");
812 &WidefieldMicroscope::WidefieldImageAcquisitionBeginStateFunc, "Recording widefield image...");
816 &WidefieldMicroscope::WaitingForImageStateFunc, "Recording LED image...");
820 &WidefieldMicroscope::WaitingForImageReadyToCaptureStateFunc, "Recording widefield image...");
822 &WidefieldMicroscope::WaitingForImageStateFunc, "Recording widefield image...");
826 &WidefieldMicroscope::WaitingForWidefieldCellIDStateFunc, "Waiting for cell ID to be read from image...");
828 &WidefieldMicroscope::WidefieldCellWaitUntilCenteredStateFunc, "Waiting for cell to be centered in FOV...");
832 &WidefieldMicroscope::WaitingForWidefieldLocalizationStateFunc, "Waiting for localization of emitters from image...");
842 &WidefieldMicroscope::ConfocalScanStepStateFunc, "Performing confocal scan...");
844 &WidefieldMicroscope::ConfocalScanWaitUntilMovedStateFunc, "Performing confocal scan...");
846 &WidefieldMicroscope::ConfocalScanCaptureStateFunc, "Performing confocal scan...");
860 &WidefieldMicroscope::HBTAcquiringStateFunc, "HBT acquiring...");
868 &WidefieldMicroscope::PLEAcquisitionWaitingStateFunc, "Performing widefield PLE...");
882 &WidefieldMicroscope::AutoMeasureLocalizationMovingStateFunc, "Moving to next image capturing position...");
927
928 // Contexts for state machine
1000
1001 // Logical const-ness: allow events to set the state machine's current state.
1003
1004 // shared_ptr since in principle PositionerStages' tasks can outlive this module instance.
1005 const std::shared_ptr<AtomicPositionerStateType> ConfocalScanPositionerStateX;
1006 const std::shared_ptr<AtomicPositionerStateType> ConfocalScanPositionerStateY;
1007 const std::shared_ptr<AtomicPositionerStateType> ConfocalScanPositionerStateZ;
1008
1009 // shared_ptr since in principle WidefieldLocalizer's tasks can outlive this module instance.
1010 const std::shared_ptr<AtomicWidefieldImageProcessingStateType> WidefieldCellIDState;
1011 const std::shared_ptr<AtomicWidefieldImageProcessingStateType> WidefieldLocalizationState;
1012
1013 mutable std::list<WidefieldMicroscopeData::PositionPoint> ConfocalScanPositions;
1014
1015 // Variables for automatical optimization of the sample's position to maximize the count rate
1016 static constexpr size_t GSLConfocalOptimizationNumDimensions = 3;
1017 const gsl_multimin_fminimizer_type* const GSLConfocalOptimizationMinimizer = gsl_multimin_fminimizer_nmsimplex2;
1019 gsl_multimin_fminimizer* const GSLConfocalOptimizationState;
1022 mutable std::atomic<size_t> ConfocalOptimizationNumStepsPerformed = 0; // To be accessed by ConfocalOptimizationThread and WidefieldMicroscope thread.
1023 mutable std::atomic_bool ConfocalOptimizationPromisesRenewed = false; // To be accessed by ConfocalOptimizationThread and WidefieldMicroscope thread.
1024 std::promise<ConfocalOptimizationStateType> ConfocalOptimizationStatePromise; // To be solely accessed by ConfocalOptimizationThread.
1025 std::future<ConfocalOptimizationStateType> ConfocalOptimizationStateFuture; // To be solely accessed by WidefieldMicroscope thread.
1026 mutable std::promise<ConfocalOptimizationFeedbackType> ConfocalOptimizationFeedbackPromise; // To be solely accessed by WidefieldMicroscope thread.
1027 std::future<ConfocalOptimizationFeedbackType> ConfocalOptimizationFeedbackFuture; // To be solely accessed by ConfocalOptimizationThread.
1028 std::future<ConfocalOptimizationThreadReturnType> ConfocalOptimizationThreadReturnFuture; // To be solely accessed by WidefieldMicroscope thread.
1029
1030 // Variables for switching from a confocal to a widefield setup.
1031 std::chrono::system_clock::time_point SetupTransitionFinishedTimePoint;
1033
1034 // Variables for widefield image capturing.
1035 mutable bool ImageCapturingPaused = false;
1036
1037 // Variables for managing wait times within measurements.
1038 mutable std::chrono::system_clock::time_point WaitingEndTimePoint;
1039 mutable std::chrono::microseconds HBTIntegrationTimeBeforeReset{ 0 };
1040
1041 // General
1043 mutable bool LogUIMessagesOnly = false;
1044 };
1045}
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
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.
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
std::vector< std::unique_ptr< QSurfaceDataRow > > QSurfaceDataRowsType
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
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 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
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 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:3168
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:624
const std::unique_ptr< ModuleDataType > ModuleData
Module data belonging to this ModuleBase instance.
Definition Module.h:788
ModuleBase(const std::thread::id OwnerThreadID, ParamsBasePtrType &&Params)
Constructs a ModuleBase instance.
Definition Module.cpp:206
Refer to ParamsBase::dispatch_tag.
Definition Module.h:191
Defines data for a thread belonging to a ModuleBase instance. Refer to RunnableInstance.
Definition Module.h:840
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:1660
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:712
QModuleBase(const std::thread::id OwnerThreadID, DynExp::ParamsBasePtrType &&Params)
Constructs a QModuleBase instance.
Definition Module.cpp:591
Configurator class for QModuleBase.
Definition Module.h:1646
Data class for QModuleBase.
Definition Module.h:1536
Parameter class for QModuleBase.
Definition Module.h:1622
QModuleParamsBase(ItemIDType ID, const DynExpCore &Core)
Constructs the parameters for a QModuleBase instance.
Definition Module.h:1628
Holds a bitset containing flags to indicate which features a certain instrument/ module etc....
Definition Util.h:1293
void Set(EnumType Flag)
Sets a flag.
Definition Util.h:1343
bool Test(const std::array< EnumType, N > &Flags) const
Tests whether all of the flags passed as an array are set.
Definition Util.h:1319
State machine context as used by class StateMachine. A state machine context holds a map with keys an...
Definition Util.h:1424
State machine state as used by class StateMachine. A state mainly wraps a state function of the membe...
Definition Util.h:1367
This class models a state machine. It keeps track of the current state and allows to invoke its assoc...
Definition Util.h:1497
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:622
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