diff --git a/projects/nshmp-apps/src/app/designmaps/rtgm/services/app.service.ts b/projects/nshmp-apps/src/app/designmaps/rtgm/services/app.service.ts index f9ab0a7b36251d636f5a81ecbc82991f17ad6704..60c6214fcfa6c0b8709c97fd54dea45f19c6f8cd 100644 --- a/projects/nshmp-apps/src/app/designmaps/rtgm/services/app.service.ts +++ b/projects/nshmp-apps/src/app/designmaps/rtgm/services/app.service.ts @@ -9,7 +9,7 @@ import { } from '@ghsc/nshmp-lib-ng/nshmp'; import {NshmpPlot, PlotOptions, plotUtils} from '@ghsc/nshmp-lib-ng/plot'; import { - RtgmCalc, + Rtgm, RtgmCalcResponse, RtgmIteration, RtgmUsageParameters, @@ -316,10 +316,11 @@ export class AppService } private createFragilityPlot( - rtgmCalc: RtgmCalc, + rtgm: Rtgm, iterations: IterationPlotData ): NshmpPlot { const plots = this.state().plots; + const {condCollapseProb} = rtgm.riskTargets; return { ...plots.fragility, @@ -329,12 +330,13 @@ export class AppService ...iterations.fragilityPlotData, this.linePlotData( iterations.integralHazardFragilityPlotData, - 0.1, - '10% Conditional Probability of Collapse' + condCollapseProb, + `${condCollapseProb * 100}% Conditional Probability of Collapse` ), ...this.createFragilitySlices( - rtgmCalc.iterations, - rtgmCalc.upsampledHazCurve.imlUP, + condCollapseProb, + rtgm.rtgmCalc.iterations, + rtgm.rtgmCalc.upsampledHazCurve.imlUP, [0, 1] ), ], @@ -343,12 +345,12 @@ export class AppService } private createFragilitySlices( + condCollapseProb: number, iterations: RtgmIteration[], imls: number[], yRange: number[] ): Partial<PlotData>[] { const fragilitySlices: Partial<PlotData>[] = []; - const percent = 0.1; const colors = d3Color.schemeCategory10; iterations.forEach((iteration, index) => { @@ -359,7 +361,7 @@ export class AppService ys: iteration.frCDF, }; - const slice = Maths.interpolate(fragilityXy, percent); + const slice = Maths.interpolate(fragilityXy, condCollapseProb); fragilitySlices.push({ line: { @@ -388,20 +390,23 @@ export class AppService }; } - private createHazardPlot(rtgmCalc: RtgmCalc): NshmpPlot { + private createHazardPlot(rtgm: Rtgm): NshmpPlot { const plots = this.state().plots; + const values = this.formGroup.getRawValue(); - const imls = rtgmCalc.upsampledHazCurve.imlUP; - const afes = rtgmCalc.upsampledHazCurve.afeUP; + const imls = rtgm.rtgmCalc.upsampledHazCurve.imlUP; + const afes = rtgm.rtgmCalc.upsampledHazCurve.afeUP; const hazardPlotData: Partial<PlotData> = { hovertemplate: '%{x} g, %{y} AFE', mode: 'lines+markers', - name: this.formGroup.getRawValue().label, + name: values.label, x: imls, y: afes, }; + const percent = values.buildingCode === 'ASCE7' ? '2%' : '7%'; + return { ...plots.hazard, plotData: { @@ -410,20 +415,28 @@ export class AppService hazardPlotData, this.linePlotData( [hazardPlotData], - 1 / 2475, - '2% Probability of Exceedance in 50 years' + 1 / rtgm.riskTargets.UH_retPeriod, + `${percent} Probability of Exceedance in ${rtgm.riskTargets.timeHorizon_Yr} years` + ), + ...this.createFragilitySlices( + rtgm.riskTargets.condCollapseProb, + rtgm.rtgmCalc.iterations, + imls, + [Math.min(...afes), Math.max(...afes)] ), - ...this.createFragilitySlices(rtgmCalc.iterations, imls, [ - Math.min(...afes), - Math.max(...afes), - ]), ], }, }; } - private createIntegralPlot(iterations: IterationPlotData): NshmpPlot { + private createIntegralPlot( + rtgm: Rtgm, + iterations: IterationPlotData + ): NshmpPlot { const plots = this.state().plots; + const riskTargets = rtgm.riskTargets; + const percent = riskTargets.tgtCollapseRisk_T; + const year = riskTargets.timeHorizon_Yr; return { ...plots.integralHazardFragility, @@ -433,8 +446,8 @@ export class AppService ...iterations.integralHazardFragilityPlotData, this.linePlotData( iterations.integralHazardFragilityPlotData, - 1 / 4975, - '1% Probability of Collapse in 50 years' + riskTargets.riskTgt_Annual, + `${percent * 100}% Probability of Collapse in ${year} years` ), ], }, @@ -704,16 +717,17 @@ export class AppService throw Error(`[${values.label}] not in response.`); } - const rtgmCalc = serviceResponse.response.RTGM[values.label].rtgmCalc; + const rtgm = serviceResponse.response.RTGM[values.label]; + const rtgmCalc = rtgm.rtgmCalc; const imls = rtgmCalc.upsampledHazCurve.imlUP; const iterations = this.createIterationPlotData(rtgmCalc.iterations, imls); return { derivativeFragility: this.createDerivativeFragilityPlot(iterations), - fragility: this.createFragilityPlot(rtgmCalc, iterations), - hazard: this.createHazardPlot(rtgmCalc), + fragility: this.createFragilityPlot(rtgm, iterations), + hazard: this.createHazardPlot(rtgm), hazardFragility: this.createHazardFragilityPlot(iterations), - integralHazardFragility: this.createIntegralPlot(iterations), + integralHazardFragility: this.createIntegralPlot(rtgm, iterations), }; }