import {EventEmitter, Injectable} from '@angular/core'; import {ApiService, RawData} from './api.service'; @Injectable({ providedIn: 'root' }) export class CacheService { public rawValues: number[]; public rawIndices: string[]; public loadingProgress: number = 0; private _currentTab: number; private _query = undefined; private _labels = {}; private _tables; private _windowSimilarity; private _sliderValue; private _queryWindow; private _candidates: number[]; private _parameters: number[]; public windowSize = 120; public nrOfTables = 5; public hashSize = 5; public stepSize = 200; public querySelectionMode = true; public distances = []; public _dtwdistances: number[] = []; public onNewData: EventEmitter = new EventEmitter(); public onNewSimilarity: EventEmitter = new EventEmitter(); public onNewLabels: EventEmitter = new EventEmitter(); public onNewQuery: EventEmitter = new EventEmitter(); public onNewTables: EventEmitter = new EventEmitter(); public onNewWindows: EventEmitter = new EventEmitter(); public onNewTab: EventEmitter = new EventEmitter(); public onNewSlider: EventEmitter = new EventEmitter(); constructor(private api: ApiService) { this.initialize(); } async initialize(): Promise { this.loadingProgress = 0; await this.getRawData(); this.loadingProgress = 50; await this.createWindows(); this.loadingProgress = 100; } async reset(): Promise { this.windowSimilarity = undefined; this.loadingProgress = 50; await this.createWindows(); this.loadingProgress = 100; } async getRawData(): Promise { const rawData: RawData = await this.api.readFile(); this.rawIndices = rawData.index; this.rawValues = rawData.values; this.onNewData.emit(); } async createWindows(): Promise { await this.api.createWindows(this.parameters); this.onNewWindows.emit(); } async initial(): Promise { const output = await this.api.initialize(this._queryWindow); this.dtwdistances = output.distances; this.candidates = output.candidates; this.createTable(); this._parameters = output.parameters; console.log(output); } async update(): Promise { console.log(this.distances); const output = await this.api.update(this._queryWindow, this.distances, this._parameters); this.dtwdistances = output.distances; this.candidates = output.candidates; this.createTable(); console.log(output); } async getAverageWindows(windows): Promise { return await this.api.getAverageWindows(windows); } async getQueryWindow(window): Promise { const output = await this.api.getQueryWindow(window); this.distances = output.distances; this.queryWindow = output.average; return this._queryWindow; } async getWindow(indices: number[]): Promise { return await this.api.getWindow(indices); } public createTable() { const indices = this.dtwdistances.map((x) => x > 500 ? 100 : Math.floor(x / 5)); const table = {}; this.candidates.forEach((candidate, index) => { if (table[indices[index]] === undefined) { table[indices[index]] = []; } table[indices[index]].push(candidate); }); this.tables = table; } public set dtwdistances(v) { this._dtwdistances = v; } public get dtwdistances(): number[] { return this._dtwdistances; } public set query(v) { this._query = v; } public get query(): number { return this._query; } public get windows(): number[][] { return []; } public set tables(v) { this._tables = v; this.onNewTables.emit(); } public get tables() { return this._tables; } public set labels(v) { this._labels = v; this.onNewLabels.emit(); } public get labels() { return this._labels; } public set windowSimilarity(v) { this._windowSimilarity = v; this.onNewSimilarity.emit(); } public get windowSimilarity() { return this._windowSimilarity; } public set currentTab(v) { this._currentTab = v; this.onNewTab.emit(); } public get currentTab() { return this._currentTab; } public set sliderValue(v) { this._sliderValue = v; this.onNewSlider.emit(v); } public get sliderValue() { return this._sliderValue; } public set queryWindow(v) { this._queryWindow = v; this.onNewQuery.emit(); } public get queryWindow() { return this._queryWindow; } public set candidates(v) { this._candidates = v; } public get candidates() { return this._candidates; } public get parameters(): {[parameter: string]: any} { return { windowsize: this.windowSize, hashsize: this.hashSize, tablesize: this.nrOfTables, stepsize: this.stepSize }; } }