annotate src/app/visualisations/grid/grid.component.ts @ 471:b69a223166b5

Add vertical scale to matrix, but just using matrix bin count to begin with
author Chris Cannam <cannam@all-day-breakfast.com>
date Thu, 29 Jun 2017 15:06:16 +0100
parents 3ace7672638b
children 9251232b689e
rev   line source
dev@382 1 /**
dev@382 2 * Created by lucast on 31/05/2017.
dev@382 3 */
cannam@471 4 import {
cannam@471 5 InspectableVerticallyBoundedComponent,
cannam@471 6 VerticallyBounded,
cannam@471 7 VerticallyBoundedWavesComponent,
cannam@471 8 VerticalScaleRenderer,
cannam@471 9 VerticalValueInspectorRenderer,
cannam@471 10 WavesComponent
cannam@471 11 } from '../waves-base.component';
dev@382 12 import {
dev@382 13 ChangeDetectionStrategy,
dev@382 14 Component,
dev@382 15 Input,
dev@382 16 } from '@angular/core';
dev@382 17 import Waves from 'waves-ui-piper';
dev@382 18 import {MatrixFeature} from 'piper/HigherLevelUtilities';
dev@382 19 import {iceMapper} from '../../spectrogram/ColourMap';
dev@382 20 import {estimatePercentile} from '../../spectrogram/MatrixUtils';
dev@382 21
dev@382 22 @Component({
dev@382 23 selector: 'ugly-grid',
dev@382 24 templateUrl: '../waves-template.html',
dev@382 25 styleUrls: ['../waves-template.css'],
dev@405 26 changeDetection: ChangeDetectionStrategy.OnPush,
dev@405 27 providers: [
cannam@471 28 {provide: VerticallyBounded, useExisting: GridComponent },
cannam@471 29 {provide: VerticalScaleRenderer, useExisting: GridComponent },
cannam@471 30 {provide: VerticalValueInspectorRenderer, useExisting: GridComponent },
dev@405 31 {provide: WavesComponent, useExisting: GridComponent}
dev@405 32 ]
dev@382 33 })
cannam@471 34 export class GridComponent extends VerticallyBoundedWavesComponent<MatrixFeature> {
dev@383 35
dev@382 36 @Input() set grid(grid: MatrixFeature) {
dev@383 37 this.feature = grid;
dev@382 38 }
dev@382 39
dev@383 40 protected get featureLayers(): Layer[] {
cannam@471 41 const startTime = this.feature.startTime;
dev@383 42 const stepDuration = this.feature.stepDuration;
dev@383 43 const matrixData = this.feature.data;
dev@382 44
dev@382 45 if (matrixData.length === 0) {
dev@383 46 return [];
dev@382 47 }
dev@382 48
dev@382 49 const targetValue = estimatePercentile(matrixData, 95);
dev@382 50 const gain = (targetValue > 0.0 ? (1.0 / targetValue) : 1.0);
dev@382 51 const matrixEntity = new Waves.utils.PrefilledMatrixEntity(
dev@382 52 matrixData,
cannam@471 53 startTime,
dev@382 54 stepDuration
dev@382 55 );
dev@382 56
dev@383 57 return [
dev@382 58 new Waves.helpers.MatrixLayer(
dev@382 59 matrixEntity,
dev@382 60 {
dev@382 61 gain: gain,
dev@382 62 height: this.height,
dev@382 63 normalise: 'none',
dev@382 64 mapper: iceMapper()
dev@382 65 }
dev@383 66 )
dev@383 67 ];
dev@382 68 }
cannam@471 69
cannam@471 70 get range(): [number, number] {
cannam@471 71 return [0, this.feature.data.length > 0 ? this.feature.data[0].length : 0];
cannam@471 72 }
dev@382 73 }