diff --git a/metisp/pymetis/src/pymetis/dataitems/hci/hci.py b/metisp/pymetis/src/pymetis/dataitems/hci/hci.py index a8d9b542..898d2706 100644 --- a/metisp/pymetis/src/pymetis/dataitems/hci/hci.py +++ b/metisp/pymetis/src/pymetis/dataitems/hci/hci.py @@ -270,6 +270,9 @@ class LmRavcSciCentred(BandLmMixin, CgrphAppMixin, SciCentred): pass +class LmRavcCentroidTab(BandLmMixin, CgrphAppMixin, CentroidTab): + pass + class LmRavcCentroidTab(BandLmMixin, CgrphAppMixin, CentroidTab): pass @@ -459,3 +462,67 @@ class NCvcSciSnr(BandLmMixin, CgrphAppMixin, SciSnr): class NCvcPsfMedian(BandLmMixin, CgrphAppMixin, PsfMedian): pass + + +### + + +class LmAppSciCentred(BandLmMixin, CgrphAppMixin, SciCentred): + _name_template = r"{band}_APP_SCI_CENTRED" + + + +class LmAppCentroidTab(BandLmMixin, CgrphAppMixin, CentroidTab): + _name_template = r"{band}_APP_SCI_CENTROID_TAB" + + +class LmAppSciSpeckle(BandLmMixin, CgrphAppMixin, SciSpeckle): + _name_template = r"{band}_APP_SCI_SPECKLE" + + + +class LmAppSciHifilt(BandLmMixin, CgrphAppMixin, SciHifilt): + _name_template = r"{band}_APP_SCI_HIFILT" + + + +class LmAppSciDerotatedPsfsub(BandLmMixin, CgrphAppMixin, SciDerotatedPsfsub): + _name_template = r"{band}_APP_SCI_DEROTATED_PSFSUB" + + + +class LmAppSciDerotated(BandLmMixin, CgrphAppMixin, SciDerotated): + _name_template = r"{band}_APP_SCI_DEROTATED" + + + +class LmAppSciContrastRadprof(BandLmMixin, CgrphAppMixin, SciContrastRadprof): + _name_template = r"{band}_APP_SCI_RADPROF" + + + +class LmAppSciContrastAdi(BandLmMixin, CgrphAppMixin, SciContrastAdi): + _name_template = r"{band}_APP_SCI_CONTRAST_ADI" + + + +class LmAppSciThroughput(BandLmMixin, CgrphAppMixin, SciThroughput): + _name_template = r"{band}_APP_SCI_SCI_THROUGHPUT" + + + +class LmAppSciCoverage(BandLmMixin, CgrphAppMixin, SciCoverage): + _name_template = r"{band}_APP_SCI_COVERAGE" + + + +class LmAppSciSnr(BandLmMixin, CgrphAppMixin, SciSnr): + _name_template = r"{band}_APP_SCI_SNR" + + + +class LmAppPsfMedian(BandLmMixin, CgrphAppMixin, PsfMedian): + _name_template = r"{band}_APP_SCI_PSF_MEDIAN" + + + diff --git a/metisp/pymetis/src/pymetis/dataitems/hci/ifuHci.py b/metisp/pymetis/src/pymetis/dataitems/hci/ifuHci.py new file mode 100644 index 00000000..a1cb179b --- /dev/null +++ b/metisp/pymetis/src/pymetis/dataitems/hci/ifuHci.py @@ -0,0 +1,360 @@ +""" +This file is part of the METIS Pipeline. +Copyright (C) 2024 European Southern Observatory + +This program is free software; you can edistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +""" + +import cpl +from cpl.core import Image, Table + +from pymetis.classes.dataitems import ImageDataItem +from pymetis.classes.mixins import CgrphRavcMixin, CgrphCvcMixin, CgrphAppMixin +from pymetis.classes.mixins.cgrph import CgrphSpecificMixin + + +class IfuOffAxisPsfRaw(ImageDataItem, abstract=True): + + _name_template = r'IFU_OFF_AXIS_PSF_RAW' + _title_template = r"IFU RAVC sci calibration" + _description_template = "calibration ADI image data" + _frame_group = cpl.ui.Frame.FrameGroup.RAW + _frame_level = cpl.ui.Frame.FrameLevel.FINAL + _oca_keywords = {'PRO.CATG', 'INS.OPTI3.NAME', 'INS.OPTI9.NAME', 'INS.OPTI10.NAME', 'DRS.FILTER'} + + _schema = { + 'PRIMARY': None, + 'DET1.DATA': Image, + } + +class IfuAdiCalibrated(CgrphSpecificMixin, ImageDataItem, abstract=True): + + _name_template = r'IFU_RAVC_SCI_CALIBRATED' + _title_template = r"IFU RAVC sci calibration" + _description_template = "calibration ADI image data" + _frame_group = cpl.ui.Frame.FrameGroup.PRODUCT + _frame_level = cpl.ui.Frame.FrameLevel.FINAL + _oca_keywords = {'PRO.CATG', 'INS.OPTI3.NAME', 'INS.OPTI9.NAME', 'INS.OPTI10.NAME', 'DRS.FILTER'} + + _schema = { + 'PRIMARY': None, + 'DET1.DATA': Image, + } + +class IfuOnAxisPsfTemplate(ImageDataItem, abstract=True): + + _name_template = r'IFU_ON_AXIS_PSF_TEMPLATE' + _title_template = r"IFU RAVC sci calibration" + _description_template = "calibration ADI image data" + _frame_group = cpl.ui.Frame.FrameGroup.CALIB + _frame_level = cpl.ui.Frame.FrameLevel.FINAL + _oca_keywords = {'PRO.CATG', 'INS.OPTI3.NAME', 'INS.OPTI9.NAME', 'INS.OPTI10.NAME', 'DRS.FILTER'} + + _schema = { + 'PRIMARY': None, + 'DET1.DATA': Image, + } + + + +class IfuSciCentred(CgrphSpecificMixin, ImageDataItem, abstract=True): + + _name_template = r"IFU_RAVC_SCI_CENTRED" + _title_template = r"IFU RAVC sci centred" + _description_template = "" + _frame_group = cpl.ui.Frame.FrameGroup.PRODUCT + _frame_level = cpl.ui.Frame.FrameLevel.FINAL + _oca_keywords = {'PRO.CATG', 'INS.OPTI3.NAME', 'INS.OPTI9.NAME', 'INS.OPTI10.NAME', 'DRS.FILTER'} + + _schema = { + 'PRIMARY': None, + 'DET1.DATA': Image, + } + +class IfuCentroidTab(CgrphSpecificMixin, ImageDataItem, abstract=True): + + _name_template = r'IFU_RAVC_CENTROID_TAB' + _title_template = r"IFU RAVC centroid tab" + _description_template = "" + _frame_group = cpl.ui.Frame.FrameGroup.PRODUCT + _frame_level = cpl.ui.Frame.FrameLevel.FINAL + _oca_keywords = {'PRO.CATG', 'INS.OPTI3.NAME', 'INS.OPTI9.NAME', 'INS.OPTI10.NAME', 'DRS.FILTER'} + + _schema = { + 'PRIMARY': None, + 'DET1.DATA': Table, + } + +class IfuSciSpeckle(CgrphSpecificMixin, ImageDataItem, abstract=True): + + _name_template = r'IFU_RAVC_SCI_SPECKLE' + _title_template = r"IFU RAVC sci speckle" + _description_template = "" + _frame_group = cpl.ui.Frame.FrameGroup.PRODUCT + _frame_level = cpl.ui.Frame.FrameLevel.FINAL + _oca_keywords = {'PRO.CATG', 'INS.OPTI3.NAME', 'INS.OPTI9.NAME', 'INS.OPTI10.NAME', 'DRS.FILTER'} + + _schema = { + 'PRIMARY': None, + 'DET1.DATA': Image, + } + +class IfuSciHifilt(CgrphSpecificMixin, ImageDataItem, abstract=True): + + _name_template = r'IFU_RAVC_SCI_HIFILT' + _title_template = r"IFU RAVC sci hifilt" + _description_template = "" + _frame_group = cpl.ui.Frame.FrameGroup.PRODUCT + _frame_level = cpl.ui.Frame.FrameLevel.FINAL + _oca_keywords = {'PRO.CATG', 'INS.OPTI3.NAME', 'INS.OPTI9.NAME', 'INS.OPTI10.NAME', 'DRS.FILTER'} + + _schema = { + 'PRIMARY': None, + 'DET1.DATA': Image, + } + +class IfuSciDerotatedPsfsub(CgrphSpecificMixin, ImageDataItem, abstract=True): + + _name_template = r'IFU_RAVC_SCI_DEROTATED_PSFSUB' + _title_template = r"IFU RAVC sci derotated psfsub" + _description_template = "" + _frame_group = cpl.ui.Frame.FrameGroup.PRODUCT + _frame_level = cpl.ui.Frame.FrameLevel.FINAL + _oca_keywords = {'PRO.CATG', 'INS.OPTI3.NAME', 'INS.OPTI9.NAME', 'INS.OPTI10.NAME', 'DRS.FILTER'} + + _schema = { + 'PRIMARY': None, + 'DET1.DATA': Image, + } + +class IfuSciDerotated(CgrphSpecificMixin, ImageDataItem, abstract=True): + + _name_template = r'IFU_RAVC_SCI_DEROTATED' + _title_template = r"IFU RAVC sci derotated" + _description_template = "" + _frame_group = cpl.ui.Frame.FrameGroup.PRODUCT + _frame_level = cpl.ui.Frame.FrameLevel.FINAL + _oca_keywords = {'PRO.CATG', 'INS.OPTI3.NAME', 'INS.OPTI9.NAME', 'INS.OPTI10.NAME', 'DRS.FILTER'} + + _schema = { + 'PRIMARY': None, + 'DET1.DATA': Image, + } + +class IfuSciContrastRadprof(CgrphSpecificMixin, ImageDataItem, abstract=True): + + _name_template = r'IFU_RAVC_SCI_CONTRAST_RADPROF' + _title_template = r"IFU RAVC sci contrast radprof" + _description_template = "" + _frame_group = cpl.ui.Frame.FrameGroup.PRODUCT + _frame_level = cpl.ui.Frame.FrameLevel.FINAL + _oca_keywords = {'PRO.CATG', 'INS.OPTI3.NAME', 'INS.OPTI9.NAME', 'INS.OPTI10.NAME', 'DRS.FILTER'} + + _schema = { + 'PRIMARY': None, + 'DET1.DATA': Table, + } + +class IfuSciContrastAdi(CgrphSpecificMixin, ImageDataItem, abstract=True): + + _name_template = r'IFU_RAVC_SCI_CONTRAST_ADI' + _title_template = r"IFU RAVC sci contrast adi" + _description_template = "" + _frame_group = cpl.ui.Frame.FrameGroup.PRODUCT + _frame_level = cpl.ui.Frame.FrameLevel.FINAL + _oca_keywords = {'PRO.CATG', 'INS.OPTI3.NAME', 'INS.OPTI9.NAME', 'INS.OPTI10.NAME', 'DRS.FILTER'} + + _schema = { + 'PRIMARY': None, + 'DET1.DATA': Table, + } + +class IfuSciThroughput(CgrphSpecificMixin, ImageDataItem, abstract=True): + + _name_template = r'IFU_RAVC_SCI_THROUGHPUT' + _title_template = r"IFU RAVC sci throughput" + _description_template = "" + _frame_group = cpl.ui.Frame.FrameGroup.PRODUCT + _frame_level = cpl.ui.Frame.FrameLevel.FINAL + _oca_keywords = {'PRO.CATG', 'INS.OPTI3.NAME', 'INS.OPTI9.NAME', 'INS.OPTI10.NAME', 'DRS.FILTER'} + + _schema = { + 'PRIMARY': None, + 'DET1.DATA': Table, + } + +class IfuSciCoverage(CgrphSpecificMixin, ImageDataItem, abstract=True): + + _name_template = r'IFU_RAVC_SCI_COVERAGE' + _title_template = r"IFU RAVC sci coverage" + _description_template = "" + _frame_group = cpl.ui.Frame.FrameGroup.PRODUCT + _frame_level = cpl.ui.Frame.FrameLevel.FINAL + _oca_keywords = {'PRO.CATG', 'INS.OPTI3.NAME', 'INS.OPTI9.NAME', 'INS.OPTI10.NAME', 'DRS.FILTER'} + + _schema = { + 'PRIMARY': None, + 'DET1.DATA': Image, + } + +class IfuSciSnr(CgrphSpecificMixin, ImageDataItem, abstract=True): + + _name_template = r'IFU_RAVC_SCI_SNR' + _title_template = r"IFU RAVC sci snr" + _description_template = "" + _frame_group = cpl.ui.Frame.FrameGroup.PRODUCT + _frame_level = cpl.ui.Frame.FrameLevel.FINAL + _oca_keywords = {'PRO.CATG', 'INS.OPTI3.NAME', 'INS.OPTI9.NAME', 'INS.OPTI10.NAME', 'DRS.FILTER'} + + _schema = { + 'PRIMARY': None, + 'DET1.DATA': Image, + } + +# IFU data types for metis_ifu_adi_cgrph + +class IfuRavcSciThroughput(CgrphAppMixin, IfuSciThroughput): + pass + +class IfuCvcSciThroughput(CgrphAppMixin, IfuSciThroughput): + pass + +class IfuAppSciThroughput(CgrphAppMixin, IfuSciThroughput): + pass + + +class IfuAppCalibrated(CgrphAppMixin, IfuAdiCalibrated): + pass + +class IfuRavcCalibrated(CgrphRavcMixin, IfuAdiCalibrated): + pass + +class IfuCvcCalibrated(CgrphCvcMixin, IfuAdiCalibrated): + pass + + +class IfuRavcSciCentred(CgrphAppMixin, IfuSciCentred): + pass + +class IfuRavcCentroidTab(CgrphAppMixin, IfuCentroidTab): + pass + +class IfuCvcSciCentred(CgrphAppMixin, IfuSciCentred): + pass + +class IfuCvcCentroidTab(CgrphAppMixin, IfuCentroidTab): + pass + +class IfuAppSciCentred(CgrphAppMixin, IfuSciCentred): + pass + +class IfuAppCentroidTab(CgrphAppMixin, IfuCentroidTab): + pass + + +class IfuCvcSciSpeckle(CgrphAppMixin, IfuSciSpeckle): + pass + + +class IfuCvcSciHifilt(CgrphAppMixin, IfuSciHifilt): + pass + +class IfuRavcSciSpeckle(CgrphAppMixin, IfuSciSpeckle): + pass + + +class IfuRavcSciHifilt(CgrphAppMixin, IfuSciHifilt): + pass + +class IfuAppSciSpeckle(CgrphAppMixin, IfuSciSpeckle): + pass + + +class IfuAppSciHifilt(CgrphAppMixin, IfuSciHifilt): + pass + + +class IfuCvcSciDerotatedPsfsub(CgrphAppMixin, IfuSciDerotatedPsfsub): + pass + + +class IfuCvcSciDerotated(CgrphAppMixin, IfuSciDerotated): + pass + + + +class IfuRavcSciDerotatedPsfsub(CgrphAppMixin, IfuSciDerotatedPsfsub): + pass + + +class IfuRavcSciDerotated(CgrphAppMixin, IfuSciDerotated): + pass + + + +class IfuAppSciDerotatedPsfsub(CgrphAppMixin, IfuSciDerotatedPsfsub): + pass + + +class IfuAppSciDerotated(CgrphAppMixin, IfuSciDerotated): + pass + + +class IfuCvcSciContrastRadprof(CgrphAppMixin, IfuSciContrastRadprof): + pass + + +class IfuCvcSciContrastAdi(CgrphAppMixin, IfuSciContrastAdi): + pass + + +class IfuRavcSciContrastRadprof(CgrphAppMixin, IfuSciContrastRadprof): + pass + + +class IfuRavcSciContrastAdi(CgrphAppMixin, IfuSciContrastAdi): + pass + + +class IfuAppSciContrastRadprof(CgrphAppMixin, IfuSciContrastRadprof): + pass + + +class IfuAppSciContrastAdi(CgrphAppMixin, IfuSciContrastAdi): + pass + + +class IfuCvcSciCoverage(CgrphAppMixin, IfuSciCoverage): + pass + + +class IfuCvcSciSnr(CgrphAppMixin, IfuSciSnr): + pass + + +class IfuRavcSciCoverage(CgrphAppMixin, IfuSciCoverage): + pass + + +class IfuRavcSciSnr(CgrphAppMixin, IfuSciSnr): + pass + + +class IfuAppSciCoverage(CgrphAppMixin, IfuSciCoverage): + pass + + +class IfuAppSciSnr(CgrphAppMixin, IfuSciSnr): + pass diff --git a/metisp/pymetis/src/pymetis/dataitems/ifu/ifu.py b/metisp/pymetis/src/pymetis/dataitems/ifu/ifu.py index 50d2b94f..333331ac 100644 --- a/metisp/pymetis/src/pymetis/dataitems/ifu/ifu.py +++ b/metisp/pymetis/src/pymetis/dataitems/ifu/ifu.py @@ -118,4 +118,4 @@ class IfuScienceCubeCalibrated(BandIfuMixin, ImageDataItem): _schema = { 'PRIMARY': None, 'IMAGE': Image, - } \ No newline at end of file + } diff --git a/metisp/pymetis/src/pymetis/recipes/hci/metis_ifu_adi_cgrph.py b/metisp/pymetis/src/pymetis/recipes/hci/metis_ifu_adi_cgrph.py new file mode 100644 index 00000000..27bb1767 --- /dev/null +++ b/metisp/pymetis/src/pymetis/recipes/hci/metis_ifu_adi_cgrph.py @@ -0,0 +1,166 @@ +""" +Thi file is part of the METIS Pipeline. +Copyright (C) 2024 European Southern Observatory + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +""" + +from pyesorex.parameter import ParameterList, ParameterEnum + +# import the dataitems we use +from pymetis.classes.dataitems import DataItem, Hdu +from pymetis.dataitems.distortion import IfuDistortionTable +from pymetis.dataitems.ifu import IfuSciReducedCube +#from pymetis.dataitems.hci import LmOffAxisPsfRaw, LmOnAxisPsfTemplate +from pymetis.dataitems.hci.ifuHci import IfuRavcCalibrated, IfuCvcCalibrated, IfuAppCalibrated + + +from pymetis.dataitems.hci.ifuHci import IfuRavcSciCentred, IfuRavcCentroidTab +from pymetis.dataitems.hci.ifuHci import IfuRavcSciSpeckle, IfuRavcSciHifilt, IfuRavcSciDerotatedPsfsub +from pymetis.dataitems.hci.ifuHci import IfuRavcSciDerotated +from pymetis.dataitems.hci.ifuHci import IfuRavcSciContrastRadprof, IfuRavcSciContrastAdi, IfuRavcSciThroughput +from pymetis.dataitems.hci.ifuHci import IfuRavcSciCoverage, IfuRavcSciSnr + +from pymetis.dataitems.hci.ifuHci import IfuCvcSciCentred, IfuCvcCentroidTab +from pymetis.dataitems.hci.ifuHci import IfuCvcSciSpeckle, IfuCvcSciHifilt, IfuCvcSciDerotatedPsfsub +from pymetis.dataitems.hci.ifuHci import IfuCvcSciDerotated +from pymetis.dataitems.hci.ifuHci import IfuCvcSciContrastRadprof, IfuCvcSciContrastAdi, IfuCvcSciThroughput +from pymetis.dataitems.hci.ifuHci import IfuCvcSciCoverage, IfuCvcSciSnr + +from pymetis.dataitems.hci.ifuHci import IfuAppSciCentred, IfuAppCentroidTab +from pymetis.dataitems.hci.ifuHci import IfuAppSciSpeckle, IfuAppSciHifilt, IfuAppSciDerotatedPsfsub +from pymetis.dataitems.hci.ifuHci import IfuAppSciDerotated +from pymetis.dataitems.hci.ifuHci import IfuAppSciContrastRadprof, IfuAppSciContrastAdi, IfuAppSciThroughput +from pymetis.dataitems.hci.ifuHci import IfuAppSciCoverage, IfuAppSciSnr +from pymetis.dataitems.ifu.ifu import IfuScienceCubeCalibrated + +from pymetis.classes.recipes import MetisRecipe +from pymetis.classes.prefab import RawImageProcessor +from pymetis.classes.inputs import RawInput +from pymetis.utils.dummy import create_dummy_header, create_dummy_image, create_dummy_table + + + +class MetisIfuRavcSciCalibrateImpl(RawImageProcessor): + class InputSet(RawImageProcessor.InputSet): + class RawInput(RawInput): + Item = IfuScienceCubeCalibrated + #class LmOffAxisPsfRaw(RawInput): + # Item = OffAxisPsf + #class LmOnAxisPsfTemplate(RawInput): + # Item = OnAxisPsfTemplate + + + + ProductIfuSciCalibrated = IfuRavcCalibrated + ProductIfuSciCentred = IfuRavcSciCentred + ProductIfuCentroidTab = IfuRavcCentroidTab + ProductIfuSciSpeckle = IfuRavcSciSpeckle + ProductIfuSciHifilt = IfuRavcSciHifilt + ProductIfuSciDerotatedPsfsub = IfuRavcSciDerotatedPsfsub + ProductIfuSciDerotated = IfuRavcSciDerotated + ProductIfuSciContrastRadprof = IfuRavcSciContrastRadprof + ProductIfuSciContrastAdi = IfuRavcSciContrastAdi + ProductIfuSciThroughput = IfuRavcSciThroughput + ProductIfuSciCoverage = IfuRavcSciCoverage + ProductIfuSciSnr = IfuRavcSciSnr + + def process(self) -> set[DataItem]: + + image = self.inputset.raw.load_data('IMAGE')[0] + #image = create_dummy_image() + table = create_dummy_table() + + primary_header = create_dummy_header() + header_ifuSciCalibrated = create_dummy_header() + header_ifuSciCentred = create_dummy_header() + header_ifuCentroidTable = create_dummy_header() + header_ifuSciSpeckle = create_dummy_header() + header_ifuSciHifilt = create_dummy_header() + header_ifuSciDerotatedPsfsub = create_dummy_header() + header_ifuSciDerotated = create_dummy_header() + header_ifuSciContrastRadprof = create_dummy_header() + header_ifuSciContrastAdi = create_dummy_header() + header_ifuSciThroughput = create_dummy_header() + header_ifuSciCoverage = create_dummy_header() + header_ifuSciSnr = create_dummy_header() + + + product_ifuSciCalibrated = self.ProductIfuSciCalibrated( + primary_header, + Hdu(header_ifuSciCalibrated, image, name='DET1.DATA'), + ) + product_ifuSciCentred = self.ProductIfuSciCentred( + primary_header, + Hdu(header_ifuSciCentred, image, name='DET1.DATA'), + ) + product_ifuCentroidTable = self.ProductIfuCentroidTab( + primary_header, + Hdu(header_ifuCentroidTable, table, name='DET1.DATA'), + ) + product_ifuSciSpeckle = self.ProductIfuSciSpeckle( + primary_header, + Hdu(header_ifuSciSpeckle, image, name='DET1.DATA'), + ) + product_ifuSciHifilt = self.ProductIfuSciHifilt( + primary_header, + Hdu(header_ifuSciHifilt, image, name='DET1.DATA'), + ) + product_ifuSciDerotatedPsfsub = self.ProductIfuSciDerotatedPsfsub( + primary_header, + Hdu(header_ifuSciDerotatedPsfsub, image, name='DET1.DATA'), + ) + product_ifuSciDerotated = self.ProductIfuSciDerotated( + primary_header, + Hdu(header_ifuSciDerotated, image, name='DET1.DATA'), + ) + product_ifuSciContrastRadprof = self.ProductIfuSciContrastRadprof( + primary_header, + Hdu(header_ifuSciContrastRadprof, table, name='DET1.DATA'), + ) + product_ifuSciContrastAdi = self.ProductIfuSciContrastAdi( + primary_header, + Hdu(header_ifuSciContrastAdi, table, name='DET1.DATA'), + ) + product_ifuSciThroughput = self.ProductIfuSciThroughput( + primary_header, + Hdu(header_ifuSciThroughput, table, name='DET1.DATA'), + ) + product_ifuSciCoverage = self.ProductIfuSciCoverage( + primary_header, + Hdu(header_ifuSciCoverage, image, name='DET1.DATA'), + ) + product_ifuSciSnr = self.ProductIfuSciSnr( + primary_header, + Hdu(header_ifuSciSnr, image, name='DET1.DATA'), + ) + + return {product_ifuSciCalibrated, product_ifuSciCentred, product_ifuSciCentred, product_ifuCentroidTable, product_ifuSciHifilt, product_ifuSciDerotatedPsfsub, product_ifuSciDerotated, product_ifuSciContrastRadprof, product_ifuSciContrastAdi, product_ifuSciThroughput, product_ifuSciCoverage, product_ifuSciSnr} + + +class MetisIfuRavcSciCalibrated(MetisRecipe): + _name: str = "metis_ifu_adi_cgrph" + _version: str = "0.1" + _author: str = "Jennifer Karr, A*" + _email: str = "jkarr@asiaa.sinica.edu.tw" + _synopsis: str = "ADI postprocssing" + + _matched_keywords: set[str] = {'DRS.FILTER'} + _algorithm = """TODO""" + + parameters = ParameterList([]) + + Impl = MetisIfuRavcSciCalibrateImpl + diff --git a/metisp/pymetis/src/pymetis/recipes/hci/metis_lm_adi_app.py b/metisp/pymetis/src/pymetis/recipes/hci/metis_lm_adi_app.py new file mode 100644 index 00000000..a76c39ae --- /dev/null +++ b/metisp/pymetis/src/pymetis/recipes/hci/metis_lm_adi_app.py @@ -0,0 +1,161 @@ +""" +Thi file is part of the METIS Pipeline. +Copyright (C) 2024 European Southern Observatory + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +""" + +from pyesorex.parameter import ParameterList, ParameterEnum + +# import the dataitems we use +from pymetis.classes.dataitems import DataItem, Hdu +from pymetis.dataitems.distortion import LmDistortionTable +from pymetis.dataitems.img.basicreduced import LmSciCalibrated +#from pymetis.dataitems.hci import LmOffAxisPsfRaw, LmOnAxisPsfTemplate +from pymetis.dataitems.hci.hci import LmAppCalibrated +from pymetis.dataitems.hci.hci import AdiCalibrated + + +from pymetis.dataitems.hci.hci import AdiCalibrated, LmAppSciCentred, LmAppCentroidTab +from pymetis.dataitems.hci.hci import LmAppSciSpeckle, LmAppSciHifilt, LmAppSciDerotatedPsfsub +from pymetis.dataitems.hci.hci import LmAppSciDerotated +from pymetis.dataitems.hci.hci import LmAppSciContrastRadprof, LmAppSciContrastAdi, LmAppSciThroughput +from pymetis.dataitems.hci.hci import LmAppSciCoverage, LmAppSciSnr, LmAppPsfMedian +from pymetis.classes.recipes import MetisRecipe +from pymetis.classes.prefab import RawImageProcessor +from pymetis.classes.inputs import RawInput +from pymetis.utils.dummy import create_dummy_header, create_dummy_image, create_dummy_table + + +class MetisLmAppSciCalibrateImpl(RawImageProcessor): + class InputSet(RawImageProcessor.InputSet): + class RawInput(RawInput): + Item = LmSciCalibrated + #class LmOffAxisPsfRaw(RawInput): + # Item = OffAxisPsf + #class LmOnAxisPsfTemplate(RawInput): + # Item = OnAxisPsfTemplate + + + + ProductLmSciCalibrated = LmAppCalibrated + ProductLmSciCentred = LmAppSciCentred + ProductLmCentroidTab = LmAppCentroidTab + ProductLmSciSpeckle = LmAppSciSpeckle + ProductLmSciHifilt = LmAppSciHifilt + ProductLmSciDerotatedPsfsub = LmAppSciDerotatedPsfsub + ProductLmSciDerotated = LmAppSciDerotated + ProductLmSciContrastRadprof = LmAppSciContrastRadprof + ProductLmSciContrastAdi = LmAppSciContrastAdi + ProductLmSciThroughput = LmAppSciThroughput + ProductLmSciCoverage = LmAppSciCoverage + ProductLmSciSnr = LmAppSciSnr + ProductLmSciPsfMedian = LmAppPsfMedian + + def process(self) -> set[DataItem]: + + image = self.inputset.raw.load_data('DET1.DATA')[0] + #image = create_dummy_image() + table = create_dummy_table() + + primary_header = create_dummy_header() + header_lmSciCalibrated = create_dummy_header() + header_lmSciCentred = create_dummy_header() + header_lmCentroidTable = create_dummy_header() + header_lmSciSpeckle = create_dummy_header() + header_lmSciHifilt = create_dummy_header() + header_lmSciDerotatedPsfsub = create_dummy_header() + header_lmSciDerotated = create_dummy_header() + header_lmSciContrastRadprof = create_dummy_header() + header_lmSciContrastAdi = create_dummy_header() + header_lmSciThroughput = create_dummy_header() + header_lmSciCoverage = create_dummy_header() + header_lmSciSnr = create_dummy_header() + header_lmSciPsfMedian = create_dummy_header() + + + product_lmSciCalibrated = self.ProductLmSciCalibrated( + primary_header, + Hdu(header_lmSciCalibrated, image, name='DET1.DATA'), + ) + product_lmSciCentred = self.ProductLmSciCentred( + primary_header, + Hdu(header_lmSciCentred, image, name='DET1.DATA'), + ) + product_lmCentroidTable = self.ProductLmCentroidTab( + primary_header, + Hdu(header_lmCentroidTable, table, name='DET1.DATA'), + ) + product_lmSciSpeckle = self.ProductLmSciSpeckle( + primary_header, + Hdu(header_lmSciSpeckle, image, name='DET1.DATA'), + ) + product_lmSciHifilt = self.ProductLmSciHifilt( + primary_header, + Hdu(header_lmSciHifilt, image, name='DET1.DATA'), + ) + product_lmSciDerotatedPsfsub = self.ProductLmSciDerotatedPsfsub( + primary_header, + Hdu(header_lmSciDerotatedPsfsub, image, name='DET1.DATA'), + ) + product_lmSciDerotated = self.ProductLmSciDerotated( + primary_header, + Hdu(header_lmSciDerotated, image, name='DET1.DATA'), + ) + product_lmSciContrastRadprof = self.ProductLmSciContrastRadprof( + primary_header, + Hdu(header_lmSciContrastRadprof, table, name='DET1.DATA'), + ) + product_lmSciContrastAdi = self.ProductLmSciContrastAdi( + primary_header, + Hdu(header_lmSciContrastAdi, table, name='DET1.DATA'), + ) + product_lmSciThroughput = self.ProductLmSciThroughput( + primary_header, + Hdu(header_lmSciThroughput, table, name='DET1.DATA'), + ) + product_lmSciCoverage = self.ProductLmSciCoverage( + primary_header, + Hdu(header_lmSciCoverage, image, name='DET1.DATA'), + ) + product_lmSciSnr = self.ProductLmSciSnr( + primary_header, + Hdu(header_lmSciSnr, image, name='DET1.DATA'), + ) + product_lmSciPsfMedian = self.ProductLmSciPsfMedian( + primary_header, + Hdu(header_lmSciPsfMedian, image, name='DET1.DATA'), + ) + + + + return {product_lmSciCalibrated, product_lmSciCentred, product_lmSciCentred, product_lmCentroidTable, product_lmSciHifilt, product_lmSciDerotatedPsfsub, product_lmSciDerotated, product_lmSciContrastRadprof, product_lmSciContrastAdi, product_lmSciThroughput, product_lmSciCoverage, product_lmSciSnr, product_lmSciPsfMedian} + + +class MetisLmAppSciCalibrated(MetisRecipe): + _name: str = "metis_lm_adi_app" + _version: str = "0.1" + _author: str = "Jennifer Karr, A*" + _email: str = "jkarr@asiaa.sinica.edu.tw" + _synopsis: str = "ADI postprocssing" + + _matched_keywords: set[str] = {'DRS.FILTER'} + _algorithm = """TODO""" + + parameters = ParameterList([]) + + Impl = MetisLmAppSciCalibrateImpl + + diff --git a/metisp/pyrecipes/metis_recipes.py b/metisp/pyrecipes/metis_recipes.py index 0e9bda5e..c87ebbd8 100644 --- a/metisp/pyrecipes/metis_recipes.py +++ b/metisp/pyrecipes/metis_recipes.py @@ -19,3 +19,5 @@ from pymetis.recipes import * from pymetis.recipes.hci.metis_img_adi_cgrph import MetisLmRavcSciCalibrated +from pymetis.recipes.hci.metis_ifu_adi_cgrph import MetisIfuRavcSciCalibrated +from pymetis.recipes.hci.metis_lm_adi_app import MetisLmAppSciCalibrated diff --git a/metisp/workflows/metis/metis_ifu_ravc_wkf.py b/metisp/workflows/metis/metis_ifu_ravc_wkf.py new file mode 100644 index 00000000..392debae --- /dev/null +++ b/metisp/workflows/metis/metis_ifu_ravc_wkf.py @@ -0,0 +1,12 @@ +from edps import SCIENCE, QC1_CALIB, QC0, CALCHECKER +from edps import task, subworkflow, qc1calib, match_rules, FilterMode, calchecker +from .metis_datasources import * +from . import metis_keywords as metis_kwd +from .metis_ifu_wkf import * + +ifu_adi_cgrph = (task('metis_ifu_adi_cgrph') + .with_recipe('metis_ifu_adi_cgrph') + .with_main_input(ifu_calibrate_task) + .with_meta_targets([SCIENCE]) + .build()) + diff --git a/metisp/workflows/metis/metis_lm_app_wkf.py b/metisp/workflows/metis/metis_lm_app_wkf.py new file mode 100644 index 00000000..ded101e0 --- /dev/null +++ b/metisp/workflows/metis/metis_lm_app_wkf.py @@ -0,0 +1,11 @@ +from edps import SCIENCE, QC1_CALIB, QC0, CALCHECKER +from edps import task, subworkflow, qc1calib, match_rules, FilterMode, calchecker +from .metis_datasources import * +from . import metis_keywords as metis_kwd + +from .metis_lm_img_wkf import * +lm_adi_app = (task('metis_lm_adi_app') + .with_recipe('metis_lm_adi_app') + .with_main_input(lm_img_calib_task) + .with_meta_targets([SCIENCE]) + .build()) diff --git a/metisp/workflows/metis/metis_lm_ravc_wkf.py b/metisp/workflows/metis/metis_lm_ravc_wkf.py index 962c747c..3811bb8b 100644 --- a/metisp/workflows/metis/metis_lm_ravc_wkf.py +++ b/metisp/workflows/metis/metis_lm_ravc_wkf.py @@ -2,99 +2,12 @@ from edps import task, subworkflow, qc1calib, match_rules, FilterMode, calchecker from .metis_datasources import * from . import metis_keywords as metis_kwd +#from .metis_lm_img_wkf import lm_img_lingain_task, lm_img_dark_task, lm_img_flat_task, lm_img_distortion_task, lm_img_basic_reduce_sci_task, lm_img_basic_reduce_sci_task, lm_img_basic_reduce_sky_task, lm_img_basic_reduce_std_task, lm_img_background_sci_task, lm_img_basic_reduce_std_task, lm_img_standard_flux_task, lm_img_calib_task -lm_img_lingain_task1 = (task('metis_lm_img_lingain1') - .with_recipe("metis_det_lingain") - .with_main_input(detlin_2rg_raw) - .with_associated_input(lm_wcu_off_raw) - .build()) - -lm_img_dark_task1 = (task('metis_lm_img_dark1') - .with_main_input(dark_2rg_raw) - .with_associated_input(lm_img_lingain_task1) - .with_associated_input(persistence_map) - .with_recipe("metis_det_dark") - .build()) - -lm_img_flat_task1 = (task("metis_lm_img_flat1") - .with_main_input(lm_flat_lamp_raw) - .with_associated_input(lm_img_dark_task1) - .with_associated_input(lm_img_lingain_task1) - .with_associated_input(persistence_map) - .with_recipe("metis_lm_img_flat") - .build()) - -lm_img_distortion_task1 = (task('metis_lm_img_cal_distortion1') - .with_main_input(lm_distortion_raw) - .with_associated_input(lm_wcu_off_raw) - .with_associated_input(pinhole_table) - .with_associated_input(lm_img_lingain_task1) - .with_associated_input(persistence_map) - .with_recipe('metis_lm_img_distortion') - .build()) - -lm_img_basic_reduce_sci_task1 = (task('metis_lm_img_basic_reduce_sci1') - .with_recipe('metis_lm_img_basic_reduce') - .with_main_input(lm_image_sci_raw) - .with_associated_input(lm_img_lingain_task1) - .with_associated_input(lm_img_dark_task1) - .with_associated_input(lm_img_flat_task1) - .with_associated_input(persistence_map) - .with_meta_targets([SCIENCE]) - .build()) - -lm_img_basic_reduce_sky_task1 = (task('metis_lm_img_basic_reduce_sky1') - .with_recipe('metis_lm_img_basic_reduce') - .with_main_input(lm_image_sky_raw) - .with_associated_input(lm_img_lingain_task1) - .with_associated_input(lm_img_dark_task1) - .with_associated_input(lm_img_flat_task1) - .with_associated_input(persistence_map) - .with_meta_targets([SCIENCE]) - .build()) - -lm_img_basic_reduce_std_task1 = (task('metis_lm_img_basic_reduce_std1') - .with_recipe('metis_lm_img_basic_reduce') - .with_main_input(lm_image_std_raw) - .with_associated_input(lm_img_lingain_task1) - .with_associated_input(lm_img_dark_task1) - .with_associated_input(lm_img_flat_task1) - .with_associated_input(persistence_map) - .with_meta_targets([SCIENCE]) - .build()) - -lm_img_background_sci_task1 = (task('metis_lm_img_background_sci1') - .with_recipe('metis_lm_img_background') - .with_main_input(lm_img_basic_reduce_sci_task1) - .with_associated_input(lm_img_basic_reduce_sky_task1) - .with_meta_targets([SCIENCE]) - .build()) - -lm_img_basic_reduce_std_task1 = (task('metis_lm_img_background_std1') - .with_recipe('metis_lm_img_background') - .with_main_input(lm_img_basic_reduce_std_task1) - .with_associated_input(lm_img_basic_reduce_sky_task1) - .with_meta_targets([SCIENCE]) - .build()) - -lm_img_standard_flux_task1 = (task('metis_lm_img_standard_flux1') - .with_recipe('metis_lm_img_std_process') - .with_main_input(lm_img_basic_reduce_std_task1) - .with_associated_input(fluxstd_catalog) - .with_meta_targets([SCIENCE]) - .build()) - -lm_img_calib_task1 = (task('metis_lm_img_calib1') - .with_recipe('metis_lm_img_calibrate') - .with_main_input(lm_img_background_sci_task1) - .with_associated_input(lm_img_standard_flux_task1) - .with_associated_input(lm_img_distortion_task1) - .with_meta_targets([SCIENCE]) - .build()) - -lm_ravc_post_task1 = (task('lm_ravc_post1') +from .metis_lm_img_wkf import * +lm_img_adi_ravc = (task('metis_lm_img_adi_ravc') .with_recipe('metis_img_adi_cgrph') - .with_main_input(lm_img_calib_task1) + .with_main_input(lm_img_calib_task) .with_meta_targets([SCIENCE]) .build()) # QC1 diff --git a/metisp/workflows/metis/metis_wkf.py b/metisp/workflows/metis/metis_wkf.py index 34944a70..96b1ca36 100644 --- a/metisp/workflows/metis/metis_wkf.py +++ b/metisp/workflows/metis/metis_wkf.py @@ -1,9 +1,12 @@ from edps import qc1calib, science, qc0 from .metis_datasources import * -from .metis_lm_img_wkf import * from .metis_pupil_imaging_wkf import * +from .metis_lm_img_wkf import * from .metis_ifu_wkf import * from .metis_lm_lss_wkf import * from .metis_n_lss_wkf import * -from .metis_n_img_wkf import * \ No newline at end of file +from .metis_n_img_wkf import * +from .metis_chophome_wkf import * +from .metis_lm_ravc_wkf import * +from .metis_ifu_ravc_wkf import *