UNPKG

poto-siril

Version:

Automatization around Siril (<https://siril.org/>) for deep sky astrophotography.

134 lines (133 loc) 8.39 kB
import path from "path"; import fs from "fs-extra"; import { logger } from "../utils/logger.js"; const tmpDir = "tmp"; export const spawnMockedDatasetToFs_dataset_1 = () => { logger.dev("Creating ./tmp directory with dataset_1."); return spawnMockedDatasetToFs(dataset_1); }; /** * Wipe existing testing folder and spawn a new one with the given dataset. */ const spawnMockedDatasetToFs = (dataset) => { fs.removeSync(tmpDir); dataset.forEach(file => { const filePath = path.join(tmpDir, file); const fileType = file.includes("Light") ? "Light" : file.includes("Dark") ? "Dark" : file.includes("Bias") ? "Bias" : file.includes("Flat") ? "Flat" : null; fs.mkdirSync(path.dirname(filePath), { recursive: true }); fs.writeFileSync(filePath, fileType ? getRealDataFromSample(fileType) : "mocked content"); }); const asiAirDirectory = path.join(tmpDir, "asiair-dump-1"); const bankDirectory = path.join(tmpDir, "bank"); const projectDirectory = path.join(tmpDir, "project"); return { directory: tmpDir, asiAirDirectory, bankDirectory, projectDirectory, }; }; // NOTE. Siril needs a sequence of 2 files minimum to stack. /** * Dataset 1. * Contains a mix of lights, flats, darks, biases, and ASIAIR thumbnails. * Multi-bin, multi-gain, multi-filter. * Specific flats-lights date matching. */ const dataset_1 = [ // Lights sequence A (60.0s_Bin1_S_gain100). "asiair-dump-1/Autorun/Light/FOV/Light_FOV_60.0s_Bin1_S_gain100_20240624-010840_-10.1C_0001.fit", "asiair-dump-1/Autorun/Light/FOV/Light_FOV_60.0s_Bin1_S_gain100_20240624-010841_-10.1C_0002.fit", "asiair-dump-1/Autorun/Light/FOV/Light_FOV_60.0s_Bin1_S_gain100_20240624-010842_-10.1C_0003.fit", // Lights sequence B (60.0s_Bin1_H_gain0). "asiair-dump-1/Autorun/Light/FOV/Light_FOV_60.0s_Bin1_H_gain0_20240625-010850_-10.1C_0002.fit", // Not starting at 0001. "asiair-dump-1/Autorun/Light/FOV/Light_FOV_60.0s_Bin1_H_gain0_20240625-010851_-10.1C_0004.fit", // Missing 0003. "asiair-dump-1/Autorun/Light/FOV/Light_FOV_60.0s_Bin1_H_gain0_20240625-010852_-10.1C_0005.fit", // Lights sequence C (120.0s_Bin1_S_gain0). "asiair-dump-1/Autorun/Light/FOV/Light_FOV_120.0s_Bin1_S_gain0_20240626-010853_-10.1C_0001.fit", "asiair-dump-1/Autorun/Light/FOV/Light_FOV_120.0s_Bin1_S_gain0_20240626-010854_-10.1C_0002.fit", // Lights sequence D (60.0s_Bin1_S_gain100). Exact same as sequence A, but different sequence. "asiair-dump-1/Autorun/Light/FOV/Light_FOV_60.0s_Bin1_S_gain100_20240627-010820_-10.1C_0001.fit", "asiair-dump-1/Autorun/Light/FOV/Light_FOV_60.0s_Bin1_S_gain100_20240627-010821_-10.1C_0002.fit", // Lights sequence E (60.0s_Bin1_S_gain100). Exact same as sequence A, but different sequence, with no filter. // No flats matching this sequence. "asiair-dump-1/Autorun/Light/FOV/Light_FOV_60.0s_Bin2_gain100_20240628-010830_-10.1C_0001.fit", "asiair-dump-1/Autorun/Light/FOV/Light_FOV_60.0s_Bin2_gain100_20240628-010831_-10.1C_0002.fit", // Lights sequence F (60.0s_Bin1_gain0). "asiair-dump-1/Autorun/Light/FOV/Light_FOV_60.0s_Bin1_gain0_20240629-010840_-10.1C_0001.fit", "asiair-dump-1/Autorun/Light/FOV/Light_FOV_60.0s_Bin1_gain0_20240629-010841_-10.1C_0002.fit", // Flats sequence matching light sequence A, C & D. "asiair-dump-1/Autorun/Flat/Flat_1.0ms_Bin1_S_gain100_20240624-094304_-10.5C_0001.fit", // Sequence that aims to match the lights set A (collimation of that day). "asiair-dump-1/Autorun/Flat/Flat_1.0ms_Bin1_S_gain100_20240624-094305_-10.0C_0002.fit", "asiair-dump-1/Autorun/Flat/Flat_1.0ms_Bin1_S_gain100_20240624-094306_-10.5C_0003.fit", // Flats sequence matching light sequence A, C & D. "asiair-dump-1/Autorun/Flat/Flat_1.0ms_Bin1_S_gain100_20240626-094304_-10.5C_0001.fit", // Another sequence that aims to match the lights set C (collimation of that day). "asiair-dump-1/Autorun/Flat/Flat_1.0ms_Bin1_S_gain100_20240626-094305_-10.0C_0002.fit", "asiair-dump-1/Autorun/Flat/Flat_1.0ms_Bin1_S_gain100_20240626-094306_-10.5C_0003.fit", // Flats matching light sequence B. "asiair-dump-1/Autorun/Flat/Flat_1.0ms_Bin1_H_gain100_20240511-094306_-10.5C_0001.fit", // Gain 100, but can still matching with lights gain 0! "asiair-dump-1/Autorun/Flat/Flat_1.0ms_Bin1_H_gain100_20240511-094307_-10.5C_0002.fit", "asiair-dump-1/Autorun/Flat/Flat_1.0ms_Bin1_H_gain100_20240511-094308_-10.5C_0003.fit", // Flats matching light sequence F. "asiair-dump-1/Autorun/Flat/Flat_1.0ms_Bin1_gain0_20240512-094309_-10.5C_0001.fit", // Flats not matching anything. "asiair-dump-1/Autorun/Flat/Flat_1.0ms_Bin2_S_gain100_20240511-094304_-10.5C_0001.fit", // Another bin. "asiair-dump-1/Autorun/Flat/Flat_1.0ms_Bin1_O_gain100_20240511-094305_-10.0C_0001.fit", // Another Filter. // Darks matching light sequence A. Not same filter but filter is irrelevant for darks. "bank/Darks/Dark_60.0s_Bin1_L_gain100_20240308-155722_-10.0C_0001.fit", "bank/Darks/Dark_60.0s_Bin1_L_gain100_20240308-155723_-10.0C_0002.fit", "bank/Darks/Dark_60.0s_Bin1_L_gain100_20240308-155724_-10.0C_0003.fit", "bank/Darks/Dark_60.0s_Bin1_L_gain100_20240308-155725_-10.0C_0004.fit", // Darks matching light sequence B. "bank/Darks/Dark_60.0s_Bin1_gain0_20240308-155722_-10.0C_0001.fit", "bank/Darks/Dark_60.0s_Bin1_gain0_20240308-155723_-10.0C_0002.fit", // Darks matching light sequence C. "bank/Darks/Dark_120.0s_Bin1_L_gain0_20240308-155723_-10.0C_0001.fit", "bank/Darks/Dark_120.0s_Bin1_L_gain0_20240308-155724_-10.0C_0002.fit", // Darks not matching anything. "bank/Darks/Dark_300.0s_Bin1_L_gain100_20240308-155724_-10.0C_0001.fit", // Another bulb. "bank/Darks/Dark_60.0s_Bin2_L_gain100_20240308-155725_-10.0C_0001.fit", // Another bin. "bank/Darks/Dark_60.0s_Bin1_L_gain50_20240308-155726_-10.0C_0001.fit", // Another gain. "bank/Darks/Dark_60.0s_Bin1_L_gain100_20240308-155727_30.0C_0001.fit", // Outside of temperature range. // Biases matching light sequence A & C. // Biases matching light sequence B (matching with Flat of gain 100, despite lights being gain 0). "bank/Bias/Bias_1.0ms_Bin1_gain100_20230910-101131_-9.8C_0001.fit", "bank/Bias/Bias_1.0ms_Bin1_gain100_20230910-101132_-9.8C_0002.fit", "bank/Bias/Bias_1.0ms_Bin1_gain100_20230910-101133_-9.8C_0003.fit", // Biases not matching anything. "bank/Bias/Bias_1.0ms_Bin1_gain0_20230910-101141_-9.8C_0001.fit", // Won't match set B, because flat gain is 100. "bank/Bias/Bias_1.0ms_Bin2_gain100_20230910-101142_-9.8C_0002.fit", // Another bin. // Thumbnail files from ASIAIR. "asiair-dump-1/Autorun/Flat/Flat_1.0ms_Bin1_H_gain100_20240511-094306_-10.5C_0001_thn.jpg", "asiair-dump-1/Autorun/Flat/Flat_1.0ms_Bin1_H_gain100_20240511-094307_-10.5C_0002_thn.jpg", "asiair-dump-1/Autorun/Flat/Flat_1.0ms_Bin1_H_gain100_20240511-094308_-10.5C_0003_thn.jpg", // Unknown files to skip. "asiair-dump-1/Autorun/Flat/Flat_1.0ms_Bin1_S_gain100_20240511-094306_-10.5C_0001.fot", // Not a fit file based on extension. // OS specific files to skip. ".DS_Store", "._asiair-dump-1/Autorun/Flat/Flat_1.0ms_Bin1_S_gain100_20240511-094306_-10.5C_0001.fit", "asiair-dump-1/._Autorun/Flat/Flat_1.0ms_Bin1_S_gain100_20240511-094306_-10.5C_0001.fit", "Thumbs.db", // 1 file from Plan directory to test the choice selection. Bin2 to not match with the rest. "asiair-dump-1/Plan/Flat/Flat_1.0ms_Bin2_H_gain100_20240512-124300_-10.5C_0001.fit", ]; export const getRealDataFromSample = (type) => { switch (type) { case "Light": return fs.readFileSync("src/tests/data-sample/Light_NGC6992_60.0s_Bin1_H_gain100_20240811-010756_-10.2C_0001.fit"); case "Dark": return fs.readFileSync("src/tests/data-sample/Dark_60.0s_Bin1_gain0_20240807-162149_-10.0C_0001.fit"); case "Bias": return fs.readFileSync("src/tests/data-sample/Bias_1.0ms_Bin1_gain0_20240807-142905_-9.6C_0001.fit"); case "Flat": return fs.readFileSync("src/tests/data-sample/Flat_1.2s_Bin1_H_gain0_20240811-025058_-9.8C_0001.fit"); } };