add bacteria report
This commit is contained in:
parent
68af5c4b13
commit
e198c2c9be
|
|
@ -226,6 +226,7 @@
|
||||||
write_sample_description(sample);
|
write_sample_description(sample);
|
||||||
get_result_main(sample_chooser.value);
|
get_result_main(sample_chooser.value);
|
||||||
get_result_nema(sample_chooser.value);
|
get_result_nema(sample_chooser.value);
|
||||||
|
get_result_bact(sample_chooser.value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -251,6 +252,7 @@
|
||||||
write_sample_description(sample);
|
write_sample_description(sample);
|
||||||
get_result_main(this.value);
|
get_result_main(this.value);
|
||||||
get_result_nema(this.value);
|
get_result_nema(this.value);
|
||||||
|
get_result_bact(this.value);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -390,7 +392,7 @@
|
||||||
Math.pow((item.width*Number(microscope_setup.FoV_Width)),2.0)*Math.PI/4.0;
|
Math.pow((item.width*Number(microscope_setup.FoV_Width)),2.0)*Math.PI/4.0;
|
||||||
break
|
break
|
||||||
case "Actinobacteria":
|
case "Actinobacteria":
|
||||||
total.Actinobacteria += item.length*Number(microscope_setup.FoV_Width);
|
total.Actinobacteria += item.length*Number(microscope_setup.FoV_Width)*Math.PI/4.0;
|
||||||
break
|
break
|
||||||
case "Flagelate":
|
case "Flagelate":
|
||||||
total.Flagelate +=1;
|
total.Flagelate +=1;
|
||||||
|
|
@ -571,5 +573,189 @@
|
||||||
newRow.insertCell(2).innerHTML = count * multiplication_factor_nema_scan;
|
newRow.insertCell(2).innerHTML = count * multiplication_factor_nema_scan;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// bacteria
|
||||||
|
function get_result_bact(sampleID){
|
||||||
|
const transaction = db.transaction('bacterial_scan');
|
||||||
|
const objStore = transaction.objectStore('bacterial_scan')
|
||||||
|
const index = objStore.index("sampleID");
|
||||||
|
const get_request = index.get(sampleID);
|
||||||
|
get_request.onsuccess = () => {
|
||||||
|
bact_scan_result = get_request.result;
|
||||||
|
|
||||||
|
get_prep_protocol_bact(get_request.result);
|
||||||
|
get_microscope_setup_bact(get_request.result);
|
||||||
|
}
|
||||||
|
|
||||||
|
get_request.onerror = (err)=> {
|
||||||
|
console.error(`Error to get all setups: ${err}`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function get_prep_protocol_bact(result_obj){
|
||||||
|
const request = db.transaction('prep_protocol')
|
||||||
|
.objectStore('prep_protocol')
|
||||||
|
.get(Number(result_obj.prepID));
|
||||||
|
|
||||||
|
request.onsuccess = () => {
|
||||||
|
prep_protocol_bact = request.result;
|
||||||
|
if (microscope_setup_bact && prep_protocol_bact && bact_scan_result){
|
||||||
|
write_bact_scan_description(bact_scan_result, prep_protocol_bact, microscope_setup_bact);
|
||||||
|
render_bact_scan_table(bact_scan_result);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
request.onerror = (err)=> {
|
||||||
|
console.error(`Error to get all setups: ${err}`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_microscope_setup_bact(result_obj){
|
||||||
|
const request = db.transaction('microscope_setup')
|
||||||
|
.objectStore('microscope_setup')
|
||||||
|
.get(Number(result_obj.setupID));
|
||||||
|
|
||||||
|
request.onsuccess = () => {
|
||||||
|
microscope_setup_bact = request.result;
|
||||||
|
if (microscope_setup_bact && prep_protocol_bact && bact_scan_result){
|
||||||
|
write_bact_scan_description(bact_scan_result, prep_protocol_bact, microscope_setup_bact);
|
||||||
|
render_bact_scan_table(bact_scan_result.result);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
request.onerror = (err)=> {
|
||||||
|
console.error(`Error to get all setups: ${err}`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function write_bact_scan_description(result, protocol, setup){
|
||||||
|
console.log('hi from writer')
|
||||||
|
// observed height in um -> sample size [uL] * 10^9 / coverslip Area [mm²] * 10^6
|
||||||
|
// -> yields 1000 * samplesize[uL] / coverslipArea[mm²]
|
||||||
|
let observed_height_bact = 1000 * Number(protocol.Sample_Size) /
|
||||||
|
(Number(setup.Slip_Height) * Number(setup.Slip_Width));
|
||||||
|
// observed Volume in uL -> height [um] * FoV [um²] = um³ -- 1 um³ = 1* 10^-9 uL
|
||||||
|
let observed_volume_bact = observed_height_bact *
|
||||||
|
Number(setup.FoV_Width)*Number(setup.FoV_Height)*Math.pow(10, -9);
|
||||||
|
|
||||||
|
multiplication_factor_bact_scan = result.dilution / observed_volume_bact;
|
||||||
|
|
||||||
|
document.querySelector("#bact_scan_datetime").textContent = result.datetime;
|
||||||
|
document.querySelector("#prep_protocol_name_bact").textContent = protocol.name;
|
||||||
|
document.querySelector("#cam_setup_name_bact").textContent = setup.name;
|
||||||
|
document.querySelector("#coverslip_height_bact").textContent = setup.Slip_Height;
|
||||||
|
document.querySelector("#coverslip_width_bact").textContent = setup.Slip_Width;
|
||||||
|
document.querySelector("#sample_volume_bact").textContent = prep_protocol.Sample_Size;
|
||||||
|
document.querySelector("#observed_height_bact").textContent = observed_height_bact.toFixed(2);
|
||||||
|
document.querySelector("#FoV_height_bact").textContent = microscope_setup.FoV_Height;
|
||||||
|
document.querySelector("#FoV_width_bact").textContent = microscope_setup.FoV_Width;
|
||||||
|
|
||||||
|
document.querySelector("#observed_volume_bact").textContent = observed_volume_bact.toExponential(2);
|
||||||
|
document.querySelector("#dilution_factor_bact").textContent = result.dilution;
|
||||||
|
|
||||||
|
document.querySelector("#factor_bact").textContent = multiplication_factor_bact_scan;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
var bact_table = document.querySelector("#bact_scan_table");
|
||||||
|
|
||||||
|
function render_bact_scan_table(result){
|
||||||
|
let counts = [];
|
||||||
|
if (result[0][0].length == 0){
|
||||||
|
for (let i=0; i<result.length; i++){
|
||||||
|
let res = result[i][1].slice(0, -1).map(Number);;
|
||||||
|
counts.push(res);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (let i=0; i<result.length; i++){
|
||||||
|
counts.push(update_bact_count(result[i][0]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
console.log(counts);
|
||||||
|
means = [];
|
||||||
|
sds = [];
|
||||||
|
for (let i=0; i<counts[0].length; i++){
|
||||||
|
let sum = 0;
|
||||||
|
for (let j=0; j<counts.length; j++){
|
||||||
|
sum += counts[j][i];
|
||||||
|
}
|
||||||
|
means.push(sum/counts.length);
|
||||||
|
}
|
||||||
|
for (let i=0; i<counts[0].length; i++){
|
||||||
|
let sd = 0;
|
||||||
|
for (let j=0; j<counts.length; j++){
|
||||||
|
sd += Math.pow(means[i] - counts[j][i],2);
|
||||||
|
}
|
||||||
|
sd = Math.sqrt(sd/counts.length);
|
||||||
|
sds.push(sd);
|
||||||
|
}
|
||||||
|
console.log(means);
|
||||||
|
console.log(sds);
|
||||||
|
|
||||||
|
keys = [
|
||||||
|
'Bacilli','','Cocci','','Pathogenic',''
|
||||||
|
]
|
||||||
|
for (let i=0; i<means.length; i+=2){
|
||||||
|
render_bact_scan_table_row(keys[i], [means[i],means[i+1]], [sds[i],sds[i+1]]);
|
||||||
|
}
|
||||||
|
document.querySelector("#bacterial_biomass").textContent = (means[1] + means[3] +
|
||||||
|
means[5]).toFixed(2) + " +- " + (sds[1] + sds[3] + sds[5]).toFixed(2);
|
||||||
|
document.querySelector("#fungal_biomass").textContent = Number(result_table.children[1].
|
||||||
|
children[0].children[1].innerHTML) + " +/- " + (Number(result_table.children[1].
|
||||||
|
children[0].children[2].innerHTML)*Number(result_table.children[1].
|
||||||
|
children[0].children[1].innerHTML)).toFixed(2);
|
||||||
|
|
||||||
|
document.querySelector("#f_to_b_biomass").textContent =
|
||||||
|
Number(result_table.children[1].children[0].children[1].innerHTML).toFixed(2) /
|
||||||
|
(means[1] + means[3] + means[5]).toFixed(2);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function render_bact_scan_table_row(key, mean, sd){
|
||||||
|
console.log(mean)
|
||||||
|
let newRow = bact_table.children[1].insertRow();
|
||||||
|
newRow.insertCell(0).innerHTML = key;
|
||||||
|
newRow.insertCell(1).innerHTML = mean[0] + " +/- " + sd[0];
|
||||||
|
newRow.insertCell(2).innerHTML = mean[1].toFixed(2) + " +/- " + sd[1].toFixed(2);
|
||||||
|
newRow.insertCell(3).innerHTML = (mean[0] * multiplication_factor_bact_scan).toFixed(2)
|
||||||
|
+ " +/- " + (100*(sd[0]/mean[0])).toFixed(2);
|
||||||
|
newRow.insertCell(4).innerHTML = (mean[1] * multiplication_factor_bact_scan*Math.pow(10,-6)).toExponential(2)
|
||||||
|
+ " +/- " + (100*(sd[1]/mean[1])).toFixed(2);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function update_bact_count(bacteria){
|
||||||
|
let bc = 0;
|
||||||
|
let cc = 0;
|
||||||
|
let pc = 0;
|
||||||
|
let abc = 0;
|
||||||
|
let acc = 0;
|
||||||
|
let apc = 0;
|
||||||
|
bacteria.forEach(function (item, index) {
|
||||||
|
switch(item[1]){
|
||||||
|
case "Bacteria":
|
||||||
|
bc += 1
|
||||||
|
abc += item[2];
|
||||||
|
break;
|
||||||
|
case "Cocci":
|
||||||
|
cc += 1
|
||||||
|
acc += item[2];
|
||||||
|
break;
|
||||||
|
case "Vibrio":
|
||||||
|
case "Spirilla":
|
||||||
|
case "Spirochetes":
|
||||||
|
pc += 1
|
||||||
|
apc += item[2];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
return [bc, abc, cc, acc, pc, apc];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue