Allele Frequency to Population Genetics Estimator
Genotype Frequency (Aa): ${Aa.toFixed(4)} (${AaCount.toFixed(0)} individuals)
Genotype Frequency (aa): ${aa.toFixed(4)} (${aaCount.toFixed(0)} individuals)
Inbreeding Coefficient (F): ${inbreeding.toFixed(2)} (Assuming HWE)
`; resultSection.innerHTML = resultText; resultSection.style.display = 'block'; pdfButton.disabled = false; }; const downloadPDF = () => { if (!currentResults.popSize || !resultSection.innerText) { errorMessage.textContent = 'No results available to download.'; errorMessage.style.display = 'block'; return; } try { const { jsPDF } = window.jspdf; if (!jsPDF) { console.error('jsPDF is not loaded.'); errorMessage.textContent = 'PDF generation failed. Please try again.'; errorMessage.style.display = 'block'; return; } const doc = new jsPDF(); doc.setFont('helvetica', 'bold'); doc.setFontSize(16); doc.text('Allele Frequency to Population Genetics Estimator', 20, 20); doc.setLineWidth(0.5); doc.line(20, 25, 190, 25); doc.setFont('helvetica', 'normal'); doc.setFontSize(12); doc.text(`Allele Frequency (p for A): ${currentResults.alleleFreq.toFixed(2)}`, 20, 40); doc.text(`Allele Frequency (q for a): ${currentResults.q.toFixed(2)}`, 20, 50); doc.text(`Population Size (N): ${currentResults.popSize}`, 20, 60); doc.text(`Genotype Frequency (AA): ${currentResults.AA.toFixed(4)} (${currentResults.AACount.toFixed(0)} individuals)`, 20, 70); doc.text(`Genotype Frequency (Aa): ${currentResults.Aa.toFixed(4)} (${currentResults.AaCount.toFixed(0)} individuals)`, 20, 80); doc.text(`Genotype Frequency (aa): ${currentResults.aa.toFixed(4)} (${currentResults.aaCount.toFixed(0)} individuals)`, 20, 90); doc.text(`Inbreeding Coefficient (F): ${currentResults.inbreeding.toFixed(2)} (Assuming HWE)`, 20, 100); doc.setDrawColor(200); doc.rect(15, 35, 180, 70); doc.save('population_genetics.pdf'); } catch (error) { console.error('PDF generation error:', error); errorMessage.textContent = 'Failed to generate PDF. Please try again.'; errorMessage.style.display = 'block'; } }; const resetForm = () => { converterForm.reset(); resultSection.innerHTML = ''; resultSection.style.display = 'none'; errorMessage.style.display = 'none'; pdfButton.disabled = true; currentResults = { alleleFreq: 0, popSize: 0, q: 0, aa: 0, aaCount: 0, Aa: 0, AaCount: 0, AA: 0, AACount: 0, inbreeding: 0 }; alleleFreqInput.focus(); }; convertButton.addEventListener('click', calculatePopulationGenetics); resetButton.addEventListener('click', resetForm); pdfButton.addEventListener('click', downloadPDF); converterForm.addEventListener('submit', (e) => { e.preventDefault(); calculatePopulationGenetics(); }); }); })();