Blog

<div style="background: linear-gradient(to bottom, red, orange); padding: 20px; color: #333; font-family: Arial, sans-serif;">
    <h2 style="color: white;">Day 1: Introduction to cheminformatics with RDKit</h2>
    
    <ul>
        <li><strong>Morning: The drug discovery pipeline and Python setup</strong>
            <ul>
                <li><strong>Topic:</strong> Overview of the modern drug discovery process, from target identification to lead optimization.</li>
                <li><strong>Hands-on:</strong>
                    <ul>
                        <li>Install Python, Miniconda, and the necessary libraries (RDKit, Pandas, NumPy, Matplotlib, Jupyter Notebook).</li>
                        <li>Learn how to use Jupyter Notebook and other standard Python data science libraries.</li>
                    </ul>
                </li>
            </ul>
        </li>
        <li><strong>Afternoon: Handling chemical data with RDKit</strong>
            <ul>
                <li><strong>Topic:</strong> Introduction to chemical data, molecular representations (SMILES, SDF), and physicochemical descriptors.</li>
                <li><strong>Hands-on:</strong>
                    <ul>
                        <li>Read and write chemical files with RDKit.</li>
                        <li>Calculate molecular properties such as molecular weight, logP, and polar surface area.</li>
                        <li>Implement Lipinski's Rule of Five to filter a dataset of drug-like molecules.</li>
                    </ul>
                </li>
            </ul>
        </li>
    </ul>
    
    <!-- Interactive Visual: Simple Molecule Viewer using Kekule.js -->
    <div style="margin-top: 20px; background: white; padding: 15px; border-radius: 8px;">
        <h3 style="color: #333;">Interactive Molecule Viewer</h3>
        <p>Enter a SMILES string (e.g., "CCO" for ethanol) and click "Display" to view the molecule. This demonstrates basic cheminformatics visualization relevant to the day's topics.</p>
        <input type="text" id="smilesInput" value="CC(=O)OC1=CC=CC=C1C(=O)O" style="width: 300px; padding: 5px;" placeholder="Enter SMILES">
        <button onclick="displayMolecule()" style="padding: 5px 10px; background: orange; color: white; border: none; cursor: pointer;">Display Molecule</button>
        <div id="chemViewer" style="width: 400px; height: 300px; margin-top: 10px; border: 1px solid #ccc;"></div>
    </div>
</div>

<!-- Include Kekule.js from CDN -->
<script src="https://cdn.jsdelivr.net/npm/kekule/dist/kekule.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/kekule/dist/themes/default/kekule.css" />

<script>
    // Function to display molecule
    function displayMolecule() {
        var smiles = document.getElementById('smilesInput').value;
        if (!smiles) {
            alert('Please enter a SMILES string.');
            return;
        }
        
        // Create or update the viewer
        var viewerElement = document.getElementById('chemViewer');
        viewerElement.innerHTML = ''; // Clear previous if any
        
        var chemViewer = new Kekule.ChemWidget.Viewer(viewerElement);
        chemViewer.setDimension('400px', '300px');
        
        // Load molecule from SMILES
        var mol = Kekule.IO.loadFormatData(smiles, 'smi');
        
        if (mol) {
            chemViewer.setChemObj(mol);
            chemViewer.setRenderType(Kekule.Render.RendererType.R2D);
        } else {
            alert('Invalid SMILES string.');
        }
    }
</script>