Ejemplo n.º 1
0
    def make_analysis(self, dataset, xy_mask):

        masked_dataset = MaskedDataset(dataset=dataset, xy_mask=xy_mask)

        transformers = []
        for i in range(masked_dataset.uv_wavelengths.shape[0]):
            transformers.append(
                self.transformer_class(
                    uv_wavelengths=masked_dataset.uv_wavelengths[i],
                    grid=masked_dataset.grid_3d.grid_2d.in_radians))
        """
        def get_continuum(masked_dataset, regions):
            pass

        continuum = np.zeros(
            shape=(dataset.visibilities.shape[0], ),
            dtype=bool
        )
        for region in self.regions:
            continuum += region


        def func(masked_dataset, continuum):

            argspec = inspect.getargspec(MaskedDatasetLite.__init__)
            args = {}
            for argname in argspec.args:
                if argname not in ["self"]:
                    if hasattr(masked_dataset, argname):
                        array = getattr(masked_dataset, argname)
                        args[argname] = reshape_array(
                            array=array[~continuum]
                        )

            return MaskedDatasetLite(**args)

        masked_dataset_continuum = func(masked_dataset, continuum)
        #print(masked_dataset_continuum.uv_wavelengths.shape)

        transformer_continuum = self.transformer_class(
            uv_wavelengths=masked_dataset_continuum.uv_wavelengths,
            grid=masked_dataset.grid_3d.grid_2d.in_radians
        )

        # dirty_image = transformer_continuum.image_from_visibilities(
        #     visibilities=masked_dataset_continuum.visibilities
        # )
        # plt.figure()
        # plt.imshow(dirty_image[::-1], cmap="jet")
        # plt.xticks([])
        # plt.yticks([])
        # plt.show()
        """

        return Analysis(masked_dataset=masked_dataset,
                        transformers=transformers,
                        transformer_continuum=None,
                        lens_redshift=self.lens_redshift,
                        source_redshift=self.source_redshift,
                        image_path=self.optimizer.paths.image_path)
Ejemplo n.º 2
0
    def make_analysis(self, dataset, xy_mask):

        # NOTE: Multiple lines can be present in a cube, in which
        # case region will be a list (renamed to regions)
        masked_dataset = MaskedDataset(
            dataset=dataset,
            xy_mask=xy_mask,
            region=self.region
        )

        masked_dataset_continuum = RegionMaskedDataset(
            dataset=masked_dataset.dataset_outside_region,
            uv_mask=masked_dataset.uv_mask_outside_region,
            continuum=True
        )

        masked_dataset_line = RegionMaskedDataset(
            dataset=masked_dataset.dataset_inside_region,
            uv_mask=masked_dataset.uv_mask_inside_region,
            continuum=False
        )

        transformers = []
        for i in range(masked_dataset.uv_wavelengths.shape[0]):
            transformers.append(
                self.transformer_class(
                    uv_wavelengths=masked_dataset.uv_wavelengths[i],
                    grid=masked_dataset.grid_3d.grid_2d.in_radians
                )
            )

        transformer_continuum = self.transformer_class(
            uv_wavelengths=masked_dataset_continuum.uv_wavelengths,
            grid=masked_dataset.grid_3d.grid_2d.in_radians
        )

        # # NOTE: EXPERIMENTAL
        # holder = RegionMaskedDatasetsHolder(
        #     region_masked_datasets=[
        #         masked_dataset_continuum,
        #         masked_dataset_line
        #     ]
        # )
        # exit()

        # TODO: region_masked_datasets can be a class that holds individual
        # masked datasets and it's only function will be to differentiate between
        # a masked_dataset corresponding to the continuum and the rest.
        return Analysis(
            masked_dataset=masked_dataset,
            region_masked_datasets=[
                masked_dataset_continuum,
                masked_dataset_line
            ],
            transformers=transformers,
            transformer_continuum=transformer_continuum,
            image_path=self.optimizer.paths.image_path
        )
Ejemplo n.º 3
0
    def make_analysis(self, dataset, xy_mask):

        masked_dataset = MaskedDataset(dataset=dataset, xy_mask=xy_mask)

        transformer = self.transformer_class(
            uv_wavelengths=masked_dataset.uv_wavelengths,
            grid=masked_dataset.grid.in_radians)

        return Analysis(masked_dataset=masked_dataset,
                        transformer=transformer,
                        self_calibration=self.self_calibration,
                        image_path=self.optimizer.paths.image_path)
Ejemplo n.º 4
0
    def make_analysis(self, dataset, xy_mask):

        masked_dataset = MaskedDataset(dataset=dataset, xy_mask=xy_mask)

        transformers = []
        for i in range(masked_dataset.uv_wavelengths.shape[0]):
            transformers.append(
                self.transformer_class(
                    uv_wavelengths=masked_dataset.uv_wavelengths[i],
                    grid=masked_dataset.grid_3d.grid_2d.in_radians))

        return Analysis(masked_dataset=masked_dataset,
                        transformers=transformers,
                        image_path=self.optimizer.paths.image_path)
Ejemplo n.º 5
0
    def make_analysis(self, dataset, xy_mask):

        # NOTE: The masked_dataset is no longer being used, instead each compoent
        # (i.e. continuum + emission line regions) each have their own masked_dataset
        # which is initialized here.
        def masked_datasets_from_regions(masked_dataset, regions):

            args = {
                "continuum":{}
            }

            idx = np.zeros(
                shape=(masked_dataset.visibilities.shape[0], ),
                dtype=bool
            )
            for i, region in enumerate(regions):
                idx += region.idx
                args["region_{}".format(i)] = {}

            if all(idx):
                continuum = False
            else:
                continuum = True

            argspec = inspect.getargspec(MaskedDatasetLite.__init__)

            #args = {}
            for argname in argspec.args:
                if argname not in ["self"]:
                    if hasattr(masked_dataset, argname):
                        array = getattr(masked_dataset, argname)

                        if continuum:
                            args["continuum"][argname] = reshape_array(
                                array=array[~idx]
                            )

                        for i, region in enumerate(regions):
                            args["region_{}".format(i)][argname] = reshape_array(
                                array=array[region.idx]
                            )
                            #args["region_{}".format(i)][argname] = np.average(a=array[region.idx], axis=0)

            masked_datasets = {
                "continuum":MaskedDatasetLite(**args["continuum"]) if continuum else None
            }
            for i, region in enumerate(regions):
                masked_datasets["region_{}".format(i)] = MaskedDatasetLite(**args["region_{}".format(i)])

            return masked_datasets

        # NOTE: Multiple lines can be present in a cube, in which
        # case region will be a list (renamed to regions) - DONE
        # NOTE: Can we skip the initialization of the masked dataset?
        masked_dataset = MaskedDataset(
            dataset=dataset,
            xy_mask=xy_mask,
        )

        masked_datasets = masked_datasets_from_regions(
            masked_dataset=masked_dataset,
            regions=self.regions
        )

        transformers = {}
        for key in masked_datasets.keys():
            if masked_datasets[key] is not None:
                transformers[key] = self.transformer_class(
                    uv_wavelengths=masked_datasets[key].uv_wavelengths,
                    grid=masked_dataset.grid_3d.grid_2d.in_radians
                )
            else:
                transformers[key] = None

        return Analysis(
            masked_datasets=masked_datasets,
            transformers=transformers,
            grid=masked_dataset.grid_3d.grid_2d,
            image_path=self.optimizer.paths.image_path
        )
Ejemplo n.º 6
0
    def make_analysis(self, dataset, mask):

        masked_dataset = MaskedDataset(dataset=dataset, mask=mask)

        return Analysis(masked_dataset=masked_dataset,
                        image_path=self.optimizer.paths.image_path)