dev@382: /** dev@382: * Created by lucast on 31/05/2017. dev@382: */ cannam@471: import { cannam@473: VerticallyBinned, cannam@473: VerticallyBinnedWavesComponent, cannam@473: VerticalBinNameRenderer, cannam@471: VerticalValueInspectorRenderer, cannam@471: WavesComponent cannam@471: } from '../waves-base.component'; dev@382: import { dev@382: ChangeDetectionStrategy, dev@382: Component, dev@382: Input, dev@382: } from '@angular/core'; dev@382: import Waves from 'waves-ui-piper'; cannam@472: import {AugmentedMatrixFeature} from '../FeatureUtilities'; dev@382: import {iceMapper} from '../../spectrogram/ColourMap'; dev@382: import {estimatePercentile} from '../../spectrogram/MatrixUtils'; dev@382: dev@382: @Component({ dev@382: selector: 'ugly-grid', dev@382: templateUrl: '../waves-template.html', dev@382: styleUrls: ['../waves-template.css'], dev@405: changeDetection: ChangeDetectionStrategy.OnPush, dev@405: providers: [ cannam@473: {provide: VerticallyBinned, useExisting: GridComponent }, cannam@473: {provide: VerticalBinNameRenderer, useExisting: GridComponent }, dev@405: {provide: WavesComponent, useExisting: GridComponent} dev@405: ] dev@382: }) dev@383: cannam@473: export class GridComponent extends VerticallyBinnedWavesComponent { cannam@472: cannam@472: @Input() set grid(grid: AugmentedMatrixFeature) { dev@383: this.feature = grid; dev@382: } dev@382: dev@383: protected get featureLayers(): Layer[] { cannam@471: const startTime = this.feature.startTime; dev@383: const stepDuration = this.feature.stepDuration; dev@383: const matrixData = this.feature.data; dev@382: dev@382: if (matrixData.length === 0) { dev@383: return []; dev@382: } dev@382: dev@382: const targetValue = estimatePercentile(matrixData, 95); dev@382: const gain = (targetValue > 0.0 ? (1.0 / targetValue) : 1.0); dev@382: const matrixEntity = new Waves.utils.PrefilledMatrixEntity( dev@382: matrixData, cannam@471: startTime, dev@382: stepDuration dev@382: ); dev@382: dev@383: return [ dev@382: new Waves.helpers.MatrixLayer( dev@382: matrixEntity, dev@382: { dev@382: gain: gain, dev@382: height: this.height, dev@382: normalise: 'none', dev@382: mapper: iceMapper() dev@382: } dev@383: ) dev@383: ]; dev@382: } cannam@471: cannam@473: get binNames(): string[] { cannam@474: if (!this.feature.binNames || this.feature.binNames.length === 0) { cannam@474: const binCount = (this.feature.data.length > 0 ? cannam@474: this.feature.data[0].length : 0); cannam@474: for (let i = 0; i < binCount; ++i) { cannam@474: this.feature.binNames.push("" + (i + 1)); cannam@474: } cannam@474: } cannam@473: return this.feature.binNames; cannam@471: } dev@382: }