From 6f2c26bd01f548796be097a0ebad41c8cf10535b Mon Sep 17 00:00:00 2001 From: Manuel Spuhler <manuel.spuhler@chuv.ch> Date: Thu, 9 Feb 2023 13:35:54 +0100 Subject: [PATCH] fix(Exareme2): Fixed histogram enumeration casting --- .../handlers/algorithms/histogram.handler.ts | 46 +++++++++++++------ 1 file changed, 32 insertions(+), 14 deletions(-) diff --git a/api/src/engine/connectors/exareme/handlers/algorithms/histogram.handler.ts b/api/src/engine/connectors/exareme/handlers/algorithms/histogram.handler.ts index 0014529..fa95240 100644 --- a/api/src/engine/connectors/exareme/handlers/algorithms/histogram.handler.ts +++ b/api/src/engine/connectors/exareme/handlers/algorithms/histogram.handler.ts @@ -8,19 +8,32 @@ import { const ALGO_NAME = 'multiple_histograms'; +interface Exareme2HistogramData { + var: string; + grouping_var: string | null; + grouping_enum: string | null; + bins: string[] | number[]; + counts: number[]; +} + const round = (n: number) => Math.round((n + Number.EPSILON) * 100) / 100; export default class HistogramHandler extends BaseHandler { - private getBarChartResult(data: any): BarChartResult { - const categories = - typeof data.bins[0] === 'string' - ? data.bins - : data.bins + private getBarChartResult( + data: Exareme2HistogramData, + domain: Domain, + ): BarChartResult { + const lookupVar = domain.variables.find((v) => v.id === data.var); + const categories = lookupVar.type === 'nominal' + ? lookupVar.enumerations.map(e => e.value) + : (data.bins as number[]) .filter((_, i) => i < data.bins.length - 1) // upper limit counts for 1 extra - .map((b, i) => `${round(b)}-${round(data.bins[i + 1])}`); + .map( + (b, i) => `${round(b)}-${round((data.bins as number[])[i + 1])}`, + ); const barChart: BarChartResult = { - name: data.var, + name: lookupVar.label, barValues: data.counts.map((c) => c ?? 0), xAxis: { label: 'bins', @@ -70,13 +83,15 @@ export default class HistogramHandler extends BaseHandler { if (!this.canHandle(experiment, data)) return super.handle(experiment, data, domain); - const extractedData = data[0].histogram; - - const defaultChartData = extractedData.find( + const extractedData: Exareme2HistogramData[] = data[0].histogram; + const selectedVariableChartData = extractedData.find( (d) => d.var && !d.grouping_var, ); - const defaultChart = this.getBarChartResult(defaultChartData); - experiment.results.push(defaultChart); + const selectedVariableChart = this.getBarChartResult( + selectedVariableChartData, + domain, + ); + experiment.results.push(selectedVariableChart); const groupingVars: string[] = Array.from( new Set( @@ -86,9 +101,12 @@ export default class HistogramHandler extends BaseHandler { ), ); const groupingCharts = groupingVars.map((groupingVar) => - this.getGroupedBarChartResult(groupingVar, defaultChart, extractedData), + this.getGroupedBarChartResult( + groupingVar, + selectedVariableChart, + extractedData, + ), ); - if (groupingCharts) groupingCharts.map((gc) => experiment.results.push(gc)); this.next?.handle(experiment, data, domain); -- GitLab