From 7f245f4c89e6046871dcf050ce729f5b27aa7715 Mon Sep 17 00:00:00 2001 From: jupfi Date: Sat, 22 Jul 2023 13:48:55 +0200 Subject: [PATCH] Added docs + rescaled logos. --- .../base_spectrometer_model.py | 10 +++ src/nqrduck_spectrometer/controller.py | 5 +- src/nqrduck_spectrometer/pulseparameters.py | 44 ++++++----- src/nqrduck_spectrometer/pulsesequence.py | 72 ++++++++++++------ .../resources/pulseparameter/NoPulse.png | Bin 418 -> 0 bytes .../resources/pulseparameter/RXOff.png | Bin 418 -> 236 bytes .../resources/pulseparameter/RXOn.png | Bin 563 -> 342 bytes .../resources/pulseparameter/TXOff.png | Bin 0 -> 236 bytes .../resources/pulseparameter/TXOn.png | Bin 0 -> 277 bytes .../resources/pulseparameter/TX_Pulse.png | Bin 463 -> 0 bytes 10 files changed, 87 insertions(+), 44 deletions(-) delete mode 100644 src/nqrduck_spectrometer/resources/pulseparameter/NoPulse.png create mode 100644 src/nqrduck_spectrometer/resources/pulseparameter/TXOff.png create mode 100644 src/nqrduck_spectrometer/resources/pulseparameter/TXOn.png delete mode 100644 src/nqrduck_spectrometer/resources/pulseparameter/TX_Pulse.png diff --git a/src/nqrduck_spectrometer/base_spectrometer_model.py b/src/nqrduck_spectrometer/base_spectrometer_model.py index 7d4f2e9..a214167 100644 --- a/src/nqrduck_spectrometer/base_spectrometer_model.py +++ b/src/nqrduck_spectrometer/base_spectrometer_model.py @@ -31,6 +31,16 @@ class BaseSpectrometerModel(ModuleModel): class PulseParameter: + """A pulse parameter is a value that can be different for each event in a pulse sequence. + E.g. the transmit pulse power or the phase of the transmit pulse. + + Arguments: + name (str) -- The name of the pulse parameter + + Attributes: + name (str) -- The name of the pulse parameter + options (OrderedDict) -- The options of the pulse parameter + """ def __init__(self, name): self.name = name self.options = OrderedDict() diff --git a/src/nqrduck_spectrometer/controller.py b/src/nqrduck_spectrometer/controller.py index cd0f659..f780ddf 100644 --- a/src/nqrduck_spectrometer/controller.py +++ b/src/nqrduck_spectrometer/controller.py @@ -17,7 +17,7 @@ class SpectrometerController(ModuleController): super().__init__(module) def _load_spectrometer_modules(self): - """This method loads the spectrometer modules and adds them to the spectrometer model.""" + """This method loads the spectrometer (sub-)modules and adds them to the spectrometer model.""" # Get the modules with entry points in the nqrduck group modules = MainController._get_modules() logger.debug("Found modules: %s", modules) @@ -41,10 +41,13 @@ class SpectrometerController(ModuleController): self._module.view.create_menu_entry() def process_signals(self, key: str, value: None): + # This signal starts a measurement if key == "start_measurement": self.on_measurement_start() + # This signal sets the frequency elif key == "set_frequency": self.module.model.active_spectrometer.controller.set_frequency(value) + # This signal sets the number of averages elif key == "set_averages": self.module.model.active_spectrometer.controller.set_averages(value) diff --git a/src/nqrduck_spectrometer/pulseparameters.py b/src/nqrduck_spectrometer/pulseparameters.py index 3bbac93..585e9bc 100644 --- a/src/nqrduck_spectrometer/pulseparameters.py +++ b/src/nqrduck_spectrometer/pulseparameters.py @@ -2,26 +2,28 @@ from PyQt6.QtGui import QPixmap from pathlib import Path from .base_spectrometer_model import BaseSpectrometerModel -class Option(): - """Defines options for the pulse parameters which can then be set accordingly. - """ + +class Option: + """Defines options for the pulse parameters which can then be set accordingly.""" + def set_value(self): raise NotImplementedError class BooleanOption(Option): - """Defines a boolean option for a pulse parameter option. - """ + """Defines a boolean option for a pulse parameter option.""" + def __init__(self, value) -> None: super().__init__() self.value = value def set_value(self, value): self.value = value - + + class NumericOption(Option): - """Defines a numeric option for a pulse parameter option. - """ + """Defines a numeric option for a pulse parameter option.""" + def __init__(self, value) -> None: super().__init__() self.value = value @@ -29,9 +31,10 @@ class NumericOption(Option): def set_value(self, value): self.value = float(value) + class WidgetSelectionOption(Option): - """Defines a widget selection option for a pulse parameter option. - """ + """Defines a widget selection option for a pulse parameter option.""" + def __init__(self, widgets) -> None: super().__init__() @@ -45,24 +48,25 @@ class TXPulse(BaseSpectrometerModel.PulseParameter): def get_pixmap(self): self_path = Path(__file__).parent if self.options["TX Amplitude"].value > 0: - image_path = self_path / "resources/pulseparameter/TX_Pulse.png" + image_path = self_path / "resources/pulseparameter/TXOn.png" else: - image_path = self_path / "resources/pulseparameter/NoPulse.png" + image_path = self_path / "resources/pulseparameter/TXOff.png" pixmap = QPixmap(str(image_path)) return pixmap - class RectPulse(): - def __init__(self, name) -> None: - super().__init__(name) - - class SincPulse(): + class RectPulse: def __init__(self, name) -> None: super().__init__(name) - class GaussianPulse(): + class SincPulse: def __init__(self, name) -> None: super().__init__(name) + class GaussianPulse: + def __init__(self, name) -> None: + super().__init__(name) + + class RXReadout(BaseSpectrometerModel.PulseParameter): def __init__(self, name) -> None: super().__init__(name) @@ -80,8 +84,8 @@ class RXReadout(BaseSpectrometerModel.PulseParameter): def set_options(self, options): self.state = options + class Gate(BaseSpectrometerModel.PulseParameter): - def __init__(self, name) -> None: super().__init__(name) self.add_option("Gate State", BooleanOption(False)) @@ -97,5 +101,3 @@ class Gate(BaseSpectrometerModel.PulseParameter): def set_options(self, options): self.state = options - - \ No newline at end of file diff --git a/src/nqrduck_spectrometer/pulsesequence.py b/src/nqrduck_spectrometer/pulsesequence.py index 49d2516..576ee2e 100644 --- a/src/nqrduck_spectrometer/pulsesequence.py +++ b/src/nqrduck_spectrometer/pulsesequence.py @@ -3,8 +3,10 @@ from collections import OrderedDict logger = logging.getLogger(__name__) + class PulseSequence: """A pulse sequence is a collection of events that are executed in a certain order.""" + def __init__(self, name) -> None: self.name = name self.events = list() @@ -29,50 +31,76 @@ class PulseSequence: @classmethod def load_event(cls, event, pulse_parameter_options): - """Loads an event from a dict. The pulse paramter options are needed to load the parameters - and determine if the correct spectrometer is active.""" + """ + Loads an event from a dict. The pulse paramter options are needed to load the parameters + and determine if the correct spectrometer is active. + + Args: + event (dict): The dict with the event data + pulse_parameter_options (dict): The dict with the pulse parameter options + + Returns: + Event: The loaded event + """ obj = cls(event["name"], event["duration"]) for parameter in event["parameters"]: for pulse_parameter_option in pulse_parameter_options.keys(): # This checks if the pulse paramter options are the same as the ones in the pulse sequence if pulse_parameter_option == parameter["name"]: - pulse_paramter_class = pulse_parameter_options[pulse_parameter_option] - obj.parameters[pulse_parameter_option] = pulse_paramter_class(parameter["name"]) + pulse_paramter_class = pulse_parameter_options[ + pulse_parameter_option + ] + obj.parameters[pulse_parameter_option] = pulse_paramter_class( + parameter["name"] + ) for option in parameter["value"]: - obj.parameters[pulse_parameter_option].options[option["name"]].value = option["value"] + obj.parameters[pulse_parameter_option].options[ + option["name"] + ].value = option["value"] return obj def dump_sequence_data(self): - """Returns a dict with all the data in the pulse sequence""" - data = { - "name": self.name, - "events": [] - } + """Returns a dict with all the data in the pulse sequence + + Returns: + dict: The dict with the sequence data""" + data = {"name": self.name, "events": []} for event in self.events: event_data = { "name": event.name, "duration": event.duration, - "parameters": [] + "parameters": [], } for parameter in event.parameters.keys(): - event_data["parameters"].append({ - "name": parameter, - "value": [] - }) + event_data["parameters"].append({"name": parameter, "value": []}) for option in event.parameters[parameter].options.keys(): - event_data["parameters"][-1]["value"].append({ - "name": option, - "value": event.parameters[parameter].options[option].value - }) + event_data["parameters"][-1]["value"].append( + { + "name": option, + "value": event.parameters[parameter].options[option].value, + } + ) data["events"].append(event_data) return data - + @classmethod def load_sequence(cls, sequence, pulse_parameter_options): + """Loads a pulse sequence from a dict. The pulse paramter options are needed to load the parameters + and make sure the correct spectrometer is active. + + Args: + sequence (dict): The dict with the sequence data + pulse_parameter_options (dict): The dict with the pulse parameter options + + Returns: + PulseSequence: The loaded pulse sequence + + Raises: + KeyError: If the pulse parameter options are not the same as the ones in the pulse sequence + """ obj = cls(sequence["name"]) for event_data in sequence["events"]: obj.events.append(cls.Event.load_event(event_data, pulse_parameter_options)) - + return obj - diff --git a/src/nqrduck_spectrometer/resources/pulseparameter/NoPulse.png b/src/nqrduck_spectrometer/resources/pulseparameter/NoPulse.png deleted file mode 100644 index d101b59797bfb232b469bb6780312bab95267510..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 418 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSjKx9jP7LeL$-D%zV?13PLn`LH zy<#ZXz#zbUu-#GkpXtS*h93RAaL2CMGRB{IBcFd`DC1P{V<=?m5O$cu@Q6h~y}^R< z$N&jl|9$7Sbi@-zurqcfr|o+y_~zpvaT{s?{f+s~swDMz`!ismGkCiCxvXhVBYU7gX`ss5R-Oq+wV?U468#1j7DcAY9P&>1{k{an^LB{Ts5 DC3|;9 diff --git a/src/nqrduck_spectrometer/resources/pulseparameter/RXOn.png b/src/nqrduck_spectrometer/resources/pulseparameter/RXOn.png index f1ee07a64cb193cad978415493f2e438d04b8755..d9d57f3f9e0fc94f02b3527904f9424c06cf031a 100644 GIT binary patch literal 342 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%z1w36GLn`LH zopD<5kO2=Xue0OI#-bR3r#slJnkE++OfIzhW~1{~t~2+ZhqUVCXuZ?wOQ*!0FYh`L zE9=0^8o(Z~SxjNN>eEdcn>`LNlror#EcmB*O9#SCcpkBC4STuw&T3$E zH?J^eWImVoCCRCRSuUJ^h3<^EuZ`Hg*cF&58zg*@-!e}m%h|v|)*+XJZ3XidiND)A z8DBB%wX`w@3NB#vZ#;N{_knM~nF8i3vU!b+d-?x-@4KFG;3{+4>k3}BId?6ppY!rq z>^kTTq;BlK5Dla{Dn}yrq@2)=|KK`p* z__*|aJ;QGyhdB(7SOnA?EEtb)D!j}6a}=oJ>*n`N&z~^?1^gHanL30aYQ8_WK5(ME zvACEKp#dx({fE!sQ|yD77^orlr4v$w&zxn2Xbj75nCNRDE)FrP`UjiDO_t*@!)Jpe z3v~3LHhkeVkTO4b!tKU1ZitiK?qi&GgX4A)#L69q^BYvXr4v1Cop(SScIS(9!rEVL z1yK1vY!TUS+iuK;>b}XqzWr-C8`SE}jA5VZ8GU>~I#1^}+`Ru`E7Zk#zjy=c4_`;v z!jS)G8%*vy?}Og^)1fBX)-qRo?mr6kn%RAZdw-Il;jyDVpCSJrED-X(vVC}V9u@}w z_A>7I`TP-jh;IKOd*J?GtRda7|93Rh1&BD<$H-J-E7;26X$DLM44$rjF6*2UngFv; B;d%f7 diff --git a/src/nqrduck_spectrometer/resources/pulseparameter/TXOff.png b/src/nqrduck_spectrometer/resources/pulseparameter/TXOff.png new file mode 100644 index 0000000000000000000000000000000000000000..2771699e013cc2cd4db926bfaa82b24324a171f4 GIT binary patch literal 236 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|mU+53hE&XX zdutXn8DN4&t;uc GLK6V!nM>sW literal 0 HcmV?d00001 diff --git a/src/nqrduck_spectrometer/resources/pulseparameter/TXOn.png b/src/nqrduck_spectrometer/resources/pulseparameter/TXOn.png new file mode 100644 index 0000000000000000000000000000000000000000..80444fdb0a5b0601e7dfda2b2238b3fe81a4f526 GIT binary patch literal 277 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|&U?BzhE&XX zdsC6`uz>*U#nP*n0a zie9@jbozJyhIKu^{;~eMy3?rt`RY|gjGPk~q8ug@fiK$~h$ud7b!VoI^NnU=G$5-f zwy(b-KDkzN*Q@H~e_3U2CxqXMcVNn3Jj>p0STQ*`V$&3$*BCrq{an^LB{Ts5hwNo) literal 0 HcmV?d00001 diff --git a/src/nqrduck_spectrometer/resources/pulseparameter/TX_Pulse.png b/src/nqrduck_spectrometer/resources/pulseparameter/TX_Pulse.png deleted file mode 100644 index 82cc91776988cde9ccbf733c45333a7f0831737b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 463 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSjKx9jP7LeL$-D%zJ3U<-Ln`LH zy{jnH6d>YovA_B1(;ffc6s=%6ThlyoVzpnhzrvkLi{y&a5|3?9?3(+RX^uBTAybF2 z!yJZ3ECT8cJ4*L$%s+ql>)($>bqhbwf**cH`IXmzz<3=8Sdgod4HFVdQ&MBb@0JMggYybcN