const size = 1/6; /** @type {Array} */ export const ColumnMapping = [ [ 125, size*0.0, true ], [ 250, size*1.0, true ], [ 500, size*2.0, true ], [1000, size*3.0, true ], [2000, size*4.0, true ], [3000, size*4.5, false], [4000, size*5.0, true ], [6000, size*5.5, false], [8000, size*6.0, true ] ]; /** @type {(inFrequency:number)=>Store.ColumnMapping|false} */ export const ColumnLookup =(inFrequency)=> { for(let i=0; iStore.TestFrequencySample|undefined} */ export const MarkGet =(freq, chan, user)=> freq[/** @type {Store.PlotKey} */ (`${user ? "User" : "Test"}${chan ? "R" : "L"}`)]; /** @type {(freq:Store.TestFrequency, chan:number, mark:TestFrequencySample|undefined)=>Store.TestFrequencySample|undefined} */ export const MarkSet =(freq, chan, mark)=> freq[ chan ? "UserR" : "UserL" ] = mark; /** @type {Store.State} */ export const Initial = { Chan: { Min:0, Max:1, Value:0, Step:1 }, Freq: { Min:2, Max:8, Value:2, Step:1 }, Stim: { Min:-10, Max:120, Value:30, Step:5 }, Live: { Test: undefined, Freq: undefined, Mark: undefined }, Draw: { UserL:{Points:[], Paths:[]}, UserR:{Points:[], Paths:[]}, TestL:{Points:[], Paths:[]}, TestR:{Points:[], Paths:[]} }, Tests: [ { Name: "Patient A Asymmetric Notch", Plot: [ { Hz: 500, TestL: { Stim: 30, Resp: true }, TestR: { Stim: 50, Resp: true } }, { Hz: 1000, TestL: { Stim: 50, Resp: true }, TestR: { Stim: 55, Resp: true } } ] } ] }; /** @type {Record} */ const Update = { Freq(inState) { const column = ColumnMapping[inState.Freq.Value]; if(column && inState.Live.Test) { const hz = column[0]; inState.Live.Freq = undefined; for(let i=0; iStore.DrawGroup} */ export function Congtiguous(inTest, inChan, inStim, inIsUser) { /** @type {Store.DrawGroup} */ const output = {Points:[], Paths:[]}; let plot; let valid = false; /** @type {Array} */ let segment = []; for(let i=0; i tone.Max){ tone.Value = tone.Max; } clone[Name] = tone; if(Name != "Stim") { Update.Freq(clone); Update.Mark(clone); } } return clone; }