Skip to content

Instantly share code, notes, and snippets.

@thadk
Created April 22, 2013 00:08
Show Gist options
  • Save thadk/5431653 to your computer and use it in GitHub Desktop.
Save thadk/5431653 to your computer and use it in GitHub Desktop.
reaction-maker
{"description":"reaction-maker","endpoint":"","display":"svg","public":true,"require":[],"fileconfigs":{"inlet.js":{"default":true,"vim":false,"emacs":false,"fontSize":12},"_.md":{"default":true,"vim":false,"emacs":false,"fontSize":12},"config.json":{"default":true,"vim":false,"emacs":false,"fontSize":12},"inlet.html":{"default":true,"vim":false,"emacs":false,"fontSize":12},"index.html":{"default":true,"vim":false,"emacs":false,"fontSize":12}},"fullscreen":false,"play":false,"loop":false,"restart":false,"autoinit":true,"pause":true,"loop_type":"period","bv":false,"nclones":15,"clone_opacity":0.4,"duration":3000,"ease":"linear","dt":0.01}
<html>
<body>
<h1>HELLO WORLD
</h1>
</body>
</html>
molecules = {}
molecules["Ag"] = { "elements":{"Ag":1}, "charge":0 }
molecules["Ag+"] = { "elements":{"Ag":1}, "charge":1 }
molecules["Cu"] = { "elements":{"Cu":1}, "charge":0 }
molecules["Cu+"] = { "elements":{"Cu":1}, "charge":1 }
molecules["Cu2+"] = { "elements":{"Cu":1}, "charge":2 }
molecules["Fe"] = { "elements":{"Fe":1}, "charge":0 }
molecules["Fe2+"] = { "elements":{"Fe":1}, "charge":2 }
molecules["Fe3+"] = { "elements":{"Fe":1}, "charge":3 }
molecules["Li"] = { "elements":{"Li":1}, "charge":0 }
molecules["Li+"] = { "elements":{"Li":1}, "charge":1 }
molecules["K"] = { "elements":{"K":1}, "charge":0 }
molecules["K+"] = { "elements":{"K":1}, "charge":1 }
molecules["Ba"] = { "elements":{"Ba":1}, "charge":0 }
molecules["Ba2+"] = { "elements":{"Ba":1}, "charge":2 }
molecules["Ca"] = { "elements":{"Ca":1}, "charge":0 }
molecules["Ca2+"] = { "elements":{"Ca":1}, "charge":2 }
molecules["Na"] = { "elements":{"Na":1}, "charge":0 }
molecules["Na+"] = { "elements":{"Na":1}, "charge":1 }
molecules["Mg"] = { "elements":{"Mg":1}, "charge":0 }
molecules["Mg2+"] = { "elements":{"Mg":1}, "charge":2 }
molecules["Al"] = { "elements":{"Al":1}, "charge":0 }
molecules["Al3+"] = { "elements":{"Al":1}, "charge":3 }
molecules["Zn"] = { "elements":{"Zn":1}, "charge":0 }
molecules["Zn2+"] = { "elements":{"Zn":1}, "charge":2 }
molecules["Sn"] = { "elements":{"Sn":1}, "charge":0 }
molecules["Sn2+"] = { "elements":{"Sn":1}, "charge":2 }
molecules["Pb"] = { "elements":{"Pb":1}, "charge":0 }
molecules["Pb2+"] = { "elements":{"Pb":1}, "charge":2 }
molecules["H2"] = { "elements":{"H":2}, "charge":0 }
molecules["H+"] = { "elements":{"H":1}, "charge":1 }
molecules["SO42-"] = { "elements":{"S":1, "O":4}, "charge":-2 }
molecules["SO2"] = { "elements":{"S":1, "O":2}, "charge":0 }
molecules["H2O"] = { "elements":{"H":2, "O":1}, "charge":0 }
molecules["I2"] = { "elements":{"I":2}, "charge":0 }
molecules["I-"] = { "elements":{"I":1}, "charge":-1 }
molecules["O2"] = { "elements":{"O":2}, "charge":0 }
molecules["O2-"] = { "elements":{"O":1}, "charge":-2 }
molecules["Cl2"] = { "elements":{"Cl":2}, "charge":0 }
molecules["Cl-"] = { "elements":{"Cl":1}, "charge":-1 }
molecules["F2"] = { "elements":{"F":2}, "charge":0 }
molecules["F-"] = { "elements":{"F":1}, "charge":-1 }
molecules["MnO4-"] = { "elements":{"Mn":1, "O":4}, "charge":-1 }
molecules["Mn2+"] = { "elements":{"Mn":1}, "charge":2 }
redoxPairs = []
redoxPairs[0] = {"ox" : {"Ag+":1}, "red" : {"Ag":1}, "electrons":1, "V":0.80}
redoxPairs[1] = {ox : {"Cu2+":1}, red : {"Cu":1}, electrons:2, V:0.34}
redoxPairs[2] = {ox : {"Fe2+":1}, red : {"Fe":1}, electrons:2, V:-0.44}
redoxPairs[3] = {ox : {"Li+":1}, red : {"Li":1}, electrons:1, V:-3.04}
redoxPairs[4] = {ox : {"K+":1}, red : {"K":1}, electrons:1, V:-2.92}
redoxPairs[5] = {ox : {"Ba2+":1}, red : {"Ba":1}, electrons:2, V:-2.90}
redoxPairs[6] = {ox : {"Ca2+":1}, red : {"Ca":1}, electrons:2, V:-2.87}
redoxPairs[7] = {ox : {"Na+":1}, red : {"Na":1}, electrons:1, V:-2.71}
redoxPairs[8] = {ox : {"Mg2+":1}, red : {"Mg":1}, electrons:2, V:-2.36}
redoxPairs[9] = {ox : {"Al3+":1}, red : {"Al":1}, electrons:3, V:-1.66}
redoxPairs[10] = {ox : {"Zn2+":1}, red : {"Zn":1}, electrons:2, V:-0.76}
redoxPairs[11] = {ox : {"Sn2+":1}, red : {"Sn":1}, electrons:2, V:-0.14}
redoxPairs[12] = {ox : {"Pb2+":1}, red : {"Pb":1}, electrons:2, V:-0.13}
//redoxPairs[13] = {ox : {"Fe3+":1}, red : {"Fe":1}, electrons:3, V:-0.02}
redoxPairs[14] = {ox : {"H+":2}, red : {"H2":1}, electrons:2, V:0}
redoxPairs[15] = {ox : {"I2":1}, red : {"I-":2}, electrons:2, V:0.62}
redoxPairs[16] = {ox : {"O2":1, "H+":4}, red : {"H2O":2}, electrons:4, V:1.23}
redoxPairs[17] = {ox : {"Cl2":1}, red : {"Cl-":2}, electrons:2, V:1.36}
redoxPairs[18] = {ox : {"F2":1}, red : {"F-":2}, electrons:2, V:2.87}
redoxPairs[19] = {ox : {"SO42-":1, "H+":4}, red : {"SO2":1, "H2O":2}, electrons:4, V:0.21}
redoxPairs[20] = {ox : {"MnO4-":1, "H+":8}, red : {"Mn2+":1, "H2O":4}, electrons:5, V:1.51}
function getTwoRandomInts() {
var rand1 = Math.floor(Math.random() * redoxPairs.length);
var rand2 = (rand1 + 1 + Math.floor(Math.random() * (redoxPairs.length - 1))) % redoxPairs.length;
return [rand1, rand2]
}
function redoxRatio(a,b) {
// first, find GCD (result will be incorrect if GCD has prime factors larger than 7, but I don't think that ever happens in chemistry)
for (var i=2;i<8;i++) {
if (a % i == 0 && b % i == 0) {
a = a/i
b = b/i
i=1
}
}
x = a;
y = b;
return [y,x];
}
function orderHalves(a, b) {
if (a.V < b.V) {
return [a,b];
} else {
return [b,a];
}
}
function makeRedoxReaction(oxHalf, redHalf) {
var ratios = redoxRatio(oxHalf.electrons, redHalf.electrons);
var oxRatio = ratios[0];
var redRatio = ratios[1];
reactants = {};
products = {};
for (var mol in oxHalf["red"]) {
reactants[mol] = oxHalf["red"][mol] * oxRatio;
}
for (var mol in redHalf["ox"]) {
reactants[mol] = redHalf["ox"][mol] * redRatio;
}
for (var mol in oxHalf["ox"]) {
products[mol] = oxHalf["ox"][mol] * oxRatio;
}
for (var mol in redHalf["red"]) {
products[mol] = redHalf["red"][mol] * redRatio;
}
return [reactants, products];
}
function makeRandomRedoxReaction() {
randInts = getTwoRandomInts();
a = redoxPairs[randInts[0]];
b = redoxPairs[randInts[1]];
halves = orderHalves(a,b);
return makeRedoxReaction(halves[0], halves[1]);
}
var cformat = function (twoChem) {
var reactLeft = [] ,
reactRight = [],
react = [];
for (var speciesLeft in twoChem[0]) {
reactLeft.push( {"species": speciesLeft, "coef": twoChem[0][speciesLeft]} );
}
for (var speciesRight in twoChem[1]) {
reactRight.push( {"species": speciesRight, "coef": twoChem[0][speciesRight]} );
}
return [reactLeft, reactRight];
}
window.makeRandomRedoxReaction = makeRandomRedoxReaction;
window.cformat = cformat;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment