From 09902a70e889ed1d2ae9135d5b785ec1b8104011 Mon Sep 17 00:00:00 2001 From: SGCMarkus Date: Thu, 14 Nov 2024 13:35:12 +0100 Subject: [PATCH] flaredetector: make sure to only use valid flares flattening can sometimes invert tips in the lightcurve to cause a false detection of a flare --- main/astrodatagui/ui/FlaredetectorWidget.py | 2 +- main/flaredetector/flaredetector.py | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/main/astrodatagui/ui/FlaredetectorWidget.py b/main/astrodatagui/ui/FlaredetectorWidget.py index 262a1ae..83b64b5 100644 --- a/main/astrodatagui/ui/FlaredetectorWidget.py +++ b/main/astrodatagui/ui/FlaredetectorWidget.py @@ -210,7 +210,7 @@ class FlaredetectorWidget(QtWidgets.QWidget): self.currentFlattenLC = lc.flatten(window_length=self.FlattenState["WindowLength"], polyorder=self.FlattenState["PolynomialOrder"]) self.foldedLC = lc.to_periodogram(method=self.PeriodogramState["Method"]) - self.peaks, self.fits = calculateFlareFitsForLightcurve(self.currentFlattenLC, num=100) + self.peaks, self.fits = calculateFlareFitsForLightcurve(self.currentFlattenLC, num=100, normalizedLC=self.currentLC.normalize()) self.periods = [self.foldedLC.period[i] for i in findMaxIndices(self.foldedLC, num=4, distance=100, sortByHighest=True)] self.epoch_time = getEpochTime(lc) self.periodsCalculated.emit(self.periods) diff --git a/main/flaredetector/flaredetector.py b/main/flaredetector/flaredetector.py index f56fbca..2c10fef 100644 --- a/main/flaredetector/flaredetector.py +++ b/main/flaredetector/flaredetector.py @@ -47,7 +47,7 @@ def calculateFitForFlare(lightcurve, peakIndex): flareFitDataPoints = flareFitDataPoints + peakIndex return np.array(Peak+1), flareFitDataPoints, np.array(fit+1) -def calculateFlareFitsForLightcurve(lightcurve, num=100, distance=1, height=0.05): +def calculateFlareFitsForLightcurve(lightcurve, num=100, distance=1, height=0.05, normalizedLC=None): maxIndices = findMaxIndices(lightcurve, num, distance=distance, height=height, sortByHighest=True) peaks = [] @@ -55,6 +55,9 @@ def calculateFlareFitsForLightcurve(lightcurve, num=100, distance=1, height=0.05 for index in maxIndices: try: Peak, flareFitDataPoints, fit = calculateFitForFlare(lightcurve, index) + if(normalizedLC is not None and + (normalizedLC.flux[index] < 0.95 or Peak > 1.5 * normalizedLC.flux[index])): + continue peaks.append({"FlarePeak": Peak, "FlarePeakTime": lightcurve.time[index], "StandardIndex": index,