annotate src/app/visualisations/grid/grid.component.ts @ 474:f2b62195a5a6

Use bin numbers for scale labels if bin names are not provided
author Chris Cannam <cannam@all-day-breakfast.com>
date Fri, 30 Jun 2017 15:21:38 +0100
parents de23ea6bcd0d
children e3cbf4c53e5e
rev   line source
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 VerticalValueInspectorRenderer,
cannam@471 9 WavesComponent
cannam@471 10 } from '../waves-base.component';
dev@382 11 import {
dev@382 12 ChangeDetectionStrategy,
dev@382 13 Component,
dev@382 14 Input,
dev@382 15 } from '@angular/core';
dev@382 16 import Waves from 'waves-ui-piper';
cannam@472 17 import {AugmentedMatrixFeature} from '../FeatureUtilities';
dev@382 18 import {iceMapper} from '../../spectrogram/ColourMap';
dev@382 19 import {estimatePercentile} from '../../spectrogram/MatrixUtils';
dev@382 20
dev@382 21 @Component({
dev@382 22 selector: 'ugly-grid',
dev@382 23 templateUrl: '../waves-template.html',
dev@382 24 styleUrls: ['../waves-template.css'],
dev@405 25 changeDetection: ChangeDetectionStrategy.OnPush,
dev@405 26 providers: [
cannam@473 27 {provide: VerticallyBinned, useExisting: GridComponent },
cannam@473 28 {provide: VerticalBinNameRenderer, useExisting: GridComponent },
dev@405 29 {provide: WavesComponent, useExisting: GridComponent}
dev@405 30 ]
dev@382 31 })
dev@383 32
cannam@473 33 export class GridComponent extends VerticallyBinnedWavesComponent<AugmentedMatrixFeature> {
cannam@472 34
cannam@472 35 @Input() set grid(grid: AugmentedMatrixFeature) {
dev@383 36 this.feature = grid;
dev@382 37 }
dev@382 38
dev@383 39 protected get featureLayers(): Layer[] {
cannam@471 40 const startTime = this.feature.startTime;
dev@383 41 const stepDuration = this.feature.stepDuration;
dev@383 42 const matrixData = this.feature.data;
dev@382 43
dev@382 44 if (matrixData.length === 0) {
dev@383 45 return [];
dev@382 46 }
dev@382 47
dev@382 48 const targetValue = estimatePercentile(matrixData, 95);
dev@382 49 const gain = (targetValue > 0.0 ? (1.0 / targetValue) : 1.0);
dev@382 50 const matrixEntity = new Waves.utils.PrefilledMatrixEntity(
dev@382 51 matrixData,
cannam@471 52 startTime,
dev@382 53 stepDuration
dev@382 54 );
dev@382 55
dev@383 56 return [
dev@382 57 new Waves.helpers.MatrixLayer(
dev@382 58 matrixEntity,
dev@382 59 {
dev@382 60 gain: gain,
dev@382 61 height: this.height,
dev@382 62 normalise: 'none',
dev@382 63 mapper: iceMapper()
dev@382 64 }
dev@383 65 )
dev@383 66 ];
dev@382 67 }
cannam@471 68
cannam@473 69 get binNames(): string[] {
cannam@474 70 if (!this.feature.binNames || this.feature.binNames.length === 0) {
cannam@474 71 const binCount = (this.feature.data.length > 0 ?
cannam@474 72 this.feature.data[0].length : 0);
cannam@474 73 for (let i = 0; i < binCount; ++i) {
cannam@474 74 this.feature.binNames.push("" + (i + 1));
cannam@474 75 }
cannam@474 76 }
cannam@473 77 return this.feature.binNames;
cannam@471 78 }
dev@382 79 }