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