treewide: add minimal lightcurve support

This commit is contained in:
2024-06-06 14:22:00 +02:00
parent 00b44a78df
commit 3a1b86d933
4 changed files with 1440 additions and 17 deletions
+6 -6
View File
@@ -1,18 +1,18 @@
from PyQt5.QtCore import pyqtSignal, QThread from PyQt5.QtCore import pyqtSignal, QThread
import multiprocessing import multiprocessing
import concurrent.futures import concurrent.futures
import lightkurve as lk from ..util.MinimalLightCurve import read
import pandas as pd import pandas as pd
from ..flaredetector.flaredetector import calculateFlareFitsForLightcurve from ..flaredetector.flaredetector import calculateFlareFitsForLightcurve
def getFlareCount(filesDict): def getFlareCount(filesDict):
lc = lk.read(filesDict["FilePath"]) lc = read(filesDict["FilePath"])
lc.flux = lc["sap_flux"] lc.flux = lc["sap_flux"]
lc.flux_err = lc["sap_flux_err"] lc.flux_err = lc["sap_flux_err"]
sapPeaks, sapFits = calculateFlareFitsForLightcurve(lc.flatten()) sapPeaks, sapFits = calculateFlareFitsForLightcurve(lc.flatten(), minimalLC=True)
lc.flux = lc["pdcsap_flux"] lc.flux = lc["pdcsap_flux"]
lc.flux_err = lc["pdcsap_flux_err"] lc.flux_err = lc["pdcsap_flux_err"]
pdcsapPeaks, pdcsapFits = calculateFlareFitsForLightcurve(lc.flatten()) pdcsapPeaks, pdcsapFits = calculateFlareFitsForLightcurve(lc.flatten(), minimalLC=True)
filesDict["sapPeaks"] = sapPeaks filesDict["sapPeaks"] = sapPeaks
filesDict["sapPeaksCount"] = len(sapPeaks) filesDict["sapPeaksCount"] = len(sapPeaks)
@@ -21,7 +21,8 @@ def getFlareCount(filesDict):
filesDict["pdcsapPeaksCount"] = len(pdcsapPeaks) filesDict["pdcsapPeaksCount"] = len(pdcsapPeaks)
filesDict["pdcsapFits"] = pdcsapFits filesDict["pdcsapFits"] = pdcsapFits
del lc del lc
if(filesDict["StarName"] == "CD-51 13128" and filesDict["Sequence"] == 1):
print(filesDict)
return filesDict return filesDict
class CalcAllFlaresThread(QThread): class CalcAllFlaresThread(QThread):
@@ -35,7 +36,6 @@ class CalcAllFlaresThread(QThread):
#@pyqtSlot() #@pyqtSlot()
def run(self): def run(self):
cpuCount = multiprocessing.cpu_count() cpuCount = multiprocessing.cpu_count()
splitList = [self.allFlaresDictList[i:i + cpuCount] for i in range(0, len(self.allFlaresDictList), cpuCount)]
executor = concurrent.futures.ProcessPoolExecutor(cpuCount) executor = concurrent.futures.ProcessPoolExecutor(cpuCount)
resFrame = pd.DataFrame(executor.map(getFlareCount, self.allFlaresDictList.to_dict(orient="records"))) resFrame = pd.DataFrame(executor.map(getFlareCount, self.allFlaresDictList.to_dict(orient="records")))
+3 -3
View File
@@ -40,8 +40,9 @@ def calculateFitForFlare(lightcurve, peakIndex):
flareFitDataPoints = flareFitDataPoints + peakIndex flareFitDataPoints = flareFitDataPoints + peakIndex
return np.array(Peak+1), flareFitDataPoints, np.array(fit+1) 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, minimalLC=False):
maxIndices = findMaxIndices(lightcurve, num, distance=distance, height=height, sortByHighest=True) maxIndices = findMaxIndices(lightcurve, num, distance=distance, height=height,
sortByHighest=True, minimalLC=minimalLC)
peaks = [] peaks = []
fits = [] fits = []
for index in maxIndices: for index in maxIndices:
@@ -57,7 +58,6 @@ def calculateFlareFitsForLightcurve(lightcurve, num=100, distance=1, height=0.05
"Quality": lightcurve.quality[flareFitDataPoints]}) "Quality": lightcurve.quality[flareFitDataPoints]})
except Exception as error: except Exception as error:
pass pass
#print("Flare fit exception: ", error)
return peaks, fits return peaks, fits
+11 -8
View File
@@ -1,16 +1,19 @@
import numpy as np import numpy as np
from scipy.signal import find_peaks from scipy.signal import find_peaks
from lightkurve.periodogram import Periodogram def findMaxIndices(lc, num=3, distance=100, height=(None, None), sortByHighest=False,
from lightkurve.lightcurve import LightCurve minimalLC=False):
if(minimalLC):
def findMaxIndices(lc, num=3, distance=100, height=(None, None), sortByHighest=False):
if(isinstance(lc, Periodogram)):
data = lc.power
elif(isinstance(lc, LightCurve)):
data = lc.flux data = lc.flux
else: else:
return np.zeros(num)-1 from lightkurve.periodogram import Periodogram as OrigPG
from lightkurve.lightcurve import LightCurve as OrigLC
if(isinstance(lc, OrigPG)):
data = lc.power
elif(isinstance(lc, OrigLC)):
data = lc.flux
else:
return np.zeros(num)-1
peak_indices, peak_dict = find_peaks(data, height=height, peak_indices, peak_dict = find_peaks(data, height=height,
distance=distance) distance=distance)
peak_heights = peak_dict["peak_heights"] peak_heights = peak_dict["peak_heights"]
File diff suppressed because it is too large Load Diff