Commit 3705f0f6 authored by Eugenio Schisano's avatar Eugenio Schisano
Browse files

Commit crappy dabatase with FITS files from density structure

parent 8402e3d0
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -17,6 +17,19 @@ Base = declarative_base()

engine = get_pg_engine(logger=logger)

class GridFiles(Base):
    __tablename__ = "grid_files"
    __table_args__ = (
        ForeignKeyConstraint(
            ('zipped_grid_name', 'run_id'),
            ['grid_parameters.zipped_grid_name', 'grid_parameters.run_id']
        ),
    )
    zipped_grid_name = Column(String(150), primary_key=True)
    quantity = Column(String(30), primary_key=True)
    fits_grid_name = Column(String)
    created_on = Column(DateTime)
    run_id = Column(String, primary_key=True)

class GridPars(Base):
    __tablename__ = "grid_parameters"
+44 −3
Original line number Diff line number Diff line
import logging
import uuid

import numpy as np
import os
import shutil
@@ -20,9 +22,10 @@ from assets.commons import (compute_power_law_radial_profile,
from assets.constants import (mean_molecular_mass,
                              radmc_input_headers,
                              radmc_lines_mode_mapping)
from stg.stg_build_db_structure import GridPars
from stg.stg_build_db_structure import GridPars, GridFiles
from astropy import units as u
from astropy import constants as cst
from astropy.io import fits

logger = setup_logger(name='STG')

@@ -155,7 +158,8 @@ def get_profiles(grid_metadata: dict) -> dict:
        'escprob_lengthscale': {
            'central_value': min((np.max(grid_metadata['grid_size']) *
                                  u.Unit(grid_metadata['grid_size_units'][np.argmax(grid_metadata['grid_size'])]))
            .to(u.cm).value, (2 * grid_metadata['maximum_radius'] * u.Unit(grid_metadata['maximum_radius_unit']))
                                 .to(u.cm).value,
                                 (2 * grid_metadata['maximum_radius'] * u.Unit(grid_metadata['maximum_radius_unit']))
                                 .to(u.cm).value),
            'power_law_index': 0,
            'value_at_reference': None,
@@ -252,6 +256,14 @@ def write_molecular_number_density_profiles(profiles: dict,
                          grid_metadata=grid_metadata)


def save_fits_grid_profile(quantity,
                           grid_metadata,
                           filename,
                           path=None):
    _path = validate_parameter(path, default=os.path.join('prs', 'fits', 'grids'))
    fits.writeto(os.path.join(_path, filename), quantity)


def convert_dimensional_unit(value: Union[float, None, str],
                             current_unit: str,
                             desired_unit: str) -> Union[float, None]:
@@ -360,6 +372,21 @@ def populate_grid_table(config: dict,
    return output_filename


def populate_grid_files(quantity : str,
                        engine: sqla_engine,
                        tgz_filename : str,
                        filename : str,
                        run_id : str):
    raw_insert_entry = {'zipped_grid_name': tgz_filename, 'quantity': quantity, 'fits_grid_name': filename,
                        'created_on': datetime.now(), 'run_id': run_id}
    upsert(
        table_object=GridFiles,
        row_dict=raw_insert_entry,
        conflict_keys=[GridFiles.zipped_grid_name, GridFiles.quantity, GridFiles.run_id],
        engine=engine
    )


def main(run_id: str,
         override_config: Union[dict, None] = None,
         path_radmc_files: Union[str, None] = None) -> str:
@@ -383,6 +410,7 @@ def main(run_id: str,
    write_radmc_lines_input(line_config=config['lines'],
                            path=input_files_dir,
                            logger=logger)

    write_molecular_number_density_profiles(profiles=profiles,
                                            grid_metadata=grid_metadata,
                                            line_config=config['lines'],
@@ -391,6 +419,19 @@ def main(run_id: str,
                                       engine=engine,
                                       grid_metadata=grid_metadata,
                                       run_id=run_id)

    grid_file_name = f'{str(uuid.uuid4())}.fits'
    save_fits_grid_profile(quantity=profiles['gas_number_density'],
                           grid_metadata=grid_metadata,
                           filename=grid_file_name
                           )

    populate_grid_files(quantity='gas_number_density',
                        engine=engine,
                        tgz_filename=tgz_filename,
                        filename=grid_file_name,
                        run_id=run_id)

    make_tarfile(output_filename=tgz_filename,
                 source_dir=input_files_dir,
                 archive_path=os.path.join('stg', 'archive'))