dev@382
|
1 /**
|
dev@382
|
2 * Created by lucast on 31/05/2017.
|
dev@382
|
3 */
|
cannam@471
|
4 import {
|
cannam@473
|
5 VerticallyBinned,
|
cannam@473
|
6 VerticallyBinnedWavesComponent,
|
cannam@473
|
7 VerticalBinNameRenderer,
|
cannam@471
|
8 WavesComponent
|
cannam@471
|
9 } from '../waves-base.component';
|
dev@382
|
10 import {
|
dev@382
|
11 ChangeDetectionStrategy,
|
dev@382
|
12 Component,
|
dev@382
|
13 Input,
|
dev@382
|
14 } from '@angular/core';
|
dev@382
|
15 import Waves from 'waves-ui-piper';
|
dev@477
|
16 import {Grid} from '../FeatureUtilities';
|
dev@382
|
17 import {iceMapper} from '../../spectrogram/ColourMap';
|
dev@382
|
18 import {estimatePercentile} from '../../spectrogram/MatrixUtils';
|
dev@382
|
19
|
dev@382
|
20 @Component({
|
dev@382
|
21 selector: 'ugly-grid',
|
dev@382
|
22 templateUrl: '../waves-template.html',
|
dev@382
|
23 styleUrls: ['../waves-template.css'],
|
dev@405
|
24 changeDetection: ChangeDetectionStrategy.OnPush,
|
dev@405
|
25 providers: [
|
cannam@473
|
26 {provide: VerticallyBinned, useExisting: GridComponent },
|
cannam@473
|
27 {provide: VerticalBinNameRenderer, useExisting: GridComponent },
|
dev@405
|
28 {provide: WavesComponent, useExisting: GridComponent}
|
dev@405
|
29 ]
|
dev@382
|
30 })
|
dev@383
|
31
|
dev@477
|
32 export class GridComponent extends VerticallyBinnedWavesComponent<Grid> {
|
cannam@472
|
33
|
dev@477
|
34 @Input() set grid(grid: Grid) {
|
dev@383
|
35 this.feature = grid;
|
dev@382
|
36 }
|
dev@382
|
37
|
dev@383
|
38 protected get featureLayers(): Layer[] {
|
cannam@471
|
39 const startTime = this.feature.startTime;
|
dev@383
|
40 const stepDuration = this.feature.stepDuration;
|
dev@383
|
41 const matrixData = this.feature.data;
|
dev@382
|
42
|
dev@382
|
43 if (matrixData.length === 0) {
|
dev@383
|
44 return [];
|
dev@382
|
45 }
|
dev@382
|
46
|
dev@382
|
47 const targetValue = estimatePercentile(matrixData, 95);
|
dev@382
|
48 const gain = (targetValue > 0.0 ? (1.0 / targetValue) : 1.0);
|
dev@382
|
49 const matrixEntity = new Waves.utils.PrefilledMatrixEntity(
|
dev@382
|
50 matrixData,
|
cannam@471
|
51 startTime,
|
dev@382
|
52 stepDuration
|
dev@382
|
53 );
|
dev@382
|
54
|
dev@383
|
55 return [
|
dev@382
|
56 new Waves.helpers.MatrixLayer(
|
dev@382
|
57 matrixEntity,
|
dev@382
|
58 {
|
dev@382
|
59 gain: gain,
|
dev@382
|
60 height: this.height,
|
dev@382
|
61 normalise: 'none',
|
dev@382
|
62 mapper: iceMapper()
|
dev@382
|
63 }
|
dev@383
|
64 )
|
dev@383
|
65 ];
|
dev@382
|
66 }
|
dev@477
|
67
|
cannam@473
|
68 get binNames(): string[] {
|
cannam@474
|
69 if (!this.feature.binNames || this.feature.binNames.length === 0) {
|
cannam@474
|
70 const binCount = (this.feature.data.length > 0 ?
|
cannam@474
|
71 this.feature.data[0].length : 0);
|
cannam@474
|
72 for (let i = 0; i < binCount; ++i) {
|
dev@477
|
73 this.feature.binNames.push(`${i + 1}`);
|
cannam@474
|
74 }
|
cannam@474
|
75 }
|
cannam@473
|
76 return this.feature.binNames;
|
cannam@471
|
77 }
|
dev@382
|
78 }
|