From af8af0b56ba70191f1d6edd588fdeea5a93994fe Mon Sep 17 00:00:00 2001 From: SGCMarkus Date: Tue, 2 Jul 2024 10:31:24 +0200 Subject: [PATCH] flaredetector: util: add function to mark peak/valley borders in folded lcs --- main/flaredetector/util.py | 46 +++++++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/main/flaredetector/util.py b/main/flaredetector/util.py index f189093..1157aa3 100644 --- a/main/flaredetector/util.py +++ b/main/flaredetector/util.py @@ -94,4 +94,48 @@ def getFoldedBestFit(foldedLc): popt, pcov = curve_fit(sine, phase, flux[filt], maxfev=100000) sineFit = sine(foldedLc.phase[filt].value, *popt) sineFit *= multi - return phase, sineFit \ No newline at end of file + return phase, sineFit + +def getFoldedFitPeakValley(sineFit): + return np.argmin(sineFit), np.argmax(sineFit) + +def findNearestIndexOfValue(array, value): + array = np.asarray(array) + idx = (np.abs(array - value)).argmin() + return idx + +def getPhaseRangesNearPeak(maxArgs, phase): + minPhase = phase[maxArgs[0]] + maxPhase = phase[maxArgs[1]] + totalPhase = abs(phase[0]) + abs(phase[-1]) + + phasePart = totalPhase * 0.3 / 2 + minPhaseBounds = [] + if(minPhase - phasePart < phase[0]): + minPhaseBounds.append((phase[0], minPhase + phasePart)) + minPhaseBounds.append((phase[-1] + (minPhase - phasePart + phase[0]), phase[-1])) + elif(minPhase + phasePart > phase[-1]): + minPhaseBounds.append((minPhase - phasePart, phase[-1])) + minPhaseBounds.append((phase[0], phase[0] + (minPhase + phasePart - phase[-1]))) + else: + minPhaseBounds.append((minPhase - phasePart, minPhase + phasePart)) + + maxPhaseBounds = [] + if(maxPhase - phasePart < phase[0]): + maxPhaseBounds.append((phase[0], maxPhase + phasePart)) + maxPhaseBounds.append((phase[-1] + (maxPhase - phasePart + phase[0]), phase[-1])) + elif(maxPhase + phasePart > phase[-1]): + maxPhaseBounds.append((maxPhase - phasePart, phase[-1])) + maxPhaseBounds.append((phase[0], phase[0] + (maxPhase + phasePart - phase[-1]))) + else: + maxPhaseBounds.append((maxPhase - phasePart, maxPhase + phasePart)) + + minPhaseBoundsIndices = [] + for l in minPhaseBounds: + minPhaseBoundsIndices.append([findNearestIndexOfValue(phase, lv) for lv in l]) + + maxPhaseBoundsIndices = [] + for l in maxPhaseBounds: + maxPhaseBoundsIndices.append([findNearestIndexOfValue(phase, lv) for lv in l]) + + return minPhaseBoundsIndices, maxPhaseBoundsIndices