Skip to content
Snippets Groups Projects
Commit 06f90df9 authored by stevereis's avatar stevereis
Browse files

Converter for transient (single only) done

GraphQL transient calls working with real Exareme calls
parent f492d5ab
No related branches found
No related tags found
No related merge requests found
import { Category } from 'src/engine/models/category.model';
import { ExperimentCreateInput } from 'src/engine/models/experiment/experiment-create.input';
import { Experiment } from 'src/engine/models/experiment/experiment.model';
import { Group } from 'src/engine/models/group.model';
import { TableResult } from 'src/engine/models/result/table-result.model';
import { Variable } from 'src/engine/models/variable.model';
import { Hierarchy } from './interfaces/hierarchy.interface';
import { VariableEntity } from './interfaces/variable-entity.interface';
import { Entity } from './interfaces/entity.interface';
import { ExperimentCreateInput } from 'src/engine/models/experiment/experiment-create.input';
import { Hierarchy } from './interfaces/hierarchy.interface';
import { TransientDataResult } from './interfaces/transient/transient-data-result.interface';
import { Experiment } from 'src/engine/models/experiment/experiment.model';
import { MetaData } from 'src/engine/models/result/common/metadata.model';
import { TableResult } from 'src/engine/models/result/table-result.model';
import { Dictionary } from 'src/common/interfaces/utilities.interface';
import { table } from 'console';
import { VariableEntity } from './interfaces/variable-entity.interface';
import { transientToTable } from './transformations';
export const dataToGroup = (data: Hierarchy): Group => {
return {
......@@ -69,66 +67,11 @@ export const experimentInputToData = (data: ExperimentCreateInput) => {
};
};
const dictToTable = (dict: Dictionary<string[]>, rows: number): string[][] => {
const keys = Object.keys(dict);
return keys.map((key) => {
const row = Array.from(Array(rows).keys())
.map((i) => dict[key][i])
.map((val) => val ?? '');
row.unshift(key);
return row;
});
};
export const dataToTransient = (data: TransientDataResult): Experiment => {
const result = data.result[0];
const tables = Object.keys(result.data.single).map((varKey): TableResult => {
const variable = result.data.single[varKey];
const domains: MetaData[] = [];
const rows: Dictionary<string[]> = {};
let count = 0;
Object.keys(variable).map((domainKey) => {
domains.push({ name: domainKey, type: 'string' });
const data = variable[domainKey];
[
[varKey, 'num_total'],
['datapoints', 'num_datapoints'],
['nulls', 'num_nulls'],
].forEach((keys) => {
if (!rows[keys[0]]) rows[keys[0]] = [];
rows[keys[0]][count] = data[keys[1]];
});
const properties = variable[domainKey].data;
Object.keys(properties).forEach((propKey) => {
if (!rows[propKey]) rows[propKey] = [];
rows[propKey][count] = properties[propKey].toString();
});
count++;
});
return {
data: dictToTable(rows, count),
metadatas: domains,
name: varKey,
groupBy: 'single',
};
});
const result2 = tables.map((table) => {
const nTable = Object.assign({}, table);
nTable.groupBy = 'Model';
return nTable;
});
const tabs: TableResult[] = transientToTable.evaluate(data);
return {
title: data.name,
results: tables.concat(result2),
results: tabs,
};
};
......@@ -4,9 +4,9 @@ import { Request } from 'express';
import { firstValueFrom, map, Observable } from 'rxjs';
import { IEngineOptions, IEngineService } from 'src/engine/engine.interfaces';
import { Domain } from 'src/engine/models/domain.model';
import { Group } from 'src/engine/models/group.model';
import { ExperimentCreateInput } from 'src/engine/models/experiment/experiment-create.input';
import { Experiment } from 'src/engine/models/experiment/experiment.model';
import { Group } from 'src/engine/models/group.model';
import { Variable } from 'src/engine/models/variable.model';
import {
dataToCategory,
......@@ -30,151 +30,11 @@ export default class ExaremeService implements IEngineService {
const path = this.options.baseurl + 'experiments/transient';
const result = {
name: 'Descriptive statistics',
result: [
{
data: {
single: {
'Left inferior temporal gyrus': {
ppmi: {
data: {
std: 1.2048783713787277,
min: 7.6335,
mean: 11.38076218487395,
},
num_datapoints: 714,
num_total: 714,
num_nulls: 0,
},
edsd: {
data: {
std: 1.3274694970555183,
max: 14.593,
min: 5.4301,
mean: 10.647539816933637,
},
num_datapoints: 437,
num_total: 474,
num_nulls: 37,
},
'desd-synthdata': {
data: {
std: 1.3479276642860987,
max: 14.593,
min: 5.4301,
mean: 10.685619565217392,
},
num_datapoints: 920,
num_total: 1000,
num_nulls: 80,
},
},
'Left posterior insula': {
ppmi: {
data: {
std: 0.25046887396228024,
max: 3.0882,
min: 1.7073,
mean: 2.358402521008403,
},
num_datapoints: 714,
num_total: 714,
num_nulls: 0,
},
edsd: {
data: {
std: 0.2716090949138581,
max: 3.1971,
min: 1.2675,
mean: 2.2726512585812357,
},
num_datapoints: 437,
num_total: 474,
num_nulls: 37,
},
'desd-synthdata': {
data: {
std: 0.2619310561946756,
max: 3.1971,
min: 1.2675,
mean: 2.27014597826087,
},
num_datapoints: 920,
num_total: 1000,
num_nulls: 80,
},
},
},
model: {
ppmi: {
num_datapoints: 714,
data: {
'Left inferior temporal gyrus': {
std: 1.2048783713787277,
max: 15.0815,
min: 7.6335,
mean: 11.38076218487395,
},
'Left posterior insula': {
std: 0.25046887396228024,
max: 3.0882,
min: 1.7073,
mean: 2.358402521008403,
},
},
num_total: 714,
num_nulls: 0,
},
edsd: {
num_datapoints: 437,
data: {
'Left inferior temporal gyrus': {
std: 1.3274694970555183,
max: 14.593,
min: 5.4301,
mean: 10.647539816933637,
},
'Left posterior insula': {
std: 0.2716090949138581,
max: 3.1971,
min: 1.2675,
mean: 2.2726512585812357,
},
},
num_total: 474,
num_nulls: 37,
},
'desd-synthdata': {
num_datapoints: 920,
data: {
'Left inferior temporal gyrus': {
std: 1.3479276642860987,
max: 14.593,
min: 5.4301,
mean: 10.685619565217392,
},
'Left posterior insula': {
std: 0.2619310561946756,
max: 3.1971,
min: 1.2675,
mean: 2.27014597826087,
},
},
num_total: 1000,
num_nulls: 80,
},
},
},
},
],
} as TransientDataResult;
/*= await firstValueFrom(
const resultAPI = await firstValueFrom(
this.httpService.post<TransientDataResult>(path, form),
);*/
);
return dataToTransient(result);
return dataToTransient(resultAPI.data);
}
async getDomains(ids: string[]): Promise<Domain[]> {
......
// This file contains all transformation queries for JSONata
// see : https://docs.jsonata.org/
import * as jsonata from 'jsonata'; // old import style needed because of 'export = jsonata'
export const transientToTable = jsonata(`
(
$e := function($x) {(
($x != null) ? $x : ''
)};
result.data.[
$.single.*@$p#$i.{
'groupBy' : 'single',
'name': $keys(%)[$i],
'metadatas': $keys(*).{
'name': $,
'type': 'string'
},
'data' : [
[$keys(%)[$i], $p.*.($e(num_total))],
['Datapoints', $p.*.($e(num_datapoints))],
['Nulls', $p.*.($e(num_nulls))],
['std', $p.*.data.($e(std))],
['max', $p.*.data.($e(max))],
['min', $p.*.data.($e(min))],
['mean', $p.*.data.($e(mean))]
]
}
]
)
`);
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment