flaredetector: util: add function to mark peak/valley borders in folded lcs

This commit is contained in:
2024-07-02 10:31:24 +02:00
parent 019005319e
commit af8af0b56b
+44
View File
@@ -95,3 +95,47 @@ def getFoldedBestFit(foldedLc):
sineFit = sine(foldedLc.phase[filt].value, *popt) sineFit = sine(foldedLc.phase[filt].value, *popt)
sineFit *= multi sineFit *= multi
return phase, sineFit 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