From 1165a10fd860aeb34a245f4730cc3102533a44d1 Mon Sep 17 00:00:00 2001 From: SGCMarkus Date: Fri, 15 Mar 2024 13:48:04 +0100 Subject: [PATCH] astrodatagui: FlaredetectorWidget: properly define states of the widget --- main/astrodatagui/ui/FlaredetectorWidget.py | 114 +++++++++++++++----- 1 file changed, 86 insertions(+), 28 deletions(-) diff --git a/main/astrodatagui/ui/FlaredetectorWidget.py b/main/astrodatagui/ui/FlaredetectorWidget.py index 444c31b..fcb017e 100644 --- a/main/astrodatagui/ui/FlaredetectorWidget.py +++ b/main/astrodatagui/ui/FlaredetectorWidget.py @@ -20,44 +20,102 @@ class FlaredetectorWidget(QtWidgets.QWidget): self.mainLayout.addWidget(toolbar) self.mainLayout.addWidget(fc) - def plotFitsFile(self, fitsFilePath, mainName: str): - print(f"Plotting: {fitsFilePath}") - self.figureAxis.clear() - self.currentLC = lk.read(fitsFilePath) - self.currentLC.flux = self.currentLC['sap_flux'] - self.currentMainName = mainName - label = f"{mainName} - SAP Flux" - self.currentLC.plot(column="sap_flux", label=label, ax=self.figureAxis) - self.figure.canvas.draw_idle() + self.fluxType = "sap_flux" + self.NormalizeState = {"Enabled": False, "Scale": "unscaled"} + self.RemoveOutliersState = {"Enabled": False, "Sigma": 5.0} + self.RemoveNansState = {"Enabled": False} + self.BinState = {"Enabled": False, "Size": 1} + self.FlattenState = {"Enabled": False, "WindowLength": 101, "PolynomialOrder": 2} + self.FoldState = {"Enabled": False, "Period": 1, "EpochTime": 0} + self.PeriodogramState = {"Enabled": False, "Method": "lombscargle"} - def updatePlot(self, normalize: bool, flatten: bool, remOutliers: bool, - remNans: bool, fold: list, binList: list): + def setFitsFile(self, fitsFilePath, mainName: str): + print(f"Plotting: {fitsFilePath}") + self.currentLC = lk.read(fitsFilePath) + self.currentMainName = mainName + + def setNormalizeState(self, enabled: bool, scale: str): + self.NormalizeState["Enabled"] = enabled + if(scale not in ["unscaled", "percent", "ppt", "ppm"]): + print(f"Scale not supported: {scale}, setting default unscaled") + scale = "unscaled" + self.NormalizeState["Scale"] = scale + + def setRemoveOutliersState(self, enabled: bool, sigma: float): + self.RemoveOutliersState["Enabled"] = enabled + if(sigma < 0): + print(f"Negative sigma detected, setting default 5.0") + sigma = 5.0 + self.RemoveOutliersState["Sigma"] = sigma + + def setRemoveNansState(self, enabled: bool): + self.RemoveNansState["Enabled"] = enabled + + def setBinState(self, enabled: bool, binSize: float): + self.BinState["Enabled"] = enabled + if(binSize < 0): + print(f"Negative binSize detected, setting default 1") + binSize = 1 + self.BinState["Size"] = binSize + + def setFlattenState(self, enabled: bool, windowLength: int, polyorder: int): + self.FlattenState["Enabled"] = enabled + if(windowLength < 0): + print(f"Negative windowLength detected, setting default 101") + windowLength = 101 + if(polyorder < 0): + print(f"Negative polyorder detected, setting default 2") + polyorder = 2 + self.FlattenState["WindowLength"] = windowLength + self.FlattenState["PolynomialOrder"] = polyorder + + def setFoldState(self, enabled: bool, period: float, epoch: float): + self.FoldState["Enabled"] = enabled + if(period < 0): + print(f"Negative period detected, setting default 1") + period = 1 + if(epoch < 0): + print(f"Negative epoch detected, setting default 0") + epoch = 0 + self.FoldState["Period"] = period + self.FoldState["EpochTime"] = epoch + + def setPeriodogramState(self, enabled: bool, method: str): + self.PeriodogramState["Enabled"] = enabled + if(method not in ["lombscargle", "boxleastsquare", "ls", "bls"]): + print(f"Unsupported method detected, setting default lombscargle") + method = "lombscargle" + self.PeriodogramState["Method"] = method + + def updatePlot(self): lc = self.currentLC label = f"{self.currentMainName}" - if(normalize): - lc = lc.normalize() + if(self.NormalizeState["Enabled"]): + lc = lc.normalize(unit=self.NormalizeState["Scale"]) label += " - normalized" - if(flatten): - lc = lc.flatten() - label += " - flattened" - if(remOutliers): - lc = lc.remove_outliers() + if(self.RemoveOutliersState["Enabled"]): + lc = lc.remove_outliers(sigma=self.RemoveOutliersState["Sigma"]) label += " - no ol" - if(remNans): + if(self.RemoveNansState["Enabled"]): lc = lc.remove_nans() label += " - no nans" - if(len(fold) == 3 and fold[0]): - period = float(fold[1]) - epoch = float(fold[2]) - lc = lc.fold(period=period, epoch_time=epoch) - label += " - folded" - if(len(binList) == 2 and binList[0]): - binSize = float(binList[1]) - lc = lc.bin(time_bin_size=binSize) + if(self.BinState["Enabled"]): + lc = lc.bin(time_bin_size=self.RemoveOutliersState["Size"]) label += " - binned" + if(self.FlattenState["Enabled"]): + lc = lc.flatten(window_length=self.FlattenState["WindowLength"], + polyorder=self.FlattenState["PolynomialOrder"]) + label += " - flattened" + if(self.FoldState["Enabled"]): + lc = lc.fold(period=self.FoldState["Period"], + epoch_time=self.FoldState["EpochTime"]) + label += " - folded" + if(self.PeriodogramState["Enabled"]): + lc = lc.to_periodogram(method=self.PeriodogramState["Method"]) + label = "Periodogram" self.figureAxis.clear() - if(fold[0]): + if(self.FoldState["Enabled"]): lc.scatter(label=label, ax=self.figureAxis) else: lc.plot(label=label, ax=self.figureAxis)