From 8ef39e1e9bd250e8feb487e345f292e67df70f67 Mon Sep 17 00:00:00 2001 From: Brandon Clayton <bclayton@usgs.gov> Date: Mon, 24 Feb 2025 14:20:01 -0700 Subject: [PATCH] handle common x values --- .../app/gmm/spectra/services/app.service.ts | 66 ++++++++++++------- 1 file changed, 42 insertions(+), 24 deletions(-) diff --git a/projects/nshmp-apps/src/app/gmm/spectra/services/app.service.ts b/projects/nshmp-apps/src/app/gmm/spectra/services/app.service.ts index 5daf999a3..41e3a34c1 100644 --- a/projects/nshmp-apps/src/app/gmm/spectra/services/app.service.ts +++ b/projects/nshmp-apps/src/app/gmm/spectra/services/app.service.ts @@ -29,7 +29,6 @@ import { import {Maths} from '@ghsc/nshmp-utils-ts/libs/nshmp-lib/calc'; import { GmmGroupType, - GmmSeries, GmmSpectraResponse, GmmSpectraUsage, GmmSpectraUsageParameters, @@ -511,6 +510,20 @@ export class AppService }); } + private commonXValues(serviceResponses: GmmSpectraResponse[]): number[] { + const xValues = serviceResponses + .map(serviceResponse => + serviceResponse.response.means.data.map(data => data.data.sa.xs), + ) + .reduce((prev, curr) => [...prev, ...curr]) + .reduce((prev, curr) => { + return [...prev, ...curr.filter(p => !prev.includes(p))]; + }) + .sort((a, b) => a - b); + + return xValues; + } + private handleServiceResponses(serviceResponses: GmmSpectraResponse[]): void { const means = serviceResponses.map(s => s.response.means); const sigmas = serviceResponses.map(s => s.response.sigmas); @@ -638,20 +651,11 @@ export class AppService * @param xUnit X axis unit * @param yUnit Y axis unit */ - private plotInfo( - gmmSeries: GmmSeries<SpectraData, TreeValues>[], - xUnit: string, - yUnit: string, - ) { - let hoverTemplate: string[] = []; - let symbol: string[] = []; - - if (gmmSeries.length > 0) { - hoverTemplate = gmmSeries[0].data.sa.xs.map( - () => `%{x} ${xUnit}, %{y} ${yUnit}`, - ); - symbol = gmmSeries[0].data.sa.xs.map(() => 'circle'); - } + private plotInfo(commonXValues: number[], xUnit: string, yUnit: string) { + const hoverTemplate = commonXValues.map( + () => `%{x} ${xUnit}, %{y} ${yUnit}`, + ); + const symbol = commonXValues.map(() => 'circle'); return { hoverTemplate, @@ -680,17 +684,29 @@ export class AppService const sigmaPlot = state.plots.get(gmmUtils.PlotType.SIGMA); const formValues = form.getRawValue(); - const xValues = state.serviceResponses + const xValues = this.commonXValues(state.serviceResponses); + + const hasPga = state.serviceResponses .map(serviceResponse => - serviceResponse.response.means.data.map(data => data.data.sa.xs), + serviceResponse.response.means.data.map(data => data.data.pga), ) .reduce((prev, curr) => [...prev, ...curr]) - .reduce((prev, curr) => { - return [...prev, ...curr.filter(p => !prev.includes(p))]; - }) - .sort((a, b) => a - b); + .some(x => x !== null); + + const hasPgv = state.serviceResponses + .map(serviceResponse => + serviceResponse.response.means.data.map(data => data.data.pgv), + ) + .reduce((prev, curr) => [...prev, ...curr]) + .some(x => x !== null); - console.log(xValues); + if (hasPga) { + xValues.splice(0, 0, gmmUtils.XS_PGA); + } + + if (hasPgv) { + xValues.splice(0, 0, gmmUtils.XS_PGV); + } const responses = this.toGmmResponses(state.serviceResponses); const gmmPlots = gmmUtils.spectraResponsesToPlots({ @@ -724,12 +740,14 @@ export class AppService private toGmmResponses( responses: GmmSpectraResponse[], ): gmmUtils.GmmResponse<SpectraData, TreeValues>[] { + const commonXValues = this.commonXValues(responses); + const gmmResponses = responses.map(serviceResponse => { const means = serviceResponse.response.means; const sigmas = serviceResponse.response.sigmas; - const meanData = this.plotInfo(means.data, 's', 'g'); - const sigmaData = this.plotInfo(sigmas.data, 's', 'ðž‚'); + const meanData = this.plotInfo(commonXValues, 's', 'g'); + const sigmaData = this.plotInfo(commonXValues, 's', 'ðž‚'); const gmmResponse: gmmUtils.GmmResponse<SpectraData, TreeValues> = { input: serviceResponse.request.input, -- GitLab