Skip to content

Instantly share code, notes, and snippets.

@reinpk
Created March 22, 2013 21:11
Show Gist options
  • Save reinpk/5224783 to your computer and use it in GitHub Desktop.
Save reinpk/5224783 to your computer and use it in GitHub Desktop.
Tributary inlet
{"description":"Tributary inlet","endpoint":"","display":"div","public":true,"require":[{"name":"radioactive","url":"http://rein.pk/javascripts/libs/radioactive/radioactive.js"},{"name":"jquery","url":"http://rein.pk/javascripts/libs/jquery/jquery.min.js"},{"name":"highcharts","url":"http://rein.pk/javascripts/libs/highcharts/highcharts.js"}],"fileconfigs":{"inlet.js":{"default":true,"vim":false,"emacs":false,"fontSize":12},"graphing.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}},"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}
function renderRadioactivityPlot (container, series, units) {
var chart = new Highcharts.Chart({
chart: {
renderTo: container
},
credits : {
enabled: false
},
title: {
text: ''
},
legend : {
enabled: false
},
xAxis: {
title: {
enabled: true,
text: 'Years',
style : {
color : '#57534a'
}
},
type: 'logarithmic',
tickInterval: 1
},
yAxis: {
title: {
text: 'Radioactivity ('+units+')',
style : {
color : '#57534a'
}
},
type: 'logarithmic',
minorTickInterval: 1,
gridLineWidth: 0,
minorGridLineWidth: 0,
min: 100000
},
plotOptions: {
line : {
marker : {
enabled: false
},
lineWidth: 3
},
series : {
shadow: false
}
},
tooltip: {
formatter : function () {
console.log(this.point);
var x = numberFormat(this.point.x);
var y = numberFormat(this.point.y, 'Bq');
return ('<b>'+this.series.name+'</b><br />' + y + ' after ' + x + ' years');
}
},
series: series
});
}
function numberFormat (number, unit) {
var num = Math.abs(number);
if (num > 1000000000000000)
return ( Highcharts.numberFormat((number/1000000000000000), 0) + (unit ? ' E'+unit : 'Q'));
else if (num > 1000000000000)
return ( Highcharts.numberFormat((number/1000000000000), 0) + (unit ? ' P'+unit : 'T'));
else if (num > 1000000000)
return ( Highcharts.numberFormat((number/1000000000), 0) + (unit ? ' G'+unit : 'B'));
else if (num > 1000000)
return ( Highcharts.numberFormat((number/1000000), 0) + (unit ? ' M'+unit : 'M'));
else if (num > 1000)
return ( Highcharts.numberFormat((number/1000), 0) + (unit ? ' K'+unit : 'K'));
else if (num < 1000)
return Highcharts.numberFormat(number, 0);
}
function massOfCharge (charge) {
return _.reduce(_.keys(charge), function (memo, isotopeName) {
return (memo + charge[isotopeName]);
}, 0);
}
function generateRadioactivityTimeSeries (charge) {
var backgroundSoilRadiation = radioactive.decay.radiationLevels.soil * massOfCharge(charge);
var backgroundCutoff = backgroundSoilRadiation / 500;
var radioactivity = radioactive.decay.radioactivity(charge);
var data = [];
var tpow = 0;
var lastTotal = backgroundCutoff * 2;
while (lastTotal > backgroundCutoff) {
var t = Math.pow(10, tpow);
for (var mult = 1; mult < 10; mult+=2) {
var profile = radioactivity(mult*t);
data.push([ mult*t, profile.total ]);
}
lastTotal = _.last(data)[1];
tpow++;
}
data = _.filter(data, function (datum) {
return (datum[1] >= backgroundCutoff);
});
return data;
}
function generateBackgroundRadioactivityTimeSeries (mass, years) {
var backgroundSoilRadiation = radioactive.decay.radiationLevels.soil * mass;
var data = [];
var tpow = 0;
var t = Math.pow(10, tpow);
while (t < years) {
t = Math.pow(10, tpow);
for (var mult = 1; mult < 10; mult+=2) {
data.push([ mult*t, backgroundSoilRadiation ]);
}
tpow++;
}
return data;
}
// Basic Datasets
// --------------
var naturalSoil = {
name : 'Natural Soil',
data : generateBackgroundRadioactivityTimeSeries(1000, 10000000000),
color : '#AAA',
dashStyle: 'Dot'
};
var uranium238 = {
name : 'Uranium-238',
data : generateRadioactivityTimeSeries({
'U-238' : 1000.0 // kilograms
}),
color : '#427e80'
};
var cesium134 = {
name : 'Cesium-134',
data : generateRadioactivityTimeSeries({
'Cs-134' : 10.0 // kilograms
}),
color : '#e14e0c'
};
var plutonium239 = {
name : 'Plutonium-239',
data : generateRadioactivityTimeSeries({
'Pu-239' : 348.0 // kilograms
}),
color : '#a0586c'
};
var series = [];
var units = 'becquerels';
// Cesium vs. Uranium
series = [naturalSoil, uranium238, cesium134];
renderRadioactivityPlot('display', series, units);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment