cellular_raza-building-blocks 0.0.12

cellular_raza Building Blocks
Documentation
<!-- TODO Fix color and styling and adapt to theme -->
<div id='myDiv'><!-- Plotly chart will be drawn inside this DIV --></div>
<script>
function potential(r, lr, la, Cr, Ca, cutoff) {
    var exp_r = r/lr;
    var exp_a = r/la;
    if (r > cutoff) {
        return 0;
    } else {
        return Cr * Math.exp(-exp_r) - Ca * Math.exp(-exp_a);
    }
}
function generate_data(x, lr, la, Cr, Ca, cutoff) {
    var y = [];
    x.forEach((xi, i) => {
        y[i] = potential(xi, lr, la, Cr, Ca, cutoff);
    });
    return y;
}
var lr = 1.0;
var la = 2.0;
var Cr = 1.5;
var Ca = 1.0;
var cutoff = 6.0;
function calculate_radius(lr, la, Cr, Ca) {
    return - lr*la/(lr - la) * Math.log(Cr*la/(Ca*lr));
}
var radius = calculate_radius(lr, la, Cr, Ca);
var n_samples = 200;
var x = [...Array(n_samples).keys()].map((s) => 5*la*s/(n_samples));
var y = generate_data(x, lr, la, Cr, Ca, cutoff);
var data_la = [1.5, 1.75, 2.0, 2.25, 2.5];
var sliderSteps = [];
for (i=0; i<data_la.length; i++) {
    // Calculate new values
    var la_new = data_la[i];
    var la_new_name = la_new.toFixed(2);
    var y_new = generate_data(x, lr, la_new, Cr, Ca, cutoff);
    var radius_new = calculate_radius(lr, la_new, Cr, Ca);
    // Append new slider step
    var sliderstep = {
        label: la_new_name,
        method: 'animate',
        args: [
            {
                data: [{x: x, y: y_new}],
                mode: 'immediate',
                layout: {
                    xaxis: {
                        tickvals: [0, radius_new, cutoff],
                        ticktext: ['0', 'R', 'cutoff'],
                    },
                    yaxis: {
                        color: "#FFF",
                        range: [-0.3*Ca, 1.1*(Cr - Ca)],
                        tickvals: [potential(radius, lr, la_new, Cr, Ca, cutoff), 0, Cr - Ca],
                        ticktext: ['V(R)', '0', 'C<sub>r</sub> - C<sub>a</sub>'],
                    },
                },
            },
        ],
    };
    sliderSteps.push(sliderstep);
}
var initial_step = 2;
console.log(sliderSteps);
var layout = {
    xaxis: sliderSteps[initial_step]["args"][0]["layout"]["xaxis"],
    yaxis: sliderSteps[initial_step]["args"][0]["layout"]["yaxis"],
    title: "Morse Potential",
    plot_bgcolor:"#FFF4",
    paper_bgcolor:"#505050",
    font: {
        color: "#FFF",
    },
    margin: {
        t: 60,
        b: 60,
        l: 60,
        r: 60,
    },
    sliders: [{
        pad: {1: 130, t:55},
        currentvalue: {
            visible: true,
            prefix: 'Ratio interaction range to radius: ',
            xanchor: 'right',
            font: {size: 20, color: '#FFF'},
        },
        transition: {duration: 500},
        steps: sliderSteps,
        active: initial_step,
    }],
};
var options = {staticPlot: true};
Plotly.newPlot('myDiv', {
    data: [{
        x: x,
        y: y,
        type: 'scatter',
        line: {
            color: "#FDBF35",
        },
    }],
    layout: layout,
    options: options,
});
</script>