updated to new model format

This commit is contained in:
VLE2FE 2020-08-28 08:14:57 +02:00
parent 819666c344
commit f0aad664d0
6 changed files with 26 additions and 26 deletions

View File

@ -15,9 +15,6 @@
<ng-template rbFormValidationMessage="failure">{{nameInput.errors.failure}}</ng-template> <ng-template rbFormValidationMessage="failure">{{nameInput.errors.failure}}</ng-template>
<ng-template rbFormValidationMessage="required">Cannot be empty</ng-template> <ng-template rbFormValidationMessage="required">Cannot be empty</ng-template>
</rb-form-input> </rb-form-input>
<rb-form-input name="label" label="label" appValidate="string" [(ngModel)]="model.label" #labelInput="ngModel">
<ng-template rbFormValidationMessage="failure">{{labelInput.errors.failure}}</ng-template>
</rb-form-input>
<rb-form-input name="url" label="URL" appValidate="url" required [(ngModel)]="model.url" #urlInput="ngModel"> <rb-form-input name="url" label="URL" appValidate="url" required [(ngModel)]="model.url" #urlInput="ngModel">
<ng-template rbFormValidationMessage="failure">{{urlInput.errors.failure}}</ng-template> <ng-template rbFormValidationMessage="failure">{{urlInput.errors.failure}}</ng-template>
<ng-template rbFormValidationMessage="required">Cannot be empty</ng-template> <ng-template rbFormValidationMessage="required">Cannot be empty</ng-template>
@ -31,7 +28,6 @@
<rb-table class="space-above"> <rb-table class="space-above">
<tr> <tr>
<th>Name</th> <th>Name</th>
<th>Label</th>
<th>URL</th> <th>URL</th>
<th></th> <th></th>
<th></th> <th></th>
@ -41,7 +37,6 @@
<tr><th>{{group.group}}</th><th></th><th></th><th></th><th></th></tr> <tr><th>{{group.group}}</th><th></th><th></th><th></th><th></th></tr>
<tr *ngFor="let modelItem of group.models"> <tr *ngFor="let modelItem of group.models">
<td>{{modelItem.name}}</td> <td>{{modelItem.name}}</td>
<td>{{modelItem.label}}</td>
<td>{{modelItem.url}}</td> <td>{{modelItem.url}}</td>
<td> <td>
<span class="rb-ic rb-ic-edit clickable" <span class="rb-ic rb-ic-edit clickable"

View File

@ -4,7 +4,6 @@ export class ModelItemModel extends BaseModel {
group = ''; group = '';
models = [{ models = [{
name: '', name: '',
url: '', url: ''
label: ''
}]; }];
} }

View File

@ -13,21 +13,17 @@
<div *ngIf="result" class="result" [@inOut]> <div *ngIf="result" class="result" [@inOut]>
<ng-container *ngIf="multipleSamples; else singleSampleResult"> <ng-container *ngIf="multipleSamples; else singleSampleResult">
<h4 *ngFor="let prediction of result.predictions; index as i"> <h4 *ngFor="let prediction of result.predictions; index as i">
{{spectrumNames[i]}}: {{prediction}}&nbsp;{{activeGroup.models[activeModelIndex].label}} {{spectrumNames[i]}}: {{prediction}}<a [routerLink]='"."' fragment="disclaimer"><sup>#</sup></a>
<a [routerLink]='"."' fragment="disclaimer"><sup>#</sup></a>
</h4> </h4>
</ng-container> </ng-container>
<ng-template #singleSampleResult> <ng-template #singleSampleResult>
<h4> <h4>
Average result: {{result.meanPrediction}}&nbsp;{{activeGroup.models[activeModelIndex].label}} Average result: {{result.mean}}<a [routerLink]='"."' fragment="disclaimer"><sup>#</sup></a>
<a [routerLink]='"."' fragment="disclaimer"><sup>#</sup></a>,
standard deviation: {{result.std}}<a [routerLink]='"."' fragment="disclaimer"><sup>#</sup></a>
</h4> </h4>
<a href="javascript:" class="rb-details-toggle" rbDetailsToggle #triggerDetails="rbDetailsToggle">Details</a> <a href="javascript:" class="rb-details-toggle" rbDetailsToggle #triggerDetails="rbDetailsToggle">Details</a>
<div *ngIf="triggerDetails.open" class="space-below"> <div *ngIf="triggerDetails.open" class="space-below">
<p *ngFor="let prediction of result.predictions; index as i"> <p *ngFor="let prediction of result.predictions; index as i">
{{spectrumNames[i]}}: {{prediction}}&nbsp;{{activeGroup.models[activeModelIndex].label}} {{spectrumNames[i]}}: {{prediction}}<a [routerLink]='"."' fragment="disclaimer"><sup>#</sup></a>
<a [routerLink]='"."' fragment="disclaimer"><sup>#</sup></a>
</p> </p>
</div> </div>
</ng-template> </ng-template>

View File

@ -3,15 +3,10 @@ import {ChartOptions} from 'chart.js';
import {ApiService} from '../services/api.service'; import {ApiService} from '../services/api.service';
import {animate, style, transition, trigger} from '@angular/animations'; import {animate, style, transition, trigger} from '@angular/animations';
import cloneDeep from 'lodash/cloneDeep'; import cloneDeep from 'lodash/cloneDeep';
import omit from 'lodash/omit';
import {DataService} from '../services/data.service'; import {DataService} from '../services/data.service';
import {ModelItemModel} from '../models/model-item.model'; import {ModelItemModel} from '../models/model-item.model';
import {HttpClient} from '@angular/common/http';
interface PredictionResult {
meanPrediction: string;
std: string;
predictions: string[];
}
@Component({ @Component({
selector: 'app-prediction', selector: 'app-prediction',
@ -34,7 +29,7 @@ interface PredictionResult {
}) })
export class PredictionComponent implements OnInit { export class PredictionComponent implements OnInit {
result: PredictionResult; result: {predictions: string[], mean: string};
loading = false; loading = false;
activeGroup: ModelItemModel = new ModelItemModel(); activeGroup: ModelItemModel = new ModelItemModel();
activeModelIndex = 0; activeModelIndex = 0;
@ -104,9 +99,16 @@ export class PredictionComponent implements OnInit {
loadPrediction() { loadPrediction() {
this.loading = true; this.loading = true;
console.log(this.activeModelIndex); this.api.post<any>(this.activeGroup.models[this.activeModelIndex].url, this.flattenedSpectra, data => {
this.api.post<PredictionResult>(this.activeGroup.models[this.activeModelIndex].url, this.flattenedSpectra, data => { this.result = {
this.result = data; predictions: Object.entries(omit(data, ['mean', 'std', 'label']))
.map((p: any) => p[1].map(e => `${p[0]}: ${e} ${data.label[p[0]]}`))
.reduce((s, e) => s.map((el, i) => this.clip(el) + ', ' + e[i])),
mean: Object.keys(data.mean).map(e =>
this.clip(`${e}: ${data.mean[e]} ${data.label[e]}`) + (data.std[e] !== '' ? ` (standard deviation: ${data.std[e]})` : '')
).join(', ')
};
console.log(this.result);
this.loading = false; this.loading = false;
}); });
} }
@ -115,4 +117,8 @@ export class PredictionComponent implements OnInit {
this.activeGroup = this.d.arr.modelGroups[index]; this.activeGroup = this.d.arr.modelGroups[index];
this.result = undefined; this.result = undefined;
} }
clip(str) { // clip spaces at start and end
return str.replace(/^\s*(.*?)\s*$/, '$1');
}
} }

View File

@ -238,7 +238,7 @@
[(ngModel)]="measurement.measurement_template" [(ngModel)]="measurement.measurement_template"
(ngModelChange)="clearMeasurement(gIndex, mIndex)"> (ngModelChange)="clearMeasurement(gIndex, mIndex)">
<option [value]="sample.condition.condition_template"> <option [value]="sample.condition.condition_template">
{{d.id.measurementTemplates[measurement.measurement_template].name}} - current {{d.id.measurementTemplates[measurement.measurement_template].name}} - old
</option> </option>
<option *ngFor="let m of d.latest.measurementTemplates" [value]="m._id">{{m.name}}</option> <option *ngFor="let m of d.latest.measurementTemplates" [value]="m._id">{{m.name}}</option>
</rb-form-select> </rb-form-select>
@ -330,7 +330,7 @@
<ng-template #modalDeleteConfirm> <ng-template #modalDeleteConfirm>
<rb-alert alertTitle="Are you sure?" type="danger" [okBtnLabel]="'Delete sample' + (samples.length > 1 ? 's' : '')" <rb-alert alertTitle="Are you sure?" type="danger" [okBtnLabel]="'Delete sample' + (samples.length > 1 ? 's' : '')"
cancelBtnLabel="Cancel"> cancelBtnLabel="Cancel">
Do you really want to delete {{samples.length > 1 ? 'these samples' : 'this sample'}}? Do you really want to delete {{(samples.length > 1 ? 'samples ' : 'sample ') + sampleNames()}}?
</rb-alert> </rb-alert>
</ng-template> </ng-template>

View File

@ -613,6 +613,10 @@ export class SampleComponent implements OnInit, AfterContentChecked {
return this.sampleReferenceList.bind(this); return this.sampleReferenceList.bind(this);
} }
sampleNames() {
return this.samples.map(e => e.number).join(', ');
}
uniqueCfValues(index) { // returns all names until index for unique check uniqueCfValues(index) { // returns all names until index for unique check
return this.customFields ? this.customFields.slice(0, index).map(e => e[0]) : []; return this.customFields ? this.customFields.slice(0, index).map(e => e[0]) : [];
} }