diff --git a/tardis/model/base.py b/tardis/model/base.py index acc2a9cdef6..dd7e9a32d80 100644 --- a/tardis/model/base.py +++ b/tardis/model/base.py @@ -14,6 +14,7 @@ from tardis.io.util import HDFWriterMixin from tardis.io.decay import IsotopeAbundances from tardis.model.density import HomologousDensity +from pyne import nucname logger = logging.getLogger(__name__) @@ -498,6 +499,9 @@ def from_csvy(cls, config): Radial1DModel """ + CSVY_SUPPORTED_COLUMNS = {'velocity', 'density', 't_rad', 'dilution_factor'} + + if os.path.isabs(config.csvy_model): csvy_model_fname = config.csvy_model else: @@ -507,9 +511,23 @@ def from_csvy(cls, config): base_dir = os.path.abspath(os.path.dirname(__file__)) schema_dir = os.path.join(base_dir, '..', 'io', 'schemas') csvy_schema_file = os.path.join(schema_dir, 'csvy_model.yml') - csvy_model_config = Configuration(validate_dict(csvy_model_config, + csvy_model_config = Configuration(validate_dict(csvy_model_config, schemapath=csvy_schema_file)) + if hasattr(csvy_model_data, 'columns'): + abund_names = set([name for name in csvy_model_data.columns + if nucname.iselement(name) or nucname.isnuclide(name)]) + unsupported_columns = set(csvy_model_data.columns) - abund_names - CSVY_SUPPORTED_COLUMNS + + field_names = set([field['name'] for field in csvy_model_config.datatype.fields]) + assert set(csvy_model_data.columns) - field_names == set(),\ + 'CSVY columns exist without field descriptions' + assert field_names - set(csvy_model_data.columns) == set(),\ + 'CSVY field descriptions exist without corresponding csv data' + if unsupported_columns != set(): + logger.warning("The following columns are specified in the csvy" + "model file, but are IGNORED by TARDIS: %s"%(str(unsupported_columns))) + time_explosion = config.supernova.time_explosion.cgs electron_densities = None @@ -562,8 +580,8 @@ def from_csvy(cls, config): dilution_factor = None if hasattr(csvy_model_data, 'columns'): - if 'w' in csvy_model_data.columns: - dilution_factor = csvy_model_data['w'].iloc[0:].to_numpy() + if 'dilution_factor' in csvy_model_data.columns: + dilution_factor = csvy_model_data['dilution_factor'].iloc[0:].to_numpy() elif config.plasma.initial_t_rad > 0 * u.K: t_radiative = np.ones(no_of_shells) * config.plasma.initial_t_rad