<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://kyrylch.uk/feed.xml" rel="self" type="application/atom+xml" /><link href="https://kyrylch.uk/" rel="alternate" type="text/html" /><updated>2026-03-06T21:44:59+00:00</updated><id>https://kyrylch.uk/feed.xml</id><title type="html">Andrii’s personal site</title><subtitle>Andrii Kyrylchuk&apos;s personal website and blog.</subtitle><entry><title type="html">Analog Explorer: SAR Visualization by MCS Regions</title><link href="https://kyrylch.uk/chemistry/tools/2026/03/01/analog-explorer.html" rel="alternate" type="text/html" title="Analog Explorer: SAR Visualization by MCS Regions" /><published>2026-03-01T12:00:00+00:00</published><updated>2026-03-01T12:00:00+00:00</updated><id>https://kyrylch.uk/chemistry/tools/2026/03/01/analog-explorer</id><content type="html" xml:base="https://kyrylch.uk/chemistry/tools/2026/03/01/analog-explorer.html"><![CDATA[<p>A browser-based SAR viewer that groups analogs of a parent compound by where they differ structurally, using Maximum Common Substructure (MCS) detection. Runs entirely in your browser via <a href="https://github.com/rdkit/rdkit-js">RDKit.js</a> (WebAssembly) – no installation required.</p>

<h3 id="how-to-use">How to use</h3>

<ol>
  <li>Load molecules from an <strong>SDF or SMILES file</strong> (or paste SMILES/ID pairs directly into the text box).</li>
  <li>Select the <strong>parent molecule</strong> – either the first molecule in your input or a separate reference SMILES.</li>
  <li>Click <strong>Build grouped view</strong>. The tool computes the MCS between the parent and each analog, then highlights atoms that fall outside the MCS (i.e., where the analog differs from the parent).</li>
  <li>Analogs are arranged in <strong>trays</strong> grouped by the region of the parent they modify.</li>
</ol>

<h3 id="features">Features</h3>

<ul>
  <li><strong>MCS-based highlighting</strong> – atoms outside the maximum common substructure are highlighted, immediately showing what changed between parent and analog.</li>
  <li><strong>ECFP4 similarity filter</strong> – slider to show only analogs above a chosen Tanimoto similarity threshold to the parent.</li>
  <li><strong>Custom SAR regions</strong> – define named regions by clicking atoms on the parent structure, then analogs are grouped by which region their change attaches to.</li>
  <li><strong>Auto left/middle/right grouping</strong> – automatic tray layout based on the spatial position of the change site in the 2D depiction.</li>
  <li><strong>Side drawer editor</strong> – click any analog thumbnail to open a detail view where you can toggle MCS highlights, drag atoms, rotate, or mirror the structure.</li>
  <li><strong>Configurable rendering</strong> – adjust atom label size, bond width, highlight radius, highlight color, and thumbnail size.</li>
  <li><strong>Data fields</strong> – load additional properties from SMILES columns or SDF tags and display them under each analog card.</li>
  <li><strong>High-resolution PNG export</strong> – export the grouped SAR view at up to 3× resolution.</li>
</ul>

<iframe src="/assets/analog-explorer.html" width="100%" height="1200px" frameborder="0" style="border: none;">
</iframe>]]></content><author><name></name></author><category term="chemistry" /><category term="tools" /><summary type="html"><![CDATA[A browser-based SAR viewer that groups analogs of a parent compound by where they differ structurally, using Maximum Common Substructure (MCS) detection. Runs entirely in your browser via RDKit.js (WebAssembly) – no installation required.]]></summary></entry><entry><title type="html">Interactive Molecular Structure Alignment &amp;amp; Highlighting</title><link href="https://kyrylch.uk/chemistry/tools/2026/02/05/molecular-alignment-tool.html" rel="alternate" type="text/html" title="Interactive Molecular Structure Alignment &amp;amp; Highlighting" /><published>2026-02-05T12:00:00+00:00</published><updated>2026-02-05T12:00:00+00:00</updated><id>https://kyrylch.uk/chemistry/tools/2026/02/05/molecular-alignment-tool</id><content type="html" xml:base="https://kyrylch.uk/chemistry/tools/2026/02/05/molecular-alignment-tool.html"><![CDATA[<p>A browser-based tool for aligning molecular structures to a common reference scaffold and highlighting the differences. It runs entirely in your browser using <a href="https://github.com/rdkit/rdkit-js">RDKit.js</a> (WebAssembly) – no installation required.</p>

<h3 id="how-to-use">How to use</h3>

<ol>
  <li>Prepare a <strong>SMILES file</strong> (tab-separated: SMILES, Catalog ID, and any additional properties) or an <strong>SDF file</strong> with your molecules.</li>
  <li>Enter a <strong>reference SMILES</strong> representing the common scaffold you want to align against.</li>
  <li>Click <strong>Load &amp; Align</strong>. The tool will find the maximum common substructure (MCS) between the reference and each molecule, align their 2D coordinates, and highlight atoms that differ from the reference in green.</li>
</ol>

<h3 id="features">Features</h3>

<ul>
  <li><strong>Interactive highlighting</strong> – toggle Edit Highlights mode and click individual atoms to add or remove highlights.</li>
  <li><strong>Structure editing</strong> – drag atoms to reposition them and fine-tune the 2D layout of any molecule. Atom click targets are pixel-accurate, derived directly from RDKit’s rendered SVG coordinates.</li>
  <li><strong>Rotation &amp; mirroring</strong> – adjust the orientation of any selected molecule while keeping atom labels upright.</li>
  <li><strong>Atom selector dialog</strong> – bulk select/deselect atoms for highlighting via checkboxes.</li>
  <li><strong>Configurable labels</strong> – choose font size and which molecular property to display as a second line (e.g., price, MW).</li>
  <li><strong>Highlight appearance</strong> – adjust the highlight radius and pick a custom highlight color.</li>
  <li><strong>High-resolution PNG export</strong> – export the entire grid at 2x resolution for publications or presentations.</li>
</ul>

<iframe src="/assets/molecular-alignment.html" width="100%" height="1200px" frameborder="0" style="border: none;">
</iframe>]]></content><author><name></name></author><category term="chemistry" /><category term="tools" /><summary type="html"><![CDATA[A browser-based tool for aligning molecular structures to a common reference scaffold and highlighting the differences. It runs entirely in your browser using RDKit.js (WebAssembly) – no installation required.]]></summary></entry><entry><title type="html">Interactive Elliptic Curve Cryptography</title><link href="https://kyrylch.uk/learning/2025/12/29/interactive_dh.html" rel="alternate" type="text/html" title="Interactive Elliptic Curve Cryptography" /><published>2025-12-29T19:24:00+00:00</published><updated>2025-12-29T19:24:00+00:00</updated><id>https://kyrylch.uk/learning/2025/12/29/interactive_dh</id><content type="html" xml:base="https://kyrylch.uk/learning/2025/12/29/interactive_dh.html"><![CDATA[<p>I was always fascinated with the way modern cryptography works. While learning about elliptic curves, I used Anthropic Claude to build an interactive visualization of Diffie-Hellman key exchange. You can explore it below.</p>

<p>If you’re interested in learning more about how DH key exchange works, I highly recommend this <a href="https://mareknarozniak.com/2020/11/30/ecdh/">blog post</a> and <a href="https://curves.xargs.org/">this page</a>.</p>

<iframe src="/assets/elliptic-curve-dh.html" width="100%" height="2000px" frameborder="0" style="border: none;">
</iframe>]]></content><author><name></name></author><category term="learning" /><summary type="html"><![CDATA[I was always fascinated with the way modern cryptography works. While learning about elliptic curves, I used Anthropic Claude to build an interactive visualization of Diffie-Hellman key exchange. You can explore it below.]]></summary></entry><entry><title type="html">Our New Work on the Liquid Flow through Membranes</title><link href="https://kyrylch.uk/research/2021/03/20/liquid-flow-through-membranes.html" rel="alternate" type="text/html" title="Our New Work on the Liquid Flow through Membranes" /><published>2021-03-20T18:38:10+00:00</published><updated>2021-03-20T18:38:10+00:00</updated><id>https://kyrylch.uk/research/2021/03/20/liquid-flow-through-membranes</id><content type="html" xml:base="https://kyrylch.uk/research/2021/03/20/liquid-flow-through-membranes.html"><![CDATA[<p>Arguing with Nobel laureates is not an everyday thing for a scientist. Yet that was exactly what we had to do quite recently. Working on the paper “<a href="https://journals.aps.org/prapplied/abstract/10.1103/PhysRevApplied.14.044038">Liquid Flow through Defective Layered Membranes: A Phenomenological Description</a>” was an important and exciting time for me.</p>

<p><img src="/assets/images/go_membrane-2.png" alt="Model of a GO membrane and a schematic route of water through it" />
<em>Model of a GO membrane and a schematic route of water through it</em></p>

<p>Nanomaterials represent great promise for almost all areas of human life. Every researcher working in the field feel great excitement about them and wants to find a killer application. It does not always happen quickly though. For example, “<a href="https://www.azonano.com/article.aspx?ArticleID=259">nano emissive display</a>”, a technology, developed in the early 2000s, is still not on the market. So, the years have passed in studying properties of carbon nanotubes, graphene and buckyballs, but we are still not using them in our everyday life as wide as the futurists predicted. However, disregards how strongly we want to make progress in this direction, it does not mean that rigorous checkup of the experimental results and underlying theoretical concepts can be ignored…</p>

<p>We have met claims about the magical properties of graphene and graphene oxide (GO) for water filtration. They were mostly about the “ultrafast water flow” through the membranes made of GO. These claims were published in several papers by the research group of prominent Andre Geim (<a href="https://science.sciencemag.org/content/335/6067/442">1</a>, <a href="https://science.sciencemag.org/content/343/6172/752">2</a>). In these works, water flow through GO membranes was measured and compared to the calculated values based on an idealized membrane. The discrepancies of several orders of magnitude were found and the authors attributed them to the unique effects of the membrane materials used. The setup and conclusions of the works were largely discussed by experimentalists and theoreticians (<a href="https://pubpeer.com/publications/369B42246A53878677399C3A5172A4">3</a>, <a href="https://onlinelibrary.wiley.com/doi/abs/10.1002/adfm.201202601">4</a>, <a href="https://www.sciencedirect.com/science/article/abs/pii/S0376738817316058?via%3Dihub">5</a>, <a href="https://arxiv.org/abs/1812.03941">6</a>).</p>

<p>Although we share the excitement about the bright future of nanomaterials, our skepticism calls us to check the theoretically calculated values first. The biggest concern was that the actual structure of the membrane in solution may be different from the one that is elucidated by the examination of parts of dry membrane. As the pore diameter enters the equation of liquid flow through a membrane in 4th power, even a small error in the average pore diameter estimate can make a big difference in the calculated flow speeds.</p>

<p>So what we have done in the paper boils down to the following. Firstly, we checked if the Hagen-Poiselle law describing laminar water flow through a pipe holds for nanopores. It does. Then we took an ideal membrane with the known density of pores of known diameter and calculated flow speed through it. After that we modeled the different types of defects in the membrane and looked at how the permeability changes. Not surprisingly, one can easily change the permeability entering relatively small defects in the membrane structure. Sparse micrometer-wide holes had the biggest effect, changing the total flow by a factor of 10^6!</p>

<p>The main modeling takeaways were:</p>

<ul>
  <li>small defects make a big difference. Modifying thickness of a membrane or pore densities in some regions can change the membrane permeability dramatically</li>
  <li>proper estimation of pore densities and sizes is extremely important, very difficult (and maybe impossible…). The main difficulty is swelling. GO membranes are known to change geometry and size in water, and one needs to find out the pore parameters exactly in the swelled state, while electron microscopy is done in the dry state.</li>
</ul>

<p>For me the excitement of the work was not only in the debatable subject, but also in the methods used. As a computational chemist, I tend to make computational experiments, i.e. use complicated software to solve some problem. But here I had to use simple equations to model the membrane permeability. I have done it before during my undergrad studies, for a subject named “Processes and Apparatus of Chemical Technology”, which has a section on “Fluid Flow and Heat Transfer”. I must admit, that was not the most inspiring discipline I was taught, but now I am excited to use part of the knowledge in this work.</p>

<p>I would like to thank <a href="https://nanoten.com/tomanek/index.html"><strong>Professor David Tomanek</strong></a> for the inspiration and driving the effort. And my special thanks go to <strong>Inna Barysh</strong> and <strong>The Fulbright Office in Ukraine</strong> for all their help and making my fellowship at MSU real!</p>

<p><a href="https://journals.aps.org/prapplied/abstract/10.1103/PhysRevApplied.14.044038">Quandt, A., Kyrylchuk, A., Seifert, G., &amp; Tomanek, D. (2020). Liquid Flow through Defective Layered Membranes: A Phenomenological Description. <em>Physical Review Applied</em>, <em>14</em>(4), 044038.</a></p>]]></content><author><name></name></author><category term="research" /><category term="flow" /><category term="graphite-oxide" /><category term="nano" /><summary type="html"><![CDATA[Arguing with Nobel laureates is not an everyday thing for a scientist. Yet that was exactly what we had to do quite recently. Working on the paper “Liquid Flow through Defective Layered Membranes: A Phenomenological Description” was an important and exciting time for me.]]></summary></entry><entry><title type="html">Getting fancy orbital pictures using gOpenMol</title><link href="https://kyrylch.uk/computational-chemistry/2020/12/06/getting-fancy-orbital-pictures-using-gopenmol.html" rel="alternate" type="text/html" title="Getting fancy orbital pictures using gOpenMol" /><published>2020-12-06T16:13:48+00:00</published><updated>2020-12-06T16:13:48+00:00</updated><id>https://kyrylch.uk/computational-chemistry/2020/12/06/getting-fancy-orbital-pictures-using-gopenmol</id><content type="html" xml:base="https://kyrylch.uk/computational-chemistry/2020/12/06/getting-fancy-orbital-pictures-using-gopenmol.html"><![CDATA[<p>Suppose you want to get nice molecular orbital renderings for your paper or a blog post. Let’s do it using gOpenMol. It is an old program, developed by Leif Laaksonen. It was available at the web-site of <a href="https://www.csc.fi/en/home">IT CENTER FOR SCIENCE</a> earlier, but only a <a href="https://research.csc.fi/documents/48467/185207/gopenmol.pdf/3c2c527d-8ff0-43b0-8bb5-ac754867de2f">manual</a> is still there. I managed to download the program itself from <a href="https://www.softpedia.com/get/Science-CAD/gOpenMol.shtml">Softpedia</a>, and tested it uder Win7. As gOpenMol is an old piece of software, you will need a .fchk file made by Gaussian03. I tried to use G09-generated files, but the program crashes.</p>

<ol>
  <li>
    <p>Prepare .fchk file. You will get a .chk file after a Gaussian calculation. Then perform a following command:</p>

    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code> formchk 1.chk
</code></pre></div>    </div>
  </li>
  <li>
    <p>Launch gOpenMol and open <code class="language-plaintext highlighter-rouge">Tools &gt; Plugins &gt; FCHK Handling</code>. Press <code class="language-plaintext highlighter-rouge">Browse</code> in the opened window, select your .fchk file and press <code class="language-plaintext highlighter-rouge">Load</code>. You will get something like this:</p>

    <p><img src="/assets/images/fchk.png" alt="FCHK Handling dialog" /></p>
  </li>
  <li>
    <p>Set all <code class="language-plaintext highlighter-rouge">Grid parameters</code> to 60 (for smoother surfaces). Press <code class="language-plaintext highlighter-rouge">Reset Grain</code>.</p>
  </li>
  <li>
    <p>Select option <code class="language-plaintext highlighter-rouge">Use selected orbital</code> and choose needed orbital. Filled MOs are denoted by asterisk in the list and ordered by energy ascending. Then press <code class="language-plaintext highlighter-rouge">Calculate Grid</code>. You will need to repeat this part as many times as the number of orbitals you want to render.</p>
  </li>
  <li>
    <p>Close the window by pressing <code class="language-plaintext highlighter-rouge">Dismiss</code>.</p>
  </li>
  <li>
    <p>Change the background color to white. <code class="language-plaintext highlighter-rouge">View &gt; Background color &gt; Color</code>. Choose white and press <code class="language-plaintext highlighter-rouge">OK</code>.</p>
  </li>
  <li>
    <p>Change the rendering style to balls&amp;sticks. <code class="language-plaintext highlighter-rouge">View &gt; Atom type</code>. Select <code class="language-plaintext highlighter-rouge">Licorice</code> in the opened window. Change the thickness of bond cylinders to 0.15 in the <code class="language-plaintext highlighter-rouge">Cyl.rad</code> field. Press <code class="language-plaintext highlighter-rouge">Apply</code> and close the window.</p>
  </li>
  <li>
    <p>Let’s show the orbitals, finally! <code class="language-plaintext highlighter-rouge">Plot &gt; Contour</code> will open the following window:</p>

    <p><img src="/assets/images/rend.png" alt="Contour rendering dialog" /></p>

    <p>Orbitals with the grids calculated at step 4 will appear in the upper list. Choose one of them.</p>
  </li>
  <li>
    <p>Put two thresholds in the first and second rows of the field named <code class="language-plaintext highlighter-rouge">Define contour levels</code>. In my case 0.04 and -0.04 were good.</p>
  </li>
  <li>
    <p>Select colors for the positive and negative regions. I prefer dark blue and gray.</p>
  </li>
  <li>
    <p>Press apply.</p>

    <p><img src="/assets/images/orb.png" alt="Orbital rendering result" /></p>
  </li>
  <li>
    <p>It’s not over yet! Press green <code class="language-plaintext highlighter-rouge">Details...</code> button next to the field with entered threshold and put the settings in the window that appears as follows:</p>

    <p><img src="/assets/images/sett.png" alt="Details settings dialog" /></p>
  </li>
  <li>
    <p>After all the settings are done, press <code class="language-plaintext highlighter-rouge">Apply</code> and close the window. Do the same for the second threshold value in the <code class="language-plaintext highlighter-rouge">Define contour levels</code> field.</p>
  </li>
  <li>
    <p>Almost ready. Rotate and zoom your molecule as you like. 3D rotation is done with the left mouse button pressed, the right mouse button is for zooming, and for 2D rotation you need to keep the mouse wheel pressed. Final image size will correspond to the window size, so it’s better to make your molecule as big as you can. Use <code class="language-plaintext highlighter-rouge">Edit &gt; Rotate/Translate</code> to place the molecule at the center and to translate it.</p>
  </li>
  <li>
    <p>Save the image by choosing <code class="language-plaintext highlighter-rouge">File &gt; Hardcopy...</code> Select BMP, enter the file name and location using <code class="language-plaintext highlighter-rouge">Browse</code> button and save the image by pressing <code class="language-plaintext highlighter-rouge">Apply</code>.</p>
  </li>
</ol>

<p>Done!</p>

<p><img src="/assets/images/mol.png" alt="Final rendered molecule" /></p>

<p>This way of preparation orbital images was used in our paper Kirilchuk, A. A.; Rozhenko, A. B.; Leszczynski, J. On Structure and Stability of Pyrimidine Ylidenes and Their Homologues. <em><a href="https://doi.org/10.1016/j.comptc.2017.01.024">Comput. Theor. Chem.</a></em> <strong>2017</strong>, <em>1103</em>, 83–91.</p>]]></content><author><name></name></author><category term="computational-chemistry" /><category term="gaussian" /><category term="gOpenMol" /><category term="images" /><summary type="html"><![CDATA[Suppose you want to get nice molecular orbital renderings for your paper or a blog post. Let’s do it using gOpenMol. It is an old program, developed by Leif Laaksonen. It was available at the web-site of IT CENTER FOR SCIENCE earlier, but only a manual is still there. I managed to download the program itself from Softpedia, and tested it uder Win7. As gOpenMol is an old piece of software, you will need a .fchk file made by Gaussian03. I tried to use G09-generated files, but the program crashes.]]></summary></entry><entry><title type="html">Partial optimization in Gaussian09</title><link href="https://kyrylch.uk/computational-chemistry/2020/12/06/partial-optimization-in-gaussian09.html" rel="alternate" type="text/html" title="Partial optimization in Gaussian09" /><published>2020-12-06T15:05:19+00:00</published><updated>2020-12-06T15:05:19+00:00</updated><id>https://kyrylch.uk/computational-chemistry/2020/12/06/partial-optimization-in-gaussian09</id><content type="html" xml:base="https://kyrylch.uk/computational-chemistry/2020/12/06/partial-optimization-in-gaussian09.html"><![CDATA[<p><img src="/assets/images/7a_ts.jpg" alt="Molecular structure" /></p>

<p>There are several ways to do partial optimization (freeze coordinates) in Gaussian.</p>

<ul>
  <li>One of them is to add “<strong>ModRedundant</strong>” to <a href="https://gaussian.com/opt/"><strong>Opt</strong></a> or <strong>Geom</strong> keyword and to write</li>
</ul>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>F1
F2
F3
...
</code></pre></div></div>

<p>after coordinate section. “<strong>F</strong>” here means freeze, and integer stands for atom number.</p>

<ul>
  <li>Another one is to add “<strong>ReadOpt</strong>” to <strong>Opt</strong> keyword and to add</li>
</ul>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>noatoms atoms=1-4
</code></pre></div></div>

<p>after Cartesians. This will exclude the first four atoms from optimization. BTW, you definitely should read the section about “<strong>ReadOptimize</strong>” option if you haven’t before.</p>

<ul>
  <li>The third one is using a <em><a href="https://gaussian.com/molspec/">freeze-code</a></em>. I came across this method in the <a href="https://www.researchgate.net/post/Anybody_familiar_with_the_freezing_of_atoms_in_gaussian_software">post</a> at ResearchGate portal. The idea is <a href="https://gaussian.com/oniom/">simple</a>: you add <strong>0</strong> (or nothing) between an atom symbol and its coordinates if the position of the atom should be optimized, and <strong>-1</strong> if you want to freeze it.</li>
</ul>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>C   0   1.5841970000         -2.9056620000          0.0000300000
C  -1   3.2294750000          0.7041530000          0.0001550000
</code></pre></div></div>

<p>The first atom in the example will be included in the optimization and the second will be frozen.</p>

<p>Just that simple!</p>

<p>And something more: if you restart your optimization from .chk file, freezing will be preserved. Enjoy!</p>

<p>P.S. Also check Dr. Barroso’s post on the <a href="https://joaquinbarroso.com/2015/11/09/partial-optimizations-with-gaussian09/">topic</a>.</p>]]></content><author><name></name></author><category term="computational-chemistry" /><category term="gaussian" /><category term="QC" /><category term="tips" /><summary type="html"><![CDATA[]]></summary></entry></feed>