diff --git a/main/astrodatagui/CalcAllFlaresThread.py b/main/astrodatagui/CalcAllFlaresThread.py new file mode 100644 index 0000000..6ca9669 --- /dev/null +++ b/main/astrodatagui/CalcAllFlaresThread.py @@ -0,0 +1,53 @@ +from PyQt5.QtCore import pyqtSignal, QThread +import multiprocessing +import concurrent.futures +import lightkurve as lk +from ..flaredetector.flaredetector import calculateFlareFitsForLightcurve + +import time + +def getFlareCount(filesDict): + lc = lk.read(filesDict["FilePath"]) + lc.flux = lc["sap_flux"] + lc_flattenend = lc.flatten() + sapPeaks, sapFits = calculateFlareFitsForLightcurve(lc_flattenend) + lc.flux = lc["pdcsap_flux"] + lc_flattenend = lc.flatten() + pdcsapPeaks, pdcsapFits = calculateFlareFitsForLightcurve(lc_flattenend) + + retDict = filesDict + retDict["sapPeaks"] = sapPeaks + retDict["sapPeaksCount"] = len(sapPeaks) + retDict["sapFits"] = sapFits + retDict["pdcsapPeaks"] = pdcsapPeaks + retDict["pdcsapPeaksCount"] = len(pdcsapPeaks) + retDict["pdcsapFits"] = pdcsapFits + + return retDict + +class CalcAllFlaresThread(QThread): + progress = pyqtSignal(int) + finished = pyqtSignal(list) + + def __init__(self, allFlaresDictList): + super().__init__() + self.allFlaresDictList = allFlaresDictList + + #@pyqtSlot() + def run(self): + cpuCount = multiprocessing.cpu_count() + print(len(self.allFlaresDictList)) + start = time.time() + executor = concurrent.futures.ProcessPoolExecutor(cpuCount) + futures = [executor.submit(getFlareCount, starDict) for starDict in self.allFlaresDictList] + concurrent.futures.wait(futures) + end = time.time() + print("Multiprocess time needed: ", end-start) + ret = [] + #for dic in executor.map(getFlareCount, self.allFlaresDictList): + # print(dic) + # ret.append(dic) + for future in futures: + ret.append(future.result()) + + self.finished.emit(ret) \ No newline at end of file