let legendContainer;
let axes;
let monitorPos;
let chLocked;
// Initialize function
$(function() {
let modelParams = getModelPreset('squid-axon');
let simParams = getSimulationParams();
legendContainer = document.getElementById("nmjs-legend");
chLocked = false;
setInputs(modelParams, simParams);
$("[name=stardurButton]").click(function() {
refreshPlot();
});
$("input").change(function() {
refreshPlot();
});
refreshPlot();
});
function setInputs(modelParams, simParams) {
// Set input values
$("input[name=C]").val(parseFloat(modelParams.C));
$("input[name=GKMax]").val(parseFloat(modelParams.K.GMax));
$("input[name=GNaMax]").val(parseFloat(modelParams.Na.GMax));
$("input[name=Gm]").val(parseFloat(modelParams.L.G));
$("input[name=EK]").val(parseFloat(modelParams.K.E));
$("input[name=ENa]").val(parseFloat(modelParams.Na.E));
$("input[name=VRest]").val(parseFloat(modelParams.VRest));
$("input[name=V0]").val(parseFloat(modelParams.V0));
$("input[name=dur]").val(parseFloat(simParams.dur));
$("input[name=inj1Start]").val(parseFloat(simParams.inj1Start));
$("input[name=inj1Dur]").val(parseFloat(simParams.inj1Dur));
$("input[name=inj1Amp]").val(parseFloat(simParams.inj1Amp));
$("input[name=inj2Start]").val(parseFloat(simParams.inj2Start));
$("input[name=inj2Dur]").val(parseFloat(simParams.inj2Dur));
$("input[name=inj2Amp]").val(parseFloat(simParams.inj2Amp));
}
function getInputs(modelParams, simParams) {
// Get input values
modelParams.C = parseFloat($("input[name=C]").val());
modelParams.K.GMax = parseFloat($("input[name=GKMax]").val());
modelParams.Na.GMax = parseFloat($("input[name=GNaMax]").val());
modelParams.L.G = parseFloat($("input[name=Gm]").val());
modelParams.K.E = parseFloat($("input[name=EK]").val());
modelParams.Na.E = parseFloat($("input[name=ENa]").val());
modelParams.VRest = parseFloat($("input[name=VRest]").val());
modelParams.V0 = parseFloat($("input[name=V0]").val());
simParams.dur = parseFloat($("input[name=dur]").val());
simParams.inj1Start = parseFloat($("input[name=inj1Start]").val());
simParams.inj1Dur = parseFloat($("input[name=inj1Dur]").val());
simParams.inj1Amp = parseFloat($("input[name=inj1Amp]").val());
simParams.inj2Start = parseFloat($("input[name=inj2Start]").val());
simParams.inj2Dur = parseFloat($("input[name=inj2Dur]").val());
simParams.inj2Amp = parseFloat($("input[name=inj2Amp]").val());
return {
modelParams: modelParams,
simParams: simParams
}
}
function updateMonitor(rv, j) {
// Update the monitor values
$(".monitor--mp").html("Membrane potential (Vm):" + parseFloat(rv.Vs[j][1]).toFixed(2) + " mV");
$(".monitor--iinj").html("Injected current (Iinj):" + parseFloat(rv.Iinj[j][1]).toFixed(2) + " nA/cm^2");
$(".monitor--ik").html("Potassium current (IK):" + parseFloat(rv.IK[j][1]).toFixed(2) + " nA/cm^2");
$(".monitor--gk").html("Potassium conductance (GK):" + parseFloat(rv.GK[j][1]).toFixed(2) + " mS/cm^2");
$(".monitor--ina").html("Sodium current (INa):" + parseFloat(rv.INa[j][1]).toFixed(2) + " nA/cm^2");
$(".monitor--gna").html("Sodium conductance (GNa):" + parseFloat(rv.GNa[j][1]).toFixed(2) + " mS/cm^2");
}
function takesnapshot() {
// Take a snapshot of the plot and put it underneath
let width = $('.flot-base').prop('width');
let height = $('.flot-base').prop('height');
let newCanvas = $('#modelSim--snapshots').append('