Skip to content

New Hazard

FUTURE STATE

These table models are used to store data created by any suitable PSHA engine.

Seismic Hazard Model diagram

Different hazard engines, versions and/or configurations may produce compatible calcalution curves.

This model is similar to the current one, except that:

  • the concept of compatible producer configs is supported
  • HazardRealizationCurve records are identified solely by internal attributes & relationships. So toshi_hazard_soluton_id is removed but can be recorded in HazardRealizationMeta.

TODO: formalise logic tree branch identification for both source and GMM logic trees so that these are:

  • a) unique and unambigious, and
  • b) easily relatable to nzshm_model instances.

Tables:

  • CompatibleHazardConfig (CHC) - defines a logical identifier for compatable HCPCs. Model managers must ensure that compability holds true.
  • HazardCurveProducerConfig (HCPC) - stores the unique attributes that define compatible hazard curve producers.
  • HazardRealizationMeta - stores metadata common to a set of hazard realization curves.
  • HazardRealizationCurve - stores the individual hazard realisation curves.
  • HazardAggregation - stores the aggregated hazard curves see ./openquake_models for details
classDiagram
direction TB

class CompatibleHazardConfig {
    primary_key
}

class HazardCurveProducerConfig {
    primary_key
    fk_compatible_config

    producer_software = UnicodeAttribute()
    producer_version_id = UnicodeAttribute()
    configuration_hash = UnicodeAttribute() 
    configuration_data = UnicodeAttribute() 
}

class HazardRealizationMeta {
    partition_key = UnicodeAttribute(hash_key=True)  # a static value as we actually don't want to partition our data
    sort_key = UnicodeAttribute(range_key=True)

    fk_compatible_config
    fk_producer_config

    created = TimestampAttribute(default=datetime_now)

    ?hazard_solution_id = UnicodeAttribute()
    ?general_task_id = UnicodeAttribute()
    vs30 = NumberAttribute()  # vs30 value

    src_lt = JSONAttribute()  # sources meta as DataFrame JSON
    gsim_lt = JSONAttribute()  # gmpe meta as DataFrame JSON
    rlz_lt = JSONAttribute()  # realization meta as DataFrame JSON
}

class LocationIndexedModel {
    partition_key = UnicodeAttribute(hash_key=True)
    sort_key = UnicodeAttribute(range_key=True)

    nloc_001 = UnicodeAttribute()  # 0.001deg ~100m grid
    etc...
    version = VersionAttribute()
    uniq_id = UnicodeAttribute()

    lat = FloatAttribute()  # latitude decimal degrees
    lon = FloatAttribute()  # longitude decimal degrees

    vs30 = EnumConstrainedIntegerAttribute(VS30Enum)
    site_vs30 = FloatAttribute(null=True)

    created = TimestampAttribute(default=datetime_now)    
}

class HazardRealizationCurve {
    ... fields from LocationIndexedModel
    fk_metadata
    fk_compatible_config

    ?source_tags = UnicodeSetAttribute()
    ?source_ids = UnicodeSetAttribute()

    rlz # TODO ID of the realization
    values = ListAttribute(of=IMTValuesAttribute)
}

class HazardAggregation {
    ... fields from LocationIndexedModel

    fk_compatible_config

    hazard_model_id = UnicodeAttribute() e.g. `NSHM_V1.0.4``
    imt = EnumConstrainedUnicodeAttribute(IntensityMeasureTypeEnum)
    agg = EnumConstrainedUnicodeAttribute(AggregationEnum)
    values = ListAttribute(of=LevelValuePairAttribute)    
}

CompatibleHazardConfig --> "1..*" HazardCurveProducerConfig
HazardRealizationMeta --> "*..1" HazardCurveProducerConfig
HazardRealizationMeta --> "*..1" CompatibleHazardConfig

LocationIndexedModel <|-- HazardRealizationCurve
LocationIndexedModel <|-- HazardAggregation

HazardRealizationCurve --> "*..1" CompatibleHazardConfig
HazardRealizationCurve --> "*..1" HazardRealizationMeta

HazardAggregation --> "*..1" CompatibleHazardConfig