Loading etl/stg/stg_build_db_structure.py +13 −0 Original line number Diff line number Diff line Loading @@ -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" Loading etl/stg/stg_radmc_input_generator.py +44 −3 Original line number Diff line number Diff line import logging import uuid import numpy as np import os import shutil Loading @@ -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') Loading Loading @@ -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, Loading Loading @@ -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]: Loading Loading @@ -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: Loading @@ -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'], Loading @@ -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')) Loading Loading
etl/stg/stg_build_db_structure.py +13 −0 Original line number Diff line number Diff line Loading @@ -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" Loading
etl/stg/stg_radmc_input_generator.py +44 −3 Original line number Diff line number Diff line import logging import uuid import numpy as np import os import shutil Loading @@ -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') Loading Loading @@ -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, Loading Loading @@ -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]: Loading Loading @@ -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: Loading @@ -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'], Loading @@ -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')) Loading