Commit 035922e8 authored by Andrea Giannetti's avatar Andrea Giannetti
Browse files

Refactored code so that it avoids duplicating runs, if the same line is present in multiple ratios.

parent 9ddf09cc
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
/etl/mdl/radmc_files/*
scratches_and_co/
/etl/mdl/radmc3d_postprocessing.sh
/etl/prs/fits/cubes/*
/etl/prs/fits/moments/*
/etl/prs/fits/ratios/*
/etl/prs/fits/cubes/*.fits
/etl/prs/fits/grids/*.fits
/etl/prs/fits/moments/*.fits
/etl/prs/fits/ratios/*.fits
/etl/credentials/*
+29 −21
Original line number Diff line number Diff line
import glob
import os
import uuid
from itertools import product
from itertools import product, chain
from multiprocessing import Pool
from assets.commons import (load_config_file,
                            parse_grid_overrides,
@@ -13,7 +13,7 @@ from prs.prs_compute_integrated_fluxes_and_ratios import main as prs_main
from prs.prs_inspect_results import main as prs_inspection_main


def compute_grid(tdust, nh2, line_pairs, density_keyword):
def compute_grid(tdust, nh2, line, density_keyword):
    scratch_dir = os.path.join('mdl', 'scratches', str(uuid.uuid4()))
    overrides = {
        'grid': {
@@ -24,9 +24,6 @@ def compute_grid(tdust, nh2, line_pairs, density_keyword):
    tarname = stg_main(override_config=overrides,
                       path_radmc_files=scratch_dir,
                       run_id=run_id)
    for line_pair in line_pairs:
        cube_fits = []
        for line in line_pair:
    mdl_overrides = {
        'grid_lines': overrides,
        'model': {
@@ -35,12 +32,11 @@ def compute_grid(tdust, nh2, line_pairs, density_keyword):
            }
        }
    }
            cube_fits.append(execute_radmc_script(grid_tarfile=tarname,
    cube_fits_name = execute_radmc_script(grid_tarfile=tarname,
                                          override_config=mdl_overrides,
                                          radmc_input_path=scratch_dir,
                                                  run_id=run_id))
        prs_main(cube_fits_list=cube_fits,
                                          run_id=run_id)
    return nh2, tdust, line, cube_fits_name


def build_model_grid(run_id: str,
@@ -56,13 +52,25 @@ def build_model_grid(run_id: str,
                                             config=config)
    densities = parse_grid_overrides(par_name='gas_density',
                                     config=config)
    lines = config['overrides']['lines_to_process']
    line_pairs = config['overrides']['lines_to_process']
    line_set = set(chain.from_iterable(line_pairs))

    density_keyword = 'central_density' if _model_type == 'homogeneous' else 'density_at_reference'

    parallel_args = product(dust_temperatures, densities, [lines], [density_keyword])
    parallel_args = product(dust_temperatures, densities, line_set, [density_keyword])
    with Pool(8) as pool:
        pool.starmap(compute_grid, parallel_args)
        results = pool.starmap(compute_grid, parallel_args)

    results_map = {}
    for (nh2, tdust, line, cube_fits_name) in results:
        results_map[f'{str(nh2)}_{str(tdust)}_{line}'] = cube_fits_name

    for line_pair in line_pairs:
        for tdust, nh2 in product(dust_temperatures, densities):
            prs_main(cube_fits_list=[results_map[f'{str(nh2)}_{str(tdust)}_{line_pair[0]}'],
                                     results_map[f'{str(nh2)}_{str(tdust)}_{line_pair[1]}']],
                     run_id=run_id)

    if cleanup_scratches is True:
        scratches_dirs = glob.glob(os.path.join('mdl', 'scratches', '*'))
        for scratches in scratches_dirs:
+0 −1
Original line number Diff line number Diff line
@@ -2,7 +2,6 @@ import os
import sys
from itertools import product
from typing import Union

import sqlalchemy
from astropy import units as u
from datetime import datetime