<script data-pm-proxy="intercept"></script><?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Personalized Immunotherapy Research Lab]]></title><description><![CDATA[The Personalized Immunotherapy Research Lab (PIRL) at UNC]]></description><link>https://pirlblog.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!rE9Q!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b44083d-390f-45ac-af2a-916e47031033_1280x1280.png</url><title>Personalized Immunotherapy Research Lab</title><link>https://pirlblog.substack.com</link></image><generator>Substack</generator><lastBuildDate>Fri, 04 Sep 2026 18:26:38 GMT</lastBuildDate><atom:link href="/__u/pirlblog.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Alex R]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[pirlblog@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[pirlblog@substack.com]]></itunes:email><itunes:name><![CDATA[Alex Rubinsteyn]]></itunes:name></itunes:owner><itunes:author><![CDATA[Alex Rubinsteyn]]></itunes:author><googleplay:owner><![CDATA[pirlblog@substack.com]]></googleplay:owner><googleplay:email><![CDATA[pirlblog@substack.com]]></googleplay:email><googleplay:author><![CDATA[Alex Rubinsteyn]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Announcing RAFT v1.5.1 and LENS v1.9.0]]></title><description><![CDATA[We&#8217;re excited to announce the latest RAFT and LENS releases.]]></description><link>https://pirlblog.substack.com/p/announcing-raft-v151-and-lens-v190</link><guid isPermaLink="false">https://pirlblog.substack.com/p/announcing-raft-v151-and-lens-v190</guid><dc:creator><![CDATA[Steven P. Vensko II]]></dc:creator><pubDate>Wed, 19 Aug 2026 19:49:52 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/5101b728-629b-4655-ac0f-a7a4b1f85ba2_1200x630.gif" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!SFiz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd41612e-1749-4e98-a7ea-0a5947e8edfb_760x524.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!SFiz!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd41612e-1749-4e98-a7ea-0a5947e8edfb_760x524.gif 424w, /__u/substackcdn.com/image/fetch/$s_!SFiz!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd41612e-1749-4e98-a7ea-0a5947e8edfb_760x524.gif 848w, /__u/substackcdn.com/image/fetch/$s_!SFiz!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd41612e-1749-4e98-a7ea-0a5947e8edfb_760x524.gif 1272w, /__u/substackcdn.com/image/fetch/$s_!SFiz!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd41612e-1749-4e98-a7ea-0a5947e8edfb_760x524.gif 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!SFiz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd41612e-1749-4e98-a7ea-0a5947e8edfb_760x524.gif" width="760" height="524" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bd41612e-1749-4e98-a7ea-0a5947e8edfb_760x524.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:524,&quot;width&quot;:760,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4057787,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/211720510?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd41612e-1749-4e98-a7ea-0a5947e8edfb_760x524.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!SFiz!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd41612e-1749-4e98-a7ea-0a5947e8edfb_760x524.gif 424w, /__u/substackcdn.com/image/fetch/$s_!SFiz!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd41612e-1749-4e98-a7ea-0a5947e8edfb_760x524.gif 848w, /__u/substackcdn.com/image/fetch/$s_!SFiz!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd41612e-1749-4e98-a7ea-0a5947e8edfb_760x524.gif 1272w, /__u/substackcdn.com/image/fetch/$s_!SFiz!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd41612e-1749-4e98-a7ea-0a5947e8edfb_760x524.gif 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>We&#8217;re excited to announce RAFT v1.5.1 (our Nextflow-based bioinformatics project manager) and LENS v1.9.0 (our tumor antigen prediction workflow). Together, these releases make LENS substantially easier to install and run while providing a more rigorously reviewed, higher-confidence set of tumor antigen candidates.<br><br>For new users, these releases substantially reduce the work required to install RAFT, configure LENS, and review results. For existing users, they add more robust cloud execution, automatic resource scaling, improved QC, and tiered antigen reports designed to distinguish the complete candidate set from the candidates supported by the strongest evidence.<br><br>These releases began with a conversation Brian Parker and I had over breakfast in early January. As we reflected on the previous year, I wasn&#8217;t satisfied with where RAFT and LENS stood in the immuno-oncology bioinformatics ecosystem. RAFT was not as portable as I wanted it to be, and LENS remained too difficult to run reliably.<br><br>RAFT and LENS had a small group of users who provided excellent feedback. However, we also suspected that other scientists had tried the tools, encountered installation or environment-specific problems, and moved on. Expanding the user base would not only make the tools useful to more researchers&#8212;it would also expose more edge cases, uncover more issues, and ultimately make both projects stronger.<br><br>Our goal for these releases was therefore straightforward: make RAFT and LENS accessible to scientists across a much broader range of bioinformatics experience.<br><br>That goal presented a practical challenge. The core development team is small: Brian and I develop RAFT and LENS alongside our other responsibilities in the lab. To accelerate development, we began using agentic coding models to assist with implementing, testing, and debugging selected changes. AI-assisted changes remain subject to human review and the same testing and validation standards as the rest of the codebase.<br><br>Below is a bird&#8217;s-eye view of the major improvements, followed by a more detailed discussion of their motivation, expected impact, and implementation.</p><ul><li><p>Web-based manifest setup, workflow configuration, and interactive results review</p></li><li><p>Improved cloud support and streamlined commands</p></li><li><p>Automated RAFT dependency handling</p></li><li><p>Automatic sample-level resource scaling</p></li><li><p>Higher-confidence antigen prioritization</p></li><li><p>Expanded tumor characterization and QC</p></li></ul><div><hr></div><h1 style="text-align: center;">RAFT updates</h1><p>RAFT (Reproducible Analyses Framework and Tools) is our Nextflow wrapper that creates and manages project-level environments for reproducible bioinformatics analyses. More information about RAFT can be found at <a href="http://useraft.io">useraft.io</a>.</p><h4><strong>User experience enhancements</strong></h4><ul><li><p>RAFT web UI &#8212; Users can now use a web-based UI to create sample manifests and configure workflows during <code>raft run</code>, or to <a href="https://pirl-unc.github.io/raft-ui/raft-viewer.html?demo=1">review project outputs</a> with <code>raft generate-reports</code>. This also works in headless environments, as long as users can copy and paste data between the headless environment and a system with a web browser.</p></li><li><p>Unified <code>raft run</code> &#8212; RAFT now has a single entry point that replaces <code>raft run-ots</code> (previously used to create a project using an off-the-shelf workflow, like LENS) and <code>raft run-workflow</code> (previously used to run an already established project).</p></li><li><p>Added <code>raft project-status</code> &#8212; Users now have access to a project-level summary describing the project, the manifest, the project&#8217;s run status, and available outputs, if any.</p></li><li><p>Improved reference download visuals &#8212; RAFT now provides a cleaner interface during reference file downloading.</p></li><li><p>Automated dependency installs and tests &#8212; RAFT dependencies (Nextflow, Git, and Singularity) can be automatically installed using <code>raft install-dependencies</code>.</p></li><li><p>Minimal profile generation &#8212; RAFT now provides users with a default Nextflow profile with sensible resource allocations to use on their local machine whenever RAFT cannot detect a user-defined Nextflow profile.</p></li><li><p>Faster module downloads &#8212; Project-specific module fetches are now faster thanks to adaptive throttling.</p></li></ul><h4><strong>Improved workflow support</strong></h4><ul><li><p>Workflow profiles &#8212; Workflows, such as LENS, can now support multiple configuration profiles when using <code>raft run</code> with the <code>--workflow-profile</code> parameter. Available workflow profiles can be discovered using <code>raft available-workflow-profiles</code>.</p></li><li><p>Patient filtering &#8212; RAFT now filters patients who do not meet a workflow&#8217;s minimum input requirements&#8212;for example, patients without an RNA-seq sample when one is required by LENS. Users can bypass this filtering with <code>--include-all-samples</code>.</p></li><li><p>Resource scaling &#8212; Resources are now allocated on a sample-by-sample basis based on input FASTQ size. This reduces failures caused by underallocated resources while avoiding unnecessary overallocation.</p></li></ul><h4><strong>Better reference handling</strong></h4><ul><li><p><code>raft download-refs</code> &#8212; Users can now download references for a specific workflow (and version) without first creating a RAFT project.</p></li><li><p>Cloud staging &#8212; References can now be staged to a specific cloud bucket (for use with <code>--references-bucket</code>) without first creating a RAFT project.</p></li><li><p>Improved duplicate-reference errors &#8212; Duplicate reference files (files or directories with the same name in different locations under <code>/path/to/raft/references</code>) are now explicitly listed when a duplicate-reference error occurs.</p></li><li><p>Safer reference generation &#8212; Lock-based reference generation prevents concurrent <code>raft run</code> (or <code>raft download-refs</code>) commands from corrupting downloads.</p></li><li><p>Mirrors for references &#8212; Several references now have fallback mirrors available in case <a href="https://gatk.broadinstitute.org/hc/en-us/articles/360035890811/comments/46046240434715">the primary source goes offline</a>. If mirrors fail, users can provide an alternative URL or local filesystem path (if the file is already available elsewhere).</p></li></ul><h4><strong>Support for off-the-shelf immuno-oncology datasets</strong></h4><ul><li><p>Off-the-shelf datasets &#8212; RAFT now supports running analyses on publicly available datasets by using <code>--dataset</code> with <code>raft run</code>. <code>raft available-datasets</code> lists available datasets, and <code>raft download-dataset</code> lets users download a dataset (FASTQs, metadata, and manifest) without creating a RAFT project. Currently, only <a href="https://pubmed.ncbi.nlm.nih.gov/26997480/">Hugo et al., 2016</a> is available, though more datasets are planned.</p></li></ul><h4><strong>Expanded cloud support</strong></h4><ul><li><p>Formally supported hybrid mode &#8212; RAFT&#8217;s hybrid mode (local head node with cloud-based processing) is now formally supported. This has been tested extensively in GCP, but we&#8217;d like feedback on AWS support.</p></li><li><p>Multiple-bucket support &#8212; Hybrid mode now supports <code>--references-bucket</code> (for RAFT reference files and aligner indexes), <code>--fastqs-bucket</code> (for input FASTQs), and <code>--project-bucket</code> (for project-specific files). This enables stable, shared buckets across projects, reduces load on the head node, and lets users isolate storage by bucket when desired.</p></li><li><p>Resource labels &#8212; Hybrid mode emits user-customizable, cloud-provider-aware resource labels to help track costs and resource usage.</p></li><li><p>Output syncing &#8212; RAFT now copies relevant output files (e.g., QC data and LENS reports) back to the head node upon workflow completion.</p></li><li><p>BYOC (EXPERIMENTAL) &#8212; We are introducing a bring-your-own-cloud approach that is entirely web UI-driven and does not require installing RAFT on a head node. Note that this mode is under active development and is not yet recommended for production use.</p></li></ul><h4><strong>Maintainability and CLI improvements</strong></h4><ul><li><p>Module-based, not monolithic &#8212; Earlier versions of RAFT used a monolithic Python script. RAFT v1.5.1 now uses a module-based architecture, which should make debugging easier and help support new feature development.</p></li><li><p>Message of the day &#8212; RAFT now provides a message of the day (MOTD) when users are running either an out-of-date version of RAFT or an out-of-date workflow version.</p></li><li><p>Improved Nextflow support &#8212; RAFT now runs using Nextflow 26.04.6 instead of relying on older versions.</p></li></ul><h4><strong>Reproducibility and archiving</strong></h4><ul><li><p>Improved project tracking &#8212; RAFT now tracks not only the commands used to generate a RAFT project, but also changes made between runs (e.g., parameter changes, Docker image changes, or reference changes).</p></li></ul><h4><strong>Improved documentation</strong></h4><ul><li><p>Improved user-focused documentation &#8212; <a href="http://useraft.io">useraft.io</a> now guides users through understanding and running RAFT for their purposes.</p></li><li><p>Code status &#8212; RAFT now provides <a href="https://useraft.io/en/v1.5.1/code-status.html">automatically updated Pass/Fail/In Progress status indicators</a> for workflows, datasets, subworkflows, and tool-level modules.</p></li></ul><div><hr></div><h1 style="text-align: center;">LENS updates</h1><p>LENS (Landscape of Effective Neoantigen Software) is our tumor antigen prediction workflow, run through RAFT. LENS v1.9.0 improves execution efficiency, expands tumor characterization and candidate-level QC, and introduces tiered reports that make it easier to identify candidates supported by the strongest evidence.</p><h4><strong>Workflow improvements</strong></h4><ul><li><p>Additional modular subworkflows &#8212; Previously hard-coded subworkflows (such as variant annotation with <code>snpEff</code>) have been replaced with modular subworkflows to improve tool support.</p></li><li><p>Simplified pMHC identifiers &#8212; LENS now assigns <code>candidate-id</code> as a user-friendly unique identifier across pMHCs from various origins.</p></li><li><p>Multiplier-aware modules &#8212; Tool-level module configuration files now support RAFT&#8217;s resource scaling functionality.</p></li></ul><h4><strong>Seamless input handling</strong></h4><ul><li><p>Lane merging &#8212; LENS now automatically merges FASTQs generated from the same library for use as workflow inputs.</p></li></ul><h4><strong>Faster alignments</strong></h4><ul><li><p>Faster DNA alignments &#8212; A new process pipes <code>bwa-mem2</code> &#8594; <code>samblaster</code> &#8594; <code>samtools sort</code>, performing duplicate marking and coordinate sorting as part of the alignment stream rather than through separate post-processing steps.</p></li></ul><h4><strong>Improved HLA typing</strong></h4><ul><li><p>More robust HLA allele consensus calling &#8212; The <code>immuno</code> module now supports more combinations of HLA typing tools during consensus calling.</p></li><li><p>Normalization of user-provided HLA alleles &#8212; User-provided alleles are now normalized internally to maximize compatibility with downstream tools.</p></li><li><p>Optimized <code>razers3</code> call &#8212; The <code>razers3</code> process has been updated to support parallel alignments instead of running FASTQs in series.</p></li></ul><h4><strong>Expanded QC</strong></h4><ul><li><p>Improved BAM QC &#8212; <code>qualimap</code> has been added and now runs on all generated BAMs. This helps validate analysis quality and prioritize tumor antigens.</p></li></ul><h4><strong>Tumor characterization</strong></h4><ul><li><p>Added LOH, APPM, and spliceosome mutation reporting &#8212; LOH, APPM, and spliceosome mutation status are now computed as part of LENS and reported in the project&#8217;s <code>outputs/</code> directory. LOHHLA data has been moved to a separate sidecar output file.</p></li><li><p>Improved purity estimates &#8212; The <code>sequenza</code> process has been updated to pull tumor purity from the <code>confints</code> file rather than the <code>alternative_solutions</code> file. This should yield nearly identical purity estimates in most cases while following the recommended output from <code>sequenza</code>.</p></li></ul><h4><strong>Antigen-specific updates</strong></h4><ul><li><p>Added viral integration detection &#8212; LENS can now optionally detect viral integration sites using DNA and RNA alignment data.</p></li><li><p>Improved evidence for splice variants &#8212; LENS now uses <code>regtools</code> to detect cis-splice-effect variant associations. These associations are used for downstream pMHC filtering and help reduce false positives.</p></li><li><p>Mouse splice variant support (EXPERIMENTAL) &#8212; Previous splice-variant tools used in LENS, <code>Neosplice</code> and <code>SNAF</code>, do not explicitly support mouse samples. <a href="https://github.com/spvensko/msnaf">Our port</a> of <code>SNAF</code>, <code>mSNAF</code>, introduces mouse support, but it has not been thoroughly tested.</p></li><li><p>Improved cancer/testis antigen gene set &#8212; LENS now uses an updated, annotated CTA gene set generated by Dr. Alex Rubinsteyn.</p></li></ul><h4><strong>pMHC prioritization</strong></h4><ul><li><p><code>vaxrank</code> added &#8212; <code>vaxrank</code> (https://github.com/openvax/vaxrank) now runs by default. Relevant columns from <code>vaxrank</code> can be found in the LENS reports.</p></li><li><p>Alignment-based QC &#8212; Candidate peptides are now further scrutinized using alignment-based information such as read support, read quality, and mapping quality. More information can be found in the <a href="https://uselens.io/en/lens-v1.9.0/evidence_review_specifications.html">LENS evidence review specifications</a>.</p></li><li><p>Multiple tiered LENS reports &#8212; LENS now emits a base LENS report (with all pMHC candidates), a &#8220;reviewed evidence&#8221; LENS report with deeper QC for each candidate, and a high-confidence LENS report containing pMHCs that pass high-confidence filters. More information on these reports can be found in <a href="https://uselens.io/en/lens-v1.9.0/interpreting_report.html">the documentation covering LENS report interpretation</a>.</p></li></ul><h4><strong>Interactive reporting</strong></h4><ul><li><p>Interactive web UI for results review &#8212; RAFT&#8217;s <code>generate-reports</code> function now provides users with an interactive web-based UI for reviewing sample-level QC and pMHC candidates, comparing candidates across timepoints or treatments, and generating PDF reports.</p></li></ul><h4><strong>Improved documentation</strong></h4><ul><li><p>Improved documentation flow &#8212; LENS documentation now provides users with a more direct path to installing and using RAFT for running the LENS workflow.</p></li><li><p>Interactive LENS flowchart &#8212; <a href="https://uselens.io/en/lens-v1.9.0/workflow_flowchart.html">An interactive flowchart </a>showing the default path through the LENS workflow has been added.</p></li><li><p>Code status page &#8212; Like RAFT, LENS now provides an automatically updated <a href="https://uselens.io/en/lens-v1.9.0/module_test_status.html">code status page</a> for modules it uses.</p></li></ul><div><hr></div><h1 style="text-align: center;">Licensing updates</h1><ul><li><p>RAFT, LENS, and all modules maintained as part of these projects are now licensed under the Apache License 2.0.</p></li></ul><div><hr></div><p>We put a great deal of effort into these releases, and we hope that effort is reflected not in the length of the changelog, but in how much easier RAFT and LENS are to use. If you try them, we&#8217;d genuinely appreciate hearing what works, what doesn&#8217;t, and what would make them more useful for your research.<br><br>We would also like to thank <a href="https://www.linkedin.com/in/bnelsj">Brad Nelson</a> of <a href="https://pathfinderoncology.com/">Pathfinder Oncology</a> for his many contributions to both RAFT v1.5.1 and LENS v1.9.0.<br><br>If you have questions, comments, or suggestions, please contact Steven Vensko II at <a href="mailto:steven_vensko@med.unc.edu">steven_vensko@med.unc.edu</a> or join us on <a href="https://pirl-raft.slack.com">the RAFT Slack server</a>.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://pirlblog.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Personalized Immunotherapy Research Lab! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Some advice to companies and clinics starting personalized neoantigen vaccine programs]]></title><description><![CDATA[The problems aren't all solved yet...]]></description><link>https://pirlblog.substack.com/p/some-advice-to-companies-and-clinics</link><guid isPermaLink="false">https://pirlblog.substack.com/p/some-advice-to-companies-and-clinics</guid><dc:creator><![CDATA[Benjamin Vincent]]></dc:creator><pubDate>Mon, 02 Feb 2026 16:40:22 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!HizX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58942fee-9c0c-4b8e-bcf4-6fa30b22dbb4_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!HizX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58942fee-9c0c-4b8e-bcf4-6fa30b22dbb4_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!HizX!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58942fee-9c0c-4b8e-bcf4-6fa30b22dbb4_1536x1024.png 424w, /__u/substackcdn.com/image/fetch/$s_!HizX!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58942fee-9c0c-4b8e-bcf4-6fa30b22dbb4_1536x1024.png 848w, /__u/substackcdn.com/image/fetch/$s_!HizX!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58942fee-9c0c-4b8e-bcf4-6fa30b22dbb4_1536x1024.png 1272w, /__u/substackcdn.com/image/fetch/$s_!HizX!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58942fee-9c0c-4b8e-bcf4-6fa30b22dbb4_1536x1024.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!HizX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58942fee-9c0c-4b8e-bcf4-6fa30b22dbb4_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/58942fee-9c0c-4b8e-bcf4-6fa30b22dbb4_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2945185,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/186628053?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58942fee-9c0c-4b8e-bcf4-6fa30b22dbb4_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!HizX!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58942fee-9c0c-4b8e-bcf4-6fa30b22dbb4_1536x1024.png 424w, /__u/substackcdn.com/image/fetch/$s_!HizX!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58942fee-9c0c-4b8e-bcf4-6fa30b22dbb4_1536x1024.png 848w, /__u/substackcdn.com/image/fetch/$s_!HizX!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58942fee-9c0c-4b8e-bcf4-6fa30b22dbb4_1536x1024.png 1272w, /__u/substackcdn.com/image/fetch/$s_!HizX!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58942fee-9c0c-4b8e-bcf4-6fa30b22dbb4_1536x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">&#8220;Personalized Neoantigen Vaccine for Cancer, Solarpunk style&#8221; -ChatGPT 5.2</figcaption></figure></div><h2><strong>Antigen Selection</strong></h2><h4><strong>1. Start with a good open-source antigen prediction pipeline (rather than developing a new pipeline in-house)</strong></h4><p><em>Rationale: </em>Predicting tumor antigens from genomics data seems deceptively easy, e.g., just call some variants from whole exome sequencing, look for expression of these in RNA-seq data, predict HLA binding with netMHCpan or MHCFlurry, and rank predictions by binding. That&#8217;s what was done in the first papers describing a neoantigen prediction workflow (and is what many groups still do). However, the vast majority of predicted neoantigens are neither presented by HLA nor immunogenic <em>in vivo</em>, so the nuances of which features to capture from the genomics data, filtering heuristics, and ranking heuristics can matter quite a bit. Although there are multiple pipelines reported in the literature, most of these are proprietary and/or underspecified in methods. There are three main open-source neoantigen prediction workflows to choose from, deploy without much friction, and build upon (pVACtools, OpenVax, LENS). The most widely used in clinical trials so far has been pVACtools (<a href="https://github.com/griffithlab/pVACtools">GitHub repo</a>, <a href="https://pubmed.ncbi.nlm.nih.gov/31907209">paper</a>), which was developed by Malachi and Obi Griffith&#8217;s lab at Washington University in St. Louis and has supported the WashU and Jamie Leandro Foundation vaccine trials. OpenVax (<a href="https://github.com/openvax/neoantigen-vaccine-pipeline/">GitHub repo</a>, <a href="https://pubmed.ncbi.nlm.nih.gov/32124317">paper</a>) was developed by Alex Rubinsteyn, Tim O&#8217;Donnell, and Julia Kodysh while working in the Hammerbacher lab at Mt. Sinai in New York, supporting the Mt. Sinai trials run through Nina Bhardwaj&#8217;s group. LENS (<a href="https://github.com/pirl-unc/lens">GitHub repo</a>, <a href="https://pubmed.ncbi.nlm.nih.gov/37184881">paper</a>) is our software, developed to allow prediction of tumor antigens from genomic sources beyond small somatic mutations, harmonize RNA expression across genomic sources for antigen prioritization, capture features important for immunogenicity prediction, and be transparent, reproducible, and extensible based on containerization. So, depending on what you want to do, you could leverage the development time, testing, and prior FDA review of any of these pipelines.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://pirlblog.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Personalized Immunotherapy Research Lab! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p><em>Counterpoints: </em>If you have special insight into genomics prediction of tumor antigens in general or for a subclass of antigens, especially if you have novel bioinformatics methods required for antigen prediction, you&#8217;d want to incorporate these. In that case, you might still want to build on one of the open-source workflows given they&#8217;ve already been reviewed by the FDA and their libraries could speed development time. You may also have collaborator(s) in academia or industry with proprietary pipelines that you&#8217;d like to use. If so, I would benchmark these against one or more open-source pipelines first to ensure good performance.</p><h4><strong>2. Consider including expressional tumor antigens beyond genomically templated sources (e.g. alternative splice variants, endogenous retroviral elements, and cancer/testis antigens) but use only those with minimal expression in medullary thymic epithelial cells</strong> </h4><p><em>Rationale: </em>Even in tumors with a high mutation rate, only a minority of predicted neoantigens are presented by cancer cells <em>in vivo</em>, and only a minority of those are immunogenic. In some tumor types, somatic mutations are rare. Optimal antigen selection may include expressional antigens as well as antigens derived from somatic mutations. You can use <a href="https://pubmed.ncbi.nlm.nih.gov/32345368">publicly available RNA-seq data</a> from medullary thymic epithelial cells to exclude expressional antigens that are expressed highly in mTECs (which would be less likely to be immunogenic given negative selection in the thymus).</p><p><em>Counterpoint: </em>Using only neoantigens derived from somatic mutations allows confidence in tumor-specificity of the specific antigen peptide(s). Splice variants, CTAs and ERVs may be expressed by normal tissues, potentially causing toxicity if the vaccine elicits potent antigen-specific T cell responses. That said, using publicly available genomics datasets to confirm tumor-specificity may attenuate this risk.</p><h4><strong>3. Use long-read as well as short-read sequencing if possible to capture larger somatic mutations</strong></h4><p><em>Rationale: </em>Long-read whole genome and whole transcriptome sequencing (e.g., Pacific Biosciences or Oxford Nanopore) allow identification of germline and somatic structural variants that cannot be identified by short-read sequencing (e.g., Illumina) alone. Large somatic variants may elicit more immunogenic neoantigens than single-nucleotide variants, as they contain longer stretches of non-self amino acid subsequences (i.e., look more like viruses than self). Our workflow for long read data analysis (Exacto) is here: <a href="https://github.com/pirl-unc/exacto">GitHub repo</a> / <a href="/__u/pirlblog.substack.com/p/expanding-the-unified-grammar-for">blog post</a>.</p><p><em>Counterpoints:</em> Long read sequencing is expensive and requires fresh or frozen tissue for high-molecular weight DNA and RNA extraction. For these reasons, it may be logistically challenging. It may be the case that most large structural variants can be resolved with short read sequencing (unclear as robust benchmarking has not yet been done). No study has yet shown an example of an immunogenic neoantigen that could be detected by long-read sequencing but not short-read sequencing.</p><h4><strong>4. Validate antigen presentation as best you can using immunopeptidomics studies</strong> </h4><p><em>Rationale: </em>Only a minority of predicted neoantigens are presented by HLA <em>in vivo</em>. The true positive rate of prediction is probably 2-20% depending on the tumor and genomics/bioinformatics workflow, so antigen selection using genomics alone would yield mostly false positives. Mass spectrometry based immunopeptidomics can be used to confirm HLA presentation of tumor antigen peptides (examples: <a href="https://pubmed.ncbi.nlm.nih.gov/40405018">1</a>, <a href="https://pubmed.ncbi.nlm.nih.gov/39394480">2</a>, <a href="https://pubmed.ncbi.nlm.nih.gov/40339010">3</a>). Another option would be to validate predicted tumor antigens by looking for antigen-specific T cell responses prior to vaccination (presuming they would only be present if the tumor antigens were presented <em>in vivo</em>). The downside of this second option is that you would be measuring the cancer&#8217;s immunological history, not necessarily generating evidence that the cancer cells were presenting the antigen(s) at the time of sample collection.</p><p><em>Counterpoints: </em>Like extraction of high-molecular weight DNA and RNA for long-read sequencing, immunoprecipitation of peptide/HLA molecules for immunopeptidomics currently requires fresh or frozen tumor samples as the input material. Sensitivity of shotgun immunopeptidomics studies is lower than you&#8217;d like, and targeted immunopeptidomics is prohibitively expensive to screen hundreds of peptides per patient. Even if you integrate immunopeptidomics into your integral biomarker for antigen selection, you will likely need to allow for cases where there are insufficient numbers of validated tumor antigens to choose from. You could use immunopeptidomics for antigen prioritization rather than making it a hard filter on antigen selection.</p><h4><strong>5. Include validated antigens such that the vaccine antigen set covers all tumor subclones</strong></h4><p><em>Rationale: </em>Failure to eliminate all tumor subclones will select for escape variants that are resistant to T cell populations elicited by the vaccine (due to lack of relevant antigen presentation). You can use single cell sequencing studies to define the clonal landscape of the tumor and select an antigen set that covers all subclones. Our software for data analysis for this is here (<a href="http://github.com/pirl-unc/tahp.">github</a>, <a href="/__u/pirlblog.substack.com/p/quantifying-tumor-antigen-heterogeneity">blog post</a>).</p><p><em>Counterpoints: </em>Single cell sequencing requires capturing fresh or viably cryopreserved tumor cells, which may be logistically challenging. Antigen-directed immunotherapies that target a single antigen, or a set of antigens that do not cover all tumor subclones, may still be clinically effective if they induce epitope spreading and/or are part of a combination therapy strategy where other drugs can eliminate the resistant subclones.</p><h4><strong>6. Select validated antigens where the set covers HLA proteins encoded by alleles on both chromosomes</strong></h4><p><em>Rationale: </em>Loss of heterozygosity of HLA (LOHHLA) is somewhat frequent mechanism of resistance to T cell-directed therapies. LOHHLA can happen without much cost in selective fitness of the cancer cells, however given that more extensive loss of HLA can trigger NK cell-mediated cytotoxicity, and a gene coding for a core subunit of RNA polymerase I lies within the HLA Class I loci, loss of both large chromosome segments containing all classical HLA class I loci has a much higher fitness cost. You can hedge against LOHHLA in vaccine design by including antigens presented by HLA proteins encoded by HLA alleles on both chromosomes. The original LOHHLA workflow is here (<a href="https://pubmed.ncbi.nlm.nih.gov/29107330">paper</a>, <a href="https://github.com/mskcc/lohhla">github</a>), and a variant of this is implemented in <a href="https://uselens.io/en/lens-v1.8/">LENS</a>.<br><em>Counterpoint: </em>The optimal quantitative trade-offs between selecting antigens presented on HLA across both chromosomes and selecting optimal antigens regardless of HLA are unknown.</p><h4><strong>7. Select as few tumor antigens as possible</strong> (<strong>subject to the above constraints)</strong></h4><p><em>Rationale: </em>Responses to potentially immunogenic antigens may be attenuated by <a href="https://www.biorxiv.org/content/10.1101/2025.10.26.684631v1">competitive inhibition</a> when multiple antigens are included in the vaccine (i.e., immunodominance amongst the antigen set). Selecting as few antigens as possible may minimize competitive inhibition of immunogenic antigens.</p><p><em>Counterpoints:</em> The optimal quantitative trade-offs between increasing the frequency of immunogenic antigens in the vaccine (by selecting more antigens) and reducing antigen competitive inhibition (by selecting less antigens) are unknown. You could hedge risk here by allowing changes to antigen inclusion over time based on elicitation of antigen-specific T cell responses and tumor coevolution/immune escape. </p><h2><strong>Vaccine Formulation</strong></h2><h4><strong>8. Use an mRNA/LNP formulation if possible</strong> </h4><p><em>Rationale: </em>The only randomized clinical trial which has reported a benefit of neoantigen vaccination (in this case given with anti-PD-1 vs anti-PD-1 only) is the <a href="https://pubmed.ncbi.nlm.nih.gov/38246194">Merck/Moderna adjuvant melanoma trial</a> that used an mRNA/LNP vaccine. We have some <a href="/__u/pirlblog.substack.com/p/potency-of-peptide-polyic-lc-montanide">preclinical data</a> in mice that mRNA/LNP vaccination may be superior to peptide/adjuvant vaccination, with more benchmarking ongoing (although adjuvant data are difficult to interpret translationally due to differences between innate immune signaling in mice vs humans). There are also practical advantages of an mRNA formulation: faster synthesis, no loss of antigens to synthesis failure based on hydrophobicity and cysteine content, and more flexible combination with other therapies (deliverable via LNPs).</p><p><em>Counterpoints:</em> Peptide/adjuvant vaccines have a longer history of clinical trials and may be cheaper and easier to access for now. mRNA and LNP design and manufacturing are encumbered by IP constraints, which may matter if you are looking for investment or commercial returns from your vaccine platform. If you use a peptide vaccine, consider using <a href="https://pubmed.ncbi.nlm.nih.gov/40645179">multiple adjuvants (along with immune checkpoint inhibition) </a>for potentially greater efficacy. DC vaccines may be more potent, but they are expensive in time and money to manufacture and as such are difficult to scale.</p><h2><strong>Vaccine Dosing</strong></h2><h4><strong>9. Give the vaccine in the context of combination immunotherapy</strong></h4><p><em>Rationale: </em>Eliciting tumor antigen-specific T cells <em>in vivo</em> is not enough to cure people. As best you can, you also want to reverse or preempt resistance mechanisms. The best place to start is probably giving the vaccine with PD-1 inhibition (based on results from the Merck/Moderna melanoma study), however additional resistance mechanisms are probably applicable in your tumor of interest, and you may wish to target these as well.</p><p><em>Counterpoints</em>: Increasing complexity of the intervention means increased cost in time and money for the trial. For anti-PD-1 specifically, this may interfere with establishment and maintenance of antigen-specific T cell memory (even as it improves effector function in the short term) (<a href="https://pubmed.ncbi.nlm.nih.gov/41299179">paper</a>). </p><h2><strong>Correlative Studies</strong></h2><h4><strong>10. Measure everything you can that may be a resistance mechanism to see which ones occur and at what frequency</strong> </h4><p><em>Rationale: </em>For a therapeutic vaccine to work clinically, you need all of the following biology: (1) Antigen targets that are presented by HLA, (2) Enough peptide/HLA complexes on the cancer cell surface to support effective targeting by T cells, (3) Elicitation of enough T cells specific for target antigen(s) in the body to outcompete the number of tumor cells, (4) Achievement of T cell ingress into tumors, (5) Capacity of elicited T cells to kill cancer cells in the tumor microenvironment (including proper tuning of T cell-intrinsic phenotypes and subversion of intratumoral T cell suppression and evasion), and (6) Capacity to prevent or resolve acquired resistance mechanisms that develop under evolutionary selection pressure induced by your therapy. If a patient does not have a clinical response, then any of the above could&#8217;ve failed. It&#8217;s important to understand the which failure modes are common, how common they are, and whether they can be intervened upon to improve cure rates. If you have research biopsies pre- and post-therapy along with serial peripheral blood samples, you can evaluate these.</p><p><em>Counterpoints</em>: Correlative studies are expensive, and the space of potential resistance mechanisms is huge, so evaluating them would be exploratory at first. The extent to which active resistance mechanisms are shared among patients is unknown, so the best you may be able to do in a small trial is categorize likely candidates and show they lead to T cell dysfunction and/or evasion in <em>ex vivo</em> studies (rather than causally linking them to lack of clinical response in specific patients). Best would be to embed these studies in a context of iterative refinement of treatment strategies, like the n-of-1 approach described in Sid Sijbrandij&#8217;s &#8220;<a href="https://centuryofbio.com/p/sid">Going Founder Mode on Cancer</a>.&#8221;<br></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://pirlblog.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Personalized Immunotherapy Research Lab! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Quantifying Tumor Antigen Heterogeneity with TAHP]]></title><description><![CDATA[Tumor antigens play a crucial role in guiding therapeutic development.]]></description><link>https://pirlblog.substack.com/p/quantifying-tumor-antigen-heterogeneity</link><guid isPermaLink="false">https://pirlblog.substack.com/p/quantifying-tumor-antigen-heterogeneity</guid><dc:creator><![CDATA[Steven P. Vensko II]]></dc:creator><pubDate>Fri, 17 Oct 2025 19:29:48 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!5Ste!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff284cc70-2b04-4554-ba6a-ff3cd5166ee7_2040x798.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Tumor antigens play a crucial role in guiding therapeutic development. Some are tumor-specific (i.e. neoantigens), such as somatic single nucleotide variants (SNVs), structural variants (SVs), and cancer-testis antigens (CTAs) while others are tumor-associated. Unfortunately, several factors, including tumor heterogeneity, complicate the effective targeting of these tumor antigens. Here, we introduce TAHP (Tumor Antigen Heterogeneity Profiler), a tool to turn single-cell VCFs and gene count matrices into intratumoral heterogeneity insights.</p><p>Tumors are composed of complex cell populations consisting of several subpopulations (subclones) with distinct genotypes and transcriptional phenotypes. Strategies targeting tumor antigens with the highest population prevalence (i.e. clonal or near-clonal) intuitively seem ideal, but deciphering the complicated subclonal architecture within a tumor with the generally available bulk DNA and RNA sequencing can prove challenging. Bioinformatic tools exist to aid in estimating somatic variant cellular prevalence (i.e. clonality) using bulk DNA sequencing (e.g. Sequenza and CNVKit), but estimating cell-level transcriptional activity cannot be done reliably from bulk RNA sequencing.</p><p>To better understand why, let&#8217;s imagine a scenario where we have gene-level count data from a tumor generated using standard bulk RNA sequencing. We peruse the data and notice one of our favorite CTAs has elevated expression relative to our expectation. Unfortunately, with bulk sequencing, each cell&#8217;s contribution to the transcriptional profile is conflated into a single observation and one cannot tell whether a singular tumor cell is transcribing a seemingly infinite amount of that CTA or if every tumor cell is expressing your CTA of interest. The truth likely lies somewhere in between these extremes, but bulk RNA sequencing fails to establish where.</p><p>Single-cell RNA sequencing (scRNA-seq) provides the resolution required to deconvolute cellular expression patterns, but most scRNA-seq protocols utilize Illumina-based short-read sequencing and only sequence the (5&#8217; or 3&#8217;) end of genes. The resulting gene counts provide unprecedented insights into tumor biology on a cellular level, but this limits our ability to interrogate sequence-level variation within gene bodies. This limitation prevents the use of short-read scRNA-seq to estimate the tumor heterogeneity of most tumor antigens (e.g. single nucleotide variants, fusions, insertions, or deletions). A small but growing class of assays is extending the utility of single-cell data through the utilization of long read sequencing. To address this, we created a tool to quickly turn scLRRNA-seq (single-cell long-read RNA-seq) VCFs and gene count matrices into an improved understanding of intratumoral heterogeneity. TAHP can be found at <a href="http://github.com/pirl-unc/tahp">github.com/pirl-unc/tahp</a>.</p><h2>Installation</h2><p>TAHP requires both Conda and Singularity/Apptainer for installation.</p><p>Users can install and run TAHP by running the following commands:</p><pre><code><code>git clone &lt;https://github.com&gt;:pirl-unc/tahp.git; cd tahp; conda env create -f environment.yml -y; conda activate tahp; singularity exec docker://spvensko/tahp_data:latest sh -c &#8220;cp -r /refs .; cp -r /test_data .&#8221;
</code></code></pre><p>This command will:</p><ul><li><p>Clone the TAHP repo locally</p></li><li><p>Create the <code>tahp</code> Conda environment</p></li><li><p>Activate the <code>tahp</code> Conda environment</p></li><li><p>Download the relevant references files and test data</p></li></ul><p>After initial installation, users can run TAHP by activating the <code>tahp</code> environment and running the <code>./tahp</code> command.</p><h2>Demonstration and Outputs</h2><p>To demonstrate TAHP&#8217;s utility in estimating tumor antigen heterogeneity, we&#8217;re running it on a primary melanoma sample from <code>GSE212945</code> (<a href="https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE212945">https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE212945</a>), a dataset generated for Shiau et al., 2023 (<a href="https://www.nature.com/articles/s41467-023-39813-7">https://www.nature.com/articles/s41467-023-39813-7</a>). The original analysis by Shiau et al. focused on better understanding the tumor microenvironment (TME), but we will be focusing on expression patterns of tumor antigens within the tumor cells.</p><p>We&#8217;ll specifically be using sample <code>GSM6564304</code> by running the following command (more information regarding inputs and parameters can be found below):</p><pre><code><code>./tahp -s tahp_demo_sample -g test_data/sclrRNA-seq/GSM6564304.gene_exps -h HLA-A*02:01 -v test_data/sclrRNA-seq/GSM6564304.vcf.gz
</code></code></pre><p>TAHP will produce both an <code>outputs/</code> and a <code>plots/</code> directory. Users will find a TSV in the <code>outputs/</code> directory named <code>tahp_demo_sample.pmhc_coverage.tsv</code> containing high scoring pMHCs observed within the sample&#8217;s tumor cells along with information regarding tumor cell coverage. Here&#8217;s an example of that output:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!5Ste!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff284cc70-2b04-4554-ba6a-ff3cd5166ee7_2040x798.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!5Ste!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff284cc70-2b04-4554-ba6a-ff3cd5166ee7_2040x798.png 424w, /__u/substackcdn.com/image/fetch/$s_!5Ste!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff284cc70-2b04-4554-ba6a-ff3cd5166ee7_2040x798.png 848w, /__u/substackcdn.com/image/fetch/$s_!5Ste!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff284cc70-2b04-4554-ba6a-ff3cd5166ee7_2040x798.png 1272w, /__u/substackcdn.com/image/fetch/$s_!5Ste!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff284cc70-2b04-4554-ba6a-ff3cd5166ee7_2040x798.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!5Ste!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff284cc70-2b04-4554-ba6a-ff3cd5166ee7_2040x798.png" width="724.683349609375" height="283.7015860421317" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f284cc70-2b04-4554-ba6a-ff3cd5166ee7_2040x798.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:570,&quot;width&quot;:1456,&quot;resizeWidth&quot;:724.683349609375,&quot;bytes&quot;:192994,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://spvensko.substack.com/i/176439818?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff284cc70-2b04-4554-ba6a-ff3cd5166ee7_2040x798.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!5Ste!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff284cc70-2b04-4554-ba6a-ff3cd5166ee7_2040x798.png 424w, /__u/substackcdn.com/image/fetch/$s_!5Ste!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff284cc70-2b04-4554-ba6a-ff3cd5166ee7_2040x798.png 848w, /__u/substackcdn.com/image/fetch/$s_!5Ste!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff284cc70-2b04-4554-ba6a-ff3cd5166ee7_2040x798.png 1272w, /__u/substackcdn.com/image/fetch/$s_!5Ste!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff284cc70-2b04-4554-ba6a-ff3cd5166ee7_2040x798.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Let&#8217;s break down what this file&#8217;s telling us. The columns are:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!7Gyv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13b93c63-f1d8-416c-be3a-8e50c5f54a5b_1440x466.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!7Gyv!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13b93c63-f1d8-416c-be3a-8e50c5f54a5b_1440x466.png 424w, /__u/substackcdn.com/image/fetch/$s_!7Gyv!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13b93c63-f1d8-416c-be3a-8e50c5f54a5b_1440x466.png 848w, /__u/substackcdn.com/image/fetch/$s_!7Gyv!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13b93c63-f1d8-416c-be3a-8e50c5f54a5b_1440x466.png 1272w, /__u/substackcdn.com/image/fetch/$s_!7Gyv!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13b93c63-f1d8-416c-be3a-8e50c5f54a5b_1440x466.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!7Gyv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13b93c63-f1d8-416c-be3a-8e50c5f54a5b_1440x466.png" width="727.933349609375" height="235.56732008192273" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/13b93c63-f1d8-416c-be3a-8e50c5f54a5b_1440x466.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:466,&quot;width&quot;:1440,&quot;resizeWidth&quot;:727.933349609375,&quot;bytes&quot;:84928,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://spvensko.substack.com/i/176439818?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13b93c63-f1d8-416c-be3a-8e50c5f54a5b_1440x466.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!7Gyv!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13b93c63-f1d8-416c-be3a-8e50c5f54a5b_1440x466.png 424w, /__u/substackcdn.com/image/fetch/$s_!7Gyv!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13b93c63-f1d8-416c-be3a-8e50c5f54a5b_1440x466.png 848w, /__u/substackcdn.com/image/fetch/$s_!7Gyv!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13b93c63-f1d8-416c-be3a-8e50c5f54a5b_1440x466.png 1272w, /__u/substackcdn.com/image/fetch/$s_!7Gyv!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13b93c63-f1d8-416c-be3a-8e50c5f54a5b_1440x466.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>The <strong>pmhc</strong> column contains a variety of information related to potentially targetable pMHCs. Let&#8217;s consider an example:</p><pre><code><code>PRAME/TLAKFSPYL/HLA-A*02:01/Affinity:12nM/Presentation:91.8%</code></code></pre><p>The above <code>/</code>-delimited line is jam packed with information. Let&#8217;s split it up into its components and go over them:</p><p><code>PRAME</code> - The target generating the listed pMHC. This could be a SNV, CTA, or ERV.</p><p><code>TLAKFSPYL</code> - The peptide portion of the pMHC</p><p><code>HLA-A*02:01</code> - The allele portion of the pMHC</p><p><code>Affinity:12nM</code> - The pMHC binding affinity (per MHCflurry)</p><p><code>Presentation:91.8%</code> - The pMHC presentation score (per MHCflurry)</p><p>The target identifier varies by antigen source. CTAs have their gene symbol (e.g. PRAME) listed, SNVs entries are described as chr:position:ref:alt (So the pMHC in the table above is a C &#8594; A substitution at the 55,726,929th position of the twelfth chromosome. ERVs are described by the chromosome and position of their MetID from their gEVE classification.</p><p>Next, let&#8217;s consider the contents of the file. Each row represents a pMHC derived from either a CTA, ERV, or SNV. The CTA and ERV entries must be expressed at a pre-defined expression threshold (user adjustable &#8212; see section below on inputs) across a pre-defined proportion of tumor cells (also user adjustable &#8212; see section below on inputs). SNV entries must have a cellular population allelic frequency &lt; 90% (following methods of Shiau et al., 2023) and must have a genotype in at least 50% of cells. SNVs are not explicitly filtered using a specific expression threshold; however, we make the assumption that a SNV reliably detected using single-cell RNA sequencing must be conditionally sufficiently expressed for detection.</p><p>Notably, the <strong>order</strong> of rows is meaningful! The first row is the pMHC with the highest tumor cell population expression coverage and the subsequent rows are pMHCs that, as determined through a greedy algorithm, cover the highest proportion of tumor cells not already covered by a previously chosen pMHC(s). So, looking at our table above, we see that the SNV <code>chr12.55726929.C.A</code> covers the most tumor cells at 299 (56.1%) of tumor cells. Next, the ERV <code>chr21.27791519</code> is listed as it increases the number of covered tumor cells by 49 additional cells (9.2%) for a total of 348 tumor cells covered. This algorithm continues until it has included every high scoring pMHC observed in the sample.</p><p>The information in this table is visualized in <code>plots/tahp_demo_sample.tumor_het.pmhcs.pdf</code> (Figure 1):</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!PJcm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a0d931e-f4e3-4cab-a65e-dfd44b9a91dd_1107x1117.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!PJcm!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a0d931e-f4e3-4cab-a65e-dfd44b9a91dd_1107x1117.png 424w, /__u/substackcdn.com/image/fetch/$s_!PJcm!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a0d931e-f4e3-4cab-a65e-dfd44b9a91dd_1107x1117.png 848w, /__u/substackcdn.com/image/fetch/$s_!PJcm!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a0d931e-f4e3-4cab-a65e-dfd44b9a91dd_1107x1117.png 1272w, /__u/substackcdn.com/image/fetch/$s_!PJcm!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a0d931e-f4e3-4cab-a65e-dfd44b9a91dd_1107x1117.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!PJcm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a0d931e-f4e3-4cab-a65e-dfd44b9a91dd_1107x1117.png" width="728" height="734.576332429991" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6a0d931e-f4e3-4cab-a65e-dfd44b9a91dd_1107x1117.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:1117,&quot;width&quot;:1107,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:95513,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://spvensko.substack.com/i/176439818?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a0d931e-f4e3-4cab-a65e-dfd44b9a91dd_1107x1117.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!PJcm!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a0d931e-f4e3-4cab-a65e-dfd44b9a91dd_1107x1117.png 424w, /__u/substackcdn.com/image/fetch/$s_!PJcm!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a0d931e-f4e3-4cab-a65e-dfd44b9a91dd_1107x1117.png 848w, /__u/substackcdn.com/image/fetch/$s_!PJcm!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a0d931e-f4e3-4cab-a65e-dfd44b9a91dd_1107x1117.png 1272w, /__u/substackcdn.com/image/fetch/$s_!PJcm!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a0d931e-f4e3-4cab-a65e-dfd44b9a91dd_1107x1117.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Figure 1. pMHC coverage across tumor cells in <code>GSM6564304</code>.</p><p>A network graph of pMHC combinations (Figure 2) is also produced as <code>plots/tahp_demo_sample.tumor_antigen_network.pdf</code>. The nodes in the network graph are functionally pMHC barcodes in which each potential pMHC is presented as either <code>1</code> if observed within a cell and <code>0</code> if not observed. For example, let&#8217;s consider a scenario where only two pMHCs are observed, one from the CTA PRAME and another from CTA MAGEA4. In that case,</p><ul><li><p>A node of tumor cells expressing both PRAME and MAGEA4 would have a barcode of <code>11</code></p></li><li><p>A node of tumor cells expressing PRAME but NOT MAGEA4 would have a barcode of <code>10</code></p></li><li><p>A node of tumor cells not expressing PRAME, but instead expressing MAGEA4 would have a barcode of <code>01</code></p></li><li><p>A node of tumor cells expressing neither PRAME nor MAGEA4 would have a barcode of <code>00</code></p></li></ul><p>The edges connect nodes that are a hamming distance of 1 apart (in other words, nodes that differ by one position between their barcodes). For example, <code>11</code> would be connected to <code>10</code> and <code>01</code>, but not <code>00</code>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!InVH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa91040d7-6076-48b0-8515-efac4b618d70_875x748.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!InVH!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa91040d7-6076-48b0-8515-efac4b618d70_875x748.png 424w, /__u/substackcdn.com/image/fetch/$s_!InVH!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa91040d7-6076-48b0-8515-efac4b618d70_875x748.png 848w, /__u/substackcdn.com/image/fetch/$s_!InVH!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa91040d7-6076-48b0-8515-efac4b618d70_875x748.png 1272w, /__u/substackcdn.com/image/fetch/$s_!InVH!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa91040d7-6076-48b0-8515-efac4b618d70_875x748.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!InVH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa91040d7-6076-48b0-8515-efac4b618d70_875x748.png" width="728" height="622.336" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a91040d7-6076-48b0-8515-efac4b618d70_875x748.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:748,&quot;width&quot;:875,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:198966,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://spvensko.substack.com/i/176439818?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa91040d7-6076-48b0-8515-efac4b618d70_875x748.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!InVH!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa91040d7-6076-48b0-8515-efac4b618d70_875x748.png 424w, /__u/substackcdn.com/image/fetch/$s_!InVH!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa91040d7-6076-48b0-8515-efac4b618d70_875x748.png 848w, /__u/substackcdn.com/image/fetch/$s_!InVH!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa91040d7-6076-48b0-8515-efac4b618d70_875x748.png 1272w, /__u/substackcdn.com/image/fetch/$s_!InVH!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa91040d7-6076-48b0-8515-efac4b618d70_875x748.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Figure 2. Network plot of pMHC combinations among tumor cells in <code>GSM8330680</code>.</p><h2>The Nuts and Bolts</h2><p>Next, let&#8217;s go over the technical stuff. We&#8217;ll cover the input parameters first, then cover the algorithm being used.</p><p>TAHP can accept the following parameters:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!qbcC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddaf01d9-b03e-40e0-82f0-95d1f4141f4e_2200x1118.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!qbcC!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddaf01d9-b03e-40e0-82f0-95d1f4141f4e_2200x1118.png 424w, /__u/substackcdn.com/image/fetch/$s_!qbcC!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddaf01d9-b03e-40e0-82f0-95d1f4141f4e_2200x1118.png 848w, /__u/substackcdn.com/image/fetch/$s_!qbcC!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddaf01d9-b03e-40e0-82f0-95d1f4141f4e_2200x1118.png 1272w, /__u/substackcdn.com/image/fetch/$s_!qbcC!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddaf01d9-b03e-40e0-82f0-95d1f4141f4e_2200x1118.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!qbcC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddaf01d9-b03e-40e0-82f0-95d1f4141f4e_2200x1118.png" width="1456" height="740" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ddaf01d9-b03e-40e0-82f0-95d1f4141f4e_2200x1118.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:740,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:218028,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://spvensko.substack.com/i/176439818?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddaf01d9-b03e-40e0-82f0-95d1f4141f4e_2200x1118.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!qbcC!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddaf01d9-b03e-40e0-82f0-95d1f4141f4e_2200x1118.png 424w, /__u/substackcdn.com/image/fetch/$s_!qbcC!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddaf01d9-b03e-40e0-82f0-95d1f4141f4e_2200x1118.png 848w, /__u/substackcdn.com/image/fetch/$s_!qbcC!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddaf01d9-b03e-40e0-82f0-95d1f4141f4e_2200x1118.png 1272w, /__u/substackcdn.com/image/fetch/$s_!qbcC!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddaf01d9-b03e-40e0-82f0-95d1f4141f4e_2200x1118.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>TAHP, by default, has two required inputs &#8212; a scRNA-seq generated gene count matrix and a single-cell VCF. Generating this matrix and VCF (e.g. filtering criteria, normalization techniques, etc.) is up to the user (and users should be cognizant or how different inputs will influence the resulting outputs). Notably, our demonstration gene matrix and VCF were generated through <code>scNanoGPS</code>&#8216;s <code>reporter_expression.py</code> and <code>reporter_snv.py</code> scripts using a modified GTF file amended with ERV coordinates from the gEVE database (<a href="https://pmc.ncbi.nlm.nih.gov/articles/PMC4885607/">https://pmc.ncbi.nlm.nih.gov/articles/PMC4885607/</a>).</p><p>The gene matrix should be a TSV where rows are gene symbols and columns (after the initial descriptive columns) are cell barcodes. An example is available in the TAHP github repository and a minimal example is shown below.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!IKcF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4577ede0-4ec9-4c12-8e2a-21a69720c0b3_807x162.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!IKcF!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4577ede0-4ec9-4c12-8e2a-21a69720c0b3_807x162.png 424w, /__u/substackcdn.com/image/fetch/$s_!IKcF!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4577ede0-4ec9-4c12-8e2a-21a69720c0b3_807x162.png 848w, /__u/substackcdn.com/image/fetch/$s_!IKcF!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4577ede0-4ec9-4c12-8e2a-21a69720c0b3_807x162.png 1272w, /__u/substackcdn.com/image/fetch/$s_!IKcF!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4577ede0-4ec9-4c12-8e2a-21a69720c0b3_807x162.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!IKcF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4577ede0-4ec9-4c12-8e2a-21a69720c0b3_807x162.png" width="807" height="162" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4577ede0-4ec9-4c12-8e2a-21a69720c0b3_807x162.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:162,&quot;width&quot;:807,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:40601,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://spvensko.substack.com/i/176439818?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4577ede0-4ec9-4c12-8e2a-21a69720c0b3_807x162.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!IKcF!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4577ede0-4ec9-4c12-8e2a-21a69720c0b3_807x162.png 424w, /__u/substackcdn.com/image/fetch/$s_!IKcF!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4577ede0-4ec9-4c12-8e2a-21a69720c0b3_807x162.png 848w, /__u/substackcdn.com/image/fetch/$s_!IKcF!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4577ede0-4ec9-4c12-8e2a-21a69720c0b3_807x162.png 1272w, /__u/substackcdn.com/image/fetch/$s_!IKcF!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4577ede0-4ec9-4c12-8e2a-21a69720c0b3_807x162.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>The VCF should resemble a multisample VCF where each sample corresponds to a cell barcode:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!6QFG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b72c212-122e-4ccb-a72c-67518eaee7b9_835x134.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!6QFG!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b72c212-122e-4ccb-a72c-67518eaee7b9_835x134.png 424w, /__u/substackcdn.com/image/fetch/$s_!6QFG!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b72c212-122e-4ccb-a72c-67518eaee7b9_835x134.png 848w, /__u/substackcdn.com/image/fetch/$s_!6QFG!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b72c212-122e-4ccb-a72c-67518eaee7b9_835x134.png 1272w, /__u/substackcdn.com/image/fetch/$s_!6QFG!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b72c212-122e-4ccb-a72c-67518eaee7b9_835x134.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!6QFG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b72c212-122e-4ccb-a72c-67518eaee7b9_835x134.png" width="835" height="134" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1b72c212-122e-4ccb-a72c-67518eaee7b9_835x134.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:134,&quot;width&quot;:835,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:21790,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://spvensko.substack.com/i/176439818?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b72c212-122e-4ccb-a72c-67518eaee7b9_835x134.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!6QFG!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b72c212-122e-4ccb-a72c-67518eaee7b9_835x134.png 424w, /__u/substackcdn.com/image/fetch/$s_!6QFG!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b72c212-122e-4ccb-a72c-67518eaee7b9_835x134.png 848w, /__u/substackcdn.com/image/fetch/$s_!6QFG!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b72c212-122e-4ccb-a72c-67518eaee7b9_835x134.png 1272w, /__u/substackcdn.com/image/fetch/$s_!6QFG!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b72c212-122e-4ccb-a72c-67518eaee7b9_835x134.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>The TAHP algorithm can be broken down into a few discrete steps:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!qdxA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83d0ba51-289b-4378-8cad-239b604cc596_896x991.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!qdxA!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83d0ba51-289b-4378-8cad-239b604cc596_896x991.png 424w, /__u/substackcdn.com/image/fetch/$s_!qdxA!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83d0ba51-289b-4378-8cad-239b604cc596_896x991.png 848w, /__u/substackcdn.com/image/fetch/$s_!qdxA!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83d0ba51-289b-4378-8cad-239b604cc596_896x991.png 1272w, /__u/substackcdn.com/image/fetch/$s_!qdxA!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83d0ba51-289b-4378-8cad-239b604cc596_896x991.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!qdxA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83d0ba51-289b-4378-8cad-239b604cc596_896x991.png" width="896" height="991" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/83d0ba51-289b-4378-8cad-239b604cc596_896x991.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:991,&quot;width&quot;:896,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:180207,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://spvensko.substack.com/i/176439818?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83d0ba51-289b-4378-8cad-239b604cc596_896x991.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!qdxA!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83d0ba51-289b-4378-8cad-239b604cc596_896x991.png 424w, /__u/substackcdn.com/image/fetch/$s_!qdxA!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83d0ba51-289b-4378-8cad-239b604cc596_896x991.png 848w, /__u/substackcdn.com/image/fetch/$s_!qdxA!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83d0ba51-289b-4378-8cad-239b604cc596_896x991.png 1272w, /__u/substackcdn.com/image/fetch/$s_!qdxA!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83d0ba51-289b-4378-8cad-239b604cc596_896x991.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Availability</h2><p>The TAHP repository, including reference files, test data, and a Dockerfile describing dependencies, can be found at <a href="http://github.com/pirl-unc/tahp">github.com/pirl-unc/tahp</a>.</p><h2>Caveats and Considerations</h2><p>As mentioned previously, TAHP is a relatively simple tool and, as a result, there are several things users should keep in mind while running it:</p><p><strong>TAHP does not sanity check input gene matrices</strong></p><p>TAHP will consume gene matrices and VCFs as provided without performing any QC, applying any corrections, or normalizing any data. As a result, it&#8217;s possible users may get unexpected results if high quality data are not provided. For example, a gene matrix and VCF from a low read sequencing run will result in severe underestimation of pMHC coverage.</p><p><strong>Tumor cell coverage is likely an underestimate</strong></p><p>One feature of single-cell RNA sequencing data is the general sparsity observed with respect to gene-level expression. This, along with the old adage &#8220;absence of evidence is not evidence of absence&#8221;, suggests there are likely many cases where TAHP is reporting no expression of a specific CTA, ERV, or SNV in a specific cell when they may in fact be expressed within that cell, but missed for technical reasons.</p><p><strong>pMHC characterizations aren&#8217;t perfect</strong></p><p>Tools used to estimate a peptide&#8217;s binding affinity to a given HLA molecule, such as MHCflurry and NetMHCpan, can provide fantastic insights used to guide wet-lab validation experiments. Still, these estimated binding affinities should only be used as a guide and not as evidence that a peptide can be expected to be presented and immunogenic.</p><h2>Future Directions</h2><p>Single-cell RNA sequencing has become increasingly popular since its introduction due to the sheer number of questions it can address where bulk sequencing simply isn&#8217;t applicable. We hope that TAHP serves as a springboard for further investigation into tumor heterogeneity.</p><p>TAHP is being released as a BASH script which offers both pros (portability, ease of use) and cons (limited error detection and mitigation). It also requires users to generate inputs with scNanoGPS which can be an involved process. We expect TAHP to be implemented as part of an end-to-end RAFT workflow (similar to LENS) in the near future.</p><p>Thanks for your interest in TAHP! Feel free to leave any comments or questions you may have.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://pirlblog.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Personalized Immunotherapy Research Lab! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Expanding the Unified Grammar for RNA Variants]]></title><description><![CDATA[A unified toolkit for identifying and integrating DNA and RNA variants. Part 2 of the Neoantigen Discovery with Long-read Sequencing series.]]></description><link>https://pirlblog.substack.com/p/expanding-the-unified-grammar-for</link><guid isPermaLink="false">https://pirlblog.substack.com/p/expanding-the-unified-grammar-for</guid><dc:creator><![CDATA[Jin Seok (Andy) Lee]]></dc:creator><pubDate>Thu, 09 Oct 2025 19:53:13 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!K5ip!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffabd1f75-89bf-4e49-8f97-7eb1d10255a5_2074x2079.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>TL;DR</h2><ul><li><p>My last post described a universal grammar for integrating different types and descriptions of DNA variants (&#8220;Occam&#8217;s Variant Grammar&#8221;).</p></li><li><p>In this post, I expand Occam&#8217;s Variant Grammar to also represent RNA variants, enabling DNA-RNA integration and amino-acid level traceability essential for telling which parts of a protein are tumor-specific (and can safely be targeted). </p></li><li><p>This abstraction is embodied in a new tool called Exacto, which identifies somatic and germline DNA variants, RNA variants, integrates DNA and RNA evidence, and characterizes mutant peptide sequences with each amino acid traced to its RNA and DNA origins. Exacto is available here: <a href="https://github.com/pirl-unc/exacto">https://github.com/pirl-unc/exacto</a></p></li></ul><h2>1. Previously On &#8220;A Unifying Grammar for DNA Variants&#8221;</h2><p>In my <a href="/__u/pirlblog.substack.com/p/variant-standardization">earlier post</a>, I proposed a new variant grammar that conceptualizes DNA variant types in a variation graph. The Occam&#8217;s Variant Grammar unifies representation of major DNA variant types using just two atomic operations: <em>add</em> and <em>connect. </em>It simplifies the growing list of DNA variant types into just two graph operations (upstream or downstream) on a variation graph.</p><h2>2. Lost in Translation</h2><p>In the context of neoantigen discovery for personalized immunotherapy development, simply knowing which DNA variants are present is not enough. It is equally critical to identify RNA variants, determine whether they incorporate or arise from DNA alterations, and predict mutant peptide sequences while contextualizing the underlying RNA and DNA changes.</p><p>However, we see a fragmentation of computational methods for identifying variants at each level of the central dogma. Developers often focus their new software on identifying a subset of major variant types. Some tools are limited to detecting small variants such as SNVs, insertions, and deletions typically smaller than 30 base-pairs (bp). Others only profile larger (30bp+) structural variants. Layered on top of this is the further divide between tools that identify DNA variants and those that characterize RNA variants. These compartmentalizations typically arise as a by-product of the historical limitations inherent in different sequencing technologies and specialization of lab expertise.</p><p>While computational methods for DNA variant detection have matured over the past two decades, RNA variant detection remains relatively underdeveloped. This is largely due to the complexity introduced by splicing and the limitations of short-read sequencing technologies. Compounding the challenge is our incomplete understanding of the splicing process itself. One of the most advanced splicing prediction models to date, <a href="https://doi.org/10.1016/j.cell.2018.12.015">SpliceAI</a>, remains a black-box model.</p><p>Long-read RNA characterization tools such as <a href="https://hpc.nih.gov/apps/flair.html">FLAIR</a> and <a href="https://github.com/ConesaLab/SQANTI">SQANTI</a> only focus on identifying RNA variants, especially splicing aberrations and not sequence variants (e.g. SNVs, insertions, deletions, and breakpoints). They also do not integrate RNA variants with DNA variants either. Their outputs and usefulness have functional limitations when you try to apply them in the personalized immunotherapy development setting. A common roadblock in their outputs is, so what are all the underlying characteristics of the variant transcript as they relate to a mutant peptide sequence?</p><p>As the conventional wisdom goes, many a times &#8220;<em>the whole is more than the sum of its parts</em>.&#8221; That is, to know what an elephant is, one ought to see the whole elephant. Then, the functions of the trunk, leg, and ear make sense in the context of the entire system. We want to <em>make it make sense </em>- a simple yet powerful adage that my advisors Ben and Alex have instilled in our lab.</p><p>Personalized immunotherapy targets, or neoantigens, are tumor-specific to selectively eliminate cancer cells while minimizing autoimmune responses, thereby optimizing therapeutic efficacy. In the <em>Make it Make Sense</em> framework, this means that <strong>each neoantigen sequence should be traceable to a tumor RNA variant and, in turn, back to a somatic tumor DNA variant, with compelling evidence established at every level</strong>. It follows that a computational tool that accomplishes this inherently integrates data across the DNA, RNA, and peptide levels.</p><p>While tools such as <a href="https://regtools.readthedocs.io/en/latest/">RegTools</a>, <a href="https://neodisc.unil.ch/">NeoDisc</a>, and <a href="https://www.nature.com/articles/s41587-025-02701-0">moPepGen</a> predict mutant proteoform sequences by DNA and RNA variant integration, they were designed for short-read sequencing data. They focus on small DNA variants and do not take advantage of long-read sequencing technologies. Most importantly, they do not annotate how each amino acid in each proteoform was affected by the underlying DNA and RNA variant nucleotides. Moreover, short-read RNA sequencing cannot be reliably used to resolve splicing complexities and is prone to generating false positive peptide sequences.</p><p>All in all, fragmentation of variant types in variant calling together with a dependence on short-read data may be leading to loss of clinically significant translational information.</p><h2>3. Found in Full with Long-read Sequencing</h2><p>It is important to highlight that our lab&#8217;s direction and attempt to increase the sensitivity in mutant peptide sequence prediction for personalized immunotherapy development is fundamentally enabled by long-read sequencing. In particular, the high fidelity full-length isoform sequencing made possible by Pacific Biosciences enables an unprecedented capability to sequence most mammalian messenger RNA (mRNA) molecules end-to-end; I do not have any conflict of interest. Indeed, it is still the case that very long genes such as <em>TTN </em>(over 100,000 nucleotides long) cannot be fully captured at high (over 99%) base accuracy rates. Nevertheless, most mRNAs in the human transcriptome can be profiled end-to-end using the latest long-read isoform sequencing that can generate reads over 15,000-bp in length (Figure 1). This means that we can read the full length of a mutant messenger RNA that originates from one or more somatic DNA variants.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!hwQt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cf9a48f-c37d-4991-ac48-7d903a2244be_2700x1419.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!hwQt!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cf9a48f-c37d-4991-ac48-7d903a2244be_2700x1419.png 424w, /__u/substackcdn.com/image/fetch/$s_!hwQt!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cf9a48f-c37d-4991-ac48-7d903a2244be_2700x1419.png 848w, /__u/substackcdn.com/image/fetch/$s_!hwQt!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cf9a48f-c37d-4991-ac48-7d903a2244be_2700x1419.png 1272w, /__u/substackcdn.com/image/fetch/$s_!hwQt!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cf9a48f-c37d-4991-ac48-7d903a2244be_2700x1419.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!hwQt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cf9a48f-c37d-4991-ac48-7d903a2244be_2700x1419.png" width="2700" height="1419" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2cf9a48f-c37d-4991-ac48-7d903a2244be_2700x1419.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1419,&quot;width&quot;:2700,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:111075,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/165738445?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc656342e-b4e6-43d9-8c5d-1cd0800889f8_2700x1517.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!hwQt!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cf9a48f-c37d-4991-ac48-7d903a2244be_2700x1419.png 424w, /__u/substackcdn.com/image/fetch/$s_!hwQt!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cf9a48f-c37d-4991-ac48-7d903a2244be_2700x1419.png 848w, /__u/substackcdn.com/image/fetch/$s_!hwQt!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cf9a48f-c37d-4991-ac48-7d903a2244be_2700x1419.png 1272w, /__u/substackcdn.com/image/fetch/$s_!hwQt!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cf9a48f-c37d-4991-ac48-7d903a2244be_2700x1419.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Figure 1. Histogram of GENCODE v45 (hg38) protein-coding transcript sequence lengths.</figcaption></figure></div><p><strong>Compared to short-read sequencing, long-read sequencing provides two major advantages - one at the genome level and the other at the transcriptome level.</strong></p><p>First, at the genome level, long-read sequencing enables the accurate resolution of both small and structural variants - think of a 500-bp insertion. While earlier studies, such as that by <a href="https://www.nature.com/articles/s41588-023-01540-6">Choo et al.</a> suggested that many large structural variants could be identified using short reads, their evaluation used a generous threshold. If a short-read derived variant call landed within 1,000 bp of the ground truth location, it was considered a match. That may be sufficient to detect the presence of a large structural variant, but personalized immunotherapy requires much more. <strong>We need to pinpoint the exact breakpoints, where a variant begins and ends, so that we can infer its consequences at the amino acid level. It&#8217;s one to thing to know that something exists. It&#8217;s another to know exactly what it is.</strong></p><p>Second, at the transcript level, long-read sequencing enables precise assembly of transcript models. Transcriptome assembly using short reads typically generates a complex graph that generates false positive transcripts. Long-read sequencing, on the other hand, gives you readouts of the same isoform multiple times end-to-end. This reduces ambiguity around alternative splicing and enables RNA variant calling to be anchored by a more accurately observed transcript. Furthermore, having an accurate, observed transcript allows for direct comparison against known reference transcripts. This is an essential step for annotating where RNA variants begin and end so that each mutant amino acid can be traced back to each RNA codon as well as to each DNA nucleotide.</p><p>All in all, this is what long-read DNA and RNA sequencing enable us to do:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!8pMb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34f3ea82-ce12-41a7-b033-63e3aab718d1_2103x568.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!8pMb!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34f3ea82-ce12-41a7-b033-63e3aab718d1_2103x568.png 424w, /__u/substackcdn.com/image/fetch/$s_!8pMb!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34f3ea82-ce12-41a7-b033-63e3aab718d1_2103x568.png 848w, /__u/substackcdn.com/image/fetch/$s_!8pMb!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34f3ea82-ce12-41a7-b033-63e3aab718d1_2103x568.png 1272w, /__u/substackcdn.com/image/fetch/$s_!8pMb!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34f3ea82-ce12-41a7-b033-63e3aab718d1_2103x568.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!8pMb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34f3ea82-ce12-41a7-b033-63e3aab718d1_2103x568.png" width="2103" height="568" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/34f3ea82-ce12-41a7-b033-63e3aab718d1_2103x568.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:568,&quot;width&quot;:2103,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:85671,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/165738445?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6ce62cb-014d-4bd0-b380-e231be827031_2103x2103.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!8pMb!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34f3ea82-ce12-41a7-b033-63e3aab718d1_2103x568.png 424w, /__u/substackcdn.com/image/fetch/$s_!8pMb!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34f3ea82-ce12-41a7-b033-63e3aab718d1_2103x568.png 848w, /__u/substackcdn.com/image/fetch/$s_!8pMb!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34f3ea82-ce12-41a7-b033-63e3aab718d1_2103x568.png 1272w, /__u/substackcdn.com/image/fetch/$s_!8pMb!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34f3ea82-ce12-41a7-b033-63e3aab718d1_2103x568.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Of note, the central dogma above isn&#8217;t unique to immunogenomics. It is a guiding principle across genomics as a whole.</p><h2>4. Occam&#8217;s Variant Grammar for RNA Variants</h2><p>To make sense of RNA variants in the context of DNA variants, we turn back to the <a href="/__u/pirlblog.substack.com/p/variant-standardization">Occam&#8217;s Variant Grammar</a>. Here, I expand it to allow for representation of RNA variants:</p><p>An RNA variant can be described as: </p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;V_{\\text{RNA}} =\n\\begin{cases}\nv + e_{\\text{in}} + e_{\\text{out}}, &amp; \\text{if represented as a variant node} \\\\\n\\sum\\limits_{i \\in R} f_i, &amp; \\text{if represented as reference positions}\n\\end{cases}&quot;,&quot;id&quot;:&quot;JMLYCBSUHH&quot;}" data-component-name="LatexBlockToDOM"></div><p>where:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;v \\text{ is a variant node that represents the sequence alteration.}&quot;,&quot;id&quot;:&quot;AFTXVCVXSS&quot;}" data-component-name="LatexBlockToDOM"></div><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;e_{in} \\text{ and } e_{out} \\text{ are edges connecting the variant node to the reference backbone.}&quot;,&quot;id&quot;:&quot;HZJMETWTGS&quot;}" data-component-name="LatexBlockToDOM"></div><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;e_{\\text{in}},\\ e_{\\text{out}} \\in \\{ \\text{Upstream},\\ \\text{Downstream} \\}&quot;,&quot;id&quot;:&quot;YKVKSFKXLU&quot;}" data-component-name="LatexBlockToDOM"></div><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;f_{i} \\text{ is a flag on a reference position}&quot;,&quot;id&quot;:&quot;OWBNRZJTUL&quot;}" data-component-name="LatexBlockToDOM"></div><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;f_i \\in \\{ \\text{Include}, \\text{Mark}, \\text{Skip} \\} \\text{ and } R \\text{ is the set of reference positions.}&quot;,&quot;id&quot;:&quot;BHIXWUDWJC&quot;}" data-component-name="LatexBlockToDOM"></div><h4>Variant Node</h4><p>A variant node can either be an empty sequence (i.e. deletion) or an insertion sequence (i.e. single-nucleotide variant, multi-nucleotide variant, or insertion).</p><h4>Graph Operations (Edge Orientations and Flag Types)</h4><p>Similar to the DNA variant, connections between a new RNA variant node and the reference genome backbone can be made by the following orientations:</p><ul><li><p><strong>Upstream</strong> (towards 5&#8217; end in the coding sense of the messenger RNA)</p></li><li><p><strong>Downstream</strong> (towards 3&#8217; end in the coding sense of the messenger RNA)</p></li></ul><p>Reference positions can be flagged to indicate splice aberrations. A flag can be one of the following types (Figure 2):</p><ul><li><p><strong>Include<br></strong>Include the reference position; intron retention or cryptic exons.</p></li><li><p><strong>Mark</strong></p><p>Mark the reference position; non-canonical splice site.</p></li><li><p><strong>Skip</strong><br>Skip the reference position; exon skipping or truncation.</p></li></ul><p>Note that both <strong>Include</strong> and <strong>Skip </strong>flags inherently indicate non-canonical splicing.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!PZqX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefca42a1-a763-48ce-bd43-6746a49bc035_1251x983.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!PZqX!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefca42a1-a763-48ce-bd43-6746a49bc035_1251x983.png 424w, /__u/substackcdn.com/image/fetch/$s_!PZqX!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefca42a1-a763-48ce-bd43-6746a49bc035_1251x983.png 848w, /__u/substackcdn.com/image/fetch/$s_!PZqX!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefca42a1-a763-48ce-bd43-6746a49bc035_1251x983.png 1272w, /__u/substackcdn.com/image/fetch/$s_!PZqX!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefca42a1-a763-48ce-bd43-6746a49bc035_1251x983.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!PZqX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefca42a1-a763-48ce-bd43-6746a49bc035_1251x983.png" width="1251" height="983" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/efca42a1-a763-48ce-bd43-6746a49bc035_1251x983.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:983,&quot;width&quot;:1251,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:80071,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/165738445?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff06ea5b-2935-4432-a514-78e6b762a8a6_2103x2103.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!PZqX!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefca42a1-a763-48ce-bd43-6746a49bc035_1251x983.png 424w, /__u/substackcdn.com/image/fetch/$s_!PZqX!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefca42a1-a763-48ce-bd43-6746a49bc035_1251x983.png 848w, /__u/substackcdn.com/image/fetch/$s_!PZqX!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefca42a1-a763-48ce-bd43-6746a49bc035_1251x983.png 1272w, /__u/substackcdn.com/image/fetch/$s_!PZqX!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fefca42a1-a763-48ce-bd43-6746a49bc035_1251x983.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Figure 2. Occam&#8217;s Variant Grammar expanded to RNA variants.</figcaption></figure></div><p>Just like a DNA variant, an RNA variant can be encoded as:</p><pre><code><code>rna_variant = {
    chromosome_1:  &lt;reference chromosome&gt;,
    position_1:    &lt;reference position&gt;,
    operation_1:   &lt;downstream, upstream, include, mark, OR skip&gt;,
    chromosome_2:  &lt;reference chromosome&gt;,
    position_2:    &lt;reference position&gt;,
    operation_2:   &lt;downstream, upstream, include, mark, OR skip&gt;,
    sequence:      &lt;variant sequence&gt;
}</code></code></pre><p>where <strong>sequence</strong> represents the variant node while <strong>operation_1</strong> and <strong>operation_2 </strong>represent the edge types (upstream or downstream) or flag types (include, mark, or skip). The reference positions denote where the edges should be created on the reference genome backbone OR the start and end of flagged reference positions.</p><p>Here&#8217;s a graphical overview of how this variant grammar allows us to represent the following major RNA variant types:</p><ul><li><p>Circular RNA</p></li><li><p>Cryptic exon</p></li><li><p>Deletion</p></li><li><p>Duplication</p></li><li><p>Exon truncation or skipping</p></li><li><p>Fusion gene (two or more known genes)</p></li><li><p>Insertion</p></li><li><p>Intergenic RNA</p></li><li><p>Intron retention</p></li><li><p>Inversion</p></li><li><p>Single-nucleotide variant</p></li><li><p>Multi-nucleotide variant</p></li><li><p>Translocation</p></li></ul><p>Note that the representation for deletion, duplication, insertion, inversion, SNV (including A-to-I RNA editing), and translocation are the same as those described in an <a href="/__u/pirlblog.substack.com/i/165714873/one-variant-one-representation">earlier blog post</a>. Here, we define any combination of the above RNA variant types to be characteristic of a novel, or more accurately, <em>variant</em> transcript.</p><p>Here are the RNA variant types represented in the Occam&#8217;s Variant Grammar (Figure 3).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!K5ip!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffabd1f75-89bf-4e49-8f97-7eb1d10255a5_2074x2079.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!K5ip!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffabd1f75-89bf-4e49-8f97-7eb1d10255a5_2074x2079.png 424w, /__u/substackcdn.com/image/fetch/$s_!K5ip!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffabd1f75-89bf-4e49-8f97-7eb1d10255a5_2074x2079.png 848w, /__u/substackcdn.com/image/fetch/$s_!K5ip!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffabd1f75-89bf-4e49-8f97-7eb1d10255a5_2074x2079.png 1272w, /__u/substackcdn.com/image/fetch/$s_!K5ip!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffabd1f75-89bf-4e49-8f97-7eb1d10255a5_2074x2079.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!K5ip!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffabd1f75-89bf-4e49-8f97-7eb1d10255a5_2074x2079.png" width="2074" height="2079" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fabd1f75-89bf-4e49-8f97-7eb1d10255a5_2074x2079.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2079,&quot;width&quot;:2074,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:263252,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/165738445?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc36f6428-6a09-4ee6-b30e-d3f4afcf0aca_2103x2103.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!K5ip!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffabd1f75-89bf-4e49-8f97-7eb1d10255a5_2074x2079.png 424w, /__u/substackcdn.com/image/fetch/$s_!K5ip!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffabd1f75-89bf-4e49-8f97-7eb1d10255a5_2074x2079.png 848w, /__u/substackcdn.com/image/fetch/$s_!K5ip!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffabd1f75-89bf-4e49-8f97-7eb1d10255a5_2074x2079.png 1272w, /__u/substackcdn.com/image/fetch/$s_!K5ip!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffabd1f75-89bf-4e49-8f97-7eb1d10255a5_2074x2079.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Figure 3. RNA variant types represented in the Occam&#8217;s Variant Grammar.</figcaption></figure></div><h2>5. Exacto Performs DNA and RNA Variant Calling and Integration</h2><p>Exacto (<strong>EX</strong>acto <strong>A</strong>ccurate <strong>C</strong>haracterization of <strong>T</strong>ranscriptomes and gen<strong>O</strong>mes) identifies genomic and transcriptomic variants from reference-aligned long-read DNA and RNA sequences.</p><p>It performs five main tasks using long-read sequencing data:</p><ol><li><p>Identification of germline and somatic (case-specific) DNA variants.</p></li><li><p>Identification of RNA variants.</p></li><li><p>Integration of DNA and RNA variants.</p></li><li><p>Translation of full-length RNA sequences.</p></li><li><p>Tracing of each <em>in silico</em> translated amino acid to its RNA and DNA origins.</p></li></ol><p>It is available here on GitHub: <a href="https://github.com/pirl-unc/exacto">https://github.com/pirl-unc/exacto</a></p><h3>DNA Variant Calling</h3><p>The unified DNA and RNA variant grammar structure, that is the Occam&#8217;s Variant Grammar, drives the variant identification algorithm at the genomic and transcriptomic levels. The core parts of Exacto are written in Rust for speed.</p><p>Exacto parses the alignment map information such as CIGAR as well as CS and SA (Supplementary Alignment) tags to detect variant records. The variant records are subsequently clustered using union-find to identify variant calls (Figure 4).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!6K1I!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99fd0988-f2f2-4873-ae74-5bf96b8b25ab_1724x432.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!6K1I!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99fd0988-f2f2-4873-ae74-5bf96b8b25ab_1724x432.png 424w, /__u/substackcdn.com/image/fetch/$s_!6K1I!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99fd0988-f2f2-4873-ae74-5bf96b8b25ab_1724x432.png 848w, /__u/substackcdn.com/image/fetch/$s_!6K1I!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99fd0988-f2f2-4873-ae74-5bf96b8b25ab_1724x432.png 1272w, /__u/substackcdn.com/image/fetch/$s_!6K1I!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99fd0988-f2f2-4873-ae74-5bf96b8b25ab_1724x432.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!6K1I!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99fd0988-f2f2-4873-ae74-5bf96b8b25ab_1724x432.png" width="1724" height="432" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/99fd0988-f2f2-4873-ae74-5bf96b8b25ab_1724x432.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:432,&quot;width&quot;:1724,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:70679,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/165738445?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F280432d3-ac20-418e-be4b-b1794d799225_2103x2103.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!6K1I!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99fd0988-f2f2-4873-ae74-5bf96b8b25ab_1724x432.png 424w, /__u/substackcdn.com/image/fetch/$s_!6K1I!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99fd0988-f2f2-4873-ae74-5bf96b8b25ab_1724x432.png 848w, /__u/substackcdn.com/image/fetch/$s_!6K1I!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99fd0988-f2f2-4873-ae74-5bf96b8b25ab_1724x432.png 1272w, /__u/substackcdn.com/image/fetch/$s_!6K1I!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99fd0988-f2f2-4873-ae74-5bf96b8b25ab_1724x432.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Figure 4. An overview of Exacto DNA variant calling algorithm.</figcaption></figure></div><p>Prior to variant calling, Exacto creates an alignment structure for each read. This is an important preprocessing step as I&#8217;ve noticed that the following occasionally happens in alignment, leading to missed detection of insertions (Figure 5).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!hvq4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F167cfb8d-392c-4846-a822-d7112beee47d_2073x1335.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!hvq4!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F167cfb8d-392c-4846-a822-d7112beee47d_2073x1335.png 424w, /__u/substackcdn.com/image/fetch/$s_!hvq4!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F167cfb8d-392c-4846-a822-d7112beee47d_2073x1335.png 848w, /__u/substackcdn.com/image/fetch/$s_!hvq4!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F167cfb8d-392c-4846-a822-d7112beee47d_2073x1335.png 1272w, /__u/substackcdn.com/image/fetch/$s_!hvq4!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F167cfb8d-392c-4846-a822-d7112beee47d_2073x1335.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!hvq4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F167cfb8d-392c-4846-a822-d7112beee47d_2073x1335.png" width="2073" height="1335" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/167cfb8d-392c-4846-a822-d7112beee47d_2073x1335.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1335,&quot;width&quot;:2073,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:144568,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/165738445?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ce92895-c85a-4e4a-b1bf-3c43ad094d51_2103x2103.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!hvq4!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F167cfb8d-392c-4846-a822-d7112beee47d_2073x1335.png 424w, /__u/substackcdn.com/image/fetch/$s_!hvq4!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F167cfb8d-392c-4846-a822-d7112beee47d_2073x1335.png 848w, /__u/substackcdn.com/image/fetch/$s_!hvq4!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F167cfb8d-392c-4846-a822-d7112beee47d_2073x1335.png 1272w, /__u/substackcdn.com/image/fetch/$s_!hvq4!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F167cfb8d-392c-4846-a822-d7112beee47d_2073x1335.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Figure 5. Missed insertions resolved in Exacto via alignment structure preprocessing.</figcaption></figure></div><p>To resolve such cases where there are overlapping alignments or unaligned sequences, Exacto first builds an alignment structure for each long read. That is, Exacto collects all alignment records for each read from the Binary Alignment Map (BAM) file and then creates a map between each nucleotide in the original sequencing read and each nucleotide in the reference genome. This is a crucial preprocessing step as it enables us to identify otherwise hidden insertions between breakpoints - viral integrations for example.</p><h3>RNA Variant Calling</h3><p>RNA variant types are more complex than DNA variant types. While DNA variant types can be inferred directly from the alignment data (i.e. SNVs, insertions, deletions, and breakpoints), RNA variant calling requires an additional step of comparing alignments against reference transcript models. This added complexity arises because DNA is transcribed and spliced to produce RNA molecules. A single DNA region can generate multiple distinct transcripts through alternative splicing and introduce variation that does not exist at the DNA level.</p><p>It is important to highlight that splicing &#8220;aberrations&#8221; can only be identified by interpreting a putative transcript in the context of known reference transcripts. For example, suppose we have three reference transcripts from the same gene and one assembled transcript (Figure 6). Applying Occam&#8217;s razor (principle of parsimony) we might conclude that the assembled transcript most closely resembles reference transcript 3 with a truncation in its second exon.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!1orr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb91311e0-7d33-4395-ad90-37834d8ffcfc_1851x566.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!1orr!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb91311e0-7d33-4395-ad90-37834d8ffcfc_1851x566.png 424w, /__u/substackcdn.com/image/fetch/$s_!1orr!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb91311e0-7d33-4395-ad90-37834d8ffcfc_1851x566.png 848w, /__u/substackcdn.com/image/fetch/$s_!1orr!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb91311e0-7d33-4395-ad90-37834d8ffcfc_1851x566.png 1272w, /__u/substackcdn.com/image/fetch/$s_!1orr!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb91311e0-7d33-4395-ad90-37834d8ffcfc_1851x566.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!1orr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb91311e0-7d33-4395-ad90-37834d8ffcfc_1851x566.png" width="1851" height="566" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b91311e0-7d33-4395-ad90-37834d8ffcfc_1851x566.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:566,&quot;width&quot;:1851,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:49764,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/165738445?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fade86dc7-2784-4705-8315-0062d56ab3c1_2103x2103.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!1orr!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb91311e0-7d33-4395-ad90-37834d8ffcfc_1851x566.png 424w, /__u/substackcdn.com/image/fetch/$s_!1orr!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb91311e0-7d33-4395-ad90-37834d8ffcfc_1851x566.png 848w, /__u/substackcdn.com/image/fetch/$s_!1orr!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb91311e0-7d33-4395-ad90-37834d8ffcfc_1851x566.png 1272w, /__u/substackcdn.com/image/fetch/$s_!1orr!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb91311e0-7d33-4395-ad90-37834d8ffcfc_1851x566.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Figure 6. Reference transcript matching problem.</figcaption></figure></div><p>It is important to identify a matched reference transcript because just pooling all canonical splicing sites does not lead to an accurate characterization of the variant transcript. Consider the following example (Figure 7):</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Q34J!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97c8a23b-012b-4700-b4c5-1dfcbb41f71a_1843x594.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Q34J!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97c8a23b-012b-4700-b4c5-1dfcbb41f71a_1843x594.png 424w, /__u/substackcdn.com/image/fetch/$s_!Q34J!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97c8a23b-012b-4700-b4c5-1dfcbb41f71a_1843x594.png 848w, /__u/substackcdn.com/image/fetch/$s_!Q34J!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97c8a23b-012b-4700-b4c5-1dfcbb41f71a_1843x594.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Q34J!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97c8a23b-012b-4700-b4c5-1dfcbb41f71a_1843x594.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Q34J!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97c8a23b-012b-4700-b4c5-1dfcbb41f71a_1843x594.png" width="1843" height="594" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/97c8a23b-012b-4700-b4c5-1dfcbb41f71a_1843x594.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:594,&quot;width&quot;:1843,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:54894,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/165738445?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b002603-f123-4306-a525-ff61cf338bce_2103x2103.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Q34J!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97c8a23b-012b-4700-b4c5-1dfcbb41f71a_1843x594.png 424w, /__u/substackcdn.com/image/fetch/$s_!Q34J!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97c8a23b-012b-4700-b4c5-1dfcbb41f71a_1843x594.png 848w, /__u/substackcdn.com/image/fetch/$s_!Q34J!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97c8a23b-012b-4700-b4c5-1dfcbb41f71a_1843x594.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Q34J!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97c8a23b-012b-4700-b4c5-1dfcbb41f71a_1843x594.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Figure 7. Problem with pooling canonical splice sites.</figcaption></figure></div><p>While the assembled transcript is different from all three reference transcripts, all of its splice sites (A, B, and C) are found among the pooled set of reference splice sites. It is possible that its second, third, or fourth exon may have originated from reference transcript 2, reference transcript 1, or reference transcript 3, respectively. If aberrant splicing identification only relied on splice sites absent in the pooled set of reference splice sites, the assembled transcript would not be detected as a variant transcript.</p><p>There are several ways to compare an assembled transcript against a set of reference transcripts. Here are some approaches that I&#8217;ve tested:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\text{Weighted Net Overlap} = \\text{Overlaps} - \\left(0.5 \\times \\text{Nonoverlaps}\\right)&quot;,&quot;id&quot;:&quot;RYTQSRMMGG&quot;}" data-component-name="LatexBlockToDOM"></div><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\text{Net Overlap} = \\text{Overlaps} - \\text{Nonoverlaps}&quot;,&quot;id&quot;:&quot;IPTIMGUFCE&quot;}" data-component-name="LatexBlockToDOM"></div><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\text{Jaccard} = \\frac{\\text{Overlaps}}{\\text{Overlaps} + \\text{Nonoverlaps}}&quot;,&quot;id&quot;:&quot;VWYVARROAD&quot;}" data-component-name="LatexBlockToDOM"></div><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\text{Cosine Similarity} = \\frac{\\vec{A} \\cdot \\vec{B}}{\\|\\vec{A}\\| \\cdot \\|\\vec{B}\\|}&quot;,&quot;id&quot;:&quot;VPRGSKXBEN&quot;}" data-component-name="LatexBlockToDOM"></div><p>where:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\text{Overlaps} = \\text{# of overlapping nucleotide positions}&quot;,&quot;id&quot;:&quot;ATQPAXRHNW&quot;}" data-component-name="LatexBlockToDOM"></div><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\text{Nonoverlaps} = \\text{# of non-overlapping nucleotide positions}&quot;,&quot;id&quot;:&quot;BGQBMIKPFC&quot;}" data-component-name="LatexBlockToDOM"></div><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\vec{A} = \\text{binary vector of assembled transcript nucleotide presence in a genomic region}&quot;,&quot;id&quot;:&quot;VAOMFCSCDN&quot;}" data-component-name="LatexBlockToDOM"></div><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\vec{B} = \\text{binary vector of reference transcript nucleotide presence in a genomic region}&quot;,&quot;id&quot;:&quot;GROHBEKEMB&quot;}" data-component-name="LatexBlockToDOM"></div><p>When I simulated GENCODE v41 (hg38) protein-coding transcripts with RNA degradation towards the 5&#8217; end, here are the benchmark results I got for the above approaches:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!1syl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb8cce2c-f16b-484c-aa52-2fbe743c89f9_2472x1058.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!1syl!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb8cce2c-f16b-484c-aa52-2fbe743c89f9_2472x1058.png 424w, /__u/substackcdn.com/image/fetch/$s_!1syl!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb8cce2c-f16b-484c-aa52-2fbe743c89f9_2472x1058.png 848w, /__u/substackcdn.com/image/fetch/$s_!1syl!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb8cce2c-f16b-484c-aa52-2fbe743c89f9_2472x1058.png 1272w, /__u/substackcdn.com/image/fetch/$s_!1syl!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb8cce2c-f16b-484c-aa52-2fbe743c89f9_2472x1058.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!1syl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb8cce2c-f16b-484c-aa52-2fbe743c89f9_2472x1058.png" width="1456" height="623" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cb8cce2c-f16b-484c-aa52-2fbe743c89f9_2472x1058.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:623,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:255722,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/165738445?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb8cce2c-f16b-484c-aa52-2fbe743c89f9_2472x1058.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!1syl!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb8cce2c-f16b-484c-aa52-2fbe743c89f9_2472x1058.png 424w, /__u/substackcdn.com/image/fetch/$s_!1syl!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb8cce2c-f16b-484c-aa52-2fbe743c89f9_2472x1058.png 848w, /__u/substackcdn.com/image/fetch/$s_!1syl!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb8cce2c-f16b-484c-aa52-2fbe743c89f9_2472x1058.png 1272w, /__u/substackcdn.com/image/fetch/$s_!1syl!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb8cce2c-f16b-484c-aa52-2fbe743c89f9_2472x1058.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Figure 8. Evaluation of reference transcript matching heuristics.</figcaption></figure></div><p>Exacto takes as input a FASTA file of assembled transcripts to identify RNA variants. This design choice was made due to variations in RNA alignments that result from RNA degradation - typically towards the 5&#8217; end of the RNA molecule for polyA tail capture kits.</p><p>Exacto applies the same the same variant calling algorithm used for DNA variant calling to detect SNVs, MNVs, insertions, duplications, deletions, and inversions for RNA variant calling. Additionally, it performs splice-aware variant calling by comparing alignments against reference transcripts to identify the following splicing aberrations:</p><ul><li><p>Circular RNA</p></li><li><p>Cryptic exon</p></li><li><p>Exon truncation or skipping</p></li><li><p>Fusion gene</p></li><li><p>Intergenic RNA</p></li><li><p>Intron retention</p></li></ul><p>By default, Exacto selects the top 3 reference transcripts for each assembled transcript based on cosine similarity scores.</p><h3>DNA and RNA Variant Integration</h3><p>Exacto is designed to identify mutant peptides that result from genomically templated somatic variants. Recall that subsequences of mutant peptides could be loaded on major histocompatibility (MHC) class I molecules, making neoantigens that could be personalized immunotherapy targets. An essential step in this task is inferring which RNA variants, if any, were generated as a result of a somatic DNA variant. At first, this problem might appear to be a splicing prediction problem. Given altered and unaltered DNA sequences, predict differences in their splicing behaviors. However, while splicing prediction tools such as SpliceAI could help to increase our confidence in pairing an RNA variant with a somatic DNA variant, they are not robust in oncology as proteins comprising spliceosomes could themselves be mutated and affect splicing patterns.</p><p>In the personalized immunotherapy development setting, we often have both the DNA and RNA sequencing data of the tumor. This allows us to computationally observe any splicing aberrations in close proximity to somatic DNA variants. In fact, the <a href="https://griffithlab.org/">Griffith Lab</a> published <a href="https://doi.org/10.1038/s41467-023-37266-6">RegTools</a> in the past to solve this problem with short read sequencing data.</p><p>Here, we extend the idea of genomic distance proximity from RegTools for DNA and RNA variant integration and apply it with advantages offered by long-read sequencing, namely the ability to sequence RNA molecules end-to-end and phase all variants in the sequenced transcript.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!vZBD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ee4b9d9-44e6-43a1-aa5e-bd1137a0ee43_1897x1604.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!vZBD!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ee4b9d9-44e6-43a1-aa5e-bd1137a0ee43_1897x1604.png 424w, /__u/substackcdn.com/image/fetch/$s_!vZBD!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ee4b9d9-44e6-43a1-aa5e-bd1137a0ee43_1897x1604.png 848w, /__u/substackcdn.com/image/fetch/$s_!vZBD!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ee4b9d9-44e6-43a1-aa5e-bd1137a0ee43_1897x1604.png 1272w, /__u/substackcdn.com/image/fetch/$s_!vZBD!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ee4b9d9-44e6-43a1-aa5e-bd1137a0ee43_1897x1604.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!vZBD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ee4b9d9-44e6-43a1-aa5e-bd1137a0ee43_1897x1604.png" width="1897" height="1604" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3ee4b9d9-44e6-43a1-aa5e-bd1137a0ee43_1897x1604.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1604,&quot;width&quot;:1897,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:152289,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/165738445?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F774fa0b5-342c-43eb-83bc-54ce9a89bcc2_2103x2103.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!vZBD!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ee4b9d9-44e6-43a1-aa5e-bd1137a0ee43_1897x1604.png 424w, /__u/substackcdn.com/image/fetch/$s_!vZBD!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ee4b9d9-44e6-43a1-aa5e-bd1137a0ee43_1897x1604.png 848w, /__u/substackcdn.com/image/fetch/$s_!vZBD!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ee4b9d9-44e6-43a1-aa5e-bd1137a0ee43_1897x1604.png 1272w, /__u/substackcdn.com/image/fetch/$s_!vZBD!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ee4b9d9-44e6-43a1-aa5e-bd1137a0ee43_1897x1604.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Recall that Exacto identifies variants in assembled transcripts. This allows us to work with transcript models, most of which are captured in their full lengths.</p><h3>Transcript Structure Encoding</h3><p>A major advantage of identifying RNA variants on assembled transcripts is the ability to contextualize the variants within transcript models. </p><p>The proposed Transcript Structure encoding represents the following:</p><ol><li><p>The encoding is a combination of transcript bases and events between two bases.</p></li><li><p>An assembled transcript is compared against a set of reference transcripts and any variations between the two are encoded.</p></li><li><p>Each transcript structure annotates each base and any event between two bases.</p></li></ol><p>Conceptually, the encoding retains the reference genome-level comparison features of the <a href="https://lh3.github.io/2018/03/27/the-history-the-cigar-x-operator-and-the-md-tag">cs tag</a> and adds reference transcript-aware annotations. This is a necessary extension for accurate downstream <em>in silico</em> translation at single amino-acid resolution.</p><p>An important aspect of the proposed encoding is that it is generated by directly comparing the assembled transcript to a set of reference transcripts (in cases of a fusion gene). Pooling splicing and exonic regions from multiple reference transcripts within the alignment scope can create a false impression of canonical splicing due to overlapping features from alternative isoforms. A one-to-one comparison with a specific reference transcript is therefore essential for accurately identifying mutant peptide sequences.</p><p>The Transcript Structure is comprised of 2 types of information:</p><ul><li><p>Transcript model base: a base in an assembled transcript.</p></li><li><p>Transcript model event: an event (e.g. breakpoint, deletion, or splicing) between two bases in an assembled transcript.</p></li></ul><h4>Transcript Model Base Kind</h4><p>A transcript model base is one of the following kinds:</p><p><strong>Match: </strong>A transcript model base is of the match kind if it matches a base in the reference genome.</p><p><strong>Mismatch: </strong>A transcript model base is of the mismatch kind if it is a different allele from the reference at the aligned position.</p><p><strong>Insertion: </strong>A transcript model base is of the insertion kind if it is part of an insertion based on alignment to a reference genome. Soft-clipped bases without supplementary alignments are also considered insertion bases.</p><p><strong>Unaligned: </strong>A transcript model base is of the unaligned kind if it is not aligned to any part of a reference genome.</p><h4>Transcript Model Base Context</h4><p>A transcript model base is one of the following contexts:</p><p><strong>Exonic: </strong>A transcript model base is of the exonic context if it aligns to an exonic base position of a reference transcript. Bases in the untranslated regions (UTR) are also considered exonic bases.</p><p><strong>Intronic: </strong>A transcript model base is of the intronic context if it aligns to an intronic base position of a reference transcript.</p><p><strong>Intergenic: </strong>A transcript model base is of the intergenic context if it aligns to a position in the reference genome that falls outside all annotated genic regions.</p><h4>Transcript Model Event Kind </h4><p>A transcript model event is one of the following kinds:</p><p><strong>Breakpoint: </strong>A transcript model event is of the breakpoint kind when a supplementary alignment exists between two transcript model bases. If the two bases are not directly adjacent, transcript model bases between the two are considered insertion bases.</p><p><strong>Deletion: </strong>A transcript model event is of the deletion kind if a genomic deletion exists between two transcript model bases.</p><p><strong>Splicing: </strong>A transcript model event is of the splicing kind if two transcript model bases are separated by an intronic region containing a pair of splice sites.</p><p><strong>Boundary: </strong>A transcript model event is of the boundary kind when it occurs at either end of a transcript model (i.e. the first or last transcript model base). Boundary events capture exon truncation or skipping beyond the 5&#8217; or 3&#8217; ends of the transcript model (i.e. think of omitted exons in the 5&#8217; end of a transcript model with 5&#8217; RNA degradation).</p><h4>Transcript Model Event Context </h4><p>A transcript model event is one of the following contexts:</p><p><strong>Canonical Splicing: </strong>A transcript model event is of the canonical splicing context if both the donor and the acceptor sites match a known pair of splice sites in the corresponding reference transcript.</p><p><strong>Non-canonical Splicing: </strong>A transcript model event is of the non-canonical splicing context if either the donor or the acceptor site does not match any known pair of splice sites in the corresponding reference transcript.</p><p><strong>Backsplicing: </strong>A transcript model event is of the backsplicing context if a breakpoint event loops back to a previously traversed reference base, causing the same genomic position to be covered multiple times. To distinguish this from a duplication event, upstream and downstream exons must be skipped or truncated.</p><p><strong>Fusion Gene: </strong>A transcript model event is of the fusion gene context when the two bases flanking the event, of either the breakpoint or splicing kind, align to genic regions of different genes.</p><h3>Transcript Structure Examples</h3><p>Here are some of the RNA variant types represented in the Transcript Structure tag:</p><p><strong>Single-nucleotide Variant</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!SnKB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1eef2e61-d820-499d-ba28-d5a7e56ec7c9_1878x715.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!SnKB!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1eef2e61-d820-499d-ba28-d5a7e56ec7c9_1878x715.png 424w, /__u/substackcdn.com/image/fetch/$s_!SnKB!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1eef2e61-d820-499d-ba28-d5a7e56ec7c9_1878x715.png 848w, /__u/substackcdn.com/image/fetch/$s_!SnKB!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1eef2e61-d820-499d-ba28-d5a7e56ec7c9_1878x715.png 1272w, /__u/substackcdn.com/image/fetch/$s_!SnKB!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1eef2e61-d820-499d-ba28-d5a7e56ec7c9_1878x715.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!SnKB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1eef2e61-d820-499d-ba28-d5a7e56ec7c9_1878x715.png" width="1878" height="715" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1eef2e61-d820-499d-ba28-d5a7e56ec7c9_1878x715.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:715,&quot;width&quot;:1878,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:63738,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/165738445?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc097c86a-85b8-4f27-b835-0da6ee0e25eb_4205x4205.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!SnKB!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1eef2e61-d820-499d-ba28-d5a7e56ec7c9_1878x715.png 424w, /__u/substackcdn.com/image/fetch/$s_!SnKB!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1eef2e61-d820-499d-ba28-d5a7e56ec7c9_1878x715.png 848w, /__u/substackcdn.com/image/fetch/$s_!SnKB!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1eef2e61-d820-499d-ba28-d5a7e56ec7c9_1878x715.png 1272w, /__u/substackcdn.com/image/fetch/$s_!SnKB!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1eef2e61-d820-499d-ba28-d5a7e56ec7c9_1878x715.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!mlob!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7c861a7-779c-4f97-95ef-38cce860f038_2228x395.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!mlob!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7c861a7-779c-4f97-95ef-38cce860f038_2228x395.png 424w, /__u/substackcdn.com/image/fetch/$s_!mlob!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7c861a7-779c-4f97-95ef-38cce860f038_2228x395.png 848w, /__u/substackcdn.com/image/fetch/$s_!mlob!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7c861a7-779c-4f97-95ef-38cce860f038_2228x395.png 1272w, /__u/substackcdn.com/image/fetch/$s_!mlob!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7c861a7-779c-4f97-95ef-38cce860f038_2228x395.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!mlob!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7c861a7-779c-4f97-95ef-38cce860f038_2228x395.png" width="2228" height="395" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c7c861a7-779c-4f97-95ef-38cce860f038_2228x395.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:395,&quot;width&quot;:2228,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:125932,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/165738445?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F578caebf-c86a-4dd7-b529-b78fcba06b9a_2264x418.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!mlob!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7c861a7-779c-4f97-95ef-38cce860f038_2228x395.png 424w, /__u/substackcdn.com/image/fetch/$s_!mlob!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7c861a7-779c-4f97-95ef-38cce860f038_2228x395.png 848w, /__u/substackcdn.com/image/fetch/$s_!mlob!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7c861a7-779c-4f97-95ef-38cce860f038_2228x395.png 1272w, /__u/substackcdn.com/image/fetch/$s_!mlob!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7c861a7-779c-4f97-95ef-38cce860f038_2228x395.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><strong>Insertion</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!FIyG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3309281-73c5-4d9d-85fe-39208157b748_1824x700.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!FIyG!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3309281-73c5-4d9d-85fe-39208157b748_1824x700.png 424w, /__u/substackcdn.com/image/fetch/$s_!FIyG!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3309281-73c5-4d9d-85fe-39208157b748_1824x700.png 848w, /__u/substackcdn.com/image/fetch/$s_!FIyG!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3309281-73c5-4d9d-85fe-39208157b748_1824x700.png 1272w, /__u/substackcdn.com/image/fetch/$s_!FIyG!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3309281-73c5-4d9d-85fe-39208157b748_1824x700.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!FIyG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3309281-73c5-4d9d-85fe-39208157b748_1824x700.png" width="1824" height="700" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d3309281-73c5-4d9d-85fe-39208157b748_1824x700.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:700,&quot;width&quot;:1824,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:63731,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/165738445?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa50a30ab-d6c4-470b-90e7-7d0d8b62d8c7_4205x4205.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!FIyG!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3309281-73c5-4d9d-85fe-39208157b748_1824x700.png 424w, /__u/substackcdn.com/image/fetch/$s_!FIyG!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3309281-73c5-4d9d-85fe-39208157b748_1824x700.png 848w, /__u/substackcdn.com/image/fetch/$s_!FIyG!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3309281-73c5-4d9d-85fe-39208157b748_1824x700.png 1272w, /__u/substackcdn.com/image/fetch/$s_!FIyG!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3309281-73c5-4d9d-85fe-39208157b748_1824x700.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!09GJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0dde445-a152-4aa6-8d0e-c4ed2a591699_2236x404.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!09GJ!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0dde445-a152-4aa6-8d0e-c4ed2a591699_2236x404.png 424w, /__u/substackcdn.com/image/fetch/$s_!09GJ!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0dde445-a152-4aa6-8d0e-c4ed2a591699_2236x404.png 848w, /__u/substackcdn.com/image/fetch/$s_!09GJ!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0dde445-a152-4aa6-8d0e-c4ed2a591699_2236x404.png 1272w, /__u/substackcdn.com/image/fetch/$s_!09GJ!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0dde445-a152-4aa6-8d0e-c4ed2a591699_2236x404.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!09GJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0dde445-a152-4aa6-8d0e-c4ed2a591699_2236x404.png" width="2236" height="404" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c0dde445-a152-4aa6-8d0e-c4ed2a591699_2236x404.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:404,&quot;width&quot;:2236,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:128214,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/165738445?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8781c78e-2548-4e22-bc13-58b3d0ed3000_2264x418.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!09GJ!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0dde445-a152-4aa6-8d0e-c4ed2a591699_2236x404.png 424w, /__u/substackcdn.com/image/fetch/$s_!09GJ!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0dde445-a152-4aa6-8d0e-c4ed2a591699_2236x404.png 848w, /__u/substackcdn.com/image/fetch/$s_!09GJ!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0dde445-a152-4aa6-8d0e-c4ed2a591699_2236x404.png 1272w, /__u/substackcdn.com/image/fetch/$s_!09GJ!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0dde445-a152-4aa6-8d0e-c4ed2a591699_2236x404.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><strong>Deletion</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!xEPY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F373b0fee-75f6-4492-b561-ad4b5f01e300_1826x695.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!xEPY!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F373b0fee-75f6-4492-b561-ad4b5f01e300_1826x695.png 424w, /__u/substackcdn.com/image/fetch/$s_!xEPY!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F373b0fee-75f6-4492-b561-ad4b5f01e300_1826x695.png 848w, /__u/substackcdn.com/image/fetch/$s_!xEPY!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F373b0fee-75f6-4492-b561-ad4b5f01e300_1826x695.png 1272w, /__u/substackcdn.com/image/fetch/$s_!xEPY!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F373b0fee-75f6-4492-b561-ad4b5f01e300_1826x695.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!xEPY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F373b0fee-75f6-4492-b561-ad4b5f01e300_1826x695.png" width="1826" height="695" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/373b0fee-75f6-4492-b561-ad4b5f01e300_1826x695.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:695,&quot;width&quot;:1826,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:62022,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/165738445?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa02e0573-debb-4ee7-bf3c-8f960458948c_4205x4205.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!xEPY!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F373b0fee-75f6-4492-b561-ad4b5f01e300_1826x695.png 424w, /__u/substackcdn.com/image/fetch/$s_!xEPY!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F373b0fee-75f6-4492-b561-ad4b5f01e300_1826x695.png 848w, /__u/substackcdn.com/image/fetch/$s_!xEPY!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F373b0fee-75f6-4492-b561-ad4b5f01e300_1826x695.png 1272w, /__u/substackcdn.com/image/fetch/$s_!xEPY!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F373b0fee-75f6-4492-b561-ad4b5f01e300_1826x695.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!F_mO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41a04011-e877-4211-8593-ff3947febcef_2572x396.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!F_mO!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41a04011-e877-4211-8593-ff3947febcef_2572x396.png 424w, /__u/substackcdn.com/image/fetch/$s_!F_mO!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41a04011-e877-4211-8593-ff3947febcef_2572x396.png 848w, /__u/substackcdn.com/image/fetch/$s_!F_mO!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41a04011-e877-4211-8593-ff3947febcef_2572x396.png 1272w, /__u/substackcdn.com/image/fetch/$s_!F_mO!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41a04011-e877-4211-8593-ff3947febcef_2572x396.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!F_mO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41a04011-e877-4211-8593-ff3947febcef_2572x396.png" width="2572" height="396" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/41a04011-e877-4211-8593-ff3947febcef_2572x396.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:396,&quot;width&quot;:2572,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:132180,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/165738445?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb12e375c-14ae-43a8-8bb7-81d2109d1b21_2596x418.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!F_mO!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41a04011-e877-4211-8593-ff3947febcef_2572x396.png 424w, /__u/substackcdn.com/image/fetch/$s_!F_mO!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41a04011-e877-4211-8593-ff3947febcef_2572x396.png 848w, /__u/substackcdn.com/image/fetch/$s_!F_mO!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41a04011-e877-4211-8593-ff3947febcef_2572x396.png 1272w, /__u/substackcdn.com/image/fetch/$s_!F_mO!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41a04011-e877-4211-8593-ff3947febcef_2572x396.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><strong>Cryptic Exon</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!NzTK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fff8bdd-f949-45a7-8446-91013f21453d_1851x710.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!NzTK!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fff8bdd-f949-45a7-8446-91013f21453d_1851x710.png 424w, /__u/substackcdn.com/image/fetch/$s_!NzTK!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fff8bdd-f949-45a7-8446-91013f21453d_1851x710.png 848w, /__u/substackcdn.com/image/fetch/$s_!NzTK!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fff8bdd-f949-45a7-8446-91013f21453d_1851x710.png 1272w, /__u/substackcdn.com/image/fetch/$s_!NzTK!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fff8bdd-f949-45a7-8446-91013f21453d_1851x710.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!NzTK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fff8bdd-f949-45a7-8446-91013f21453d_1851x710.png" width="1851" height="710" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6fff8bdd-f949-45a7-8446-91013f21453d_1851x710.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:710,&quot;width&quot;:1851,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:66524,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/165738445?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fbb4497-5abb-4720-8759-fdef65fc59a9_4205x4205.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!NzTK!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fff8bdd-f949-45a7-8446-91013f21453d_1851x710.png 424w, /__u/substackcdn.com/image/fetch/$s_!NzTK!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fff8bdd-f949-45a7-8446-91013f21453d_1851x710.png 848w, /__u/substackcdn.com/image/fetch/$s_!NzTK!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fff8bdd-f949-45a7-8446-91013f21453d_1851x710.png 1272w, /__u/substackcdn.com/image/fetch/$s_!NzTK!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fff8bdd-f949-45a7-8446-91013f21453d_1851x710.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!AOE1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2f95d9a-cd59-43f5-a5b3-ccdf7855ffa0_2435x395.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!AOE1!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2f95d9a-cd59-43f5-a5b3-ccdf7855ffa0_2435x395.png 424w, /__u/substackcdn.com/image/fetch/$s_!AOE1!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2f95d9a-cd59-43f5-a5b3-ccdf7855ffa0_2435x395.png 848w, /__u/substackcdn.com/image/fetch/$s_!AOE1!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2f95d9a-cd59-43f5-a5b3-ccdf7855ffa0_2435x395.png 1272w, /__u/substackcdn.com/image/fetch/$s_!AOE1!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2f95d9a-cd59-43f5-a5b3-ccdf7855ffa0_2435x395.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!AOE1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2f95d9a-cd59-43f5-a5b3-ccdf7855ffa0_2435x395.png" width="2435" height="395" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b2f95d9a-cd59-43f5-a5b3-ccdf7855ffa0_2435x395.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:395,&quot;width&quot;:2435,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:133233,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/165738445?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37796b13-696c-4924-aa70-a694455a2354_2462x418.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!AOE1!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2f95d9a-cd59-43f5-a5b3-ccdf7855ffa0_2435x395.png 424w, /__u/substackcdn.com/image/fetch/$s_!AOE1!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2f95d9a-cd59-43f5-a5b3-ccdf7855ffa0_2435x395.png 848w, /__u/substackcdn.com/image/fetch/$s_!AOE1!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2f95d9a-cd59-43f5-a5b3-ccdf7855ffa0_2435x395.png 1272w, /__u/substackcdn.com/image/fetch/$s_!AOE1!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2f95d9a-cd59-43f5-a5b3-ccdf7855ffa0_2435x395.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><strong>Exon Truncation / Skipping</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!xexb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fb26cdf-622d-46b8-8dea-706c7eda9fd9_1852x650.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!xexb!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fb26cdf-622d-46b8-8dea-706c7eda9fd9_1852x650.png 424w, /__u/substackcdn.com/image/fetch/$s_!xexb!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fb26cdf-622d-46b8-8dea-706c7eda9fd9_1852x650.png 848w, /__u/substackcdn.com/image/fetch/$s_!xexb!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fb26cdf-622d-46b8-8dea-706c7eda9fd9_1852x650.png 1272w, /__u/substackcdn.com/image/fetch/$s_!xexb!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fb26cdf-622d-46b8-8dea-706c7eda9fd9_1852x650.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!xexb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fb26cdf-622d-46b8-8dea-706c7eda9fd9_1852x650.png" width="1852" height="650" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7fb26cdf-622d-46b8-8dea-706c7eda9fd9_1852x650.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:650,&quot;width&quot;:1852,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:62448,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/165738445?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f142c4d-37e3-45b5-958a-5e35161cfc39_4205x4205.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!xexb!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fb26cdf-622d-46b8-8dea-706c7eda9fd9_1852x650.png 424w, /__u/substackcdn.com/image/fetch/$s_!xexb!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fb26cdf-622d-46b8-8dea-706c7eda9fd9_1852x650.png 848w, /__u/substackcdn.com/image/fetch/$s_!xexb!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fb26cdf-622d-46b8-8dea-706c7eda9fd9_1852x650.png 1272w, /__u/substackcdn.com/image/fetch/$s_!xexb!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fb26cdf-622d-46b8-8dea-706c7eda9fd9_1852x650.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!RLwC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6770860b-20e2-4f2e-b49d-2cde5399c03b_2702x304.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!RLwC!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6770860b-20e2-4f2e-b49d-2cde5399c03b_2702x304.png 424w, /__u/substackcdn.com/image/fetch/$s_!RLwC!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6770860b-20e2-4f2e-b49d-2cde5399c03b_2702x304.png 848w, /__u/substackcdn.com/image/fetch/$s_!RLwC!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6770860b-20e2-4f2e-b49d-2cde5399c03b_2702x304.png 1272w, /__u/substackcdn.com/image/fetch/$s_!RLwC!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6770860b-20e2-4f2e-b49d-2cde5399c03b_2702x304.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!RLwC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6770860b-20e2-4f2e-b49d-2cde5399c03b_2702x304.png" width="2702" height="304" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6770860b-20e2-4f2e-b49d-2cde5399c03b_2702x304.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:304,&quot;width&quot;:2702,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:105482,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/165738445?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d7ce520-8d6d-4021-9722-0c9da90ed6fc_2714x332.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!RLwC!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6770860b-20e2-4f2e-b49d-2cde5399c03b_2702x304.png 424w, /__u/substackcdn.com/image/fetch/$s_!RLwC!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6770860b-20e2-4f2e-b49d-2cde5399c03b_2702x304.png 848w, /__u/substackcdn.com/image/fetch/$s_!RLwC!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6770860b-20e2-4f2e-b49d-2cde5399c03b_2702x304.png 1272w, /__u/substackcdn.com/image/fetch/$s_!RLwC!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6770860b-20e2-4f2e-b49d-2cde5399c03b_2702x304.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><strong>Intron Retention</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!BAuS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4dbfdec-7175-4600-92eb-de56cbc31567_1843x661.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!BAuS!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4dbfdec-7175-4600-92eb-de56cbc31567_1843x661.png 424w, /__u/substackcdn.com/image/fetch/$s_!BAuS!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4dbfdec-7175-4600-92eb-de56cbc31567_1843x661.png 848w, /__u/substackcdn.com/image/fetch/$s_!BAuS!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4dbfdec-7175-4600-92eb-de56cbc31567_1843x661.png 1272w, /__u/substackcdn.com/image/fetch/$s_!BAuS!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4dbfdec-7175-4600-92eb-de56cbc31567_1843x661.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!BAuS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4dbfdec-7175-4600-92eb-de56cbc31567_1843x661.png" width="1843" height="661" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f4dbfdec-7175-4600-92eb-de56cbc31567_1843x661.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:661,&quot;width&quot;:1843,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:63187,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/165738445?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b7c08b7-e728-43a6-ab14-b4b7e9c11e32_4205x4205.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!BAuS!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4dbfdec-7175-4600-92eb-de56cbc31567_1843x661.png 424w, /__u/substackcdn.com/image/fetch/$s_!BAuS!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4dbfdec-7175-4600-92eb-de56cbc31567_1843x661.png 848w, /__u/substackcdn.com/image/fetch/$s_!BAuS!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4dbfdec-7175-4600-92eb-de56cbc31567_1843x661.png 1272w, /__u/substackcdn.com/image/fetch/$s_!BAuS!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4dbfdec-7175-4600-92eb-de56cbc31567_1843x661.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!KdsS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69a0985a-d8b2-4d15-94dd-9ce3fdfc7bff_2450x372.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!KdsS!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69a0985a-d8b2-4d15-94dd-9ce3fdfc7bff_2450x372.png 424w, /__u/substackcdn.com/image/fetch/$s_!KdsS!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69a0985a-d8b2-4d15-94dd-9ce3fdfc7bff_2450x372.png 848w, /__u/substackcdn.com/image/fetch/$s_!KdsS!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69a0985a-d8b2-4d15-94dd-9ce3fdfc7bff_2450x372.png 1272w, /__u/substackcdn.com/image/fetch/$s_!KdsS!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69a0985a-d8b2-4d15-94dd-9ce3fdfc7bff_2450x372.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!KdsS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69a0985a-d8b2-4d15-94dd-9ce3fdfc7bff_2450x372.png" width="1456" height="221" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/69a0985a-d8b2-4d15-94dd-9ce3fdfc7bff_2450x372.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:221,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:132464,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/165738445?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69a0985a-d8b2-4d15-94dd-9ce3fdfc7bff_2450x372.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!KdsS!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69a0985a-d8b2-4d15-94dd-9ce3fdfc7bff_2450x372.png 424w, /__u/substackcdn.com/image/fetch/$s_!KdsS!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69a0985a-d8b2-4d15-94dd-9ce3fdfc7bff_2450x372.png 848w, /__u/substackcdn.com/image/fetch/$s_!KdsS!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69a0985a-d8b2-4d15-94dd-9ce3fdfc7bff_2450x372.png 1272w, /__u/substackcdn.com/image/fetch/$s_!KdsS!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69a0985a-d8b2-4d15-94dd-9ce3fdfc7bff_2450x372.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><strong>Fusion Gene</strong></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!x3ih!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19e9d2a9-bc61-408b-812a-f4e1a512d022_3941x767.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!x3ih!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19e9d2a9-bc61-408b-812a-f4e1a512d022_3941x767.png 424w, /__u/substackcdn.com/image/fetch/$s_!x3ih!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19e9d2a9-bc61-408b-812a-f4e1a512d022_3941x767.png 848w, /__u/substackcdn.com/image/fetch/$s_!x3ih!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19e9d2a9-bc61-408b-812a-f4e1a512d022_3941x767.png 1272w, /__u/substackcdn.com/image/fetch/$s_!x3ih!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19e9d2a9-bc61-408b-812a-f4e1a512d022_3941x767.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!x3ih!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19e9d2a9-bc61-408b-812a-f4e1a512d022_3941x767.png" width="3941" height="767" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/19e9d2a9-bc61-408b-812a-f4e1a512d022_3941x767.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:767,&quot;width&quot;:3941,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:136365,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/165738445?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6b2d408-405c-453b-8baa-8eb7e3a742c4_4205x4205.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!x3ih!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19e9d2a9-bc61-408b-812a-f4e1a512d022_3941x767.png 424w, /__u/substackcdn.com/image/fetch/$s_!x3ih!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19e9d2a9-bc61-408b-812a-f4e1a512d022_3941x767.png 848w, /__u/substackcdn.com/image/fetch/$s_!x3ih!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19e9d2a9-bc61-408b-812a-f4e1a512d022_3941x767.png 1272w, /__u/substackcdn.com/image/fetch/$s_!x3ih!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19e9d2a9-bc61-408b-812a-f4e1a512d022_3941x767.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!1VLJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bcf47b8-4416-4fba-b95f-0bb41bfddc76_2715x555.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!1VLJ!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bcf47b8-4416-4fba-b95f-0bb41bfddc76_2715x555.png 424w, /__u/substackcdn.com/image/fetch/$s_!1VLJ!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bcf47b8-4416-4fba-b95f-0bb41bfddc76_2715x555.png 848w, /__u/substackcdn.com/image/fetch/$s_!1VLJ!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bcf47b8-4416-4fba-b95f-0bb41bfddc76_2715x555.png 1272w, /__u/substackcdn.com/image/fetch/$s_!1VLJ!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bcf47b8-4416-4fba-b95f-0bb41bfddc76_2715x555.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!1VLJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bcf47b8-4416-4fba-b95f-0bb41bfddc76_2715x555.png" width="2715" height="555" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3bcf47b8-4416-4fba-b95f-0bb41bfddc76_2715x555.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:555,&quot;width&quot;:2715,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:171051,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/165738445?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9baa3171-f7cb-4ba0-a3db-87e8755d873f_2730x574.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!1VLJ!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bcf47b8-4416-4fba-b95f-0bb41bfddc76_2715x555.png 424w, /__u/substackcdn.com/image/fetch/$s_!1VLJ!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bcf47b8-4416-4fba-b95f-0bb41bfddc76_2715x555.png 848w, /__u/substackcdn.com/image/fetch/$s_!1VLJ!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bcf47b8-4416-4fba-b95f-0bb41bfddc76_2715x555.png 1272w, /__u/substackcdn.com/image/fetch/$s_!1VLJ!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3bcf47b8-4416-4fba-b95f-0bb41bfddc76_2715x555.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h3>Primary Structure Encoding</h3><p>Finally, to predict a neoantigen sequence we would take the window of a mutant peptide sequence that includes the underlying RNA variants. The Transcript Structure information can be translated <em>in silico</em> while keeping track of any RNA variants. This allows us to encode a primary structure with each amino acid traceable to an RNA variant. </p><p>For example, the SNV (ATGCTTGGCCCATTTCCAGACGA) example above would be translated as:</p><pre><code>amino_acid|codon|start:end|indices
M|ATG|0:2|0
L|CTT|3:5|0
event=1         &lt;-- canonical splicing
G|GGC|6:8|2
P|CCA|9:11|2,3  &lt;-- SNV
F|TTT|12:14|4
P|CCA|15:17|4
event=5
D|GAC|18:20|6</code></pre><p>The exon truncation (ATGCTTGGCCCCTTTGACGA) example above would be translated as:</p><pre><code>amino_acid|start:end|base_indices
M|ATG|0:2|0
L|CTT|3:5|0
event=1        &lt;-- canonical splicing
G|GGC|6:8|2
P|CCC|9:11|2
F|TTT|12:14|2
event=3        &lt;-- non-canonical splicing
D|GAC|15:17|4</code></pre><h2>6. Closing</h2><p>In the next blog post, I will present simulated benchmark study results on DNA and RNA variant calling as well as predicted mutant peptide sequences in real-world samples found by Exacto and other methods.</p><h2>7. Acknowledgement</h2><p>This work was made possible through the generous support of the <a href="https://jaimeleandrofoundation.org/">Jaime Leandro Foundation</a>, a non-profit foundation committed to brining therapeutic cancer vaccines to patients.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://pirlblog.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Personalized Immunotherapy Research Lab! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Inversion: Temporal Pincer in Cancer Genome]]></title><description><![CDATA[Head-to-head (5' to 5') and tail-to-tail (3' to 3') inversion breakpoints explained.]]></description><link>https://pirlblog.substack.com/p/inversion</link><guid isPermaLink="false">https://pirlblog.substack.com/p/inversion</guid><dc:creator><![CDATA[Jin Seok (Andy) Lee]]></dc:creator><pubDate>Fri, 27 Jun 2025 20:26:01 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!SQ3y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff843ff1b-7068-48c6-a2f7-ba555f472be7_2103x2013.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>1. Opening</h2><p>I&#8217;m a big fan of the movie Tenet, especially the mind-bending concept of temporal pincers. Without giving too much away, let&#8217;s just say the plot goes forwards and backwards - kind of like a cancer genome when a somatic inversion rewrites the script.</p><p>In the world of bioinformatics, I occasionally come across a temporal pincer in a cancer genome - an inverted DNA fragment. Recently, I rehashed my understanding of head-to-head (5&#8217; to 5&#8217;) and tail-to-tail (3&#8217; to 3&#8217;) inversion breakpoints. Here, I share my notes on what they are and how to spot them in sequencing alignments. Below are some online resources I&#8217;ve checked out to learn about inversions:</p><ul><li><p><a href="https://biology.stackexchange.com/questions/44550/how-to-read-this-dna-inversion-diagram">Biology Stack Exchange</a></p></li><li><p><a href="https://bioinformatics.stackexchange.com/questions/2680/why-are-inversions-defined-as-the-reverse-complement-and-not-just-the-reverse-of">Bioinformatics Stack Exchange</a></p></li><li><p><a href="https://github.com/tobiasrausch/wally#paired-end-view">Wally</a></p></li></ul><h2>2. What is Inversion?</h2><p>An inversion is a structural DNA variant whereby a DNA fragment is flipped in the opposite direction within the genome (Figure 1).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!e0Ex!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8b7a461-6d4c-41d1-a387-302d6fa33190_2103x1268.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!e0Ex!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8b7a461-6d4c-41d1-a387-302d6fa33190_2103x1268.png 424w, /__u/substackcdn.com/image/fetch/$s_!e0Ex!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8b7a461-6d4c-41d1-a387-302d6fa33190_2103x1268.png 848w, /__u/substackcdn.com/image/fetch/$s_!e0Ex!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8b7a461-6d4c-41d1-a387-302d6fa33190_2103x1268.png 1272w, /__u/substackcdn.com/image/fetch/$s_!e0Ex!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8b7a461-6d4c-41d1-a387-302d6fa33190_2103x1268.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!e0Ex!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8b7a461-6d4c-41d1-a387-302d6fa33190_2103x1268.png" width="2103" height="1268" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f8b7a461-6d4c-41d1-a387-302d6fa33190_2103x1268.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1268,&quot;width&quot;:2103,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:294094,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/166336655?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28cd6360-f067-4b70-8117-74882a5bc97c_2103x2103.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!e0Ex!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8b7a461-6d4c-41d1-a387-302d6fa33190_2103x1268.png 424w, /__u/substackcdn.com/image/fetch/$s_!e0Ex!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8b7a461-6d4c-41d1-a387-302d6fa33190_2103x1268.png 848w, /__u/substackcdn.com/image/fetch/$s_!e0Ex!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8b7a461-6d4c-41d1-a387-302d6fa33190_2103x1268.png 1272w, /__u/substackcdn.com/image/fetch/$s_!e0Ex!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8b7a461-6d4c-41d1-a387-302d6fa33190_2103x1268.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Figure 1. Graphical illustration of a genomic inversion.</figcaption></figure></div><p>Notably, the inverted DNA is inserted back into the genome in the reverse-complement direction. This is to preserve the 5&#8217; and 3&#8217; orientation in the DNA double helix structure, as shown above.</p><p>Inversions are important to understand because, in cancer, <a href="https://doi.org/10.1016/j.cell.2019.05.013">they can be early structural alterations that initiate tumorigenesis</a>.</p><h2>3. Head-to-Head and Tail-to-Tail Breakpoints</h2><p>An inversion can be long, long enough that sequencing reads cannot capture the whole event end-to-end. But, <em>what&#8217;s happened, happened</em>. Sequencing reads should still be able to observe parts of the inversion. This is where the head-to-head and tail-to-tail breakpoints come in (Figure 2). As shown below, a read that captures the 5&#8217; ends (5&#8217; to 5&#8217;) of the inversion generates a head-to-head breakpoint upon alignment to the reference genome while a read that captures the 3&#8217; ends (3&#8217; to 3&#8217;) leads to a tail-to-tail breakpoint.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!rFNF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f0ae7fa-bbac-4512-bd8e-734cb0774ff3_2103x1985.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!rFNF!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f0ae7fa-bbac-4512-bd8e-734cb0774ff3_2103x1985.png 424w, /__u/substackcdn.com/image/fetch/$s_!rFNF!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f0ae7fa-bbac-4512-bd8e-734cb0774ff3_2103x1985.png 848w, /__u/substackcdn.com/image/fetch/$s_!rFNF!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f0ae7fa-bbac-4512-bd8e-734cb0774ff3_2103x1985.png 1272w, /__u/substackcdn.com/image/fetch/$s_!rFNF!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f0ae7fa-bbac-4512-bd8e-734cb0774ff3_2103x1985.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!rFNF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f0ae7fa-bbac-4512-bd8e-734cb0774ff3_2103x1985.png" width="2103" height="1985" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5f0ae7fa-bbac-4512-bd8e-734cb0774ff3_2103x1985.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1985,&quot;width&quot;:2103,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:401259,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/166336655?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03e26ca4-e64e-4eaf-a343-1cfd4d79c272_2103x2103.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!rFNF!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f0ae7fa-bbac-4512-bd8e-734cb0774ff3_2103x1985.png 424w, /__u/substackcdn.com/image/fetch/$s_!rFNF!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f0ae7fa-bbac-4512-bd8e-734cb0774ff3_2103x1985.png 848w, /__u/substackcdn.com/image/fetch/$s_!rFNF!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f0ae7fa-bbac-4512-bd8e-734cb0774ff3_2103x1985.png 1272w, /__u/substackcdn.com/image/fetch/$s_!rFNF!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f0ae7fa-bbac-4512-bd8e-734cb0774ff3_2103x1985.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Figure 2. Graphical illustration of how sequencing reads are generated from inverted DNA molecules and how they align to the reference genome.</figcaption></figure></div><h2>4. Inversion by Sequencing Technologies</h2><p>Let&#8217;s take a look at the inversion alignment patterns between short-read (paired-end) and long-read sequencing data.</p><p>Here, I simulated a somatic inversion (chr17:7,672,400-7,682,500) in the hg38 genomic region that encodes the tumor-suppressor gene <em>TP53</em>, and generated both short-read (151-bp) and long-read (~10,000-bp) DNA sequencing data for the same event.</p><h4>Paired-end (Short-read) Sequencing</h4><p>Owing to the short read length, short-read paired-end sequencing cannot capture most inversion events end-to-end. As we saw above, this results in observing 2 kinds of read alignments: head-to-head (5&#8217; to 5&#8217;) alignment (red) and tail-to-tail (3&#8217; to 3&#8217;) alignment (blue) (Figure 3).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!0Vz9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98424767-1e9f-4366-a21b-31bf8859d80f_2103x1085.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!0Vz9!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98424767-1e9f-4366-a21b-31bf8859d80f_2103x1085.png 424w, /__u/substackcdn.com/image/fetch/$s_!0Vz9!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98424767-1e9f-4366-a21b-31bf8859d80f_2103x1085.png 848w, /__u/substackcdn.com/image/fetch/$s_!0Vz9!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98424767-1e9f-4366-a21b-31bf8859d80f_2103x1085.png 1272w, /__u/substackcdn.com/image/fetch/$s_!0Vz9!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98424767-1e9f-4366-a21b-31bf8859d80f_2103x1085.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!0Vz9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98424767-1e9f-4366-a21b-31bf8859d80f_2103x1085.png" width="2103" height="1085" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/98424767-1e9f-4366-a21b-31bf8859d80f_2103x1085.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1085,&quot;width&quot;:2103,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:214894,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/166336655?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2e6150f-826d-48a9-b689-487b8c648865_2103x2103.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!0Vz9!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98424767-1e9f-4366-a21b-31bf8859d80f_2103x1085.png 424w, /__u/substackcdn.com/image/fetch/$s_!0Vz9!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98424767-1e9f-4366-a21b-31bf8859d80f_2103x1085.png 848w, /__u/substackcdn.com/image/fetch/$s_!0Vz9!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98424767-1e9f-4366-a21b-31bf8859d80f_2103x1085.png 1272w, /__u/substackcdn.com/image/fetch/$s_!0Vz9!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98424767-1e9f-4366-a21b-31bf8859d80f_2103x1085.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Figure 3. Paired-end (short-read) sequencing alignment of the simulated somatic inversion event.</figcaption></figure></div><h4>Long-read Sequencing</h4><p>If a long read captures an inversion event end-to-end, the read will have 2 supplementary alignments (soft-clipped) and have 3 alignment records (Figure 4).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!a1Kn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F992bdeb0-7e70-4c3b-9cb7-668d1902c3fc_2090x1086.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!a1Kn!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F992bdeb0-7e70-4c3b-9cb7-668d1902c3fc_2090x1086.png 424w, /__u/substackcdn.com/image/fetch/$s_!a1Kn!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F992bdeb0-7e70-4c3b-9cb7-668d1902c3fc_2090x1086.png 848w, /__u/substackcdn.com/image/fetch/$s_!a1Kn!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F992bdeb0-7e70-4c3b-9cb7-668d1902c3fc_2090x1086.png 1272w, /__u/substackcdn.com/image/fetch/$s_!a1Kn!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F992bdeb0-7e70-4c3b-9cb7-668d1902c3fc_2090x1086.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!a1Kn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F992bdeb0-7e70-4c3b-9cb7-668d1902c3fc_2090x1086.png" width="2090" height="1086" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/992bdeb0-7e70-4c3b-9cb7-668d1902c3fc_2090x1086.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1086,&quot;width&quot;:2090,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:144110,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/166336655?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F081b06b3-cc3f-411b-a6fe-01f00372c83f_2103x2103.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!a1Kn!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F992bdeb0-7e70-4c3b-9cb7-668d1902c3fc_2090x1086.png 424w, /__u/substackcdn.com/image/fetch/$s_!a1Kn!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F992bdeb0-7e70-4c3b-9cb7-668d1902c3fc_2090x1086.png 848w, /__u/substackcdn.com/image/fetch/$s_!a1Kn!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F992bdeb0-7e70-4c3b-9cb7-668d1902c3fc_2090x1086.png 1272w, /__u/substackcdn.com/image/fetch/$s_!a1Kn!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F992bdeb0-7e70-4c3b-9cb7-668d1902c3fc_2090x1086.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Figure 4. Long-read sequencing alignment of the simulated somatic inversion event.</figcaption></figure></div><h2>5. Inversion Representation</h2><p>In my<a href="/__u/pirlblog.substack.com/p/variant-standardization"> previous post</a>, I introduced the Occam&#8217;s Variant Grammar. If we identified variants in both the short-read and long-read data, we would have found the following variants encoded in the Grammar:</p><pre><code><code>// 5' to 5' (head-to-head) variant
dna_variant_1 = {
    chromosome_1:  'chr17',
    position_1:    7672399,
    strand_1:      '+',
    operation_1:   'D',      // downstream (towards 3')
    chromosome_2:  'chr17',
    position_2:    7682500,
    strand_2:      '-',
    operation_2:   'D',      // downstream (towards 3')
    sequence:      ''
}

// 3' to 3' (tail-to-tail) variant
dna_variant_2 = {
    chromosome_1:  'chr17',
    position_1:    7672400,
    strand_1:      '-',
    operation_1:   'U',      // upstream (towards 5')
    chromosome_2:  'chr17',
    position_2:    7682501,
    strand_2:      '+',
    operation_2:   'U',      // upstream (towards 5')
    sequence:      ''
} </code></code></pre><p>To detect the inversion, a variant caller that uses the Occam&#8217;s Variant Grammar would look for the above pair of events and classify them as evidence supporting an inversion.</p><p>Stay tuned for more on how structural variants are implicated at the RNA and peptide levels.</p><h2>6. Closing</h2><p><em>Haven&#8217;t you guessed by now?</em> <em>This whole blog post is a temporal pincer</em>. See if you can spot famous lines from Tenet in this post and let us know in the comments section below! I gave you one to begin with.</p><p><em><a href="/__u/pirlblog.substack.com/p/inversion">&#8220;I&#8217;ll see you at the beginning, friend.&#8221;</a></em></p><h2>7. Acknowledgement</h2><p>This work was made possible through the generous support of the <a href="https://jaimeleandrofoundation.org/">Jaime Leandro Foundation</a>, a non-profit foundation committed to brining therapeutic cancer vaccines to patients.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://pirlblog.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Personalized Immunotherapy Research Lab! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Announcing LENS v1.7]]></title><description><![CDATA[PIRL has been working hard to continuously improve our publicly available tumor antigen prediction workflow, Landscape of Effective Neoantigen Software (or LENS).]]></description><link>https://pirlblog.substack.com/p/announcing-lens-v17</link><guid isPermaLink="false">https://pirlblog.substack.com/p/announcing-lens-v17</guid><dc:creator><![CDATA[Steven P. Vensko II]]></dc:creator><pubDate>Tue, 24 Jun 2025 15:38:47 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!pDx4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42f7904f-2524-42b0-9418-df1d7fb945d8_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!pDx4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42f7904f-2524-42b0-9418-df1d7fb945d8_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!pDx4!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42f7904f-2524-42b0-9418-df1d7fb945d8_1536x1024.png 424w, /__u/substackcdn.com/image/fetch/$s_!pDx4!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42f7904f-2524-42b0-9418-df1d7fb945d8_1536x1024.png 848w, /__u/substackcdn.com/image/fetch/$s_!pDx4!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42f7904f-2524-42b0-9418-df1d7fb945d8_1536x1024.png 1272w, /__u/substackcdn.com/image/fetch/$s_!pDx4!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42f7904f-2524-42b0-9418-df1d7fb945d8_1536x1024.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!pDx4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42f7904f-2524-42b0-9418-df1d7fb945d8_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/42f7904f-2524-42b0-9418-df1d7fb945d8_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2790770,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/166723971?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42f7904f-2524-42b0-9418-df1d7fb945d8_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!pDx4!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42f7904f-2524-42b0-9418-df1d7fb945d8_1536x1024.png 424w, /__u/substackcdn.com/image/fetch/$s_!pDx4!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42f7904f-2524-42b0-9418-df1d7fb945d8_1536x1024.png 848w, /__u/substackcdn.com/image/fetch/$s_!pDx4!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42f7904f-2524-42b0-9418-df1d7fb945d8_1536x1024.png 1272w, /__u/substackcdn.com/image/fetch/$s_!pDx4!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42f7904f-2524-42b0-9418-df1d7fb945d8_1536x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Modified from ChatGPT</figcaption></figure></div><p>PIRL has been working hard to continuously improve our publicly available tumor antigen prediction workflow, Landscape of Effective Neoantigen Software (or LENS). We&#8217;ve just released LENS version 1.7, so we wanted to highlight both the more substantial upgrades and the reasoning behind the update. We conclude this blog post with a sneak peek at what else we&#8217;re working on.</p><p>A quick peek at LENS v1.7&#8217;s change log (<a href="https://uselens.io/en/lens-v1.7/changelog.html">https://uselens.io/en/lens-v1.7/changelog.html</a>) reveals the following changes (note that the bolded and italicized points are discussed below):</p><div class="preformatted-block" data-component-name="PreformattedTextBlockToDOM"><label class="hide-text" contenteditable="false">Text within this block will maintain its original spacing when published</label><pre class="text"><code>Version 1.7                                                                                         
-----------                                                                                         
&#8226; Added HLApollo support
&#8226; Added pepsickle support  
&#8226; Improved references download script to improve compatibility among LENS versions     
&#8226; Fixed input tuples and process blocks for netCTLpan, antigen.garnish, deephlapan, and abra2 (thanks @kevinpryan)
&#8226; Improved OptiType process block for speed improvements (thanks @kevinpryan)                                                                           
&#8226; Updated Jacquard to 1.1.5                                                                         
&#8226; Updated sample delimiters from '*' to '+' to prevent edge case of substring run identifiers                    
  
&#8226; Fixed gEVE-related references in download script to circumvent third party server downtime (with permission from Dr. So Nakagawa, PhD.)                                                                                
&#8226; Fixed 'grep awk' bug in snaf.nf                                                                   
&#8226; Fixed processing of ambiguous amino acids by MHCflurry                                                                                            
&#8226; Updated LENSTools to fix lenstools_make_indel_peptides_context bugs                               
&#8226; Added preliminary intra-patient inter-group analysis                                              
&#8226; Added multipass pMHC characterization to better handle long running tools
&#8226; Modified workflow to natively support RNA only patients (no SNV or InDels pMHCs will be reported) 
&#8226; Reimplemented support for intermediate file cleaning of trimmed FASTQs and BAMs (using raft.py run-workflow ... --clean-intermediates) -- more information available in documentation and https://tinyurl.com/trick-nf-caching
&#8226; Reduced HLA allele consensus support requirement to single tool such that all alleles by all tools will be processed. Users can filter alleles (including by support) in the LENS report.
&#8226; Added vcf2maf is run as part of workflow with more stringent variant filtering                    
&#8226; Added automatic checking of user-provided metadata files for raft.py run-ots and raft.py run-workflow modes
&#8226; Fixed bug preventing intersect variant combining method from working                         
&#8226; Fixed LENStools use of bcftools Docker image                                                      
&#8226; Added documentation for LENS report columns previously missing from documentation </code></pre></div><p>This blog post will go into some technical information regarding each point, but we&#8217;ve separated each point, so readers can focus on the updates most relevant to them.</p><h2><strong>Added HLApollo support</strong></h2><p>We built LENS to be as modular as possible with the expectation of new tools being incorporated. We are continuing our commitment to supporting LENS through inclusion of additional functionality by adding <code>HLApollo</code>. <code>HLApollo</code> is a pMHC presentation predictor produced by Genentech. We were motivated to include <code>HLApollo</code> after a discussion on neoantigen predictors on Reddit (<a href="https://www.reddit.com/r/bioinformatics/comments/1kclvc1/neoantigen_prediction_pipelines/">https://www.reddit.com/r/bioinformatics/comments/1kclvc1/neoantigen_prediction_pipelines/</a>) and reviewing the tool&#8217;s associated manuscript (<a href="https://www.nature.com/articles/s41467-024-54887-7">https://www.nature.com/articles/s41467-024-54887-7</a>). <code>HLApollo</code> runs by default within version 1.7 and columns should automatically be included in the LENS report.</p><p>Specifically, the <code>HLApollo</code> outputs for each pMHC can be found in the columns:</p><ul><li><p><code>hlapollo_train_allele</code></p></li><li><p><code>hlapollo_mhc_pred_0</code></p></li><li><p><code>hlapollo_mhc_pred_0_rank</code></p></li></ul><p>Note that <code>HLApollo</code> does not use a versioned release system, so a tool version is not indicated in the columns.</p><p>If you are aware of a tool that may be worthy of including in LENS then please do not hesitate to reach out and let us know. We cannot promise to support every suggested tool, but are definitely interested in our users&#8217; thoughts.</p><h2><strong>Added pepsickle support</strong></h2><p><code>MHCflurry</code> provides pMHC-level binding affinity estimates and both <code>MHCflurry</code> and the recently added <code>HLApollo</code> provide pMHC-level presentation scores. These metrics, among others, are relevant in prioritizing candidate peptide targets. One metric that was previously missing from LENS was peptide cleavage. Peptide cleavage is relevant to how a peptide is processed by the proteasome and (potentially) presented on the tumor cell surface. Of course, a peptide that has a predicted high probability cleavage site within it should be deprioritized as its internal cleavage would prevent its presentation. On the other hand, a peptide with low cleavage probabilities among its amino acids <em>and</em> with a high cleavage probability for the amino acid immediately downstream of the peptide would make a better target. With this in mind, we&#8217;ve generated a score using the <code>pepsickle</code> outputs to aid in prioritizing pMHCs. The score is defined as:</p><pre><code><code>Pr(cleavage of downstream AA) * (1 - Max(Pr(cleavage within peptide)))
</code></code></pre><p>This score is the probability of cleavage between the peptide of interest and the neighboring downstream amino acid multiplied by 1 minus the maximum probability of cleavage among amino acids within the peptide. An ideal case involves a high probability of cleavage between the peptide and the neighboring downstream amino acid with minimal probability of cleavage among amino acids within the peptide of interest. This scenario should result in a score near <code>1</code>.</p><p>This score, and other relevant <code>pepsickle</code> information can be found in the following columns from the LENS report:</p><ul><li><p><code>pepsickle-0.2.1_max_pep_aa_cleav_score</code></p></li><li><p><code>pepsickle-0.2.1_plus1_aa_cleav_score</code></p></li><li><p><code>pepsickle-0.2.1_score</code></p></li></ul><h2><strong>Improved references download script to improve compatibility among LENS versions</strong></h2><p>We want LENS to be as painless to run as possible. This mentality is what drove the <code>run-demo</code> and <code>run-ots</code> RAFT modes which allow users to, theoretically, go from manifest to LENS report without any further user input.</p><p>An important step in the <code>run-demo</code> and <code>run-ots</code> modes is checking for the required reference files in the local RAFT installation and downloading any missing reference files. This system saves the user from manually fetching and generating the required references.</p><p>Earlier iterations of this system made assumptions regarding the relationships among files. For example, if RAFT detects <code>File_A</code> and RAFT knows that <code>File_A</code> and <code>File_B</code> are downloaded concurrently, then it assumes <code>File_B</code> is also available in the RAFT <code>references/</code> directory. This system has historically worked well, but its flaws are becoming apparent as new LENS versions are released. Let&#8217;s consider an example &#8212; let&#8217;s say a new, shiny version of LENS has been released. The new version requires <code>File_A</code>, <code>File_B</code>, and a new file, <code>File_C</code>. If you have run the previous version of LENS (which required only <code>File_A</code> and <code>File_B</code>) then the downloading of <code>File_C</code> will be skipped due to RAFT detecting <code>File_A</code>. This will, of course, result in LENS failing with an error about a missing reference file.</p><p>We have revamped the reference download script to prevent the above issue going forward. Effectively, every required reference file will be individually checked (and downloaded if needed) which should prevent these errors going forward.</p><h2><strong>Fixed gEVE-related references in download script to circumvent third party downtime (with permission from Dr. So Nakagawa, PhD.)</strong></h2><p>One of the several potential tumor antigen sources that LENS can predict are endogenous retroviruses (ERVs). ERV detection is based heavily upon the computationally predicted ERV coordinates made available through the gEVE database (http://geve.med.u-tokai.ac.jp/). Readers who clicked on the gEVE link in the previous sentence should receive a 404 error (at least, as of June of 2025). This downtime is apparently due to a cyberattack targeted at Tokai University. Unfortunately, these files are essential for running LENS and their unavailability was preventing new users from running LENS. We requested permission from Dr. So Nakagawa (gEVE PI) to independently host the relevant files to allow users to continue using LENS. Luckily, we were granted permission and are temporarily hosting the files on <a href="http://Gitlab.com">Gitlab.com</a>.</p><p>This occurrence reminds me of a conversation I had with Alex Rubinsteyn many years ago in which he expressed concern about external, third-party resources disappearing from lack of relevant funding or a variety of other reasons. I didn&#8217;t feel as strongly about the topic as Alex did, but, with hindsight, perhaps I should have. I think this lesson is relevant to all bioinformaticians out there &#8212; consider locally caching third-party references that your workflows rely upon.</p><h2><strong>Fixed input tuples and process blocks for netCTLpan, antigen.garnish, deephlapan, and abra2 (thanks @kevinpryan)</strong></h2><p>We want to thank Kevin P. Ryan for fixing some of the broken input tuples for <code>netctlpan</code>, <code>antigen.garnish</code>, <code>deephlapan</code>, and <code>abra2</code>. Specifically, Kevin fixed cardinality issues with the input, output, and script blocks.</p><h2></h2><h2><strong>Updated sample delimiters from </strong><code>*</code><strong> to </strong><code>+</code><strong> to prevent edge case of substring run identifiers</strong></h2><p>A major aspect of RAFT (and by extension, LENS) beyond reproducibility is output file sample provenance tracking. For example, if a user encounters a VCF file of expression-filtered somatic variants (as in, the VCF only contains a subset of variants that are encoded within transcripts that exceed some arbitrary transcript abundance threshold), then a key question is &#8220;Which RNA sample was used for filtering?&#8221;. To prevent these types of confusion, one of the design principles in LENS is to include the relevant sample-level information in the file name.</p><p>Our method for incorporating sample identifiers into file names is based on the template <code>${DATASET}-${PATIENT_NAME}-${RUN_NAME(s)}</code> where <code>RUN_NAME</code>(s) contains the sample(s) information. <code>DATASET</code> and <code>PATIENT_NAME</code> are constant for a given patient, but the <code>RUN_NAME</code>(s) can vary by file (see <a href="https://uselens.io/en/lens-v1.7/manifest.html#sample-patient-and-dataset-hierarchy">https://uselens.io/en/lens-v1.7/manifest.html#sample-patient-and-dataset-hierarchy</a>). For example, a <code>salmon</code> generated <code>quant.sf</code> file will need to indicate which RNA sample was utilized while a VCF containing somatic variants will need to indicate which normal DNA sample and which tumor DNA sample were used. The former scenario is straightforward while the latter is more complicated &#8212; what&#8217;s the best way to indicate that multiple samples were used to generate the file and how should they be represented in the file name? While <code>-</code> seems like a suitable delimiter between the run identifiers (<code>RUN_NAME</code> from the LENS manifest), it is not appropriate due to <code>-</code> already being a required character in run identifiers. Sure, <code>-</code> may <em>technically</em> work, but they are difficult to read and could lead to failures in some scenarios. With these factors in mind, we opted to use <code>*</code> as the delimiter between samples in output file names (e.g. <code>MyDataset-Pt01-ad-123*nd-234</code>). The <code>*</code> delimiter makes it very clear that there are two samples and it neatly partitions the sample identifiers.</p><p>The <code>*</code> delimiter has been used in LENS without issue until the current release, version 1.7. The change was prompted by a case where a patient has multiple <code>Group</code> names (see <a href="https://uselens.io/en/lens-v1.6/manifest.html#complex-sample-sets">https://uselens.io/en/lens-v1.6/manifest.html#complex-sample-sets</a>). <code>Group</code> names allow users to group (see where we got the name?) samples from a single patient together into sets for analyses. For example, if patient <code>Pt01</code> has both a pre-treatment group of samples and an on-treatment group of samples then it&#8217;s reasonable to have a <code>pre</code> group and a <code>on</code> group (with some samples, like the normal DNA, being shared between groups). Generally, we use a <code>RUN_NAME</code> pattern of consistent length where the first characters describe the sample type (<code>ad</code>, <code>ar</code>, <code>nd</code>, or <code>nr</code>), the third character is a <code>-</code> delimiter and the remaining characters are a unique identifier of <strong>fixed length</strong> (e.g. the last 5 characters of the sample&#8217;s SRA identifier). One thing to keep in mind is that <code>*</code> functions as a wildcard when interacting with filesystems. This wildcard behavior has never resulted in unexpected behavior and even relaxing the <code>RUN_NAME</code> template constraints (e.g. having variable length suffixes) will, in most scenarios, not result in an undesirable or unexpected outcome.</p><p>This wildcard behavior can break LENS when the following conditions are met:</p><ul><li><p>A patient has multiple groups</p></li><li><p>A <code>RUN_NAME</code> in one group has a substring of a <code>RUN_NAME</code> in a separate group <em>and</em> both <code>RUN_NAME</code>s are associated with the same sample type (e.g. <code>ad-123</code> and <code>ad-1234</code>)</p></li><li><p>A process loads files related to the affected groups described above</p></li></ul><p>Prior to version 1.7, there was only a single LENS process that met these conditions; however, the introduction of inter-group analyses in version 1.7 will make these scenarios more likely. Additionally, it&#8217;s probably best not to tempt fate with wildcards. We chose <code>+</code> as the new delimiter since it seems like the most natural option as it describes the adding of multiple samples to create an output.</p><h2><strong>Updated LENSTools to fix lenstools_make_indel_peptides_context_bugs</strong></h2><p><code>lenstools</code> is a Python3 tool that handles a lot of the legwork within LENS, including generation of mutant proteins for peptide prediction. Despite the <code>lenstools</code> package&#8217;s unit tests, not all cases are covered. We recently encountered two cases, a misannotated variant and an unhandled exception resulting from neighboring phased frameshift InDel, that were resulting in process failures.</p><p>The first case involved a variant within a transcript&#8217;s 3&#8217; UTR. Typically, these are well-annotated by <code>snpEff</code> and are handled appropriately within LENS. In this scenario, <code>snpEff</code> was labeling the variant as a disruptive in-frame insertion (within the last exon). We performed some sanity checks and realized that <code>snpEff</code> had misannotated the variant. <code>lenstools</code> was updated to better handle this situation moving forward.</p><p>The second case involved two neighboring phased variants in which the upstream variant was a frameshift InDel. The actual error was a result of an internal function not returning a correctly translated peptide sequence (in fact, it didn&#8217;t return anything, hence the error).</p><p>The <code>lenstools_make_indel_peptides_context</code> function within <code>lenstools</code> was updated to better handle these scenarios.</p><h2><strong>Added preliminary intra-patient inter-group analysis</strong></h2><p>The <code>subjoin</code>ing functionality within LENS allows users to run LENS on multiple sample sets per patient (e.g. various time points, before and on treatment, etc.) with minimal processing overhead. Prior to LENS v1.7, it was up to the user to then perform any ad-hoc analysis or comparisons between these <code>Group</code>s to find interesting patterns. For example, how many and which pMHCs are shared between the <code>Group</code>s? Which are unique to one group or another? What antigen sources make up the pMHCs in each category?</p><p>LENS v1.7 introduces the <code>lenstools_multigroup_analysis</code> process which serves as a template for automatically performing the analyses described above. The analysis is currently quite minimal (basically performing the analysis described above), but we expect to expand it to provide more meaningful information as to why pMHCs may not be shared. For example, in the case of a <code>Group</code>-specific SNV-derived pMHC, we can ask: Was the variant gained (or lost) in one <code>Group</code> relative to another? If not, then did the transcript abundance of the transcript(s) harboring that variant change drastically between <code>Group</code>s? In other words, we want to provide not just which pMHCs are shared or unique, but also <em>why</em> they may be unique.</p><h2><strong>Added multipass pMHC characterization to better handle long running tools</strong></h2><p>LENS has the ability to generate <em>a lot</em> of predicted pMHCs. These pMHCs are not uniformly distributed among tumor antigen sources. For example, a SNV may result in a handful of 8-11mers to be tested, an in-frame InDel will produce a similar count while a frameshift InDel has the potential to produce more. These all pale in comparison to the number of 8-11mers produced by CTAs and ERVs. We consider the entirety of CTA and ERV coding sequences to be non-self for peptide prediction purposes, and utilize a sliding window method to capture 8-11mers of interest. These 8-11mers are then paired with each of the patient&#8217;s HLA alleles. The resulting pMHCs are passed to relevant pMHC characterization tools (e.g. <code>mhcflurry</code>, <code>netmhcpan</code>, etc.). Unsurprisingly, the number of pMHCs considered can grow quite large (over 210,000 pMHCs in a random sample I just checked) and many tools struggle to handle this many pMHCs. In some cases, such as with <code>netmhcpan</code> and <code>mhcflurry</code>, we have optimized how the tools are run to make the best use of the compute resources available.</p><p>It may not be practical to optimize each pMHC characterization tool since it&#8217;s a hefty time investment and it&#8217;s unclear which tools will be relevant to pMHC prioritization, so we have developed a tiered characterization system instead. Specifically, the entire set of potential pMHCs will be processed in the first pass by whatever tool(s) the user specifies. By default, this is <code>mhcflurry</code>. After processing, the pMHCs that pass the binding affinity filter will then be processed through additional pMHC tools. For the sample described above, the original 210,000 pMHCs were reduced to 3,500 pMHCs &#8212; a much less burdensome task for most pMHC tools which will result in reduced run times. Users have the ability to determine what tools they want to run in the first pass and which they&#8217;d prefer to run on the reduced pMHC set in the second pass.</p><h2><strong>Modified workflow to natively support RNA only patients (no SNV or InDels pMHCs will be reported)</strong></h2><p>The LENS documentation has previously stated that patients require three different sample types &#8212; a normal DNA sample, a tumor DNA sample, and a tumor sample &#8212; for LENS to work properly. Unfortunately, it&#8217;s not uncommon for patients to, for a variety of reasons, not have all of these samples available. In fact, we&#8217;ve encountered this scenario when analyzing data within PIRL, but it has been a rare enough occurrence that no official support was implemented, and circumventing the sample limitation was an ad-hoc fix.</p><p>Recently, a third party reached out to us and requested this functionality to support their efforts, so we&#8217;ve updated LENS to directly support RNA-only patients in version 1.7.</p><p>The workflow modification involves disentangling the generation of RNA-derived pMHCs for RNA-only patients (specifically CTAs and fusions) from any dependency on the DNA samples. In general, LENS will internally call germline variants from the normal DNA sample and then use this information to update the coding sequence of CTA and fusion transcripts. This approach better captures the sequence variation within the patient and should generate higher fidelity pMHCs from these sources. Of course, incorporation of germline variants from the normal DNA sample requires that a normal DNA sample be available. Previously, LENS would encounter errors when attempting to incorporate the germline variants, which would result in workflow failure. LENS version 1.7 allows bypassing germline variant integration for RNA-only patients, such that pMHCs (except for SNV- and InDel-derived pMHCs) are still predicted and reported.</p><h2><strong>Reimplemented support for intermediate file cleaning of trimmed FASTQs and BAMs (using raft.py run-workflow ... --clean-intermediates)</strong></h2><p>Managing storage utilization at PIRL is, as with many groups, a constant struggle. Given infinite storage, we will still find a way to require infinite plus one. Alleviating that storage crunch motivated our original implementation of RAFT&#8217;s <code>--clean-intermediates</code> mode. The <code>--clean-intermediates</code> mode deletes many of the large intermediate files (e.g. BAMs) once LENS finishes running, but does so in a way that does not break Nextflow&#8217;s caching system (more information available <a href="/__u/pirlblog.substack.com/p/tricking-nextflows-caching-system">here</a>). This feature was temporarily removed as we worked to support cloud platforms, but has been reintroduced. It is highly recommended that users running LENS on a local or networked file system (i.e. not cloud buckets) run this option after LENS has completed.</p><h2><strong>Added automatic checking of user-provided metadata files for raft.py run-ots and raft.py run-workflow modes</strong></h2><p>LENS manifests can be very complicated, especially for complex datasets containing patient samples across multiple timepoints or treatments (see https://uselens.io/en/lens-v1.7/manifest.html). Generally, we at PIRL have avoided manifest-related LENS issues by thoroughly QCing the manifest prior to running LENS. </p><p>Despite this, manifest issues still occur. Previously, LENS would run with a malformed manifest until it hit an error. In the best-case scenario, this could be due to a mislabeled RUN_NAME and would result in some steps of the workflow being skipped. This would require some investigation and was generally easy to fix. On the other hand, scenarios where multiple samples of the same type (e.g. two tumor DNA samples, hereafter referred to as tumor DNA sample A and tumor DNA sample B) exist for the same patient and the same <code>Group</code> (see https://uselens.io/en/lens-v1.7/manifest.html#complex-sample-sets) cause more serious issues. LENS will run seemingly normally until the LENS project is later run again. At that point, it&#8217;d be possible that many of the processes involving the tumor DNA samples would re-run. This is a side effect of how Nextflow handles <code>join</code><a href="https://www.nextflow.io/docs/latest/reference/operator.html#join">ing</a> when multiple options are available (i.e. the normal DNA sample could be paired with tumor DNA sample A or it could be paired with DNA sample B). Specifically, Nextflow&#8217;s <code>join</code> operator randomly chooses one of the options each time Nextflow is run. That means the resulting pairing each time LENS is run is nondeterministic. This outcome generally takes more investigation to resolve as the initial behavior appears to be a Nextflow caching error.</p><p>RAFT already has a check-manifest mode, but we suspect many users do not currently run that utility before starting LENS. To address this, RAFT&#8217;s check-manifest functionality has been incorporated into the <code>utilities.nf</code> module and is now part of the LENS workflow. This means LENS will stop running if the manifest fails the validation and will alert the user, rather than continuing. This feature still needs some work to handle the more complex datasets (as it can sometimes provide overly cautious warnings), but we hope this helps users generate (and run) their manifests.</p><p>In the long term, we plan to overhaul how users interface with LENS by developing a more user-friendly manifest format, so stay tuned. </p><h2><strong>So, what&#8217;s next?</strong></h2><p>We plan to immediately start development on version 1.8-dev. There are a variety of smaller upgrades that will be immediately introduced in 1.8-dev such as the ability to filter pMHCs on metrics beyond binding affinity (e.g. presentation score, stability, etc.) and the ability to formulate your own pMHC prioritization score (instead of using the current hard-coded approach). Furthermore, we plan to revisit some of the LENSTools and RAFT module unit tests to ensure we have coverage for the additional cases we&#8217;ve seen popping up. Finally, we plan to improve documentation and automate documentation generation where possible (to avoid cases where tool features and documentation become unsynced).</p><p>We also plan to work further on our long-read analog to LENS, Tumor Antigens Through the Applications of Long Reads, or TATTALR. TATTALR will have a very similar internal infrastructure to LENS, but with added features such as pMHC prediction from larger structural variants.</p><p>Thanks for taking the time to read our LENS updates! We&#8217;re already excited to discuss LENS with those curious to learn more. Please do not hesitate to reach out to Steven Vensko II at <a href="mailto:steven_vensko@med.unc.edu">steven_vensko@med.unc.edu</a>, or stop by the RAFT Slack server: https://pirl-raft.slack.com.</p><p>This work was made possible through the generous support of the <a href="https://jaimeleandrofoundation.org/">Jaime Leandro Foundation</a>, a non-profit foundation committed to brining therapeutic cancer vaccines to patients.</p>]]></content:encoded></item><item><title><![CDATA[A Unifying Grammar for DNA Variants]]></title><description><![CDATA[A unified framework and toolkit for standardizing DNA variants at scale. Part 1 of the neoantigen discovery with long-read sequencing series.]]></description><link>https://pirlblog.substack.com/p/variant-standardization</link><guid isPermaLink="false">https://pirlblog.substack.com/p/variant-standardization</guid><dc:creator><![CDATA[Jin Seok (Andy) Lee]]></dc:creator><pubDate>Mon, 23 Jun 2025 13:36:42 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!a1I3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd686ba08-a32c-4ee9-80dc-d44ee93a5816_1973x2075.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>TL;DR</h2><ul><li><p>Current genomic variant representations are inconsistent across different variant callers and limit neoantigen discovery.</p></li><li><p>New unified variant grammar addresses the fundamental issue.</p></li><li><p>New tool <a href="https://github.com/pirl-unc/vstol">VSTOL</a> lets you standardize DNA variants from 14 different variant callers.</p></li></ul><h2>1. Short-Sighted in a Long Genome</h2><p>We know that CD8+ killer T cells have the remarkable ability to selectively kill cancer cells in many cancer types. Immune checkpoint blockade therapies such as PD-1 inhibitors (e.g. Nivolumab and Pembrolizumab) and PD-L1 inhibitors (e.g. Atezolizumab and Avelumab) demonstrate this ability either by releasing the &#8220;brakes&#8221; on the killer T cells or by exposing the &#8220;disguise&#8221; of tumors cells to killer T cells. At the same time, we often don&#8217;t know which tumor-specific targets the killer T cells recognize to distinguish tumor cells (<em>non-self</em>) from normal cells (<em>self</em>). Occasionally, we discover tumor-specific peptide-major histocompatibility complex (pMHC) molecules that are recurrently presented across multiple patients with the same cancer type. For example, the cancer-testis antigen (CTA) <a href="https://doi.org/10.1038/modpathol.2012.31">NY-ESO-1 is expressed in over 70% of synovial sarcomas</a> while <a href="https://doi.org/10.1097/PAS.0000000000001134">PRAME, another CTA, is found in more than 80% of melanomas</a>. These recurrently expressed CTAs have been the targets of effective adoptive T-cell receptor (TCR) therapies, as demonstrated by <a href="https://doi.org/10.1158/2159-8290.CD-17-1417">D&#8217;Angelo et al.</a> and <a href="https://doi.org/10.1158/2159-8290.CD-17-1417">Wermke et al.</a></p><p>However, we also know that most cancers are characterized by both inter- and intra-patient heterogeneity rather than homogeneity. As a result, TCR therapeutics developed for shared targets remain limited to only a handful of cancer types. This challenge has driven significant efforts towards the development of personalized immunotherapies that individualize target selection for each cancer patient. Despite the promising scientific narrative behind this precision oncology approach, most personalized immunotherapies have been unsuccessful. <a href="https://pmlive.com/pharma_news/newly-listed_biontech_buys_neon_to_boost_cell_therapy_assets_1322676/">Neon Therapeutics</a>, <a href="https://www.biospace.com/business/gritstone-files-for-bankruptcy-in-effort-to-save-clinical-research">Gritstone bio</a>, and <a href="https://www.fiercebiotech.com/biotech/fractured-pact-pharma-lays-additional-51-staffers-suspends-phase-1-trial-company-struggles">PACT Pharma</a> are just some of the companies that have attempted but failed to deliver successful personalized immunotherapies.</p><p>There have been a few notable successes in personalized immunotherapy development. These successes are characterized by either <a href="https://doi.org/10.1016/S0140-6736(23)02268-7">hedging across many different target predictions</a> or by <a href="https://doi.org/10.1038/s41591-024-03109-0">directly using TCRs from antigen-experienced tumor-infiltrating lymphocytes</a>.</p><p>So why does personalized immunotherapy usually fail? At PIRL, we think that at least one major deficiency is in the first few steps of the target selection process.</p><p>Target selection for personalized immunotherapy development relies on identification of <em>neoantigens</em>. Neoantigens are short (8-11 amino acids in length) mutant peptides presented by MHC class I molecules on tumor cells. The neoantigen identification process typically involves sequencing the tumor DNA and RNA as well as the matched normal DNA. The process begins by detecting <em>somatic</em> DNA variants, which are exclusively found in the genomes of tumor cells. This step ensures that personalized immunotherapies target tumor-specific molecular features and minimize the risk of autoimmune reactions against healthy and normal cells.</p><p><strong>Over the past two decades, personalized immunotherapy development has suffered from the streetlight effect of looking at a specific type of somatic DNA variants: single-nucleotide variants (SNVs) that result in single-amino acid substitutions.</strong> As the name implies, these changes are subtle - so subtle that they might be indistinguishable from <em>self-antigens</em> on normal cells to killer T cells. If I wrote, <em>&#8220;I hope you have a greit day</em>,<em>&#8221;</em> you would still know what I meant - unless you speak Norwegian and know that <em>greit</em> means <em>okay.</em></p><p>SNVs are typically detected in formalin-fixed paraffin-embedded (FFPE) tumor samples using short-read whole-exome sequencing - an assay that profiles only ~1% of the human genome (30 million out of the 3,000 million base pairs in the genome). By design, this target discovery setup overlooks the remaining 99% of the genome. </p><p>Could the most clinically actionable mutations lie in regions where we haven&#8217;t examined carefully? Could there be sources of therapeutic targets qualitatively better, less self-like, and more <em>immunogenic</em>? Could the answers we&#8217;ve been searching hidden in plain sight - just beyond the boundaries we&#8217;ve chosen to search?</p><p>As a field, we might have been short-sighted in a long genome.</p><h2>2. Bigger Mutations, Bigger Impact?</h2><p>So the natural question that arises is, <strong>&#8220;Are there bigger changes in tumor genomes?&#8221; The answer is yes.</strong> The <a href="https://doi.org/10.1038/s41586-019-1913-9">Pan-cancer Whole Genomes Analysis Group (PCAWG) has revealed somatic structural variants</a> (commonly defined in the literature as 30-50 base pairs or larger) in genomes of over 2,600 cancer patients representing 33 tumor types. There are 5 major types of structural variants: insertions, deletions, duplications, inversions, and translocations. <strong>If somatic structural variants affect the open-reading frames (ORFs) of protein-coding transcripts or otherwise give rise to novel ORFs,</strong> <strong>structural variants could represent a large pool of previously untapped neoantigens potentially highly divergent from the landscape of self-antigens.</strong> Given their inherently large sizes, somatic structural variants have the capacity to generate a bigger number of candidate mutant sequences subject to neoantigen prediction compared to SNVs (Figure 1). Also, tumors previously thought to have a low mutational burden (a metric typically based on the number of SNVs) might have targetable somatic structural variants. <strong>Moreover, the growing adoption of long-read sequencing means that we are better powered to identify </strong><em><strong>and</strong></em><strong> resolve somatic structural variants in cancer genomes.</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!a1I3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd686ba08-a32c-4ee9-80dc-d44ee93a5816_1973x2075.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!a1I3!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd686ba08-a32c-4ee9-80dc-d44ee93a5816_1973x2075.png 424w, /__u/substackcdn.com/image/fetch/$s_!a1I3!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd686ba08-a32c-4ee9-80dc-d44ee93a5816_1973x2075.png 848w, /__u/substackcdn.com/image/fetch/$s_!a1I3!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd686ba08-a32c-4ee9-80dc-d44ee93a5816_1973x2075.png 1272w, /__u/substackcdn.com/image/fetch/$s_!a1I3!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd686ba08-a32c-4ee9-80dc-d44ee93a5816_1973x2075.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!a1I3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd686ba08-a32c-4ee9-80dc-d44ee93a5816_1973x2075.png" width="1973" height="2075" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d686ba08-a32c-4ee9-80dc-d44ee93a5816_1973x2075.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2075,&quot;width&quot;:1973,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:267504,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/165714873?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc13590c7-a983-4d2f-928a-43fe07052546_2103x2103.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!a1I3!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd686ba08-a32c-4ee9-80dc-d44ee93a5816_1973x2075.png 424w, /__u/substackcdn.com/image/fetch/$s_!a1I3!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd686ba08-a32c-4ee9-80dc-d44ee93a5816_1973x2075.png 848w, /__u/substackcdn.com/image/fetch/$s_!a1I3!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd686ba08-a32c-4ee9-80dc-d44ee93a5816_1973x2075.png 1272w, /__u/substackcdn.com/image/fetch/$s_!a1I3!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd686ba08-a32c-4ee9-80dc-d44ee93a5816_1973x2075.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Figure 1. Illustrative example of SNV-derived and insertion-derived 9-mers that span the respective variant. The nonamers are input candidates for subsequent neoantigen prediction.</figcaption></figure></div><p>In fact, <a href="https://www.nature.com/articles/s41586-024-08507-5">a recent cancer vaccine trial</a> has shown that frameshift mutations (insertions and deletions) elicited the highest <em>in vitro</em> (ELISPOT) immune responses in 4 out of the 9 patients that were enrolled in the study, and showed comparable responses to SNVs in 2 additional patients (see the publication&#8217;s Extended Data Figure 2b).</p><p>However, as you&#8217;ll see, targeting such mutations is difficult given the existing toolkits and ways of thinking about variants. So my PhD thesis work is focused on addressing this challenge and discovering neoantigens that originate from somatic structural variants in tumors.</p><h2>3. One Variant, Multiple Representations</h2><p>What is a DNA variant? Many of you reading this blog post will be familiar with SNVs. An SNV is a type of DNA mutation that affects just one base-pair in the genome. For example, a given position in the reference genome might have a common allele of Cytosine (C). When that same position changes to Thymine (T), we call this mutation an SNV.</p><p>Here is an Integrative Genomics Viewer (IGV) screenshot of an SNV in a tumor-suppressor gene <em>TP53</em>:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Bvnh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3965a0fe-3c67-436b-8013-449c7ea625b2_2023x1042.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Bvnh!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3965a0fe-3c67-436b-8013-449c7ea625b2_2023x1042.png 424w, /__u/substackcdn.com/image/fetch/$s_!Bvnh!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3965a0fe-3c67-436b-8013-449c7ea625b2_2023x1042.png 848w, /__u/substackcdn.com/image/fetch/$s_!Bvnh!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3965a0fe-3c67-436b-8013-449c7ea625b2_2023x1042.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Bvnh!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3965a0fe-3c67-436b-8013-449c7ea625b2_2023x1042.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Bvnh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3965a0fe-3c67-436b-8013-449c7ea625b2_2023x1042.png" width="2023" height="1042" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3965a0fe-3c67-436b-8013-449c7ea625b2_2023x1042.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1042,&quot;width&quot;:2023,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:79744,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/165714873?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F783fe06a-8309-4300-a60c-583f0984584c_2103x2103.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Bvnh!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3965a0fe-3c67-436b-8013-449c7ea625b2_2023x1042.png 424w, /__u/substackcdn.com/image/fetch/$s_!Bvnh!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3965a0fe-3c67-436b-8013-449c7ea625b2_2023x1042.png 848w, /__u/substackcdn.com/image/fetch/$s_!Bvnh!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3965a0fe-3c67-436b-8013-449c7ea625b2_2023x1042.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Bvnh!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3965a0fe-3c67-436b-8013-449c7ea625b2_2023x1042.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>However, when it comes to structural variants, many more than 1 base-pair is mutated. Here is an IGV screenshot of a 30 base-pair deletion in <em>TP53</em>:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!IAEQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f3b2208-3e0c-4205-8513-49bb091df35f_2025x1037.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!IAEQ!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f3b2208-3e0c-4205-8513-49bb091df35f_2025x1037.png 424w, /__u/substackcdn.com/image/fetch/$s_!IAEQ!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f3b2208-3e0c-4205-8513-49bb091df35f_2025x1037.png 848w, /__u/substackcdn.com/image/fetch/$s_!IAEQ!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f3b2208-3e0c-4205-8513-49bb091df35f_2025x1037.png 1272w, /__u/substackcdn.com/image/fetch/$s_!IAEQ!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f3b2208-3e0c-4205-8513-49bb091df35f_2025x1037.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!IAEQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f3b2208-3e0c-4205-8513-49bb091df35f_2025x1037.png" width="2025" height="1037" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1f3b2208-3e0c-4205-8513-49bb091df35f_2025x1037.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1037,&quot;width&quot;:2025,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:77312,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/165714873?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd23a6ba3-23d8-468d-875f-598c600d4353_2103x2103.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!IAEQ!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f3b2208-3e0c-4205-8513-49bb091df35f_2025x1037.png 424w, /__u/substackcdn.com/image/fetch/$s_!IAEQ!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f3b2208-3e0c-4205-8513-49bb091df35f_2025x1037.png 848w, /__u/substackcdn.com/image/fetch/$s_!IAEQ!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f3b2208-3e0c-4205-8513-49bb091df35f_2025x1037.png 1272w, /__u/substackcdn.com/image/fetch/$s_!IAEQ!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f3b2208-3e0c-4205-8513-49bb091df35f_2025x1037.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>In football, basketball, and baseball, every player keeps their eyes on a single ball - there is just one game piece that drives the actions. As you will see, in bioinformatics however, we often find ourselves chasing many &#8220;balls&#8221; at once.</p><p>If you are a bioinformatician reading this post, you are familiar with the Variant Call Format (VCF) - the widely used standard for representing genomic variants. While the VCF is efficient for storage, comparing a putative variant across different variant callers can reveal just how much room there is for tool-specific quirks in representation. This issue becomes more pronounced with complex events like structural variants. Let&#8217;s take a closer look at an example.</p><p>Here, I have simulated 10 long sequencing reads capturing a somatic deletion (chr17:4,341,674 - chr17:7,677,491) between TP53 and UBE2G1. Additional long reads supporting germline DNA variants (SNVs) were generated for the same genomic positions for both the simulated tumor and matched normal samples. No sequencing errors were introduced to the reads:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!PPC6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb923f6c3-e8d8-4c06-95d7-83afc8a7926c_2085x840.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!PPC6!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb923f6c3-e8d8-4c06-95d7-83afc8a7926c_2085x840.png 424w, /__u/substackcdn.com/image/fetch/$s_!PPC6!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb923f6c3-e8d8-4c06-95d7-83afc8a7926c_2085x840.png 848w, /__u/substackcdn.com/image/fetch/$s_!PPC6!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb923f6c3-e8d8-4c06-95d7-83afc8a7926c_2085x840.png 1272w, /__u/substackcdn.com/image/fetch/$s_!PPC6!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb923f6c3-e8d8-4c06-95d7-83afc8a7926c_2085x840.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!PPC6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb923f6c3-e8d8-4c06-95d7-83afc8a7926c_2085x840.png" width="2085" height="840" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b923f6c3-e8d8-4c06-95d7-83afc8a7926c_2085x840.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:840,&quot;width&quot;:2085,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:111832,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/165714873?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae98e3ab-756d-4d7d-89d4-429797d2699b_2103x2103.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!PPC6!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb923f6c3-e8d8-4c06-95d7-83afc8a7926c_2085x840.png 424w, /__u/substackcdn.com/image/fetch/$s_!PPC6!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb923f6c3-e8d8-4c06-95d7-83afc8a7926c_2085x840.png 848w, /__u/substackcdn.com/image/fetch/$s_!PPC6!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb923f6c3-e8d8-4c06-95d7-83afc8a7926c_2085x840.png 1272w, /__u/substackcdn.com/image/fetch/$s_!PPC6!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb923f6c3-e8d8-4c06-95d7-83afc8a7926c_2085x840.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I ran the following long-read structural variant callers using the tumor and normal samples:</p><ul><li><p>Savana</p></li><li><p>SVIM</p></li><li><p>Severus</p></li><li><p>Sniffles2</p></li><li><p>CuteSV</p></li><li><p>NanomonSV</p></li><li><p>SVision-pro</p></li><li><p>PBSV</p></li><li><p>Dysgu</p></li></ul><p>Here are summarized VCF results from the above tools (Table 1):</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!hifG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93a267e8-9799-42d9-acf3-9f22c57543b6_10738x5555.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!hifG!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93a267e8-9799-42d9-acf3-9f22c57543b6_10738x5555.png 424w, /__u/substackcdn.com/image/fetch/$s_!hifG!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93a267e8-9799-42d9-acf3-9f22c57543b6_10738x5555.png 848w, /__u/substackcdn.com/image/fetch/$s_!hifG!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93a267e8-9799-42d9-acf3-9f22c57543b6_10738x5555.png 1272w, /__u/substackcdn.com/image/fetch/$s_!hifG!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93a267e8-9799-42d9-acf3-9f22c57543b6_10738x5555.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!hifG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93a267e8-9799-42d9-acf3-9f22c57543b6_10738x5555.png" width="1456" height="753" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/93a267e8-9799-42d9-acf3-9f22c57543b6_10738x5555.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:753,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2311317,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/165714873?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93a267e8-9799-42d9-acf3-9f22c57543b6_10738x5555.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!hifG!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93a267e8-9799-42d9-acf3-9f22c57543b6_10738x5555.png 424w, /__u/substackcdn.com/image/fetch/$s_!hifG!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93a267e8-9799-42d9-acf3-9f22c57543b6_10738x5555.png 848w, /__u/substackcdn.com/image/fetch/$s_!hifG!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93a267e8-9799-42d9-acf3-9f22c57543b6_10738x5555.png 1272w, /__u/substackcdn.com/image/fetch/$s_!hifG!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93a267e8-9799-42d9-acf3-9f22c57543b6_10738x5555.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>Table 1.</strong> Summarized VCF results from the long-read structural variant callers. SVision-pro and PBSV did not identify any variant while Dysgu failed to run the simulated samples.</figcaption></figure></div><p>The information highlighted in blue represents details related to the variant type. While Savana and SVIM reported breakpoints, Severus, Sniffles2, CuteSV, and NanomonSV classified the same event as a deletion. Note that in SVIM outputs, the mate breakpoint must be parsed from the ALT column. <strong>These differences are important to underscore because they expose the limitations of using outputs from existing variant callers to trace variants through the central dogma - connecting genomic changes to their transcriptomic and ultimately proteomic consequences.</strong></p><p>The information highlighted in red represents the number of supporting reads, necessary for downstream calculation of cancer cell fraction and clonality. These are important data because personalized immunotherapy may benefit from targeting both clonal and subclonal events. Notice how this information is encoded across three columns (INFO, FORMAT, and TUMOR) in five different ways across the six tools:</p><ol><li><p>TUMOR_READ_SUPPORT</p></li><li><p>SUPPORT</p></li><li><p>DV</p></li><li><p>RE</p></li><li><p>VR</p></li></ol><p>This is not to mention that the lack of standardization in VCF outputs is further obscured by a growing list of complex rearrangement types such as <a href="https://doi.org/10.1016/j.cell.2020.08.006">pyros, rigma</a> and <a href="https://doi.org/10.1101/2024.04.18.590093">various inversion subtypes</a>.</p><p>The problem with the heterogeneity in variant representation is that owing to variations in precision and sensitivity across bioinformatics tools, we often want to identify a union (high sensitivity) set or an intersecting (high precision) set of variants from different methods.</p><h2>4. One Variant, One Representation</h2><p>The large variability in variant representation demonstrates a need for variant representation standardization. Before you yell inside, &#8216;So this is yet another standard?&#8217; please allow me to explain.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!COcH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7998a52-7ba1-49a4-95d0-42bd94139f72_500x283.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!COcH!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7998a52-7ba1-49a4-95d0-42bd94139f72_500x283.png 424w, /__u/substackcdn.com/image/fetch/$s_!COcH!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7998a52-7ba1-49a4-95d0-42bd94139f72_500x283.png 848w, /__u/substackcdn.com/image/fetch/$s_!COcH!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7998a52-7ba1-49a4-95d0-42bd94139f72_500x283.png 1272w, /__u/substackcdn.com/image/fetch/$s_!COcH!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7998a52-7ba1-49a4-95d0-42bd94139f72_500x283.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!COcH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7998a52-7ba1-49a4-95d0-42bd94139f72_500x283.png" width="500" height="283" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b7998a52-7ba1-49a4-95d0-42bd94139f72_500x283.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:283,&quot;width&quot;:500,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Standards&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Standards" title="Standards" srcset="/__u/substackcdn.com/image/fetch/$s_!COcH!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7998a52-7ba1-49a4-95d0-42bd94139f72_500x283.png 424w, /__u/substackcdn.com/image/fetch/$s_!COcH!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7998a52-7ba1-49a4-95d0-42bd94139f72_500x283.png 848w, /__u/substackcdn.com/image/fetch/$s_!COcH!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7998a52-7ba1-49a4-95d0-42bd94139f72_500x283.png 1272w, /__u/substackcdn.com/image/fetch/$s_!COcH!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7998a52-7ba1-49a4-95d0-42bd94139f72_500x283.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Source: <a href="https://imgs.xkcd.com/comics/standards.png">xkcd</a></figcaption></figure></div><h4>Occam&#8217;s Variant Grammar</h4><p>We know that <a href="https://doi.org/10.1038/s41586-023-05896-x">the broader genomics field is moving towards pangenome graph representations</a>. At the core of this graph approach is the fundamental idea that <a href="https://doi.org/10.1093/bib/bbw089">the string representation of the genome can be edited in or out of a reference genome</a>. <strong>Building on this idea, I propose Occam&#8217;s Variant Grammar, a framework in which major DNA variant types are represented in a variation graph using the following set of graph operations:</strong></p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;V_{DNA} = v + e_{in} + e_{out}\n&quot;,&quot;id&quot;:&quot;FEZVTWQAVG&quot;}" data-component-name="LatexBlockToDOM"></div><p>where: </p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;v \\text{ is a variant node that represents the sequence alteration.}&quot;,&quot;id&quot;:&quot;EUKGVCWQIC&quot;}" data-component-name="LatexBlockToDOM"></div><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;e_{in} \\text{ and } e_{out} \\text{ are edges connecting the variant node to the reference backbone.}&quot;,&quot;id&quot;:&quot;MCCEUWTNLF&quot;}" data-component-name="LatexBlockToDOM"></div><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;e_{\\text{in}},\\ e_{\\text{out}} \\in \\{ \\text{Upstream},\\ \\text{Downstream} \\}&quot;,&quot;id&quot;:&quot;MUHUMUVUHR&quot;}" data-component-name="LatexBlockToDOM"></div><h4>Variant Node</h4><p>A variant node can either be an empty sequence (i.e. deletion) or an insertion sequence (i.e. SNV or insertion).</p><h4>Edge Orientations</h4><p>An edge between a variant node and the reference genome backbone can be created in one of the following two orientations:</p><ul><li><p><strong>Upstream</strong> (towards 5&#8217; end in the coding sense of the messenger RNA)</p></li><li><p><strong>Downstream</strong> (towards 3&#8217; end in the coding sense of the messenger RNA)</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!I1BM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3a65683-23af-4cff-8475-c1494ea81b4c_1245x404.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!I1BM!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3a65683-23af-4cff-8475-c1494ea81b4c_1245x404.png 424w, /__u/substackcdn.com/image/fetch/$s_!I1BM!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3a65683-23af-4cff-8475-c1494ea81b4c_1245x404.png 848w, /__u/substackcdn.com/image/fetch/$s_!I1BM!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3a65683-23af-4cff-8475-c1494ea81b4c_1245x404.png 1272w, /__u/substackcdn.com/image/fetch/$s_!I1BM!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3a65683-23af-4cff-8475-c1494ea81b4c_1245x404.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!I1BM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3a65683-23af-4cff-8475-c1494ea81b4c_1245x404.png" width="1245" height="404" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e3a65683-23af-4cff-8475-c1494ea81b4c_1245x404.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:404,&quot;width&quot;:1245,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:38177,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/165714873?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee6eef47-b265-4520-8450-17a82805b8d8_2103x2103.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!I1BM!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3a65683-23af-4cff-8475-c1494ea81b4c_1245x404.png 424w, /__u/substackcdn.com/image/fetch/$s_!I1BM!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3a65683-23af-4cff-8475-c1494ea81b4c_1245x404.png 848w, /__u/substackcdn.com/image/fetch/$s_!I1BM!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3a65683-23af-4cff-8475-c1494ea81b4c_1245x404.png 1272w, /__u/substackcdn.com/image/fetch/$s_!I1BM!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3a65683-23af-4cff-8475-c1494ea81b4c_1245x404.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A DNA variant (i.e. variant node and edge orientations) can be encoded as the following in the Occam&#8217;s Variant Grammar:</p><pre><code><code>dna_variant = {
    chromosome_1:  &lt;reference chromosome&gt;,
    position_1:    &lt;reference position&gt;,
    strand_1:      &lt;reference strand&gt;,
    operation_1:   &lt;upstream OR downstream&gt;,
    chromosome_2:  &lt;reference chromosome&gt;,
    position_2:    &lt;reference position&gt;,
    strand_2:      &lt;reference strand&gt;,
    operation_2:   &lt;upstream OR downstream&gt;,
    sequence:      &lt;variant sequence&gt;
}</code></code></pre><p>where <strong>sequence</strong> represents the variant node while <strong>operation_1</strong> and <strong>operation_2 </strong>represent the edge orientations (upstream or downstream). The reference positions denote where the edges should be created on the reference genome backbone.</p><p>Here&#8217;s a graphical overview of how the Occam&#8217;s Variant Grammar allows us to represent the following major DNA variant types found in cancer:</p><ul><li><p>Circular DNA</p></li><li><p>Deletion</p></li><li><p>Duplication</p></li><li><p>Insertion</p></li><li><p>Inversion</p></li><li><p>Single-nucleotide variant</p></li><li><p>Translocation</p></li><li><p>Viral integration</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!4cB2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc479e4fb-2213-4719-b10f-ff3b5983a33a_1954x2080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!4cB2!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc479e4fb-2213-4719-b10f-ff3b5983a33a_1954x2080.png 424w, /__u/substackcdn.com/image/fetch/$s_!4cB2!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc479e4fb-2213-4719-b10f-ff3b5983a33a_1954x2080.png 848w, /__u/substackcdn.com/image/fetch/$s_!4cB2!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc479e4fb-2213-4719-b10f-ff3b5983a33a_1954x2080.png 1272w, /__u/substackcdn.com/image/fetch/$s_!4cB2!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc479e4fb-2213-4719-b10f-ff3b5983a33a_1954x2080.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!4cB2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc479e4fb-2213-4719-b10f-ff3b5983a33a_1954x2080.png" width="1954" height="2080" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c479e4fb-2213-4719-b10f-ff3b5983a33a_1954x2080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2080,&quot;width&quot;:1954,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:243142,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/165714873?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71eef18f-873a-4876-929a-0a34b22869b3_2103x2103.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!4cB2!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc479e4fb-2213-4719-b10f-ff3b5983a33a_1954x2080.png 424w, /__u/substackcdn.com/image/fetch/$s_!4cB2!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc479e4fb-2213-4719-b10f-ff3b5983a33a_1954x2080.png 848w, /__u/substackcdn.com/image/fetch/$s_!4cB2!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc479e4fb-2213-4719-b10f-ff3b5983a33a_1954x2080.png 1272w, /__u/substackcdn.com/image/fetch/$s_!4cB2!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc479e4fb-2213-4719-b10f-ff3b5983a33a_1954x2080.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Duplication can be thought of as an insertion and in cases where the event is big, it can be captured with breakpoints. The same can be said of circular DNAs.</p><p>Under the Occam&#8217;s Variant Grammar, the aforementioned deletion will be represented as:</p><pre><code><code>dna_variant = {
    chromosome_1:  'chr17',
    position_1:    4341673,
    strand_1:      '*',      // if reads support both strands
    operation_1:   'D',      // downstream (towards 3')
    chromosome_2:  'chr17',
    position_2:    7677492,
    strand_2:      '*',      // if reads support both strands
    operation_2:   'U',      // upstream (towards 5')
    sequence:      ''
}</code></code></pre><p>Note that the denoted reference positions are 4,341,673 and 7,677,492 because the actual (simulated) deletion spans from 4,341,674 (inclusive) to 7,677,491 (inclusive).</p><p>Notably, the proposed grammar improves the variant representation by accurately capturing any hidden or otherwise unaligned insertion sequences between breakpoints. A good example of this is viral integration. A large proportion of ovarian, head, and neck tumors are caused by human papillomavirus (HPV), where after prolonged viral infection, the viral DNA integrates into the human host genome. When the host genome is shattered upon viral DNA integration, <a href="https://doi.org/10.1101/gr.164806.113">random nucleotides have been found to be inserted as part of the integration</a>. However, based on our benchmark study, existing variant callers miss such variant types (data not shown). Given that HPV-positive head and neck tumors may exhibit a low mutational burden, this potentially highlights the low sensitivity in the current therapeutic target discovery processes.</p><p>A tumor genome represented as a graph genome resembles a multiverse where there are many versions of the genome reflecting different combinations of DNA variants (barring sensitive and precise variant phasing). Although we are moving towards a pangenome representation as a field,  I think a linear coordinate system (e.g. hg38) that collapses the variant representation will remain valuable for interpretability of variants from the genome to the proteome for therapeutic development purposes. In this regard, the Occam&#8217;s Variant Grammar serves as a bridge between the graph-based and linear paradigms.</p><h4>Advantages Over VCF 4.4</h4><p>Before we go further, I would like to credit and acknowledge the authors of <a href="https://genome.cshlp.org/content/27/12/2050">GRIDSS</a> for being the first to separate the building blocks of a complex rearrangement event and the interpretation of the building blocks. As the authors noted in their <a href="https://github.com/PapenfussLab/gridss?tab=readme-ov-file#why-are-all-calls-bnd">documentation</a>, this design rationale was in anticipation of the VCF 4.4 update. Compared to VCF 4.4, the Occam&#8217;s Variant Grammar provides three advantages for DNA variant representation:</p><ol><li><p>Unification of major DNA variant type representation into just two atomic operations: <em>add</em> and <em>connect.</em></p></li><li><p>DNA variants are readily compatible for construction of a personalized graph genome.</p></li><li><p>Human-readable yet machine-friendly encoding of orientation and insertion sequences between breakpoints. Knowing this information can be important in making sense of RNA variants in relation to their underlying DNA alterations. While the <a href="https://samtools.github.io/hts-specs/VCFv4.4.pdf#page=22">VCF 4.4 allows for encoding of these attributes</a>, the long documentation (46 pages long) makes it difficult for developers to practice every detail.</p></li></ol><p>Most importantly, as you&#8217;ll see in the next blog post in this series, the real power and value of the Occam&#8217;s Variant Grammar is in its ability to simultaneously represent DNA <em>and</em> RNA variants.</p><h2>5. Automated Variant Standardization</h2><p>To automate the variant grammar standardization effort, I developed <a href="https://github.com/pirl-unc/vstol">VSTOL</a> (Variant Standardization, Tabulation, and Operations Library; pronounced vee-stawl), a Python package with command-line interfaces. VSTOL supports standardization into the Occam&#8217;s Variant Grammar schema for 14 variant callers across both the short- and long-read worlds.</p><p>In the broader data science community, standard formats like CSV (Comma Separated Values) and TSV (Tab Separated Values) are the norm for data analysis because data stored in these formats can be loaded onto memory with a few lines of code. So why not align with what is already familiar and widely supported? VSTOL takes VCF files as inputs and outputs in the TSV format with the following headers:</p><pre><code><code>chromosome_1:  &lt;reference chromosome&gt;,
position_1:    &lt;reference position&gt;,
strand_1:      &lt;forward "+", reverse "-", both "*", unknown ""&gt;,
operation_1:   &lt;upstream "U", downstream "D", unknown ""&gt;,
chromosome_2:  &lt;reference chromosome&gt;,
position_2:    &lt;reference position&gt;,
strand_2:      &lt;forward "+", reverse "-", both "*", unknown ""&gt;,
operation_2:   &lt;upstream "U", downstream "D", unknown ""&gt;,
sequence:      &lt;variant sequence&gt;
read_ids:      &lt;read IDs separated by comma&gt;</code></code></pre><p>Additional annotations such as gene annotations, number of reads supporting reference alleles, and variant allele fractions can be appended as extra columns. Although the column names will vary across tools, the TSV format provides an easier data access.</p><h2>6. In Closing</h2><p>Back in college, I was a part of a racing team. We built our own race car. Before we could realize the designed speed and energy efficiency, we had to set up the tool board with the right instruments. How we equipped it shaped everything that followed. Bioinformatics is no different. For personalized immunotherapy to succeed, how we prepare our &#8220;tool board&#8221; of data representations, computational methods, and workflows matters deeply.</p><p>While the variant representation described here is motivated by cancer immunogenomics, its relevance extends much further. Structural variants are implicated in <a href="https://doi.org/10.1016/j.cell.2015.04.004">germline traits</a> and other illnesses such as <a href="https://doi.org/10.1016/S0092-8674(02)00864-4">HIV/AIDS</a> and <a href="https://doi.org/10.1161/JAHA.124.036499">cardiovascular diseases</a>.</p><p>Stay tuned - there&#8217;s more to come on building our tool board.</p><h2>7. Acknowledgement</h2><p>This work was made possible through the generous support of the <a href="https://jaimeleandrofoundation.org/">Jaime Leandro Foundation</a>, a non-profit foundation committed to brining therapeutic cancer vaccines to patients.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://pirlblog.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Personalized Immunotherapy Research Lab! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Potency of peptide + polyIC-LC +/- montanide vs CpG and mRNA/LNP for vaccination in C57Bl/6 mice.]]></title><description><![CDATA[Experiments here were planned, done, and reported by Jess Alley and Maria Sambade, with assistance from Blake Inabinett]]></description><link>https://pirlblog.substack.com/p/potency-of-peptide-polyic-lc-montanide</link><guid isPermaLink="false">https://pirlblog.substack.com/p/potency-of-peptide-polyic-lc-montanide</guid><dc:creator><![CDATA[Benjamin Vincent]]></dc:creator><pubDate>Wed, 18 Jun 2025 17:24:25 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!856i!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11d60ec0-696b-4b69-b2f1-ce6781cac658_1525x564.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In a <a href="/__u/pirlblog.substack.com/p/an-experiment-comparing-the-potency">prior experiment</a>, we tested multiple vaccine formulations for capacity to elicit T cell responses in C57Bl/6 mice using a MHC class I-restricted murine cytomegalovirus epitope (M57) and an ELISPOT readout for interferon gamma production. We found that CpG (a TLR9 agonist) was the most potent peptide vaccine adjuvant tested, and that mRNA LNP vaccination was as potent as peptide + CpG vaccination. PolyIC (a TLR3 agonist) was less effective than CpG in our study. That result was less useful than we&#8217;d like, however, because the common form of polyIC used in human clinical trials for peptide-based cancer vaccines is augmented by the addition of poly-lysine (<a href="https://en.wikipedia.org/wiki/Poly_ICLC">polyIC-LC</a>). Some trials have also used polyIC-LC plus montanide ISA 51 (a water-in-oil emulsion adjuvant comprising mineral oil and a mannide monooleate surfactant mixed with the antigen peptide).</p><p>We are interested in the performance of vaccine formulations as therapeutic tumor antigen vaccines. To this end, we repeated a subset of our prior experiment adding in peptide + polyIC-LC +/- montanide ISA 51 vaccination as treatment groups (<strong>Figure 1</strong>).</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://pirlblog.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Personalized Immunotherapy Research Lab! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!856i!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11d60ec0-696b-4b69-b2f1-ce6781cac658_1525x564.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!856i!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11d60ec0-696b-4b69-b2f1-ce6781cac658_1525x564.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!856i!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11d60ec0-696b-4b69-b2f1-ce6781cac658_1525x564.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!856i!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11d60ec0-696b-4b69-b2f1-ce6781cac658_1525x564.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!856i!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11d60ec0-696b-4b69-b2f1-ce6781cac658_1525x564.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!856i!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11d60ec0-696b-4b69-b2f1-ce6781cac658_1525x564.jpeg" width="1525" height="564" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/11d60ec0-696b-4b69-b2f1-ce6781cac658_1525x564.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:564,&quot;width&quot;:1525,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:99250,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/166259627?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b4bbc36-afcc-4054-bef4-e2aef7cb1a90_1600x900.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!856i!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11d60ec0-696b-4b69-b2f1-ce6781cac658_1525x564.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!856i!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11d60ec0-696b-4b69-b2f1-ce6781cac658_1525x564.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!856i!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11d60ec0-696b-4b69-b2f1-ce6781cac658_1525x564.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!856i!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11d60ec0-696b-4b69-b2f1-ce6781cac658_1525x564.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>Figure 1: Experimental design.</strong></figcaption></figure></div><p>As in our <a href="/__u/pirlblog.substack.com/p/an-experiment-comparing-the-potency">prior experiment</a>, we gave a priming vaccine dose on day 0, a single boost dose on day 14, and then analyzed splenocytes on day 21 for antigen-specific reactivity by interferon gamma ELISPOT. We chose the polyIC-LC dose based on published work, where 50 &#181;g has been routinely administered intramuscularly (Belnoue et al., 2016; Derouazi et al., 2015; Sultan et al., 2020; Tran et al., 2020; Weng et al., 2023; Zhu et al., 2007). We administered polyIC through two injections per time point in the current experiment (as opposed to a single injection per time point in previous experiments) to enable a direct comparison with polyIC-LC, which must be administered through two injections per time point due to the concentration at which this adjuvant is provided and limits on volumes administered intramuscularly in mice.</p><p>We also determined the montanide (ISA 51) dose based on published work. Although identification of actual ISA 51 doses used in prior peptide vaccination studies is challenging, a dose of 25-100 &#181;L of ISA 51 mixed 1:1 (v/v) with some other diluent (PBS, peptide suspension, or other adjuvant solution) seems to be common in mice, with 50 &#181;L ISA 51 (prior to 1:1 mixing) being the most frequently used dose (Beebe et al., 2008; Chawla et al., 2019; Chu et al., 2022; Gabri et al., 2006; Ghorbani et al., 2005; Rosenthal et al., 2017; Varypataki et al., 2016). In this experiment, we delivered a total of 50 &#181;L ISA 51 (prior to diluting 1:1) at each vaccine time point. In both humans and mice, this adjuvant is commonly administered subcutaneously or intramuscularly (van Doorn et al., 2015). To be consistent with recent clinical trials (Slingluff et al., 2021), we administered ISA 151 subcutaneously after mixing it 1:1 with peptide suspended in poly-ICLC as per manufacturer recommendations. The preparation of this adjuvant is critical to its success, with the syringe-extrusion/ two-syringe technique recommended over vortexing to mix (Koh et al., 2006; van Doorn et al., 2015). In the current study, we used the syringe-extrusion/two-syringe mixing protocol that was obtained from Seppic, the manufacturer.</p><p>In this experiment, peptide + CpG and mRNA vaccination gave similar results (<strong>Figure 2</strong>). Although polyIC-LC may have boosted responses relative to polyIC, there was high variance in the polyIC-LC group, and the difference between polyIC and polyIC-LC was not statistically significant in this small study.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!SgYA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57967912-9c45-461e-8a41-279f1acfea60_876x816.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!SgYA!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57967912-9c45-461e-8a41-279f1acfea60_876x816.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!SgYA!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57967912-9c45-461e-8a41-279f1acfea60_876x816.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!SgYA!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57967912-9c45-461e-8a41-279f1acfea60_876x816.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!SgYA!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57967912-9c45-461e-8a41-279f1acfea60_876x816.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!SgYA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57967912-9c45-461e-8a41-279f1acfea60_876x816.jpeg" width="876" height="816" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/57967912-9c45-461e-8a41-279f1acfea60_876x816.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:816,&quot;width&quot;:876,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:135038,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/166259627?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F007e36f9-ef9d-4b5a-bcd6-2f6d19d753b3_1600x900.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!SgYA!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57967912-9c45-461e-8a41-279f1acfea60_876x816.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!SgYA!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57967912-9c45-461e-8a41-279f1acfea60_876x816.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!SgYA!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57967912-9c45-461e-8a41-279f1acfea60_876x816.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!SgYA!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57967912-9c45-461e-8a41-279f1acfea60_876x816.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>Figure 2: Addition of Montanide did not boost response to a peptide + polyIC-LC vaccine.</strong> Mice (n = 4 per group) were vaccinated as in Figure 1. On day 21, splenocytes were collected and used to assess IFN-&#947; production via ELISpot. Ordinary one-way ANOVAs of IFN-&#947;<sup>+</sup>spot counts (top) and cytokine activity, a score representing the strength of the IFN-&#947; signal in each well, (bottom) revealed significant (p &lt; 0.05) differences between vaccine groups. Significant results of Tukey&#8217;s multiple comparisons are indicated by letters above individual bars. Data are presented as group means with individual values (after technical replicates were averaged and respective background subtracted for each mouse) shown &#177; standard deviation. Any wells containing spots that were too saturated to count were assigned a value of 2000. Left panel shows results of all mice (n = 24) while mice whose cells lacked a strong response to the positive assay control (PHA) due to low viability were excluded in the right panel (n = 18 after exclusion). AU, arbitrary units.</figcaption></figure></div><p>Going forward, we will test more vaccine formulations (more adjuvants and DC vaccines next, hopefully DNA vaccines after that), dose titrations of key formulations, different vaccine schedules (varying prime and boost timing and number of injections), and importantly, we will evaluate vaccination against a set of validated neoantigens (rather than the M57 antigen alone) in tumor-bearing mice. Should these results bear out in future studies, we will pursue peptide + CpG and/or mRNA/LNP vaccination for clinical translation. </p><p>Many thanks to the <a href="https://jaimeleandrofoundation.org/">Jamie Leandro Foundation</a> (a non-profit foundation dedicated to making therapeutic cancer vaccines available to patients) as well as <a href="https://www.natera.com/">Natera</a> for funding this work and supporting making the results available on this platform.</p><p>References:</p><ul><li><p>Arribillaga, L., Echeverria, I., Belsue, V., Gomez, T., Lozano, T., Casares, N., Villanueva, L., Domingos-Pereira, S., Romero, P. J., Nardelli-Haefliger, D., Herv&#225;s-Stubbs, S., Sarobe, P., Rodriguez, M. J., Carrascosa, J. L., Z&#252;rcher, T., &amp; Lasarte, J. J. (2020). <strong>Bivalent therapeutic vaccine against HPV16/18 genotypes consisting of a fusion protein between the extra domain A from human fibronectin and HPV16/18 E7 viral antigens</strong>. <em>Journal for ImmunoTherapy of Cancer</em>, <em>8</em>(1), e000704. https://doi.org/10.1136/jitc-2020-000704</p></li><li><p>Barrios, K., &amp; Celis, E. (2012). <strong>TriVax-HPV: An improved peptide-based therapeutic vaccination strategy against human papillomavirus-induced cancers</strong>. <em>Cancer Immunology, Immunotherapy: CII</em>, <em>61</em>(8), 1307&#8211;1317. https://doi.org/10.1007/s00262-012-1259-8</p></li><li><p>Beebe, M., Qin, M., Moi, M., Wu, S., Heiati, H., Walker, L., Newman, M., Fikes, J., &amp; Ishioka, G. Y. (2008). <strong>Formulation and characterization of a ten-peptide single-vial vaccine EP-2101, designed to induce cytotoxic T-lymphocyte responses for cancer immunotherapy</strong>. <em>Human Vaccines</em>, <em>4</em>(3), 210&#8211;218. https://doi.org/10.4161/hv.4.3.5291</p></li><li><p>Belnoue, E., Di Berardino-Besson, W., Gaertner, H., Carboni, S., Dunand-Sauthier, I., Cerini, F., Suso-Inderberg, E.-M., W&#228;lchli, S., K&#246;nig, S., Salazar, A. M., Hartley, O., Dietrich, P.-Y., Walker, P. R., &amp; Derouazi, M. (2016). <strong>Enhancing Antitumor Immune Responses by Optimized Combinations of Cell-penetrating Peptide-based Vaccines and Adjuvants</strong>. <em>Molecular Therapy</em>, <em>24</em>(9), 1675&#8211;1685. https://doi.org/10.1038/mt.2016.134</p></li><li><p>Cafri, G., Gartner, J. J., Zaks, T., Hopson, K., Levin, N., Paria, B. C., Parkhurst, M. R., Yossef, R., Lowery, F. J., Jafferji, M. S., Prickett, T. D., Goff, S. L., McGowan, C. T., Seitter, S., Shindorf, M. L., Parikh, A., Chatani, P. D., Robbins, P. F., &amp; Rosenberg, S. A. (2020). <strong>mRNA vaccine-induced neoantigen-specific T cell immunity in patients with gastrointestinal cancer</strong>. <em>The Journal of Clinical Investigation</em>, <em>130</em>(11), 5976&#8211;5988. https://doi.org/10.1172/JCI134915</p></li><li><p>Castro Eiro, M. D., Hioki, K., Li, L., Wilmsen, M. E. P., Kiernan, C. H., Brouwers-Haspels, I., van Meurs, M., Zhao, M., de Wit, H., Grashof, D. G. B., van de Werken, H. J. G., Mueller, Y. M., Schliehe, C., Temizoz, B., Kobiyama, K., Ishii, K. J., &amp; Katsikis, P. D. (2023). <strong>TLR9 plus STING Agonist Adjuvant Combination Induces Potent Neopeptide T Cell Immunity and Improves Immune Checkpoint Blockade Efficacy in a Tumor Model</strong>. <em>The Journal of Immunology</em>, <em>212</em>(3), 455&#8211;465. https://doi.org/10.4049/jimmunol.2300038</p></li><li><p>Chawla, B., Mahajan, B., Oakley, M., Majam, V. F., Belmonte, A., Sedegah, M., Shimp, R. L., Kaslow, D. C., &amp; Kumar, S. (2019). <strong>Antibody-Dependent, Gamma Interferon-Independent Sterilizing Immunity Induced by a Subunit Malaria Vaccine</strong>. <em>Infection and Immunity</em>, <em>87</em>(10), e00236-19. https://doi.org/10.1128/IAI.00236-19</p></li><li><p>Chen, J., Ye, Z., Huang, C., Qiu, M., Song, D., Li, Y., &amp; Xu, Q. (2022). Lipid nanoparticle-mediated lymph node&#8211;targeting delivery of mRNA cancer vaccine elicits robust CD8+ T cell response. <em>Proceedings of the National Academy of Sciences of the United States of America</em>, <em>119</em>(34), e2207841119. https://doi.org/10.1073/pnas.2207841119</p></li><li><p>Cho, H.-I., Barrios, K., Lee, Y.-R., Linowski, A. K., &amp; Celis, E. (2013). <strong>BiVax: A peptide/poly-IC subunit vaccine that mimics an acute infection elicits vast and effective anti-tumor CD8 T-cell responses</strong>. <em>Cancer Immunology, Immunotherapy: CII</em>, <em>62</em>(4), 787&#8211;799. https://doi.org/10.1007/s00262-012-1382-6</p></li><li><p>Chu, Y., Qian, L., Ke, Y., Feng, X., Chen, X., Liu, F., Yu, L., Zhang, L., Tao, Y., Xu, R., Wei, J., Liu, B., &amp; Liu, Q. (2022). <strong>Lymph node-targeted neoantigen nanovaccines potentiate anti-tumor immune responses of post-surgical melanoma</strong>. <em>Journal of Nanobiotechnology</em>, <em>20</em>(1), 190. https://doi.org/10.1186/s12951-022-01397-7</p></li><li><p>Derouazi, M., Di Berardino-Besson, W., Belnoue, E., Hoepner, S., Walther, R., Benkhoucha, M., Teta, P., Dufour, Y., Yacoub Maroun, C., Salazar, A. M., Martinvalet, D., Dietrich, P.-Y., &amp; Walker, P. R. (2015). <strong>Novel Cell-Penetrating Peptide-Based Vaccine Induces Robust CD4+ and CD8+ T Cell&#8211;Mediated Antitumor Immunity</strong>. <em>Cancer Research</em>, <em>75</em>(15), 3020&#8211;3031. https://doi.org/10.1158/0008-5472.CAN-14-3017</p></li><li><p>Gabri, M. R., Mazorra, Z., Ripoll, G. V., Mesa, C., Fernandez, L. E., Gomez, D. E., &amp; Alonso, D. F. (2006). <strong>Complete Antitumor Protection by Perioperative Immunization with GM3/VSSP Vaccine in a Preclinical Mouse Melanoma Model</strong>. <em>Clinical Cancer Research</em>, <em>12</em>(23), 7092&#8211;7098. https://doi.org/10.1158/1078-0432.CCR-06-1075</p></li><li><p>Ghorbani, M., Nass, T., Azizi, A., Soare, C., Aucoin, S., Giulivi, A., Anderson, D. E., &amp; Diaz-Mitoma, F. (2005). <strong>Comparison of Antibody- and Cell-Mediated Immune Responses After Intramuscular Hepatitis C Immunizations of BALB/c Mice</strong>. <em>Viral Immunology</em>, <em>18</em>(4), 637&#8211;648. https://doi.org/10.1089/vim.2005.18.637</p></li><li><p>Kim, K. Q., Burgute, B. D., Tzeng, S.-C., Jing, C., Jungers, C., Zhang, J., Yan, L. L., Vierstra, R. D., Djuranovic, S., Evans, B. S., &amp; Zaher, H. S. (2022). <strong>N1-methylpseudouridine found within COVID-19 mRNA vaccines produces faithful protein products</strong>. <em>Cell Reports</em>, <em>40</em>(9), 111300. https://doi.org/10.1016/j.celrep.2022.111300</p></li><li><p>Koh, Y. T., Higgins, S. A., Weber, J. S., &amp; Kast, W. M. (2006). <strong>Immunological consequences of using three different clinical/laboratory techniques of emulsifying peptide-based vaccines in incomplete Freund&#8217;s adjuvant</strong>. <em>Journal of Translational Medicine</em>, <em>4</em>, 42. https://doi.org/10.1186/1479-5876-4-42</p></li><li><p>Liu, J., Lu, X., Li, X., Huang, W., Fang, E., Li, W., Liu, X., Liu, M., Li, J., Li, M., Zhang, Z., Song, H., Ying, B., &amp; Li, Y. (2023). <strong>Construction and immunogenicity of an mRNA vaccine against chikungunya virus</strong>. <em>Frontiers in Immunology</em>, <em>14</em>, 1129118. https://doi.org/10.3389/fimmu.2023.1129118</p></li><li><p>Melssen, M. M., Petroni, G. R., Chianese-Bullock, K. A., Wages, N. A., Grosh, W. W., Varhegyi, N., Smolkin, M. E., Smith, K. T., Galeassi, N. V., Deacon, D. H., Gaughan, E. M., &amp; Slingluff, C. L. (2019). <strong>A multipeptide vaccine plus toll-like receptor agonists LPS or polyICLC in combination with incomplete Freund&#8217;s adjuvant in melanoma patients</strong>. <em>Journal for Immunotherapy of Cancer</em>, <em>7</em>, 163. https://doi.org/10.1186/s40425-019-0625-x</p></li><li><p>Panagioti, E., Redeker, A., van Duikeren, S., Franken, K. L., Drijfhout, J. W., van der Burg, S. H., &amp; Arens, R. (2016). <strong>The Breadth of Synthetic Long Peptide Vaccine-Induced CD8+ T Cell Responses Determines the Efficacy against Mouse Cytomegalovirus Infection</strong>. <em>PLoS Pathogens</em>, <em>12</em>(9), e1005895. https://doi.org/10.1371/journal.ppat.1005895</p></li><li><p>Pavlick, A., Blazquez, A. B., Meseck, M., Lattanzi, M., Ott, P. A., Marron, T. U., Holman, R. M., Mandeli, J., Salazar, A. M., McClain, C. B., Gimenez, G., Balan, S., Gnjatic, S., Sabado, R. L., &amp; Bhardwaj, N. (2020). <strong>Combined Vaccination with NY-ESO-1 Protein, Poly-ICLC, and Montanide Improves Humoral and Cellular Immune Responses in Patients with High-Risk Melanoma</strong>. <em>Cancer Immunology Research</em>, <em>8</em>(1), 70&#8211;80. https://doi.org/10.1158/2326-6066.CIR-19-0545</p></li><li><p>Ramos da Silva, J., Bitencourt Rodrigues, K., Formoso Pelegrin, G., Silva Sales, N., Muramatsu, H., de Oliveira Silva, M., Porchia, B. F. M. M., Moreno, A. C. R., Aps, L. R. M. M., Venceslau-Carvalho, A. A., Tomb&#225;cz, I., Fotoran, W. L., Karik&#243;, K., Lin, P. J. C., Tam, Y. K., de Oliveira Diniz, M., Pardi, N., &amp; de Souza Ferreira, L. C. (2023). <strong>Single immunizations of self-amplifying or non-replicating mRNA-LNP vaccines control HPV-associated tumors in mice</strong>. <em>Science Translational Medicine</em>, <em>15</em>(686), eabn3464. https://doi.org/10.1126/scitranslmed.abn3464</p></li><li><p>Rosenthal, K. S., Stone, S., Koski, G., &amp; Zimmerman, D. H. (2017). LEAPS Vaccine <strong>Incorporating HER-2/neu Epitope Elicits Protection That Prevents and Limits Tumor Growth and Spread of Breast Cancer in a Mouse Model</strong>. <em>Journal of Immunology Research</em>, <em>2017</em>, 3613505. https://doi.org/10.1155/2017/3613505</p></li><li><p>Sabbatini, P., Tsuji, T., Ferran, L., Ritter, E., Sedrak, C., Tuballes, K., Jungbluth, A. A., Ritter, G., Aghajanian, C., Bell-McGuinn, K., Hensley, M. L., Konner, J., Tew, W., Spriggs, D. R., Hoffman, E. W., Venhaus, R., Pan, L., Salazar, A. M., Diefenbach, C. M., &#8230; Gnjatic, S. (2012). <strong>Phase I trial of overlapping long peptides from a tumor self-antigen and poly-ICLC shows rapid induction of integrated immune response in ovarian cancer patients</strong>. <em>Clinical Cancer Research: An Official Journal of the American Association for Cancer Research</em>, <em>18</em>(23), 6497&#8211;6508. https://doi.org/10.1158/1078-0432.CCR-12-2189</p></li><li><p>Schoenmaker, L., Witzigmann, D., Kulkarni, J. A., Verbeke, R., Kersten, G., Jiskoot, W., &amp; Crommelin, D. J. A. (2021). <strong>mRNA-lipid nanoparticle COVID-19 vaccines: Structure and stability</strong>. <em>International Journal of Pharmaceutics</em>, <em>601</em>, 120586. https://doi.org/10.1016/j.ijpharm.2021.120586</p></li><li><p>Slingluff, C. L., Zarour ,Hassane M., Tawbi ,Hussein Abdul-Hassan, Kirkwood ,John M., Postow ,Michael A., Friedlander ,Philip, Devoe ,Craig E., Gaughan ,Elizabeth M., Mauldin ,Ileana S., Olson ,Walter C., Smith ,Kelly T., Macri ,Mary J., Ricciardi ,Toni, Ryan ,Aileen, Venhaus ,Ralph, &amp; and Wolchok, J. D. (2021). <strong>A phase 1 study of NY-ESO-1 vaccine + anti-CTLA4 antibody Ipilimumab (IPI) in patients with unresectable or metastatic melanoma</strong>. <em>OncoImmunology</em>, <em>10</em>(1), 1898105. https://doi.org/10.1080/2162402X.2021.1898105</p></li><li><p>Sultan, H., Kumai, T., Fesenkova, V. I., Fan, A. E., Wu, J., Cho, H.-I., Kobayashi, H., Harabuchi, Y., &amp; Celis, E. (2018). <strong>Sustained Persistence of IL2 Signaling Enhances the Antitumor Effect of Peptide Vaccines through T-cell Expansion and Preventing PD-1 Inhibition</strong>. <em>Cancer Immunology Research</em>, <em>6</em>(5), 617&#8211;627. https://doi.org/10.1158/2326-6066.CIR-17-0549</p></li><li><p>Sultan, H., Wu, J., Fesenkova, V. I., Fan, A. E., Addis, D., Salazar, A. M., &amp; Celis, E. (2020). <strong>Poly-IC enhances the effectiveness of cancer immunotherapy by promoting T cell tumor infiltration</strong>. <em>Journal for ImmunoTherapy of Cancer</em>, <em>8</em>(2), e001224. https://doi.org/10.1136/jitc-2020-001224</p></li><li><p>Tahtinen, S., Tong, A.-J., Himmels, P., Oh, J., Paler-Martinez, A., Kim, L., Wichner, S., Oei, Y., McCarron, M. J., Freund, E. C., Amir, Z. A., de la Cruz, C. C., Haley, B., Blanchette, C., Schartner, J. M., Ye, W., Yadav, M., Sahin, U., Delamarre, L., &amp; Mellman, I. (2022). <strong>IL-1 and IL-1ra are key regulators of the inflammatory response to RNA vaccines</strong>. <em>Nature Immunology</em>, <em>23</em>(4), Article 4. https://doi.org/10.1038/s41590-022-01160-y</p></li><li><p>Temizoz, B., Kuroda, E., Ohata, K., Jounai, N., Ozasa, K., Kobiyama, K., Aoshi, T., &amp; Ishii, K. J. (2015). <strong>TLR9 and STING agonists synergistically induce innate and adaptive type-II IFN</strong>. <em>European Journal of Immunology</em>, <em>45</em>(4), 1159&#8211;1169. https://doi.org/10.1002/eji.201445132</p></li><li><p>Tran, T.-A.-T., Kim, Y.-H., Duong, T.-H.-O., Jung, S., Kim, I.-Y., Moon, K.-S., Jang, W.-Y., Lee, H.-J., Lee, J.-J., &amp; Jung, T.-Y. (2020). <strong>Peptide Vaccine Combined Adjuvants Modulate Anti-tumor Effects of Radiation in Glioblastoma Mouse Model</strong>. <em>Frontiers in Immunology</em>, <em>11</em>. https://doi.org/10.3389/fimmu.2020.01165</p></li><li><p>van Doorn, E., Liu, H., Huckriede, A., &amp; Hak, E. (2015). <strong>Safety and tolerability evaluation of the use of Montanide ISA<sup>TM</sup>51 as vaccine adjuvant: A systematic review</strong>. <em>Human Vaccines &amp; Immunotherapeutics</em>, <em>12</em>(1), 159&#8211;169. https://doi.org/10.1080/21645515.2015.1071455</p></li><li><p>Varypataki, E. M., Silva, A. L., Barnier-Quer, C., Collin, N., Ossendorp, F., &amp; Jiskoot, W. (2016). <strong>Synthetic long peptide-based vaccine formulations for induction of cell mediated immunity: A comparative study of cationic liposomes and PLGA nanoparticles</strong>. <em>Journal of Controlled Release</em>, <em>226</em>, 98&#8211;106. https://doi.org/10.1016/j.jconrel.2016.02.018</p></li><li><p>Weng, M.-T., Yang, S.-F., Liu, S.-Y., Hsu, Y.-C., Wu, M.-C., Chou, H.-C., Chiou, L.-L., Liang, J.-D., Wang, L.-F., Lee, H.-S., &amp; Sheu, J.-C. (2023). <em><strong>In situ</strong></em><strong> vaccination followed by intramuscular poly-ICLC injections for the treatment of hepatocellular carcinoma in mouse models</strong>. <em>Pharmacological Research</em>, <em>188</em>, 106646. https://doi.org/10.1016/j.phrs.2023.106646</p></li><li><p>Xu, K., Lei, W., Kang, B., Yang, H., Wang, Y., Lu, Y., Lv, L., Sun, Y., Zhang, J., Wang, X., Yang, M., Dan, M., &amp; Wu, G. (2023). <strong>A novel mRNA vaccine, SYS6006, against SARS-CoV-2</strong>. <em>Frontiers in Immunology</em>, <em>13</em>. https://www.frontiersin.org/articles/10.3389/fimmu.2022.1051576</p></li><li><p>Yang, J.-X., Tseng, J.-C., Tien, C.-F., Lee, C.-Y., Liu, Y.-L., Lin, J.-J., Tsai, P.-J., Liao, H.-C., Liu, S.-J., Su, Y.-W., Hsu, L.-C., Chen, J.-K., Huang, M.-H., Yu, G.-Y., &amp; Chuang, T.-H. (2023). <strong>TLR9 and STING agonists cooperatively boost the immune response to SARS-CoV-2 RBD vaccine through an increased germinal center B cell response and reshaped T helper responses</strong>. <em>International Journal of Biological Sciences</em>, <em>19</em>(9), 2897&#8211;2913. https://doi.org/10.7150/ijbs.81210</p></li><li><p>Zhu, X., Nishimura, F., Sasaki, K., Fujita, M., Dusak, J. E., Eguchi, J., Fellows-Mayle, W., Storkus, W. J., Walker, P. R., Salazar, A. M., &amp; Okada, H. (2007). <strong>Toll like receptor-3 ligand poly-ICLC promotes the efficacy of peripheral vaccinations with tumor antigen-derived peptide epitopes in murine CNS tumor models</strong>. <em>Journal of Translational Medicine</em>, <em>5</em>(1), 10. https://doi.org/10.1186/1479-5876-5-10</p></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://pirlblog.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Personalized Immunotherapy Research Lab! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Adding to our mRNA lipid nanoparticle characterization techniques]]></title><description><![CDATA[I recently ran a gel retardation assay using the mRNA lipid nanoparticles formulated in our lab, and I share the results below.]]></description><link>https://pirlblog.substack.com/p/adding-to-our-mrna-lipid-nanoparticle</link><guid isPermaLink="false">https://pirlblog.substack.com/p/adding-to-our-mrna-lipid-nanoparticle</guid><dc:creator><![CDATA[Jessica Alley]]></dc:creator><pubDate>Tue, 03 Jun 2025 12:48:14 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!MDmt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d6e39a4-3924-4a6a-a0d0-d69aa5b572c6.tif" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I saw the gel retardation assay in a <a href="https://pubmed.ncbi.nlm.nih.gov/36403209/">couple</a> <a href="https://pubmed.ncbi.nlm.nih.gov/38338667/">papers</a> recently, where the authors used it to assess the structural integrity of mRNA lipid nanoparticle complexes, so I wanted to test it out as a method to further characterize <a href="/__u/pirlblog.substack.com/p/an-experiment-comparing-the-potency">our mRNA lipid nanoparticles</a> (LNPs). Additionally, because it has been suggested that <a href="https://pubmed.ncbi.nlm.nih.gov/39490428/">Tween 20 may be a safer alternative to Triton X-100 in assays that require mRNA release from LNPs</a>, I compared both surfactants in this experiment.</p><p>For the setup, I ran 1 ug of mRNA per lane in a 1% agarose gel containing SYBR Safe stain. Lane 1 contained a DNA ladder (not the best control since double-stranded DNA is expected to move more slowly through the gel than single-stranded mRNA, but hey, sometimes we just use what we have). The mRNA was either free (lanes 2-3) or encapsulated within LNPs (lanes 4-12). The concentration of the free mRNA had previously been determined using a <a href="https://assets.thermofisher.com/TFS-Assets/LSG/manuals/MAN0017501_Qubit_RNA_XR_Assay_Kits_UG.pdf">Qubit assay</a> while the concentration of the encapsulated mRNA had previously been determined using a <a href="https://assets.thermofisher.com/TFS-Assets/LSG/manuals/mp11490.pdf">RiboGreen assay</a>. The encapsulated mRNA was either run alone (lanes 4-6) or after combining with Triton X-100 (lanes 7-9) or Tween 20 (lanes 10-12). Final concentration of either surfactant was 0.5%. Nuclease-free water was used for dilutions, and of course all samples were combined with a loading dye prior to loading in the gel. I ran the gel at 120 V and imaged it under UV illumination at both 20 and 40 min, after which it was begging to be put out of its misery and basically disintegrated. Here is how it looked at both time points:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!MDmt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d6e39a4-3924-4a6a-a0d0-d69aa5b572c6.tif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!MDmt!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d6e39a4-3924-4a6a-a0d0-d69aa5b572c6.tif 424w, /__u/substackcdn.com/image/fetch/$s_!MDmt!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d6e39a4-3924-4a6a-a0d0-d69aa5b572c6.tif 848w, /__u/substackcdn.com/image/fetch/$s_!MDmt!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d6e39a4-3924-4a6a-a0d0-d69aa5b572c6.tif 1272w, /__u/substackcdn.com/image/fetch/$s_!MDmt!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d6e39a4-3924-4a6a-a0d0-d69aa5b572c6.tif 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!MDmt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d6e39a4-3924-4a6a-a0d0-d69aa5b572c6.tif" width="1456" height="630" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2d6e39a4-3924-4a6a-a0d0-d69aa5b572c6.tif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:630,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:535380,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/tiff&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://jessicaalley.substack.com/i/165039131?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d6e39a4-3924-4a6a-a0d0-d69aa5b572c6.tif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!MDmt!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d6e39a4-3924-4a6a-a0d0-d69aa5b572c6.tif 424w, /__u/substackcdn.com/image/fetch/$s_!MDmt!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d6e39a4-3924-4a6a-a0d0-d69aa5b572c6.tif 848w, /__u/substackcdn.com/image/fetch/$s_!MDmt!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d6e39a4-3924-4a6a-a0d0-d69aa5b572c6.tif 1272w, /__u/substackcdn.com/image/fetch/$s_!MDmt!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d6e39a4-3924-4a6a-a0d0-d69aa5b572c6.tif 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Figure 1 &#8211; Gel after running for 20 min.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!qblB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0701786b-e62c-4487-abe9-dcca2896720b.tif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!qblB!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0701786b-e62c-4487-abe9-dcca2896720b.tif 424w, /__u/substackcdn.com/image/fetch/$s_!qblB!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0701786b-e62c-4487-abe9-dcca2896720b.tif 848w, /__u/substackcdn.com/image/fetch/$s_!qblB!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0701786b-e62c-4487-abe9-dcca2896720b.tif 1272w, /__u/substackcdn.com/image/fetch/$s_!qblB!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0701786b-e62c-4487-abe9-dcca2896720b.tif 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!qblB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0701786b-e62c-4487-abe9-dcca2896720b.tif" width="1438" height="756" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0701786b-e62c-4487-abe9-dcca2896720b.tif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:756,&quot;width&quot;:1438,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:660280,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/tiff&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://jessicaalley.substack.com/i/165039131?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0701786b-e62c-4487-abe9-dcca2896720b.tif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!qblB!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0701786b-e62c-4487-abe9-dcca2896720b.tif 424w, /__u/substackcdn.com/image/fetch/$s_!qblB!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0701786b-e62c-4487-abe9-dcca2896720b.tif 848w, /__u/substackcdn.com/image/fetch/$s_!qblB!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0701786b-e62c-4487-abe9-dcca2896720b.tif 1272w, /__u/substackcdn.com/image/fetch/$s_!qblB!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0701786b-e62c-4487-abe9-dcca2896720b.tif 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Figure 2 &#8211; Gel after running for 40 min.</p><p>From the images, we can gather a couple pieces of useful information. First, as a crude sanity check, the loading appears similar across the wells, suggesting concordance across methods of ascertaining mRNA concentration (RiboGreen vs. Qubit assay), which is always a good sign. We can see that the brightest band for mRNA1 appears slightly below the band for mRNA2, which matches what we know about the sizes of each of these constructs: mRNA1 should be 324 nucleotides while mRNA2 should be slightly larger at 399 nucleotides, slowing its movement through the gel just a tad. As expected, the free mRNA quickly migrated down the gel, while the encapsulated mRNA was mostly retained near its entry point close to the loading wells. Some smearing is visible in lanes 4-6, indicating that not all mRNA was retained within the nanoparticles (for reference, the encapsulation efficiency of the three tested batches of nanoparticles by RiboGreen assay was 94-98% immediately following formulation), but there is an obvious decrease in retention with the addition of either Triton X-100 or Tween 20. Although I was rooting for Tween 20, Triton X-100 was clearly better at releasing mRNA from the nanoparticles than its counterpart. Finally, just to address the obvious, I&#8217;m not sure what&#8217;s up with the ladder, but it&#8217;s still possible to make out the expected bands (although, as I described above, this doesn&#8217;t really matter for our purposes).</p><p>This was a crude but cheap and simple way to visualize our mRNA LNPs and the effects of two different surfactants. Along with confirming the presence of encapsulated mRNA, the main takeaway is that, at least for the time being, I will continue to use Triton X-100 to disrupt mRNA LNPs when needed instead of switching to Tween 20. Additionally, some of the batches of LNPs tested here were over two months old, suggesting that they may remain intact longer than we previously suspected, although this likely won&#8217;t change our current approach of using particles that are as &#8220;fresh&#8221; as possible.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://pirlblog.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/pirlblog.substack.com/subscribe"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[An experiment comparing the potency of vaccine formulations in C57BL/6 mice ]]></title><description><![CDATA[Introducing the Optimizing Immunization Strategies for Therapeutic Efficacy and Response (OISTER) project]]></description><link>https://pirlblog.substack.com/p/an-experiment-comparing-the-potency</link><guid isPermaLink="false">https://pirlblog.substack.com/p/an-experiment-comparing-the-potency</guid><dc:creator><![CDATA[Benjamin Vincent]]></dc:creator><pubDate>Fri, 16 May 2025 13:55:34 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!HlnV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1f24f48-cbd0-4dcd-96b8-03d47a31c86b_350x348.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!HlnV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1f24f48-cbd0-4dcd-96b8-03d47a31c86b_350x348.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!HlnV!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1f24f48-cbd0-4dcd-96b8-03d47a31c86b_350x348.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!HlnV!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1f24f48-cbd0-4dcd-96b8-03d47a31c86b_350x348.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!HlnV!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1f24f48-cbd0-4dcd-96b8-03d47a31c86b_350x348.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!HlnV!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1f24f48-cbd0-4dcd-96b8-03d47a31c86b_350x348.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!HlnV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1f24f48-cbd0-4dcd-96b8-03d47a31c86b_350x348.jpeg" width="350" height="348" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a1f24f48-cbd0-4dcd-96b8-03d47a31c86b_350x348.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:348,&quot;width&quot;:350,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:23691,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/163708908?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d26a97a-6c13-4d52-af79-25dfa090371d_1600x900.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!HlnV!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1f24f48-cbd0-4dcd-96b8-03d47a31c86b_350x348.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!HlnV!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1f24f48-cbd0-4dcd-96b8-03d47a31c86b_350x348.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!HlnV!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1f24f48-cbd0-4dcd-96b8-03d47a31c86b_350x348.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!HlnV!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1f24f48-cbd0-4dcd-96b8-03d47a31c86b_350x348.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>One challenge in optimizing cancer vaccines is our incomplete understanding of comparative vaccine potency. To address this, our lab is on a somewhat quixotic journey to benchmark cancer vaccine formulations and dosing schedules using functional readouts of T cell and B cell responses. Amongst a sea of competing formulations in clinical trials and preclinical development (many variations of peptide + adjuvant vaccines, DNA vaccines, mRNA vaccines, dendritic cell vaccines, viral component vaccines, etc.), we want to know which formulations are most immunogenic and why. In an early stab at this, we set up an experiment to vaccinate C57BL/6 mice with a known immunogenic MCMV epitope (M57) formulated as peptide + adjuvant and mRNA vaccines as below:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!v2Dh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2ed9765-af7c-4e31-9919-3eb591c39333_1510x636.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!v2Dh!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2ed9765-af7c-4e31-9919-3eb591c39333_1510x636.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!v2Dh!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2ed9765-af7c-4e31-9919-3eb591c39333_1510x636.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!v2Dh!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2ed9765-af7c-4e31-9919-3eb591c39333_1510x636.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!v2Dh!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2ed9765-af7c-4e31-9919-3eb591c39333_1510x636.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!v2Dh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2ed9765-af7c-4e31-9919-3eb591c39333_1510x636.jpeg" width="1510" height="636" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d2ed9765-af7c-4e31-9919-3eb591c39333_1510x636.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:636,&quot;width&quot;:1510,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:122991,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/163708908?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51e1e828-444b-4a9f-be1e-889ecd0d8284_1600x900.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!v2Dh!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2ed9765-af7c-4e31-9919-3eb591c39333_1510x636.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!v2Dh!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2ed9765-af7c-4e31-9919-3eb591c39333_1510x636.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!v2Dh!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2ed9765-af7c-4e31-9919-3eb591c39333_1510x636.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!v2Dh!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd2ed9765-af7c-4e31-9919-3eb591c39333_1510x636.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Figure 1: Experimental design.</figcaption></figure></div><p>Here we tested poly(I:C), CpG, and montanide (all relatively common vaccine adjuvants), a STING agonist (which we can&#8217;t specify for now given constraints in our MTA with the supplier), and two mRNA vaccine formulations. For each of the mRNA formulations, N1-Methylpseudouridine was substituted for uridine. mRNA 2 included a segment coding for an MHC class I signal peptide as well as the vaccine epitope, whereas mRNA 1 did not. mRNA was carried by lipid nanoparticles that were manufactured in our lab using the Moderna mRNA-1273 lipid mix. All vaccine formulations were given intramuscularly, except the STING agonist which was given subcutaneously. The vaccine schedule was a simple prime and boost design, with a single priming dose given on day 0, a boost dose given on day 14, and splenocytes analyzed for M57-specific T cell responses by interferon gamma ELISpot on day 21. Experiments were done by Maria Sambade and Jess Alley, who <a href="/__u/pirlblog.substack.com/p/adventures-in-mrna-lipid-nanoparticle">wrote about generating the mRNA/LNP vaccines here</a>. Results:</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://pirlblog.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Personalized Immunotherapy Research Lab! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!tUvF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F221cb066-5468-4824-aa19-fa69f7d77cad_526x771.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!tUvF!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F221cb066-5468-4824-aa19-fa69f7d77cad_526x771.png 424w, /__u/substackcdn.com/image/fetch/$s_!tUvF!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F221cb066-5468-4824-aa19-fa69f7d77cad_526x771.png 848w, /__u/substackcdn.com/image/fetch/$s_!tUvF!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F221cb066-5468-4824-aa19-fa69f7d77cad_526x771.png 1272w, /__u/substackcdn.com/image/fetch/$s_!tUvF!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F221cb066-5468-4824-aa19-fa69f7d77cad_526x771.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!tUvF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F221cb066-5468-4824-aa19-fa69f7d77cad_526x771.png" width="526" height="771" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/221cb066-5468-4824-aa19-fa69f7d77cad_526x771.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:771,&quot;width&quot;:526,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:64389,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/163708908?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b40ec9e-86c8-42c1-8300-1dc0dd1f98ca_526x852.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!tUvF!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F221cb066-5468-4824-aa19-fa69f7d77cad_526x771.png 424w, /__u/substackcdn.com/image/fetch/$s_!tUvF!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F221cb066-5468-4824-aa19-fa69f7d77cad_526x771.png 848w, /__u/substackcdn.com/image/fetch/$s_!tUvF!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F221cb066-5468-4824-aa19-fa69f7d77cad_526x771.png 1272w, /__u/substackcdn.com/image/fetch/$s_!tUvF!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F221cb066-5468-4824-aa19-fa69f7d77cad_526x771.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>Figure 2: mRNA lipid nanoparticle (LNP) vaccines performed comparably to or better than peptide vaccines.</strong> Mice (n = 4 per group) were vaccinated with PBS (as a negative control) or against the mouse cytomegalovirus M57 protein antigen (FPACGL<strong>SCLEFWQRV</strong>LQNS, containing a CD8<sup>+</sup> T cell epitope in bold) using peptide or mRNA LNP vaccines as indicated. Both mRNA constructs encoded the same single peptide but mRNA2 included an MHC class I signal peptide. All vaccinations except those containing STING agonist were given intramuscularly. STING agonist was administered subcutaneously through four injections surrounding the site of subcutaneously administered peptide. Groups that received both STING agonist and CpG received 50 &#181;g peptide administered with or in proximity to each administered adjuvant. Vaccines were administered as a day 0 prime with day 14 boost. On day 21, splenocytes were collected and used to assess IFN-&#947; production via ELISpot. Ordinary one-way ANOVAs of IFN-&#947;<sup>+</sup> spot counts (top) and cytokine activity, a score representing the strength of the IFN-&#947; signal in each well, (bottom) revealed significant (p &lt; 0.05) differences between vaccine groups. Significant results of Tukey&#8217;s multiple comparisons are indicated by letters above individual bars. Data are presented as group means with individual values (after technical replicates were averaged and respective background subtracted for each mouse) shown &#177; standard deviation. Two mice whose cells lacked a response to the positive assay control (PHA) due to low viability were excluded (n = 3-4 per group after exclusion). AU, arbitrary units</figcaption></figure></div><p>CpG performed best out of the adjuvants tested for peptide vaccines, however mRNA/LNP vaccines may have performed best overall. We will need to repeat this experiment with more animals per group and test other functional readouts along with interferon gamma secretion to be sure. Notably, poly(I:C) and montanide both performed rather poorly here. Most human clinical trials that use poly(I:C) actually use poly(I:C)-LC (Hiltonol)<em>,</em> a poly(I:C) variant that is augmented by addition of polylysine. We need to test poly(I:C)-LC in future comparisons for translational relevance. We tested the STING agonist only with CpG here because (1) we had a limited amount of it, and (2) we had seen in prior experiments that CpG was a better adjuvant than poly(I:C) in this system.</p><p>Going forward, we plan to test other vaccine formulations (more adjuvants and DC vaccines next, hopefully DNA vaccines after that), different vaccine schedules (varying prime and boost timing and number of injections), and a set of validated neoantigens (rather than the M57 antigen alone) in tumor-bearing mice. We will continue to post results of these experiments here, and we hope this will be useful to the cancer vaccine community as we all try to figure out what are the best formulations to take to clinical trials.</p><p>A critical variable not addressed here is how to best do tumor antigen selection. Vaccine immunogenicity is irrelevant if the vaccine antigens are not presented by the tumor cells (just like antigen selection is irrelevant if vaccine immunogenicity is poor). More to come on that in future posts&#8230;</p><p>Many thanks to <a href="https://www.natera.com">Natera</a> for providing funding for this work along with <a href="https://jaimeleandrofoundation.org/">Jamie Leandro Foundation</a> (JLF), a non-profit foundation dedicated to making therapeutic cancer vaccines available for patients who could benefit from them. Thanks to both Natera and JLF for supporting publication of these results on Substack rather waiting for a &#8220;complete story&#8221; to emerge and be published as a preprint or peer-reviewed article.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://pirlblog.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Personalized Immunotherapy Research Lab! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Hunting for Immunotherapy Targets in NUT Carcinoma]]></title><description><![CDATA[Recurrent PRAME Expression Reveals a New Therapeutic Vulnerability]]></description><link>https://pirlblog.substack.com/p/hunting-for-immunotherapy-targets</link><guid isPermaLink="false">https://pirlblog.substack.com/p/hunting-for-immunotherapy-targets</guid><dc:creator><![CDATA[Sara Peterson]]></dc:creator><pubDate>Wed, 07 May 2025 21:07:12 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Jgmn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1856297-edb1-41f3-ba6b-7facf5db42de_577x374.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>NUT Carcinoma</strong> (NC) is a rare and incredibly aggressive cancer with <strong>limited, low-efficacy treatment options</strong>. You&#8217;ve probably never heard of it &#8212; unless, of course, you read our lab's earlier blog <a href="/__u/pirlblog.substack.com/p/impressions-from-a-nut-carcinoma">post</a> about it. In case you're not a long-time subscriber (better late than never!), I'll give you a quick background before diving into some exciting new work we just shared as a <a href="https://www.biorxiv.org/content/10.1101/2025.03.07.642090v1">preprint</a> on bioRxiv.</p><p>NC was first discovered in <a href="https://pubmed.ncbi.nlm.nih.gov/12543779/">2003</a> by Dr. Christopher French, who has since led much of the research in this small but active field. NC is what's known as an <strong>epigenetically modulated fusion-driven cancer</strong>. That&#8217;s a lot of scientific jargon, so let&#8217;s break it down.</p><p>First, NC arises from a <strong>chromosomal translocation</strong>: a swap between parts of two chromosomes that fuses two genes together. The 5' partner is always <em><strong>NUTM1</strong></em>, a gene normally silent in most cells. The 3' partner is most often <em><strong>BRD4</strong></em><strong>, but sometimes </strong><em><strong>BRD3</strong></em><strong>, </strong><em><strong>NSD3</strong></em>, or other rare partners. Interestingly, <em>BRD4</em> and <em>BRD3</em> are nearly identical, and <em>NSD3</em> has been shown to work through <em>BRD4</em> &#8212; suggesting that, no matter the fusion partner, the <strong><a href="https://www.nature.com/articles/s41571-025-00986-3">BRD4::NUTM1 pathway drives oncogenesis</a></strong>.</p><p>That&#8217;s the "fusion" part. What about <strong>epigenetic modulation</strong>?</p><p>Epigenetics refers to molecular changes that alter gene expression without requiring modifications to the DNA sequence. One major contributor driving epigenetic changes is <strong>transcription factors</strong>, proteins that bind DNA and regulate gene transcription. In NC, the <strong>fusion protein BRD4::NUTM1 acts as a transcription factor</strong>. Normally, BRD4 binds acetylated DNA without causing trouble. However, in the case of NC, it brings along an unwanted partner: NUTM1. NUTM1 recruits p300, a histone acetyltransferase, leading to <strong>extensive acetylation</strong> through a feed forward loop. This creates huge stretches of <strong>hyperacetylated, open chromatin</strong>,<strong> driving uncontrolled gene activation and ultimately, cancer</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Jgmn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1856297-edb1-41f3-ba6b-7facf5db42de_577x374.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Jgmn!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1856297-edb1-41f3-ba6b-7facf5db42de_577x374.png 424w, /__u/substackcdn.com/image/fetch/$s_!Jgmn!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1856297-edb1-41f3-ba6b-7facf5db42de_577x374.png 848w, /__u/substackcdn.com/image/fetch/$s_!Jgmn!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1856297-edb1-41f3-ba6b-7facf5db42de_577x374.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Jgmn!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1856297-edb1-41f3-ba6b-7facf5db42de_577x374.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Jgmn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1856297-edb1-41f3-ba6b-7facf5db42de_577x374.png" width="439" height="284.5511265164645" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c1856297-edb1-41f3-ba6b-7facf5db42de_577x374.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:374,&quot;width&quot;:577,&quot;resizeWidth&quot;:439,&quot;bytes&quot;:92910,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/163085564?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1856297-edb1-41f3-ba6b-7facf5db42de_577x374.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Jgmn!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1856297-edb1-41f3-ba6b-7facf5db42de_577x374.png 424w, /__u/substackcdn.com/image/fetch/$s_!Jgmn!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1856297-edb1-41f3-ba6b-7facf5db42de_577x374.png 848w, /__u/substackcdn.com/image/fetch/$s_!Jgmn!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1856297-edb1-41f3-ba6b-7facf5db42de_577x374.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Jgmn!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1856297-edb1-41f3-ba6b-7facf5db42de_577x374.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Luo, J., Bishop, J.A., DuBois, S.G. <em>et al. Nat Rev Clin Oncol</em><strong> </strong><em><strong>22</strong>, 292&#8211;306 (2025)</em></p><p>Recent work has revealed an important nuance in the field of NC research &#8211; <strong>not all </strong><em><strong>NUTM1</strong></em><strong> fusions are considered NC</strong>, as some give rise to other cancers. While it might sound like academic hairsplitting, distinguishing between <em>NUTM1</em>-rearranged NC and other <em>NUTM1</em>-rearranged cancers has <strong>real clinical implications</strong>, particularly for diagnosis and treatment. In the same way breast cancer treatments are <a href="https://www.cancerbiomed.org/content/21/9/731">tailored</a> based on molecular markers like ER/PR and HER2 status, a biology-first approach in NC could lead to better outcomes.</p><p><strong>In summary so far</strong>:</p><ul><li><p>NC is primarily driven by BRD4::NUTM1 fusion, causing massive transcriptional dysregulation.</p></li><li><p>Not all <em>NUTM1</em> fusions are NC.</p></li><li><p>Molecular characterization could improve treatment strategies.</p></li></ul><p>This is where our lab steps in. As an <strong>immunotherapy-focused group</strong>, we're on the hunt for <strong>cancer associated antigens</strong> &#8212; targets for therapies that can direct the immune system to selectively attack tumors.</p><p>Given the transcriptional dysregulation caused by BRD4::NUTM1, there are likely to be <strong>upregulated genes that result in therapeutics targets</strong>. An ideal target would be highly tumor-specific and broadly expressed across patients.</p><p>We&#8217;ve taken a particular interest in <strong>Cancer-Testis Antigens</strong> (<a href="https://en.wikipedia.org/wiki/Cancer/testis_antigens">CTAs</a>). These are proteins normally restricted to germline tissues like the testis, fetal ovary, or placenta, and are usually absent from adult somatic tissues. Their expression in cancer is epigenetically regulated, mainly through DNA hypomethylation and histone modification. In short, <strong>CTAs fit our profile: tumor associated and likely to be broadly expressed </strong>since CTA epitopes can be presented by various HLA alleles.</p><p>This brings us to our latest preprint:</p><p>We systematically characterized <strong>CTA expression in five NC cell lines and a patient-derived xenograft (PDX) model</strong>, aiming to find consistently expressed CTAs that could be viable immunotherapy targets.</p><p>Using bulk RNA-seq, we found that <strong>out of 164 known CTAs, 14 were expressed in one or more samples</strong>. Some, like <em><a href="https://pmc.ncbi.nlm.nih.gov/articles/PMC9723985/">CT83</a></em> (an early diagnostic marker candidate in gastric cancers) and <em><a href="https://pubmed.ncbi.nlm.nih.gov/30185546/">HORMAD1</a></em> (linked to lung cancer progression), were expressed in just 1&#8211;2 samples. More promisingly, <em><a href="https://pmc.ncbi.nlm.nih.gov/articles/PMC9588667/">PRAME</a></em> was highly expressed in 4 out of 5 NC cell lines. (One cell line, TC-797, showed no <em>PRAME</em> expression across multiple replicates.) We don&#8217;t yet understand why one cell line lacks PRAME expression, but we have plans to follow up on this in future work. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!sqos!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F744f1c1e-7538-4f21-b9ad-e958b0eef1cb_796x351.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!sqos!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F744f1c1e-7538-4f21-b9ad-e958b0eef1cb_796x351.png 424w, /__u/substackcdn.com/image/fetch/$s_!sqos!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F744f1c1e-7538-4f21-b9ad-e958b0eef1cb_796x351.png 848w, /__u/substackcdn.com/image/fetch/$s_!sqos!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F744f1c1e-7538-4f21-b9ad-e958b0eef1cb_796x351.png 1272w, /__u/substackcdn.com/image/fetch/$s_!sqos!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F744f1c1e-7538-4f21-b9ad-e958b0eef1cb_796x351.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!sqos!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F744f1c1e-7538-4f21-b9ad-e958b0eef1cb_796x351.png" width="598" height="263.69095477386935" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/744f1c1e-7538-4f21-b9ad-e958b0eef1cb_796x351.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:351,&quot;width&quot;:796,&quot;resizeWidth&quot;:598,&quot;bytes&quot;:62830,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/163085564?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F744f1c1e-7538-4f21-b9ad-e958b0eef1cb_796x351.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!sqos!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F744f1c1e-7538-4f21-b9ad-e958b0eef1cb_796x351.png 424w, /__u/substackcdn.com/image/fetch/$s_!sqos!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F744f1c1e-7538-4f21-b9ad-e958b0eef1cb_796x351.png 848w, /__u/substackcdn.com/image/fetch/$s_!sqos!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F744f1c1e-7538-4f21-b9ad-e958b0eef1cb_796x351.png 1272w, /__u/substackcdn.com/image/fetch/$s_!sqos!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F744f1c1e-7538-4f21-b9ad-e958b0eef1cb_796x351.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>BUT, and this is a big but in my humble opinion, <strong>RNA expression is just part of the story</strong>. For an immunotherapy to work, a protein must not only be expressed but also <strong>processed and presented</strong> on the cell surface via the Major Histocompatibility Complex (MHC).</p><p>Here&#8217;s a simplified overview of <strong>antigen presentation</strong> written out as steps:</p><ol><li><p>Genes are <strong>transcribed</strong> into mRNA.</p></li><li><p>mRNAs are translated into proteins.</p></li><li><p>Proteins are <strong>degraded</strong> into small peptides (8&#8211;11 amino acids).</p></li><li><p>Peptides are loaded onto <strong>MHC molecules</strong> and transported to the cell surface.</p></li><li><p><strong>T cells recognize these peptides</strong>, distinguishing normal cells from tumor cells.</p></li></ol><p>And that same process turned into a visualization for my visual thinkers/learners. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!rqP6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa9dfc21-a3a0-434c-9553-025cd8f8fe89_478x673.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!rqP6!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa9dfc21-a3a0-434c-9553-025cd8f8fe89_478x673.png 424w, /__u/substackcdn.com/image/fetch/$s_!rqP6!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa9dfc21-a3a0-434c-9553-025cd8f8fe89_478x673.png 848w, /__u/substackcdn.com/image/fetch/$s_!rqP6!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa9dfc21-a3a0-434c-9553-025cd8f8fe89_478x673.png 1272w, /__u/substackcdn.com/image/fetch/$s_!rqP6!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa9dfc21-a3a0-434c-9553-025cd8f8fe89_478x673.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!rqP6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa9dfc21-a3a0-434c-9553-025cd8f8fe89_478x673.png" width="254" height="357.6192468619247" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/aa9dfc21-a3a0-434c-9553-025cd8f8fe89_478x673.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:673,&quot;width&quot;:478,&quot;resizeWidth&quot;:254,&quot;bytes&quot;:93535,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/163085564?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa9dfc21-a3a0-434c-9553-025cd8f8fe89_478x673.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!rqP6!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa9dfc21-a3a0-434c-9553-025cd8f8fe89_478x673.png 424w, /__u/substackcdn.com/image/fetch/$s_!rqP6!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa9dfc21-a3a0-434c-9553-025cd8f8fe89_478x673.png 848w, /__u/substackcdn.com/image/fetch/$s_!rqP6!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa9dfc21-a3a0-434c-9553-025cd8f8fe89_478x673.png 1272w, /__u/substackcdn.com/image/fetch/$s_!rqP6!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa9dfc21-a3a0-434c-9553-025cd8f8fe89_478x673.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Note: Figure made with <a href="https://www.biorender.com/">bioRender</a></p><p>To see if our CTAs, especially PRAME, made it to the cell surface, we turned to <a href="https://www.thermofisher.com/us/en/home/industrial/mass-spectrometry/mass-spectrometry-learning-center/mass-spectrometry-applications-area/immunopeptidomics.html">immunopeptidomics</a> &#8212; <strong>isolating MHC-bound peptides and analyzing them via LC-MS/MS.</strong></p><p>We performed immunopeptidomics on the same five NC cell lines and PDX model. Excitingly, we found <strong>abundant PRAME-derived peptides</strong> &#8212; but only in <em>PRAME</em>-expressing cell lines. (No PRAME peptides in TC-797, matching RNA-seq results.)</p><p>Among the peptides we detected was SLLQHLIGL, a PRAME epitope currently targeted in clinical trials!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!UqGf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cd17cba-9a86-4bff-a92d-7219f80e17bb_683x384.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!UqGf!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cd17cba-9a86-4bff-a92d-7219f80e17bb_683x384.png 424w, /__u/substackcdn.com/image/fetch/$s_!UqGf!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cd17cba-9a86-4bff-a92d-7219f80e17bb_683x384.png 848w, /__u/substackcdn.com/image/fetch/$s_!UqGf!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cd17cba-9a86-4bff-a92d-7219f80e17bb_683x384.png 1272w, /__u/substackcdn.com/image/fetch/$s_!UqGf!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cd17cba-9a86-4bff-a92d-7219f80e17bb_683x384.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!UqGf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cd17cba-9a86-4bff-a92d-7219f80e17bb_683x384.png" width="491" height="276.0527086383602" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1cd17cba-9a86-4bff-a92d-7219f80e17bb_683x384.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:384,&quot;width&quot;:683,&quot;resizeWidth&quot;:491,&quot;bytes&quot;:97778,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/163085564?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cd17cba-9a86-4bff-a92d-7219f80e17bb_683x384.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!UqGf!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cd17cba-9a86-4bff-a92d-7219f80e17bb_683x384.png 424w, /__u/substackcdn.com/image/fetch/$s_!UqGf!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cd17cba-9a86-4bff-a92d-7219f80e17bb_683x384.png 848w, /__u/substackcdn.com/image/fetch/$s_!UqGf!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cd17cba-9a86-4bff-a92d-7219f80e17bb_683x384.png 1272w, /__u/substackcdn.com/image/fetch/$s_!UqGf!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cd17cba-9a86-4bff-a92d-7219f80e17bb_683x384.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>An interesting aside on this result is the MAGE-A1 epitope found on 3 of the samples. This is both confusing and interesting because we see no expression of MAGE-A1 in any of the samples at the RNA level, yet, we see it is the most recurrent peptide. MAGE-A1 is a promising target because it is implicated in a host of other cancers, and there is active research toward developing vaccines/therapies. Got thoughts on this? Feel free to share them!</p><p>Building on this, our collaborators in the <a href="https://klab.web.unc.edu/">Kuhlman lab</a> at UNC have developed a <strong>bispecific T cell engager</strong> (BiTE) targeting the <strong>PRAME epitope SLLQHLIGL</strong>. BiTEs are engineered proteins with one arm binding T cells and the other binding tumor antigens, <strong>helping T cells kill tumor cells by placing them in prolonged proximity.</strong></p><p>When we co-cultured T cells with PRAME+ NC cell lines (10-15 and 14169) and added the PRAME BiTE, we saw <strong>tumor cell killing at a 5:1 effector:target (E:T) ratio</strong>. In contrast, the <em>PRAME</em>-null (TC-797) and an HLA-mismatched line (H460) showed no response. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!BVZL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22a465a0-29c0-4108-ba79-4deb59d9baba_693x464.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!BVZL!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22a465a0-29c0-4108-ba79-4deb59d9baba_693x464.png 424w, /__u/substackcdn.com/image/fetch/$s_!BVZL!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22a465a0-29c0-4108-ba79-4deb59d9baba_693x464.png 848w, /__u/substackcdn.com/image/fetch/$s_!BVZL!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22a465a0-29c0-4108-ba79-4deb59d9baba_693x464.png 1272w, /__u/substackcdn.com/image/fetch/$s_!BVZL!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22a465a0-29c0-4108-ba79-4deb59d9baba_693x464.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!BVZL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22a465a0-29c0-4108-ba79-4deb59d9baba_693x464.png" width="527" height="352.85425685425685" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/22a465a0-29c0-4108-ba79-4deb59d9baba_693x464.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:464,&quot;width&quot;:693,&quot;resizeWidth&quot;:527,&quot;bytes&quot;:96521,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/163085564?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22a465a0-29c0-4108-ba79-4deb59d9baba_693x464.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!BVZL!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22a465a0-29c0-4108-ba79-4deb59d9baba_693x464.png 424w, /__u/substackcdn.com/image/fetch/$s_!BVZL!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22a465a0-29c0-4108-ba79-4deb59d9baba_693x464.png 848w, /__u/substackcdn.com/image/fetch/$s_!BVZL!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22a465a0-29c0-4108-ba79-4deb59d9baba_693x464.png 1272w, /__u/substackcdn.com/image/fetch/$s_!BVZL!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22a465a0-29c0-4108-ba79-4deb59d9baba_693x464.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>We have shown that in 2D cell culture, we can <strong>detect an expressed and presented CTA</strong>, PRAME, and, using a BiTE, <strong>effectively kill PRAME-positive tumor cells</strong>.</p><p>The next step? Expanding to a <strong>patient cohort</strong> to validate <em>PRAME</em> expression.</p><p>To do this, we partnered with <a href="https://www.tempus.com/?srsltid=AfmBOop8N6IzGU5s_TAS7XH3EywkWZAK30uaujmqHqo4tBHVor4MFZNo">Tempus AI</a> to access CTA expression data from a cohort of <strong>165 patient samples containing a </strong><em><strong>NUTM1</strong></em><strong> fusion</strong>. In line with our earlier discussion on NUTM1-rearranged NC and other <em>NUTM1</em>-rearranged cancers, we stratified our cohort accordingly.</p><p>To our excitement, we observed that <strong>PRAME is abundantly and highly expressed across the cohort</strong>. Samples with <strong>high PRAME expression were statistically enriched in </strong><em><strong>BRD4::NUTM1</strong></em><strong> fusions</strong> (fisher exact, p&lt;0.001). Samples with <em>BRD3::NUTM1</em> and <em>NSD3::NUTM1</em> fusions&#8212;also canonical NC fusions&#8212;also exhibited higher PRAME levels compared to non-NC NUTM1 samples.</p><p>The presence of high PRAME expression in some non-NC samples is not surprising. <strong>PRAME has been implicated in multiple other <a href="https://pmc.ncbi.nlm.nih.gov/articles/PMC9588667/">cancers</a></strong>, and it is possible that in some cases, although a <em>NUTM1</em> fusion is present, it is not the dominant driver of the cancer, or that the cancer itself intrinsically upregulates PRAME.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!vtOK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29eac51d-d255-43ad-ad63-0e50c8d92e46_1503x660.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!vtOK!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29eac51d-d255-43ad-ad63-0e50c8d92e46_1503x660.png 424w, /__u/substackcdn.com/image/fetch/$s_!vtOK!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29eac51d-d255-43ad-ad63-0e50c8d92e46_1503x660.png 848w, /__u/substackcdn.com/image/fetch/$s_!vtOK!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29eac51d-d255-43ad-ad63-0e50c8d92e46_1503x660.png 1272w, /__u/substackcdn.com/image/fetch/$s_!vtOK!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29eac51d-d255-43ad-ad63-0e50c8d92e46_1503x660.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!vtOK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29eac51d-d255-43ad-ad63-0e50c8d92e46_1503x660.png" width="640" height="280.8791208791209" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/29eac51d-d255-43ad-ad63-0e50c8d92e46_1503x660.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:639,&quot;width&quot;:1456,&quot;resizeWidth&quot;:640,&quot;bytes&quot;:132609,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/163085564?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29eac51d-d255-43ad-ad63-0e50c8d92e46_1503x660.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!vtOK!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29eac51d-d255-43ad-ad63-0e50c8d92e46_1503x660.png 424w, /__u/substackcdn.com/image/fetch/$s_!vtOK!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29eac51d-d255-43ad-ad63-0e50c8d92e46_1503x660.png 848w, /__u/substackcdn.com/image/fetch/$s_!vtOK!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29eac51d-d255-43ad-ad63-0e50c8d92e46_1503x660.png 1272w, /__u/substackcdn.com/image/fetch/$s_!vtOK!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29eac51d-d255-43ad-ad63-0e50c8d92e46_1503x660.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Collaboration with Dr. Chris French enabled us to<strong> confirm PRAME protein expression via immunohistochemistry</strong> (IHC) staining on a tissue microarray (TMA) (details of the microarray can be found in a previous publication <a href="https://aacrjournals.org/cancerres/article/83/23/3956/730141/EZH2-Cooperates-with-BRD4-NUT-to-Drive-NUT">here</a>) comprised of 77 patient samples. Encouragingly, about<strong> half of the patients expressed PRAME in at least 25% </strong>of their tumor cells, giving us more confidence that <strong>PRAME epitopes are presented broadly in clinical samples</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!IMq3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F531124d5-f4ad-4b86-8906-fc7ed8937fbf_659x385.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!IMq3!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F531124d5-f4ad-4b86-8906-fc7ed8937fbf_659x385.png 424w, /__u/substackcdn.com/image/fetch/$s_!IMq3!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F531124d5-f4ad-4b86-8906-fc7ed8937fbf_659x385.png 848w, /__u/substackcdn.com/image/fetch/$s_!IMq3!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F531124d5-f4ad-4b86-8906-fc7ed8937fbf_659x385.png 1272w, /__u/substackcdn.com/image/fetch/$s_!IMq3!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F531124d5-f4ad-4b86-8906-fc7ed8937fbf_659x385.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!IMq3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F531124d5-f4ad-4b86-8906-fc7ed8937fbf_659x385.png" width="381" height="222.58725341426404" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/531124d5-f4ad-4b86-8906-fc7ed8937fbf_659x385.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:385,&quot;width&quot;:659,&quot;resizeWidth&quot;:381,&quot;bytes&quot;:52274,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/163085564?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F531124d5-f4ad-4b86-8906-fc7ed8937fbf_659x385.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!IMq3!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F531124d5-f4ad-4b86-8906-fc7ed8937fbf_659x385.png 424w, /__u/substackcdn.com/image/fetch/$s_!IMq3!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F531124d5-f4ad-4b86-8906-fc7ed8937fbf_659x385.png 848w, /__u/substackcdn.com/image/fetch/$s_!IMq3!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F531124d5-f4ad-4b86-8906-fc7ed8937fbf_659x385.png 1272w, /__u/substackcdn.com/image/fetch/$s_!IMq3!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F531124d5-f4ad-4b86-8906-fc7ed8937fbf_659x385.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>From this blog post, we hope we have shown that PRAME is highly and recurrently expressed in both cell lines and patient samples, opening the door for <strong>NC patients to be considered for ongoing PRAME-targeted therapeutic clinical trials</strong>.</p><p>If you&#8217;d like to learn more about PRAME in NC, check out our <a href="https://www.biorxiv.org/content/10.1101/2025.03.07.642090v1">preprint</a> at <em>bioRxiv </em>or look at our analysis via our <a href="https://github.com/pirl-unc/PRAME_in_NUT_Carcinoma/tree/main">GitHub</a>. Also, are you a researcher working on NUT Carcinoma? We&#8217;d love to connect and/or collaborate!</p><p>We would also like to thank the Brown family, the Victor Family Foundation, and the Max Vincze Foundation for their encouragement and support. Though a small field, we are mighty, and we are supported by incredible families and foundations. We could not do what we do without them, so thank you! Additionally, if you are a patient or a family member of a someone affected by NC, please visit the <a href="https://nc-registry.org/">International NUT Carcinoma Registry</a> for more information on the disease and clinical trial listings. </p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://pirlblog.substack.com/p/hunting-for-immunotherapy-targets?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Personalized Immunotherapy Research Lab! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://pirlblog.substack.com/p/hunting-for-immunotherapy-targets?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/pirlblog.substack.com/p/hunting-for-immunotherapy-targets?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share</span></a></p></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://pirlblog.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Personalized Immunotherapy Research Lab! Subscribe for free to receive new posts and support our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Three Axes of Innovation in Personalized Cancer Vaccines]]></title><description><![CDATA[The personalized cancer vaccine field had its first true clinical success with the KEYNOTE-942 study, where patients with resected melanoma were treated with Merck&#8217;s PD-1 inhibitor pembrolizumab (Keytruda) with or without Moderna&#8217;s mRNA/LNP personalized vaccine product (mRNA-4157).]]></description><link>https://pirlblog.substack.com/p/three-axes-of-innovation-in-personalized</link><guid isPermaLink="false">https://pirlblog.substack.com/p/three-axes-of-innovation-in-personalized</guid><dc:creator><![CDATA[Benjamin Vincent]]></dc:creator><pubDate>Sat, 03 May 2025 19:52:11 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!QKhC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1afb0dce-80e1-47ff-b9b3-43865872ce3e_1221x824.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The personalized cancer vaccine field had its first true clinical success with the <a href="https://pubmed.ncbi.nlm.nih.gov/38246194/">KEYNOTE-942 study</a>, where patients with resected melanoma were treated with Merck&#8217;s PD-1 inhibitor pembrolizumab (Keytruda) with or without Moderna&#8217;s mRNA/LNP personalized vaccine product (mRNA-4157). Recurrence free survival at 18 months was 79% in the mRNA-4157 + pembrolizumab group versus 62% in the pembrolizumab-only group (<em>p = </em>0.053 by stratified log-rank test). This was a solid single, not a home run. The effect size for RFS benefit was small (and <em>p-</em>value purists would say not statistically significant), melanoma is one of the most immunogenic tumor types, and the vaccine was given to patients with minimal disease burden at the time of treatment (i.e., after surgical resection of the tumor). A similar trial using the BioNTech mRNA vaccine formulation seems to have <a href="https://www.oncologypipeline.com/apexonco/biontech-loses-skin-neoantigen-game">failed to meet its primary endpoint</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!QKhC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1afb0dce-80e1-47ff-b9b3-43865872ce3e_1221x824.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!QKhC!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1afb0dce-80e1-47ff-b9b3-43865872ce3e_1221x824.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!QKhC!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1afb0dce-80e1-47ff-b9b3-43865872ce3e_1221x824.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!QKhC!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1afb0dce-80e1-47ff-b9b3-43865872ce3e_1221x824.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!QKhC!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1afb0dce-80e1-47ff-b9b3-43865872ce3e_1221x824.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!QKhC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1afb0dce-80e1-47ff-b9b3-43865872ce3e_1221x824.jpeg" width="1221" height="824" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1afb0dce-80e1-47ff-b9b3-43865872ce3e_1221x824.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:824,&quot;width&quot;:1221,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:151696,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://pirlblog.substack.com/i/162779411?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6be0c5a5-2451-444b-be72-b57e030b2262_1600x900.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!QKhC!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1afb0dce-80e1-47ff-b9b3-43865872ce3e_1221x824.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!QKhC!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1afb0dce-80e1-47ff-b9b3-43865872ce3e_1221x824.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!QKhC!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1afb0dce-80e1-47ff-b9b3-43865872ce3e_1221x824.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!QKhC!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1afb0dce-80e1-47ff-b9b3-43865872ce3e_1221x824.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">mRNA-4157 +/- pembrolizumab from KEYNOTE-942: finally an RCT</figcaption></figure></div><p>Unfortunately, we as a field are bad at most if not all elements of the personalized cancer vaccine workflow. Most predicted tumor antigens are not actually presented by tumor cells, most antigens included in personalized tumor vaccines are minimally immunogenic <em>in vivo</em>, no immunogenicity models work very well, (most?) microenvironment-based resistance mechanisms are unknown, and for the ones that are known, we don&#8217;t know much about how to target them therapeutically.</p><p>Still, the idea of a personalized therapeutic cancer vaccine is almost mythologically compelling: To turn the thing that makes a cancer cell cancerous (genetic changes that allow it to survive and divide aberrantly) into targets for its destruction seems like poetic justice. Adaptive immunity is the most elegant system in nature for self/non-self discrimination, and immunotherapy that generically boosts adaptive immunity can work in highly immunogenic tumors, for example yielding better than 50% long term survival in metastatic melanoma (compared to &lt;10% with chemotherapy). Smarter immunotherapy should work even better.</p><p>There are three axes of innovation for companies (and academic labs) working on improving personalized cancer vaccines: (1) antigen selection, where improvement means increased likelihood of including vaccine antigens that are presented by a patient&#8217;s cancer cells and recognizable by T cells (and/or antibodies); (2) formulation potency, where improvement means increased likelihood of eliciting antigen-specific T cell clonal expansion and anti-tumor cytotoxicity against given antigens, and (3) manufacturing constraints, where improvement means increased likelihood of successful manufacturing for the set of included antigens and/or decreased cost in time or resources to manufacture the vaccine. To achieve clinical efficacy, a vaccine needs to be manufacturable and target good antigens with a potent formulation (i.e., succeed on all three axes), however a company with a major advantage in a single axis could be a good investment if its technology were woven into a vaccine strategy (or strategies) that cover the other two. For example, a company with a great adjuvant but poor antigen selection and a company with great antigen selection but poor adjuvant may both fail individually, but they could be very valuable in combination if their best aspects were integrated into an improved product. Perhaps there are other ways to gain competitive advantage in the cancer vaccine space, the most obvious being to go to clinic first for a disease indication where no other vaccine is approved (while having good enough efficacy to discourage competition for that niche); however personally I wouldn&#8217;t be excited about investing in a vaccine company without a demonstrably better vaccine.</p><p>Eventually we will be able to measure or predict vaccine efficacy without animal models, but we are not there yet. In the meantime, I look for the following features in evaluating the potency of vaccines in preclinical development in immunocompetent murine model systems:</p><p><strong>Treatment of established tumors with well-formed tumor microenvironments.</strong> Many neoantigen vaccine studies are done with the vaccine given before injection of tumor cells or development of endogenous tumors. This is more likely to yield an efficacy signal but does not reflect human tumor biology (where the vaccine would be given after months-to-years of tumor development and coevolution with the patient&#8217;s immune system). I would prefer to see treatment started after tumors are relatively large, as well as to see evidence that the tumor immune microenvironment includes a distribution of cell types similar to analogous human tumors.</p><p><strong>Use of multiple tumor models with concordant results.</strong> Murine tumor models are highly heterogeneous, different amongst themselves and different from human tumors (in some ways we know and many ways we don&#8217;t know). Even so, murine models have been instrumental to understanding immunobiology, including breakthroughs in immune checkpoint inhibition and cellular therapy that have been translated to FDA-approved immunotherapies for cancer. A vaccine strategy that is successful in multiple murine tumor models, coupled with evidence that the vaccine is inducing productive antigen-specific T cell responses through a similar mechanism in each model, is more likely to be generalizable to humans than a vaccine strategy that is tested in a single model only.</p><p><strong>Vaccination using endogenous tumor-specific antigens. </strong>Many cancer vaccine studies use vaccine targets derived from xeno-antigens, the most common being antigens derived from the chicken protein ovalbumin, tested in murine tumor models engineered to express these xeno-antigens. While xeno-antigens are useful targets for immunological proof-of-principle experiments, they are highly non-self and more immunogenic than naturally occurring tumor antigens. As such, they present an unrealistically low bar for evidence of vaccine efficacy.</p><p><strong>Evidence that the vaccine elicits T cell responses specific for antigens included in the vaccine, </strong>over and above those elicited in the absence of vaccination and with adjuvant alone, with effect sizes that would be clinically significant if replicated in humans.<strong> </strong>Tumor antigen-specific T cell responses may arise endogenously during tumor growth and/or as a result of therapy with vaccine adjuvant alone. To assess the biological efficacy of a cancer vaccine, I would like to see either an increased breadth of antigen specificities recognized by T cells after vaccination or increased number and/or potency of pre-existing antigen-specific T cell populations after vaccination. These effects should be greater with vaccination than without, and they should be substantial enough to provide clinical benefit if they were to occur in humans.</p><p><strong>Evidence that vaccine treatment is associated with tumor shrinkage and improved survival of tumor-bearing animals</strong>, over and above that of vaccine adjuvant alone, with effect size that would be clinically significant if replicated in humans. This would be evaluated by measuring response rate, depth of responses, survival, and resistance to rechallenge with tumor cells (testing immunological memory).</p><p><strong>Performance comparisons against other basic vaccine formulations.</strong> There are multiple competing vaccine formulations in the neoantigen vaccine space. To show improvement in vaccine efficacy, I would like to see comparisons against at least the leading three vaccine formulations: peptide + adjuvant, mRNA LNP, and dendritic cell vaccines. Ideally, testing should be done against multiple parameterizations of vaccine formulation for each formulation type. At minimum, testing should be done against vaccine formulations of each type that mirror those in current clinical trials.</p><p>We are pursuing experiments with all of these features in PIRL, however as an academic lab we can&#8217;t do all we would like to do. I hope that more companies developing in this space will take the time (and expense) to comprehensively test their vaccine products before deploying them in clinical trials. It will be hard to beat mRNA/LNP vaccines for manufacturability, however it&#8217;s still possible to innovate there by offering point of care manufacturing. Huge opportunities to improve antigen selection and vaccine potency remain untapped and will be needed to drive more cures for otherwise incurable cancers.</p>]]></content:encoded></item><item><title><![CDATA[Introducing RAFT and LENS]]></title><description><![CDATA[Bioinformatics is a cornerstone of modern immunotherapy research and development.]]></description><link>https://pirlblog.substack.com/p/introducing-raft-and-lens</link><guid isPermaLink="false">https://pirlblog.substack.com/p/introducing-raft-and-lens</guid><dc:creator><![CDATA[Steven P. Vensko II]]></dc:creator><pubDate>Wed, 30 Apr 2025 14:16:26 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/FEXs0lEhGbE" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Bioinformatics is a cornerstone of modern immunotherapy research and development. Techniques such as bulk RNA sequencing and whole genome sequencing offer unprecedented insights into the molecular landscape of tissues. This information, coupled with complementary approaches, can be used to predict tumor-specific or tumor-associated antigens that may serve as promising therapeutic targets.</p><p>A key challenge in bioinformatics is ensuring the reproducibility of results. Many factors can complicate this, including differences in tool versions, discrepancies in reference files, missing or misplaced scripts, and inadequately described methods. These issues often lead to a "works on my machine" scenario&#8212;where the original developer can reproduce results, but others cannot.<br><br>Still skeptical? Try reproducing the analysis from the <a href="https://www.cell.com/cell/pdf/S0092-8674%2816%2930215-X.pdf">Hugo et al., 2016</a> manuscript using only the methods section. To address this, PIRL is proud to introduce RAFT, our Nextflow-based workflow manager designed to support reproducible bioinformatics pipelines. We use RAFT to power our neoantigen prediction workflow, LENS.</p><p>To help users get started, we've created a series of short tutorial videos introducing the fundamentals of both RAFT and LENS, available below. While these videos cover the basics, more in-depth information is available on their respective websites: useraft.io and uselens.io.<br><br>First, an introduction to RAFT:</p><div id="youtube2-FEXs0lEhGbE" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;FEXs0lEhGbE&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/FEXs0lEhGbE?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>Next, a tutorial on installing RAFT on your local machine:</p><div id="youtube2-rdRxM5SkBwA" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;rdRxM5SkBwA&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/rdRxM5SkBwA?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>Now that you have RAFT installed in your machine, let&#8217;s run a demonstration workflow. In this scenario, we&#8217;ll be running LENS v1.6 on Pt01 from the Hugo dataset. The Hugo dataset is available from <a href="https://www.cell.com/cell/pdf/S0092-8674%2816%2930215-X.pdf">this manuscript</a>.</p><div id="youtube2-7JXxHLFc7Lw" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;7JXxHLFc7Lw&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/7JXxHLFc7Lw?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>Once RAFT has completed, we can review the outputs/ directory. Don&#8217;t worry if you can&#8217;t or haven&#8217;t run the demonstration workflow, as an example of the output is available <a href="https://github.com/pirl-unc/lens_demo_workflow_outputs.">on PIRL's GitHub.</a></p><div id="youtube2-MRc3ZV1wyL0" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;MRc3ZV1wyL0&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/MRc3ZV1wyL0?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p><br>Now that we have a better understanding of RAFT and what it offers, let&#8217;s use RAFT to run LENS. First, an introduction to LENS:</p><div id="youtube2-cvpmEOr_InA" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;cvpmEOr_InA&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/cvpmEOr_InA?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>Next, let&#8217;s briefly go over what&#8217;s available in the LENS report:<br></p><div id="youtube2-FJfJBE6ZjTs" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;FJfJBE6ZjTs&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/FJfJBE6ZjTs?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>We hope that this tutorial series was informative and is helpful in getting you started with RAFT and LENS. Please do not hesitate to reach out to the head developer, Steven Vensko II, at steven_vensko@med.unc.edu with any questions or comments.<br></p><p><br><br></p>]]></content:encoded></item><item><title><![CDATA[Can Substack fix our lab's scientific hoarding? ]]></title><description><![CDATA[Kicking off an experiment in high throughput scientific communication]]></description><link>https://pirlblog.substack.com/p/can-substack-fix-our-labs-scientific</link><guid isPermaLink="false">https://pirlblog.substack.com/p/can-substack-fix-our-labs-scientific</guid><dc:creator><![CDATA[Alex Rubinsteyn]]></dc:creator><pubDate>Wed, 16 Apr 2025 20:06:18 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!rE9Q!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b44083d-390f-45ac-af2a-916e47031033_1280x1280.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The lab I co-run at UNC, the <a href="http://pirl.unc.edu">Personalized Immunotherapy Research Lab</a>, has a problem which has been bothering me a lot recently. This isn't unique to our lab, in fact it's ubiquitous in biomedical research, but it's still wrong: we're hoarding results. Our pipeline of papers is slow and while we painstakingly weave multiple narratives in parallel, the gap between our internal accumulated know-how and what's known out in the wild grows continuously.</p><p>For example, we know some vaccine adjuvants are better at eliciting T-cell responses while other more commonly used ones seem weak in comparison. We know that vanishingly few predictions of tumor-specific antigens are actually presented by tumor cells. We know culturing T-cells with long peptides gets us effectively only helper T-cells and have a few different "fixes" to better isolate antigen-specific killer T-cell clones. We have written lots of computational tools for e.g. analyzing expressed structural variants from long read cancer sequencing data and: no one knows about them and thus no one uses them.</p><p>Preprints could theoretically fix our hoarding problem but this would take a little bit of cultural pioneering around what a preprint means and how early in the research process you could submit partial results to bioRxiv. I think concatenative preprinting across years of a research project would be vastly preferable to preprinting right before journal submission but students/post-docs/fellows correctly sense that the latter is a cultural norm in biomedical sciences.</p><p>So, we're adding a less polished faster lane to our lab's scientific communication: Substack posts. Every PIRL member can now post here without need for review, editing, or approval from anyone else in the lab. I'm hoping that we significantly accelerate our dissemination of important but incomplete results and start cross-pollinating conversations with other researchers who might also be hoarding their own results in adjacent research topics.</p><p>Is Substack actually the right venue for detailed scientific blogging? I'm not sure &#8212; it does seem to reward cultural commentary over detailed empirical communication. However, it also seems like there's a small but engageable scientific audience on this platform who may be curious about our adventures on the frontiers of machine learning, genomics, and immuno-oncology and might give us enough feedback to motivate a high cadence of scientific communication. Like all uncertain questions of reality, we'll run the experiment and see what happens.</p>]]></content:encoded></item><item><title><![CDATA[Impressions from a NUT carcinoma reading list]]></title><description><![CDATA[NUT carcinoma is part of spectrum of fusion driven cancers whose aggressive is determined by which gene gets fused onto NUTM1; treatment options limited but some signal in Ewing sarcoma chemo regimens]]></description><link>https://pirlblog.substack.com/p/impressions-from-a-nut-carcinoma</link><guid isPermaLink="false">https://pirlblog.substack.com/p/impressions-from-a-nut-carcinoma</guid><dc:creator><![CDATA[Alex Rubinsteyn]]></dc:creator><pubDate>Thu, 07 Mar 2024 20:09:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!SklQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb85f03ad-4d32-4381-a5fb-b51b532f310e_1202x632.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><a href="https://blog.dana-farber.org/insight/2023/10/things-to-know-about-nut-carcinoma/">NUT carcinoma</a> is a rare and very aggressive cancer which arises when the normally suppressed nuclear protein <a href="https://www.genecards.org/cgi-bin/carddisp.pl?gene=NUTM1">NUTM1</a> gets fused on any of a handful of partner proteins (such as <a href="https://en.wikipedia.org/wiki/BRD4">BRD4</a>, <a href="https://en.wikipedia.org/wiki/BRD3">BRD3</a>, <a href="https://en.wikipedia.org/wiki/NSD3">NSD3</a>, &amp;c). The resultant fusion protein causes dramatic remodeling of chromatin state, <a href="https://www.pnas.org/doi/abs/10.1073/pnas.1702086114">opening up large stretches of normally inaccessible DNA</a> for transcription and driving previously normal tissue to transform into a rapidly proliferating mass of small undifferentiated cells.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!SklQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb85f03ad-4d32-4381-a5fb-b51b532f310e_1202x632.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!SklQ!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb85f03ad-4d32-4381-a5fb-b51b532f310e_1202x632.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!SklQ!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb85f03ad-4d32-4381-a5fb-b51b532f310e_1202x632.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!SklQ!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb85f03ad-4d32-4381-a5fb-b51b532f310e_1202x632.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!SklQ!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb85f03ad-4d32-4381-a5fb-b51b532f310e_1202x632.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!SklQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb85f03ad-4d32-4381-a5fb-b51b532f310e_1202x632.jpeg" width="1202" height="632" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b85f03ad-4d32-4381-a5fb-b51b532f310e_1202x632.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:632,&quot;width&quot;:1202,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!SklQ!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb85f03ad-4d32-4381-a5fb-b51b532f310e_1202x632.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!SklQ!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb85f03ad-4d32-4381-a5fb-b51b532f310e_1202x632.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!SklQ!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb85f03ad-4d32-4381-a5fb-b51b532f310e_1202x632.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!SklQ!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb85f03ad-4d32-4381-a5fb-b51b532f310e_1202x632.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Schematic of NUT carcinoma&#8217;s two most common driver fusion events from <em><a href="https://www.ncbi.nlm.nih.gov/pmc/articles/PMC8966081/">NUT Carcinoma: Clinicopathologic Features, Molecular Genetics and Epigenetics</a></em></figcaption></figure></div><p>This type of cancer was originally <a href="https://pubmed.ncbi.nlm.nih.gov/12543779/">discovered</a> by Dr. Chris French in 2003, whose <a href="https://frenchlab.bwh.harvard.edu/">lab</a> has since steadfastly worked to unravel the mysteries of what drives NUT carcinoma&#8217;s rapid proliferation and identify potential treatments. Other research groups have since joined the effort and there is an increasing awareness that NUT carcinoma is both under-diagnosed and part of a larger spectrum of rare cancers involving NUTM1. Unfortunately, good outcomes for patients with NUT carcinoma remain mostly limited to those who are able to completely remove it surgically and we don&#8217;t yet know a successful treatment regimen for metastatic disease.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!7t58!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82a905d4-6ecb-41f1-91fa-e58b611ab094_1272x857.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!7t58!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82a905d4-6ecb-41f1-91fa-e58b611ab094_1272x857.png 424w, /__u/substackcdn.com/image/fetch/$s_!7t58!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82a905d4-6ecb-41f1-91fa-e58b611ab094_1272x857.png 848w, /__u/substackcdn.com/image/fetch/$s_!7t58!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82a905d4-6ecb-41f1-91fa-e58b611ab094_1272x857.png 1272w, /__u/substackcdn.com/image/fetch/$s_!7t58!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82a905d4-6ecb-41f1-91fa-e58b611ab094_1272x857.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!7t58!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82a905d4-6ecb-41f1-91fa-e58b611ab094_1272x857.png" width="1272" height="857" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/82a905d4-6ecb-41f1-91fa-e58b611ab094_1272x857.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:857,&quot;width&quot;:1272,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!7t58!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82a905d4-6ecb-41f1-91fa-e58b611ab094_1272x857.png 424w, /__u/substackcdn.com/image/fetch/$s_!7t58!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82a905d4-6ecb-41f1-91fa-e58b611ab094_1272x857.png 848w, /__u/substackcdn.com/image/fetch/$s_!7t58!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82a905d4-6ecb-41f1-91fa-e58b611ab094_1272x857.png 1272w, /__u/substackcdn.com/image/fetch/$s_!7t58!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82a905d4-6ecb-41f1-91fa-e58b611ab094_1272x857.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Long-term survival in cohort of NUT carcinoma patients grouped by whether initial surgery was successful from &#65279;&#65279;<em><a href="https://academic.oup.com/oncolo/article/24/8/e740/6439373">Clinicopathologic Features and Long-term Outcomes of NUT Midline Carcinoma</a></em></figcaption></figure></div><p>Over the past year and a half, PIRL has been working on several different therapeutic ideas for NUT carcinoma which I&#8217;ll describe in future blog posts. For now, I wanted to take stock of the current landscape of options for patients with incomplete surgical resections and make sense of when existing therapies do in fact work for a small number of patients.</p><p><strong>Important to note</strong>: I&#8217;m not a medical doctor but rather a Computer Scientist who went for a long professional sojourn into immuno-oncology. Please don&#8217;t take this blog post as medical advice when it&#8217;s actually an incomplete literature search by a non-MD researcher.</p><h2>Impressions</h2><p>With that caveat out of the way, I have pasted a reading list below and will attempt to summarize my impressions:</p><ul><li><p><strong>The presentation, response to treatment, and overall prognosis of NUT1 rearranged cancers depends heavily on the 5&#8217; partner gene.</strong> Certain 5&#8217; fusion partner genes (e.g. BRD4, BRD3, NSD3, YAP1, &amp;c) are characteristic of cancers which look and act like NUT carcinoma, whereas others (e.g. RUNX1) only present in blood cancers and others (e.g. CIC) only in cancers which are categorized as sarcomas.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!1dhn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1eb386ef-d0de-442d-ab28-79759e73a1d1_2128x2124.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!1dhn!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1eb386ef-d0de-442d-ab28-79759e73a1d1_2128x2124.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!1dhn!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1eb386ef-d0de-442d-ab28-79759e73a1d1_2128x2124.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!1dhn!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1eb386ef-d0de-442d-ab28-79759e73a1d1_2128x2124.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!1dhn!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1eb386ef-d0de-442d-ab28-79759e73a1d1_2128x2124.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!1dhn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1eb386ef-d0de-442d-ab28-79759e73a1d1_2128x2124.jpeg" width="1456" height="1453" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1eb386ef-d0de-442d-ab28-79759e73a1d1_2128x2124.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1453,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!1dhn!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1eb386ef-d0de-442d-ab28-79759e73a1d1_2128x2124.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!1dhn!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1eb386ef-d0de-442d-ab28-79759e73a1d1_2128x2124.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!1dhn!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1eb386ef-d0de-442d-ab28-79759e73a1d1_2128x2124.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!1dhn!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1eb386ef-d0de-442d-ab28-79759e73a1d1_2128x2124.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Variety of cancer types with a NUTM1 driver fusion protein from <a href="https://ascpt.onlinelibrary.wiley.com/doi/10.1111/cts.13535">The expanding universe of </a><em><a href="https://ascpt.onlinelibrary.wiley.com/doi/10.1111/cts.13535">NUTM1</a></em><a href="https://ascpt.onlinelibrary.wiley.com/doi/10.1111/cts.13535"> fusions in pediatric cancer</a></figcaption></figure></div><ul><li><p>Among the diversity of malignancies involving NUTM1 rearrangements, it does seem that <strong>cancers driven by BRD4:NUTM1 fusions are particularly aggressive and unresponsive to chemotherapy</strong>. There are many case studies of surprisingly good response to various therapies and almost all of them involve 5&#8217; fusion partners other than BRD4.</p></li></ul><ul><li><p>There was a lot of hope that the growth of NUT carcinoma could be significantly slowed by inhibiting the BRD4 portion of the drive oncogene using <em>BET inhibitors</em> such as <a href="https://pubmed.ncbi.nlm.nih.gov/34724226/">molibresib</a> and <a href="https://ascopubs.org/doi/10.1200/JCO.2018.78.2292">birabresib</a>. Unfortunately, these drugs inhibit a broadly expressed family of proteins (<a href="https://www.nature.com/articles/s41392-020-00384-4">BRD2, BRD3, BRD4, BRDT</a>) and the resultant toxicity means <strong>existing BET inhibitors can&#8217;t be safely used at a dose level sufficient to fully arrest cancer growth</strong>. They do achieve a partial tumor shrinkage in a minority of patients, with some noteworthy case studies among patients with non-BRD4 fusion oncogenes.</p></li><li><p>There&#8217;s a new BET inhibitor, <a href="https://pubmed.ncbi.nlm.nih.gov/31969702/">ABBV-744</a>, which is more selective and designed to limit off-target toxicity. It does not, alone, seem very therapeutically exciting even in mouse models of NUT carcinoma. However, <a href="https://www.ncbi.nlm.nih.gov/pmc/articles/PMC10461970/">ABBV-744 does seem to synergize with the EZH2 inhibitor tazemetostat</a> and, while not entirely eradicating NUT carcinoma growth in mice, it does at least delay progression for months. Whether this translates to humans remains to be seen.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!SJhv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9df8a2d-fc9f-4fa2-b8ac-91c666e01440_764x723.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!SJhv!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9df8a2d-fc9f-4fa2-b8ac-91c666e01440_764x723.png 424w, /__u/substackcdn.com/image/fetch/$s_!SJhv!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9df8a2d-fc9f-4fa2-b8ac-91c666e01440_764x723.png 848w, /__u/substackcdn.com/image/fetch/$s_!SJhv!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9df8a2d-fc9f-4fa2-b8ac-91c666e01440_764x723.png 1272w, /__u/substackcdn.com/image/fetch/$s_!SJhv!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9df8a2d-fc9f-4fa2-b8ac-91c666e01440_764x723.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!SJhv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9df8a2d-fc9f-4fa2-b8ac-91c666e01440_764x723.png" width="764" height="723" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d9df8a2d-fc9f-4fa2-b8ac-91c666e01440_764x723.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:723,&quot;width&quot;:764,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!SJhv!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9df8a2d-fc9f-4fa2-b8ac-91c666e01440_764x723.png 424w, /__u/substackcdn.com/image/fetch/$s_!SJhv!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9df8a2d-fc9f-4fa2-b8ac-91c666e01440_764x723.png 848w, /__u/substackcdn.com/image/fetch/$s_!SJhv!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9df8a2d-fc9f-4fa2-b8ac-91c666e01440_764x723.png 1272w, /__u/substackcdn.com/image/fetch/$s_!SJhv!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9df8a2d-fc9f-4fa2-b8ac-91c666e01440_764x723.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Survival of mice with three different models of NUT carcinoma treated with {nothing, EZH2i, BETi, EZH2i+BETi} from <a href="https://www.biorxiv.org/content/10.1101/2023.08.15.553204v1.full.pdf">EZH2 synergizes with BRD4-NUT to drive NUT carcinoma growth through silencing of key tumor suppressor genes</a></figcaption></figure></div><ul><li><p>For the most part, metastatic NUT carcinoma shrugs off most chemotherapy regimens and simply keeps growing, though there is <strong>modest evidence in retrospective studies that ifosfamide may be a better choice for chemotherapy</strong>.</p></li><li><p>The most remarkable thing I found in this literature search is <strong>several case studies of complete responses to the <a href="https://pubmed.ncbi.nlm.nih.gov/10785592/">Scandinavian protocol for Ewing Sarcoma</a> in NUT carcinomas with BRD4</strong> as the 5&#8217; fusion partner. The treatment consists of &#8220;<em>two courses of VAI (vincristine, doxorubicin, ifosfamide) alternating with one course of PAI (cisplatin, doxorubicin, ifosfamide)</em> <em>at 3-weekly intervals</em>&#8221;. That&#8217;s a very aggressive chemotherapy regimen and I&#8217;m way out of my expertise in trying to judge whether it&#8217;s generally applicable to NUT carcinoma patients (likely only pediatric patients would survive it). I will note that &#8220;I&#8221; in this VAI/PAI protocol stands for ifosfamide, so maybe that&#8217;s another clue that ifosfamide may have a role to play in treating NUT carcinoma. In any case, I hope someone elevates these anecdotal successes into some kind of prospective clinical trial.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!wEy4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff0c6ad9-2089-4bec-ae56-d29a180a02f6_909x513.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!wEy4!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff0c6ad9-2089-4bec-ae56-d29a180a02f6_909x513.png 424w, /__u/substackcdn.com/image/fetch/$s_!wEy4!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff0c6ad9-2089-4bec-ae56-d29a180a02f6_909x513.png 848w, /__u/substackcdn.com/image/fetch/$s_!wEy4!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff0c6ad9-2089-4bec-ae56-d29a180a02f6_909x513.png 1272w, /__u/substackcdn.com/image/fetch/$s_!wEy4!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff0c6ad9-2089-4bec-ae56-d29a180a02f6_909x513.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!wEy4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff0c6ad9-2089-4bec-ae56-d29a180a02f6_909x513.png" width="909" height="513" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ff0c6ad9-2089-4bec-ae56-d29a180a02f6_909x513.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:513,&quot;width&quot;:909,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!wEy4!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff0c6ad9-2089-4bec-ae56-d29a180a02f6_909x513.png 424w, /__u/substackcdn.com/image/fetch/$s_!wEy4!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff0c6ad9-2089-4bec-ae56-d29a180a02f6_909x513.png 848w, /__u/substackcdn.com/image/fetch/$s_!wEy4!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff0c6ad9-2089-4bec-ae56-d29a180a02f6_909x513.png 1272w, /__u/substackcdn.com/image/fetch/$s_!wEy4!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff0c6ad9-2089-4bec-ae56-d29a180a02f6_909x513.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Table of responses to VAI/PAI sarcoma protocol from <em><a href="https://www.ncbi.nlm.nih.gov/pmc/articles/PMC9107965/">Complete Response Induced by Concurrent Chemoradiotherapy in a Patient with NUT Carcinoma</a></em></figcaption></figure></div><h2>Reading List</h2><p><strong>Background &amp; Overviews</strong>:</p><ul><li><p><a href="https://watermark.silverchair.com/ccr-22-0591.pdf?token=AQECAHi208BE49Ooan9kkhW_Ercy7Dm3ZL_9Cf3qfKAc485ysgAAA4kwggOFBgkqhkiG9w0BBwagggN2MIIDcgIBADCCA2sGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQMtKT6Z47HRgrutgaPAgEQgIIDPKSUujDgL-ievhmI2_ISSY-razGXt9NGN5QqI4O4zgwek9BFcKw1KaL0cyZcyRRcv3rIFY1MW4X1YTVdYEN4gzaiPiakSIvIjtEYbnKc5ISFLA66IUvkwJ_H4kucF2jjhtNG1bfOmH0zbRIRac6j4dfTrMeyy1iY6-rurHQpSeNq1qwXRxBoTBrNLbo36aeCeKK1_x0ZdGXvu_vczIvv2qZyGPrcyIDR1rBPkvDjzemcmWHKtHPidRUAKNj6BPLJIoA7uSn_9Z9dcjCYs_2yvNanKfb6vL1hoOu17GR70IC9AK9v6SLCO3PggZUwAR1rpke9PaqDYnqHPixbPPA4BOC7PlDzZIwooyn0rhQqEAIBK9UKiQF-B-u7O713m5vh16Hou41A25emR0dhiBxIIQDLOf1ymji-3lLwUpFdvUBRiOOCKsUCVv9koeLfHioIPrMZ8oSNg58xbaZlp7pDhZxi3UmqyAxLtN_REL97ZRWfZh_hVXavqcM9tEMRyYHtAXgMQ8ZLR95fO8y_5l6qAs4cOgvTBqMHFRusO8dRt2S1XFp5dqvFfYVG3BjkW3L-_qpFAZgmim970mkC8aPM0j_cdvDGZCUCl9A77VAzHBjWoLzrBEG_qjlOTw0zHYF5KcGD47q1ikbc4N9RTonhRLKb9BG5xmVeDLR_rFb-WXbdm-rJDR2ItGQtcUNBWmC2k61AH7Uj29zsZg4KnLGgvBxewABzbnvKsr-7sorcKb0J_9TwhR6W2k10CE8x9N5fFGn8sPbg44PqELEotqnNKWp-tOFdO5r-jYpyyx6mtesgVacVFWOcdtaYkWlbjOeYNwH6KTaitqYqgj9JHm0EBIHwFJKXX3I5e78FE0JIDOo-VmNfE27jG9_P-sC7RBGWvjrkhrcLS-vosnRgS90-qVaPoc7yurryJ-LnslR6eBUtflU__PcuNxAVbqZd3G9ImGQihvfPqrVScZcKmu568MxFFWZAbyZkwu2LbOnrLpemM0K6Fju4QN2gJuR7AngvFYd1RTg_ebI8BMys1m7S2CQu34Lm5G8BXXJBxEQxQ_M5hiDwh9OwCB6Fo0hiYCBhUSu456viiXfYPA9gWA">Report of the First International Symposium on NUT Carcinoma</a></p></li><li><p><a href="https://www.nature.com/articles/s41388-020-01625-0">Supercharging BRD4 with NUT in carcinoma</a></p></li><li><p><a href="https://www.nature.com/articles/onc2013126">MYC, a downstream target of BRD-NUT, is necessary and sufficient for the blockade of differentiation in NUT midline carcinoma</a></p></li><li><p><a href="https://www.ncbi.nlm.nih.gov/pmc/articles/PMC10690098/">The BRD4&#8211;NUT Fusion Alone Drives Malignant Transformation of NUT Carcinoma</a></p></li><li><p><a href="https://www.pnas.org/doi/full/10.1073/pnas.1702086114">Ectopic protein interactions within BRD4&#8211;chromatin complexes drive oncogenic megadomain formation in NUT midline carcinoma</a></p></li><li><p><a href="https://www.ncbi.nlm.nih.gov/pmc/articles/PMC10432870/">The expanding universe of NUTM1 fusions in pediatric cancer</a></p></li><li><p><a href="https://sci-hub.se/10.1002/gcc.22838">Emerging entities in NUTM1-rearranged neoplasms</a></p></li></ul><p><strong>Retrospective Patient Cohorts:</strong></p><ul><li><p><a href="https://www.jto.org/article/S1556-0864(23)02431-0/fulltext">Initial Chemotherapy for Locally Advanced and Metastatic NUT Carcinoma</a></p></li><li><p><a href="https://aacrjournals.org/clincancerres/article/18/20/5773/77756/Clinicopathologic-Features-and-Long-term-Outcomes">Clinicopathologic Features and Long-term Outcomes of NUT Midline Carcinoma</a></p></li><li><p><a href="https://onlinelibrary.wiley.com/doi/full/10.1002/pbc.30821">NUT carcinoma in pediatric patients: Characteristics, therapeutic regimens, and outcomes of 11 cases registered with the German Registry for Rare Pediatric Tumors (STEP)</a></p></li><li><p><a href="https://www.sciencedirect.com/science/article/pii/S0169500224000291">Clinical management of NUT carcinoma (NC) in Germany: Analysis of survival, therapy response, tumor markers and tumor genome sequencing in 35 adult patients</a></p></li><li><p><a href="https://link.springer.com/article/10.1007/s00405-024-08489-0">Therapeutic approaches to sinonasal NUT carcinoma: a systematic review</a></p></li><li><p><a href="https://www.nature.com/articles/s41379-019-0206-z">NUTM1-rearranged neoplasia: a multi-institution experience yields novel fusion partners and expands the histologic spectrum</a></p></li><li><p><a href="https://academic.oup.com/jncics/article/4/2/pkz094/5613895">An Anatomical Site and Genetic-Based Prognostic Model for Patients With Nuclear Protein in Testis (NUT) Midline Carcinoma: Analysis of 124 Patients</a></p></li><li><p><a href="https://link.springer.com/article/10.1007/s00405-018-4882-y">Patterns of care and impact of prognostic factors in the outcome of NUT midline carcinoma: a systematic review and individual patient data analysis of 119 cases</a></p></li></ul><p><strong>Unsuccessful Therapies</strong></p><ul><li><p><a href="https://academic.oup.com/jncics/article/4/2/pkz092/5613896">How Much Can We Bet on Activity of BET Inhibitors Beyond NUT&#8211;Midline Carcinoma?</a></p></li><li><p><a href="https://aacrjournals.org/mcr/article/19/11/1818/672852/Chemical-Screen-Identifies-Diverse-and-Novel">Chemical Screen Identifies Diverse and Novel Histone Deacetylase Inhibitors as Repressors of NUT Function: Implications for NUT Carcinoma Pathogenesis and Treatment</a></p></li><li><p><a href="https://aacrjournals.org/mct/article/19/7/1406/274306/Combined-Targeting-of-the-BRD4-NUT-p300-Axis-in">Combined Targeting of the BRD4&#8211;NUT&#8211;p300 Axis in NUT Midline Carcinoma by Dual Selective Bromodomain Inhibitor, NEO2734</a></p></li></ul><p><strong>Promising Murine Studies:</strong></p><ul><li><p><a href="https://www.biorxiv.org/content/10.1101/2023.08.15.553204v1.full.pdf">EZH2 Cooperates with BRD4-NUT to Drive NUT Carcinoma Growth by Silencing Key Tumor Suppressor Genes</a></p></li></ul><p><strong>Durable Responses in Patients with BRD3 and other atypical 5' fusion partners:</strong></p><ul><li><p><a href="https://ascopubs.org/doi/full/10.1200/PO.22.00633">Exceptional Response to Bromodomain and Extraterminal Domain Inhibitor Therapy With BMS-986158 in </a><em><a href="https://ascopubs.org/doi/full/10.1200/PO.22.00633">BRD4-NUTM1</a></em><a href="https://ascopubs.org/doi/full/10.1200/PO.22.00633"> NUT Carcinoma Harboring a </a><em><a href="https://ascopubs.org/doi/full/10.1200/PO.22.00633">BRD4</a></em><a href="https://ascopubs.org/doi/full/10.1200/PO.22.00633"> Splice Site Mutation</a></p></li><li><p><a href="https://www.sciencedirect.com/science/article/pii/S2666364323001686">Novel </a><em><a href="https://www.sciencedirect.com/science/article/pii/S2666364323001686">BRD2::NUTM1</a></em><a href="https://www.sciencedirect.com/science/article/pii/S2666364323001686"> Fusion in NUT Carcinoma With Exceptional Response to Chemotherapy: A Case Report</a></p></li><li><p><a href="https://meridian.allenpress.com/innovationsjournals-JIPO/article/7/1/67/496622">Sustained Clinical Response to Immunotherapy Followed by BET Inhibitor in a Patient with Unresectable Sinonasal NUT Carcinoma</a></p></li><li><p><a href="https://www.frontiersin.org/journals/oncology/articles/10.3389/fonc.2022.995744/full">Case report: Immunovirotherapy as a novel add-on treatment in a patient with thoracic NUT carcinoma</a></p></li><li><p><a href="https://onlinelibrary.wiley.com/doi/full/10.1002/ccr3.4616">A case of metastatic NUT carcinoma with prolonged response on gemcitabine and nab-paclitaxel</a></p></li></ul><p><strong>Durable Responses in Patients with Typical BRD4:NUTM1 fusions:</strong></p><ul><li><p><a href="https://www.jstage.jst.go.jp/article/internalmedicine/61/8/61_7741-21/_pdf/-char/ja">Complete Response Induced by Concurrent Chemoradiotherapy in a Patient with NUT Carcinoma</a></p></li><li><p><a href="https://sci-hub.se/10.1080/08880018.2017.1363839">Pediatric NUT-midline carcinoma: Therapeutic success employing a sarcoma based multimodal approach</a></p></li><li><p><a href="https://bmccancer.biomedcentral.com/articles/10.1186/s12885-018-5087-x">NUT carcinoma of the nasal cavity that responded to a chemotherapy regimen for Ewing&#8217;s sarcoma family of tumors: a case report</a></p></li><li><p><a href="https://journals.lww.com/jpho-online/fulltext/2021/07000/NUT_Carcinoma_Without_Upfront_Surgical_Resection_.29.aspx">NUT Carcinoma Without Upfront Surgical Resection: A Case Report</a></p></li></ul>]]></content:encoded></item><item><title><![CDATA[Tricking Nextflow's Caching System (to Drastically Reduce Storage Usage)]]></title><description><![CDATA[Policing storage usage is an unfortunate, but necessary aspect of bioinformatics.]]></description><link>https://pirlblog.substack.com/p/tricking-nextflows-caching-system</link><guid isPermaLink="false">https://pirlblog.substack.com/p/tricking-nextflows-caching-system</guid><dc:creator><![CDATA[Steven P. Vensko II]]></dc:creator><pubDate>Thu, 22 Dec 2022 16:00:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!l7bR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed1b2531-036e-4afe-a744-45757458451d_1352x1124.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Policing storage usage is an unfortunate, but necessary aspect of bioinformatics. This is due to both the relatively large files workflows generate and the sheer number of files associated with a potentially large set of samples. It is easy for this usage to get out of hand in cases where strict controls are not in place. I am, unfortunately, guilty as charged when it comes to the sin of excess storage usage and I attribute most of this usage to Nextflow's picky caching system.</p><p>This problem is not specific to me and my colleagues. A <a href="https://github.com/nextflow-io/nextflow/issues/452">Nextflow GitHub issues thread</a> regarding this topic recently celebrated its fifth birthday and Ben Sherman (<a href="https://github.com/bentsherman">@bentsherman</a>) has, as of the writing of this post, started laying the ground work to allow Nextflow to utilize temporary intermediate files.</p><p>Our lab has been tackling storage issues since we started using Nextflow DSL2 way back in November 2019. We were unable to "trick" Nextflow into caching near-zero-sized files despite our best efforts. Luckily, <a href="https://horticulture.wsu.edu/people/stephen-p-ficklin/">Stephen Ficklin</a> and colleagues, authors of <a href="https://github.com/SystemsGenetics/GEMmaker">GEMmaker</a>, have developed a clever solution to this problem.</p><p>This blog post is to show examples explaining the utility of this approach, provide a syntactical tutorial showing implementation examples, and describe the limitations and pitfalls I encountered while implementing it. Before we discuss the technical aspects of intermediate file cleaning in Nextflow workflows, let's further elaborate on the need for this functionality.</p><h2>Why?</h2><p>Consider the following workflow and its associated files:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!l7bR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed1b2531-036e-4afe-a744-45757458451d_1352x1124.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!l7bR!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed1b2531-036e-4afe-a744-45757458451d_1352x1124.png 424w, /__u/substackcdn.com/image/fetch/$s_!l7bR!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed1b2531-036e-4afe-a744-45757458451d_1352x1124.png 848w, /__u/substackcdn.com/image/fetch/$s_!l7bR!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed1b2531-036e-4afe-a744-45757458451d_1352x1124.png 1272w, /__u/substackcdn.com/image/fetch/$s_!l7bR!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed1b2531-036e-4afe-a744-45757458451d_1352x1124.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!l7bR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed1b2531-036e-4afe-a744-45757458451d_1352x1124.png" width="1352" height="1124" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ed1b2531-036e-4afe-a744-45757458451d_1352x1124.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1124,&quot;width&quot;:1352,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!l7bR!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed1b2531-036e-4afe-a744-45757458451d_1352x1124.png 424w, /__u/substackcdn.com/image/fetch/$s_!l7bR!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed1b2531-036e-4afe-a744-45757458451d_1352x1124.png 848w, /__u/substackcdn.com/image/fetch/$s_!l7bR!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed1b2531-036e-4afe-a744-45757458451d_1352x1124.png 1272w, /__u/substackcdn.com/image/fetch/$s_!l7bR!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed1b2531-036e-4afe-a744-45757458451d_1352x1124.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>In our case, we are only required to retain the first (raw FASTQs) and last (fully processed BAMs) files for the purposes of reproducibility and to satisfy downstream workflow inputs, respectively. Nevertheless, Nextflow in its current form requires the four intermediate files to be available on the filesystem for workflow caching purposes.</p><p>Now consider the following workflow and its associated files:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!z4tC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F589a5ad5-8603-4510-b47a-91c260ad8a3c_1352x1124.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!z4tC!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F589a5ad5-8603-4510-b47a-91c260ad8a3c_1352x1124.png 424w, /__u/substackcdn.com/image/fetch/$s_!z4tC!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F589a5ad5-8603-4510-b47a-91c260ad8a3c_1352x1124.png 848w, /__u/substackcdn.com/image/fetch/$s_!z4tC!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F589a5ad5-8603-4510-b47a-91c260ad8a3c_1352x1124.png 1272w, /__u/substackcdn.com/image/fetch/$s_!z4tC!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F589a5ad5-8603-4510-b47a-91c260ad8a3c_1352x1124.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!z4tC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F589a5ad5-8603-4510-b47a-91c260ad8a3c_1352x1124.png" width="1352" height="1124" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/589a5ad5-8603-4510-b47a-91c260ad8a3c_1352x1124.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1124,&quot;width&quot;:1352,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!z4tC!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F589a5ad5-8603-4510-b47a-91c260ad8a3c_1352x1124.png 424w, /__u/substackcdn.com/image/fetch/$s_!z4tC!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F589a5ad5-8603-4510-b47a-91c260ad8a3c_1352x1124.png 848w, /__u/substackcdn.com/image/fetch/$s_!z4tC!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F589a5ad5-8603-4510-b47a-91c260ad8a3c_1352x1124.png 1272w, /__u/substackcdn.com/image/fetch/$s_!z4tC!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F589a5ad5-8603-4510-b47a-91c260ad8a3c_1352x1124.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Deleting intermediate results in a 75% reduction in storage requirements for the same eventual workflow outcome. This allows for more samples to be processed using the same storage with less downtime resulting from storage maintenance. This optimization can be taken to the extreme by having the fully processed BAM (the star shaped element in our diagram) deleted once your workflow generates its final outputs (e.g. transcript counts, VCFs, etc.). There are, of course, trade-offs to this strategy which we'll discuss in the Limitations and Pitfalls section.</p><h2>How?</h2><p>In a nutshell, the GEMmaker strategy works by creating a very small file that resembles the original file closely enough that Nextflow cannot tell the difference. The bash script which performs this action is available in the <a href="https://github.com/SystemsGenetics/GEMmaker/blob/master/bin/clean_work_files.sh">GEMmaker Github repositorty</a>. Briefly, the script <code>stat</code>s the file, records the relevant statistics, creates a <a href="https://en.wikipedia.org/wiki/Sparse_file">sparse file</a> and modifies the sparse file's logical size, modification time, and access time to reflect those of the original file. The result is an indistinguishable (by Nextflow, anyways) file to serve as a placeholder for your previously large intermediate file.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!z1B7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb51b3a47-d61f-4dbd-9436-06df9e84a557_457x480.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!z1B7!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb51b3a47-d61f-4dbd-9436-06df9e84a557_457x480.png 424w, /__u/substackcdn.com/image/fetch/$s_!z1B7!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb51b3a47-d61f-4dbd-9436-06df9e84a557_457x480.png 848w, /__u/substackcdn.com/image/fetch/$s_!z1B7!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb51b3a47-d61f-4dbd-9436-06df9e84a557_457x480.png 1272w, /__u/substackcdn.com/image/fetch/$s_!z1B7!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb51b3a47-d61f-4dbd-9436-06df9e84a557_457x480.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!z1B7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb51b3a47-d61f-4dbd-9436-06df9e84a557_457x480.png" width="457" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b51b3a47-d61f-4dbd-9436-06df9e84a557_457x480.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:457,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!z1B7!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb51b3a47-d61f-4dbd-9436-06df9e84a557_457x480.png 424w, /__u/substackcdn.com/image/fetch/$s_!z1B7!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb51b3a47-d61f-4dbd-9436-06df9e84a557_457x480.png 848w, /__u/substackcdn.com/image/fetch/$s_!z1B7!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb51b3a47-d61f-4dbd-9436-06df9e84a557_457x480.png 1272w, /__u/substackcdn.com/image/fetch/$s_!z1B7!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb51b3a47-d61f-4dbd-9436-06df9e84a557_457x480.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">By This file was made by User:Sven CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=4067353</figcaption></figure></div><h2>When?</h2><p>Hopefully one can appreciate the value of the sparse file strategy when applied to running large scale Nextflow workflows. One may be tempted to use this hammer to all of the "nails" in their workflows. Unfortunately, every rose has its thorn. Specifically, the timing of intermediate file cleaning is relatively delicate. Any downstream processes or workflows that utilize the cleanable intermediate files must be completed prior to cleaning or your workflow will fail due to the prematurely deleted intermediate file. User will then be stuck re-running a portion of your workflow after debugging the cause.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Z0GL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6093de59-9149-4652-a312-f7ce9346c868_960x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Z0GL!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6093de59-9149-4652-a312-f7ce9346c868_960x720.png 424w, /__u/substackcdn.com/image/fetch/$s_!Z0GL!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6093de59-9149-4652-a312-f7ce9346c868_960x720.png 848w, /__u/substackcdn.com/image/fetch/$s_!Z0GL!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6093de59-9149-4652-a312-f7ce9346c868_960x720.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Z0GL!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6093de59-9149-4652-a312-f7ce9346c868_960x720.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Z0GL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6093de59-9149-4652-a312-f7ce9346c868_960x720.png" width="960" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6093de59-9149-4652-a312-f7ce9346c868_960x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:960,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!Z0GL!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6093de59-9149-4652-a312-f7ce9346c868_960x720.png 424w, /__u/substackcdn.com/image/fetch/$s_!Z0GL!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6093de59-9149-4652-a312-f7ce9346c868_960x720.png 848w, /__u/substackcdn.com/image/fetch/$s_!Z0GL!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6093de59-9149-4652-a312-f7ce9346c868_960x720.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Z0GL!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6093de59-9149-4652-a312-f7ce9346c868_960x720.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The next aspect of "when?" is more philosophical -- is it better to delete as soon as possible or at the end of the workflow when all of your endpoint files are available? Should deletion occur within your top-level workflow (as in GEMmaker) or sub-workflows? This is a topic I've wrestled with while implementing intermediate file deletion in our neoantigen workflow <a href="https://www.biorxiv.org/content/10.1101/2022.04.01.486738v2">LENS</a> so I have thoughts on it that I can share in a future blog post assuming there's interest.</p><h2>A Syntax Example</h2><p>The GEMmaker implementation has been suggested as a potential workaround to commenters in <a href="https://github.com/nextflow-io/nextflow/issues/452">Nextflow's GitHub Issue #452</a>. I attempted to implement this strategy after strong (but understandable) insistence by our sysadmins that I use less storage. I initially found the logic a bit hard to follow (the code is clear, but I am a mere geneticist, not a software engineer!), so I wanted to create a verbose yet minimal example to explain the core logic. The code (<code>trick_nextflow_cache.nf</code>, <code>clean_work_dirs.sh</code>, and <code>utilities.nf</code>) described below can be found on GitHub: <a href="https://github.com/pirl-unc/tricking_nextflow_cache">https://github.com/pirl-unc/tricking_nextflow_cache</a>.</p><p>First, we'll demonstrate the functionality and then walk through the script.</p><p>We begin with an empty work directory:</p><pre><code>[spvensko@c6145-2-9 tricking_nextflow_cache_example]$ du -hscL work/
4.0K    work
4.0K    total
</code></pre><p>Next, we run our Nextflow script:</p><pre><code>[spvensko@c6145-2-9 tricking_nextflow_cache_example]$ nextflow trick_nextflow_cache.nf -resume
N E X T F L O W  ~  version 21.10.6
Launching `trick_nextflow_cache.nf` [romantic_fourier] - revision: 22b984aca2
executor &gt;  slurm (2)
[22/0f9755] process &gt; make_a_large_file  [100%] 1 of 1 &#10004;
[b1/d1cc88] process &gt; inspect_large_file [100%] 1 of 1 &#10004;
</code></pre><p>Checking the work directories sizes reveals a ~1 Gb intermediate file generated by <code>make_a_large_file()</code>:</p><pre><code>[spvensko@c6145-2-9 tricking_nextflow_cache_example]$ du -hscL work/
1.1G    work/
1.1G    total
</code></pre><p>Now we run Nextflow script again and indicate that we'd like intermediate files to be deleted:</p><pre><code>[spvensko@c6145-2-9 tricking_nextflow_cache_example]$ nextflow trick_nextflow_cache.nf -resume --delete_intermediates True
N E X T F L O W  ~  version 21.10.6
Launching `trick_nextflow_cache.nf` [exotic_jennings] - revision: 22b984aca2
executor &gt;  slurm (1)
[22/0f9755] process &gt; make_a_large_file    [100%] 1 of 1, cached: 1 &#10004;
[b1/d1cc88] process &gt; inspect_large_file   [100%] 1 of 1, cached: 1 &#10004;
[16/f99612] process &gt; clean_work_files (1) [100%] 1 of 1 &#10004;
</code></pre><p>Note the process <code>clean_work_files()</code> ran this time.</p><p>Checking the work directories again revealed a reduction from <em><strong>1.1G to 60K</strong></em>! &#128640;</p><pre><code>[spvensko@c6145-2-9 tricking_nextflow_cache_example]$ du -hscL work/*
24K     work/16
20K     work/22
16K     work/b1
60K     total
</code></pre><p>This in itself is not too impressive - anyone can delete or replace a file in a work directory. The magical part happens when we re-run the workflow:</p><pre><code>[spvensko@c6145-2-9 tricking_nextflow_cache_example]$ nextflow trick_nextflow_cache.nf -resume --delete_intermediates True
N E X T F L O W  ~  version 21.10.6
Launching `trick_nextflow_cache.nf` [mighty_albattani] - revision: 22b984aca2
[22/0f9755] process &gt; make_a_large_file    [100%] 1 of 1, cached: 1 &#10004;
[b1/d1cc88] process &gt; inspect_large_file   [100%] 1 of 1, cached: 1 &#10004;
[16/f99612] process &gt; clean_work_files (1) [100%] 1 of 1, cached: 1 &#10004;
</code></pre><p>Nextflow pulled the <code>make_a_large_file()</code> process from cache despite the file emitted (<code>make_a_large_file.out.a_large_file</code>) being a 20K sparse file!</p><p>Next, let's go file-by-file and explain what's happening behind the scenes.</p><h3><code>utilities.nf</code></h3><pre><code>#!/usr/bin/env nextflow
process clean_work_dirs {
  input:
  tuple val(directory)

  output:
  val(1), emit: IS_CLEAN

  script:
  """
  for dir in ${directory}; do
  if [ -e \$dir ]; then
    echo "Cleaning: \$dir"
    files=`find \$dir -type f `
    echo "Files to delete: \$files"
    clean_work_files.sh "\$files" "null"
  fi
  done
  """
}

process clean_work_files {

  cache 'lenient'

  input:
  val(file)

  output:
  val(1), emit: IS_CLEAN

  script:
  """
    clean_work_files.sh "${file}"
  """
}
</code></pre><p><code>utilities.nf</code> consists of two process - <code>clean_work_dirs</code> and <code>clean_work_files</code>. <code>clean_work_dirs</code> appears to delete the contents of a work directory while <code>clean_work_files</code> targets specific files for deletion. Personally, I have only been using <code>clean_work_files</code> within my workflows. I have included these processes into their own module to allow easy aliasing when including the process into <code>main.nf</code>. For example, consider our current example in which we're running a single cleaning process. Defining the cleaning process within <code>main.nf</code> wouldn&#8217;t be the worst idea in the world. However, once you start cleaning multiple outputs files from multiple processes, having multiple cleaning processes defined in <code>main.nf</code> (as opposed to using aliasing while making <code>include</code> statements - see below) get messy fast.</p><pre><code>include { clean_work_files as clean_trimmed_fastqs } from '../utilities/utilities.nf'
include { clean_work_files as clean_sorted_bams } from '../utilities/utilities.nf'
...
include { clean_work_files as clean_files_n} from '../utilities/utilities.nf'
</code></pre><h3><code>clean_work_files.sh</code></h3><pre><code>#!/bin/bash
# https://raw.githubusercontent.com/SystemsGenetics/GEMmaker/master/bin/clean_work_files.sh
# This script is meant for cleaning any file in a Nextflow work directory.
# The $files_list variable is set within the Nextflow process and should
# contain the list of files that need cleaning. This can be done by creating
# a channel in a process that creates files, and merging that channel with
# a signal from another process indicating the files are ready for cleaning.
#
# The cleaning process empties the file, converts it to a sparse file so it
# has an acutal size of zero but appears as the original size, the access
# and modify times are kept the same.
files_list="$1"

for file in ${files_list}; do
  # Remove cruff added by Nextflow
  file=`echo $file | perl -p -e 's/[\\[,\\]]//g'`
  if [ -e $file ]; then
    # Log some info about the file for debugging purposes
    echo "cleaning $file"
    stat $file
    # Get file info: size, access and modify times
    size=`stat --printf="%s" $file`
    atime=`stat --printf="%X" $file`
    mtime=`stat --printf="%Y" $file`

    # Make the file size 0 and set as a sparse file
    &gt; $file
    truncate -s $size $file
    # Reset the timestamps on the file
    touch -a -d @$atime $file
    touch -m -d @$mtime $file
  fi
done
</code></pre><p><code>clean_work_files.sh</code> is self-explanitory thanks to its great inline documentation.</p><h3><code>trick_nextflow_cache.nf</code></h3><pre><code>nextflow.enable.dsl=2

include { clean_work_files } from './utilities.nf'

params.delete_intermediates = ''

process make_a_large_file {

  cache 'lenient'

  output:
  tuple val("foo"), path("1G_file"), emit: a_large_file

  script:
  """
  dd if=/dev/zero of=1G_file bs=1G count=1
  """
}

process inspect_large_file {

  cache 'lenient'

  input:
  tuple val(samp), path(required_input_file)

  output:
  tuple val(samp), path("file_stats"), emit: file_stats

  script:
  """
  ls -ldhrt ${required_input_file} &gt; file_stats
  """
}

workflow {
  make_a_large_file()

  inspect_large_file(
    make_a_large_file.out.a_large_file)

  make_a_large_file.out.a_large_file                                                                
    .join(inspect_large_file.out.file_stats, by: [0])                                               
    .flatten()                                                                                      
    .filter{ it =~ /_file$/}                                                                        
    .set{ large_file_done_signal }                                                                  

  if( params.delete_intermediates ) {
    clean_work_files(
      large_file_done_signal)
  }
}
</code></pre><p><code>trick_nextflow_cache.nf</code> begins with a shebang, a standard inclusion statement (to import the cleaning process), and a parameter definition used for triggering intermediate file deletion. Next are two separate processes, the latter dependent on output from the former. The first process, <code>make_a_large_file()</code>, generates a one gigabyte sized file which is emitted through the <code>a_large_file</code> channel. The second process, <code>inspect_large_file()</code>, takes the emittied channel and simply <code>ls -lhdrt</code>s it. In this example, you can imagine <code>make_a_large_file()</code> being an aligner process (e.g. <code>bwa</code>) and <code>inspect_large_file()</code> as being a variant caller (e.g. <code>stelka2</code>).</p><p>Once the <code>inspect_large_file()</code> process has completed, the actual intermediate large file itself is no longer needed. That is where the following code block comes into play:</p><pre><code>  make_a_large_file.out.a_large_file                                                                
    .join(inspect_large_file.out.file_stats, by: [0])                                               
    .flatten()                                                                                      
    .filter{ it =~ /_file$/}                                                                        
    .set{ large_file_done_signal }  
  ...
    if( params.delete_intermediates ) {                                                               
    clean_work_files(                                                                               
      large_file_done_signal)                                                                       
  }
</code></pre><p>In this block, we are taking the channel containing the intermediate file we want to delete (the 1 Gb file), <code>join</code>ing it to the channel containing the eventual endpoint file (<code>file_stats</code>). Note we are joining them on the 0th element which is the <code>samp</code> variable. We want to ensure that the intermediate file we're deleting and the corresponding output file are <em>linked</em> by a sample-level identifier. Once we have the joined tuple, we <code>flatten()</code> it and <code>filter{}</code> each element for the intermediate file suffix we are seeking to delete (<code>_file$</code> in this case). We then pass this new tuple of deletable intermediates to <code>clean_work_files()</code> assuming <code>params.delete_intermediates</code> is true.</p><p><strong>Note: Be as specific as possible with your </strong><code>filter{}</code><strong> regex string!!!</strong></p><h2>Limitations and Pitfalls</h2><p>I encountered several hurdles when implementing this strategy into our workflows. I've described them below so others can avoid them. Please let me know of any other examples the community encounters and I'll include them.</p><h3>Limits workflow expansion</h3><p>This intermediate file deletion strategy, in its current form, should really only be applied to workflows that are well-established end-to-end. Deletion of intermediate files <em>will</em> result in prevention of workflow expansion. For example, consider a scenario in which you have alignment files and are performing variant calling with subsequent BAM cleanup:</p><pre><code>process align {
...
}

process variant_caller_x {
...
}

workflow {
  main:
    align()
    variant_caller_x(align.out.alns)
    align.out.alns
      .join(variant_caller_x.out.vcfs, by: [0])
      .flatten()
      .filter{ it =~ /.bam$/ }
      .set{ cleanable_bams }
    clean_work_files(
      cleanable_bams)
}
</code></pre><p>After completing this workflow, you have your variant files and your storage hungry intermediate BAM files will be eliminated as expected.</p><p>Now, let's assume a colleague comes along and suggests also running the latest and greatest <code>variant_caller_y</code> (in addition to your original <code>variant_caller_x</code>). You include the <code>variant_caller_y()</code> process call to <code>workflow</code> (see below) and re-run the Nextflow:</p><pre><code>process align {
...
}

process variant_caller_x {
...
}

process variant_caller_y {
...
}

workflow {
  main:
    align()
    variant_caller_x(align.out.alns)
    variant_caller_y(align.out.alns)
    align.out.alns
      .join(variant_caller_x.out.vcfs, by: [0])
      .join(variant_caller_y.out.vcfs, by: [0])
      .flatten()
      .filter{ it =~ /.bam$/ }
      .set{ cleanable_bams }
    clean_work_files(
      cleanable_bams)
}
</code></pre><p>However, upon running the above code you will be greeted with a curious error. What gives?! The deletion of the intermediate BAM file from the initial run means you can no longer use those BAMS to call variants. Nextflow is unaware that the BAM files are effectively useless since, from its perspective, they are perfectly fine cached files. At this point, you realize you must delete the work directory associated with <code>align()</code> and re-run that portion of the workflow.</p><h3>Checking for every downstream output</h3><p>Another consideration is that one must ensure <em>all</em> downstream processes have performed and completed their work <em>prior</em> to deletion of the intermediate file. In other words, the workflow developer must perform all process and channel accounting before allowing <code>clean_work_files</code> to execute. This will likely result in some rather beastly <code>join</code> statements that will clutter the code. Luckily, Ben Sherman (@bentsherman) is working on updating Nextflow to do this accounting internally and removing this burden from the owrkflow developer.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!RoSY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F652efc05-92d8-439e-b8dd-81f51f1f9432_1152x852.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!RoSY!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F652efc05-92d8-439e-b8dd-81f51f1f9432_1152x852.png 424w, /__u/substackcdn.com/image/fetch/$s_!RoSY!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F652efc05-92d8-439e-b8dd-81f51f1f9432_1152x852.png 848w, /__u/substackcdn.com/image/fetch/$s_!RoSY!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F652efc05-92d8-439e-b8dd-81f51f1f9432_1152x852.png 1272w, /__u/substackcdn.com/image/fetch/$s_!RoSY!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F652efc05-92d8-439e-b8dd-81f51f1f9432_1152x852.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!RoSY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F652efc05-92d8-439e-b8dd-81f51f1f9432_1152x852.png" width="1152" height="852" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/652efc05-92d8-439e-b8dd-81f51f1f9432_1152x852.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:852,&quot;width&quot;:1152,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!RoSY!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F652efc05-92d8-439e-b8dd-81f51f1f9432_1152x852.png 424w, /__u/substackcdn.com/image/fetch/$s_!RoSY!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F652efc05-92d8-439e-b8dd-81f51f1f9432_1152x852.png 848w, /__u/substackcdn.com/image/fetch/$s_!RoSY!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F652efc05-92d8-439e-b8dd-81f51f1f9432_1152x852.png 1272w, /__u/substackcdn.com/image/fetch/$s_!RoSY!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F652efc05-92d8-439e-b8dd-81f51f1f9432_1152x852.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Nanoseconds count!</h3><p>Astute readers may note my excessive use of the <code>cache</code> directive in process definitions. Inclusion of this directive is required to overcome the next pitfall I encountered. Specifically, it appears the Access and Modify time modications performed on the sparse file by <code>clean_work_files.sh</code> are only to the nearest second, but my cluster's filesystem seems to track Access and Modify times down to sub-second resolution. As a result, the sparse file generated did not pass Nextflow's caching sniff test and results in the process being re-ran (with sparse files as input). The <code>cache</code> directive (when paired with the <code>'lenient'</code> option) bypasses this issue by removing the Access and Modify times from the Nextflow caching equation.</p><p>Original <code>stat</code> output prior to cleaning (from <code>.command.log</code>):</p><pre><code>[spvensko@c6145-2-9 dd915decbfc0f0992acd0454f7e14f]$ cat .command.log 
cleaning /PATH/TO/work/71/8fb6ae67536c55ac80815da9c4a231/a_fastq_2.trimmed.fq.gz
  File: &#8216;/PATH/TO/work/71/8fb6ae67536c55ac80815da9c4a231/a_fastq_2.trimmed.fq.gz&#8217;
  Size: 4891699623      Blocks: 9591736    IO Block: 65536  regular file
Device: 31h/49d Inode: 9248463003887304838  Links: 1
Access: (0644/-rw-r--r--)  Uid: (321499/spvensko)   Gid: ( 3150/vincent_lab)
Context: system_u:object_r:nfs_t:s0
Access: 2022-12-14 23:49:37.616634000 -0500
Modify: 2022-12-15 00:02:27.847675000 -0500
Change: 2022-12-15 00:02:27.847675000 -0500
 Birth: -

</code></pre><p><code>stat</code> output of sparse file which replaced the original file:</p><pre><code>[spvensko@c6145-2-9 dd915decbfc0f0992acd0454f7e14f]$ stat /PATH/TO/work/71/8fb6ae67536c55ac80815da9c4a231/a_fastq_2.trimmed.fq.gz      
 File: &#8216;/PATH/TO/work/71/8fb6ae67536c55ac80815da9c4a231/a_fastq_2.trimmed.fq.gz&#8217;
 Size: 4891699623      Blocks: 0          IO Block: 65536  regular file
Device: 31h/49d Inode: 9248463003887304838  Links: 1
Access: (0644/-rw-r--r--)  Uid: (321499/spvensko)   Gid: ( 3150/vincent_lab)
Context: system_u:object_r:nfs_t:s0
Access: 2022-12-14 23:49:37.000000000 -0500
Modify: 2022-12-15 00:02:27.000000000 -0500
Change: 2022-12-15 01:21:02.845392000 -0500
Birth: -
</code></pre><p>Note that the Access time from the original file (<code>2022-12-14 23:49:37.616634000 -0500</code> ) is <strong>not</strong> the same as the Access time from the sparse file created by <code>clean_work_files.sh</code> (<code>2022-12-14 23:49:37.000000000 -0500</code>).</p><h3>Target the <em>file</em>, <em>not</em> the file's <em>symlink</em></h3><p>The final hurdle I had to overcome was one of misdirection. Nextflow relies heavily upon symlinks when operating on local cluster filesystems to prevent excessive copying of files among work directories. As a result, it's possible for a channel element containing what appears to be a file's path to instead be a symlink pointing to that original file. Consider the following example:</p><pre><code>nextflow.enable.dsl=2

process make_a_large_file {

  cache 'lenient'

  output:
  tuple val("foo"), path("1G_file"), emit: a_large_file

  script:
  """
  dd if=/dev/zero of=1G_file bs=1G count=1
  """
}

process inspect_large_file {

  cache 'lenient'

  input:
  tuple val(samp), path(required_input_file)

  output:
  tuple val(samp), path(required_input_file), path("file_stats"), emit: file_stats

  script:
  """
  ls -ldhrt ${required_input_file} &gt; file_stats
  """
}

workflow {
  make_a_large_file()
  make_a_large_file.out.a_large_file.view()
  inspect_large_file(
    make_a_large_file.out.a_large_file)
  inspect_large_file.out.file_stats.view()
}
</code></pre><p>Running this script results in the following output:</p><pre><code>[spvensko@c6145-2-9 tricking_nextflow_cache_example]$ nextflow real_vs_symlink.nf -resume
N E X T F L O W  ~  version 21.10.6
Launching `real_vs_symlink.nf` [pedantic_wright] - revision: fffa5484af
[22/0f9755] process &gt; make_a_large_file  [100%] 1 of 1, cached: 1 &#10004;
[b1/d1cc88] process &gt; inspect_large_file [100%] 1 of 1, cached: 1 &#10004;
[foo, /home/spvensko/tricking_nextflow_cache_example/work/22/0f975597019f5e81e7561400e3d7b0/1G_file]
[foo, /home/spvensko/tricking_nextflow_cache_example/work/b1/d1cc88cf2ba4b16eb770d90b09f4aa/1G_file, /home/spvensko/tricking_nextflow_cache_example/work/b1/d1cc88cf2ba4b16eb770d90b09f4aa/file_stats]
</code></pre><p>Notice that <strong>both</strong> <code>make_a_large_file()</code>'s and <code>inspect_large_files()</code>'s emitted channels contain a path to <code>1G_file</code>. However, upon closer inspection, we realize one path is the actual file while the other is simply a symlink to the original file:</p><pre><code>[spvensko@c6145-2-9 tricking_nextflow_cache_example]$ file /home/spvensko/tricking_nextflow_cache_example/work/22/0f975597019f5e81e7561400e3d7b0/1G_file                                                                                      
/home/spvensko/tricking_nextflow_cache_example/work/22/0f975597019f5e81e7561400e3d7b0/1G_file: data
[spvensko@c6145-2-9 tricking_nextflow_cache_example]$ file /home/spvensko/tricking_nextflow_cache_example/work/b1/d1cc88cf2ba4b16eb770d90b09f4aa/1G_file
/home/spvensko/tricking_nextflow_cache_example/work/b1/d1cc88cf2ba4b16eb770d90b09f4aa/1G_file: symbolic link to `/home/spvensko/tricking_nextflow_cache_example/work/22/0f975597019f5e81e7561400e3d7b0/1G_file'
</code></pre><p>In this case <code>1G_file</code> was effectively passed through <code>inspect_large_file()</code>, but a symlink to the original file was emitted rather than the original file itself.</p><p>So, what does this matter?</p><p>If the workflow developer is not careful and deletes the <em>symlink</em> to <code>1G_file</code> (<code>../work/b1/d1cc88cf2ba4b16eb770d90b09f4aa/1G_file</code>) rather than the <code>1G_file</code> itself (<code>../work/22/0f975597019f5e81e7561400e3d7b0/1G_file</code>) then they will not save any space and instead disrupt the caching of their workflow.</p><p>The moral of this story is to ensure the channel and element you are targeting with <code>clean_work_files</code> is the actual file you want to delete and not a symlink to that file.</p><h2>Conclusion</h2><p>I hope this post helps in explaining why users may want to delete intermediate files in Nextflow, how to perform intermediate deletion, and some of the limitations and pitfalls associated with this approach.</p><p>Please do not hesitate to contact me with any thoughts or comments at <a href="mailto:steven_vensko@med.unc.edu">steven_vensko@med.unc.edu</a> or @spvensko on the nextflow.slack.com.</p>]]></content:encoded></item><item><title><![CDATA[Shaking the Rust Off Python Redox]]></title><description><![CDATA[An update to "Shaking the Rust Off Python": we follow Dr. Michael Lazear & Dr. Rob Patro's advice and achieve a 10x improvement in Rust+Python over a pure Python implementation of kmer counting.]]></description><link>https://pirlblog.substack.com/p/shaking-the-rust-off-python-redox</link><guid isPermaLink="false">https://pirlblog.substack.com/p/shaking-the-rust-off-python-redox</guid><dc:creator><![CDATA[Jin Seok (Andy) Lee]]></dc:creator><pubDate>Tue, 22 Nov 2022 15:58:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!y0z-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89b2a6f1-ff1e-4af6-8970-b64aa640f3e2_2500x1250.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>This post is an update to <a href="https://pirl.unc.edu/blog/shaking-the-rust-off-python">Shaking the Rust Off Python</a></strong></p><p>I would like to first thank <a href="https://twitter.com/michaellazear">Dr. Michael Lazear</a> and <a href="https://twitter.com/nomad421">Dr. Rob Patro</a> for their wonderful feedback on my recent blog post. <a href="https://twitter.com/michaellazear/status/1593820585615769601?s=19&amp;t=SzJ4bkBckxanlGfe-JYFFw">Dr. Lazear has generously shown</a> that there is a better implementation that can deliver a blazingly fast compute time by using <a href="https://github.com/rust-lang-nursery/rust-cookbook/blob/master/src/concurrency/parallel/rayon-map-reduce.md">&#8220;map-reduce&#8221;</a> with worker pool in the <a href="https://docs.rs/rayon/latest/rayon/">rayon package</a> of Rust. In swift response to Dr. Lazear&#8217;s suggestion, <a href="https://twitter.com/nomad421/status/1593864766589542400?ref_src=twsrc%5Etfw">Dr. Patro initially confirmed</a> that the suggested implementation delivers a substantial improvement over the Python baseline (also thank you for teaching me about the &#8216;&#8212;release&#8217; parameter for &#8216;maturin develop&#8217;). This approach indeed leads to a 10x improvement in Rust+Python over the pure Python implementation.</p><h2><strong>1. Updated Implementation (Rust+Python)</strong></h2><p>Here is the updated Rust+Python (multithreaded) implementation that uses map-reduce in the rayon package (the credit goes to Dr. Lazear for the <a href="https://twitter.com/michaellazear/status/1593820585615769601?s=19&amp;t=SzJ4bkBckxanlGfe-JYFFw">original source code</a>):</p><pre><code><code>lib.rs</code></code></pre><pre><code>#[pyfunction]
fn count_kmers_multithread_fx_hashmap_improved(sequences: Vec&lt;String&gt;, k: usize, num_threads: usize) -&gt; Py&lt;PyAny&gt; {
    let pool = rayon::ThreadPoolBuilder::new()
        .num_threads(num_threads)
        .build()
        .unwrap();
    let hm = pool.install(|| {
        let hm = sequences
            .par_iter()
            .map(|sequence| {
                let end = sequence.len() - k + 1;
                let mut map: FxHashMap&lt;_, i32&gt; = FxHashMap::default();
                <strong>for</strong> i <strong>in</strong> 0..end {
                    *map.entry(&amp;sequence[i..i+k]).or_insert(0) += 1;
                }
                map
            })
            .reduce(
                || FxHashMap::default(),
                |mut acc, x| {
                    <strong>for</strong> (k, v) <strong>in</strong> x {
                        *acc.entry(k).or_insert(0) += v;
                    }
                    acc
                },
            );
        <strong>return</strong> hm;
    });

    Python::with_gil(|py| hm.to_object(py))
}

#[pymodule]
fn scripts(_py: Python, m: &amp;PyModule) -&gt; PyResult&lt;()&gt; {
    m.add_function(wrap_pyfunction!(count_kmers_multithread_fx_hashmap_improved, m)?)?;
    Ok(())
}
</code></pre><pre><code><code>count_kmers_rust_multithread_fx_hashmap_improved.py</code></code></pre><pre><code><strong>import</strong> pysam
<strong>import</strong> time
<strong>import</strong> pandas <strong>as</strong> pd
<strong>import</strong> scripts


<strong>def</strong> count_kmers_rust_multithread_fx_hashmap_improved(
        fasta_file: str,
        num_processes: int,
        sequence_chunk: int,
        k: int,
        chromosomes: list) -&gt; pd.DataFrame:
    """
    Counts all possible k-mers in a FASTA file.

    Parameters
    ----------
    fasta_file      :   FASTA file.
    num_processes   :   Number of processes to multiprocess FASTA file.
    sequence_chunk  :   Sequence chunk.
    k               :   k-mer k.
    chromosomes     :   Chromosomes to count.

    Returns
    -------
    df_kmers        :   DataFrame of k-mers with the following columns:
                        'k_mer', 'count'
    duration_1      :   Duration of step 1.
    duration_2      :   Duration of step 2.
    duration_3      :   Duration of step 3.
    duration_total  :   Total duration.
    """
    # Step 1. Create tasks
    start_time_1 = time.time()
    fasta = pysam.FastaFile(fasta_file)
    sequences = []
    <strong>for</strong> curr_chromosome <strong>in</strong> chromosomes:
        curr_chromosome_len = fasta.get_reference_length(curr_chromosome)
        <strong>for</strong> i <strong>in</strong> range(0, curr_chromosome_len, sequence_chunk):
            curr_start = i
            curr_end = curr_start + sequence_chunk
            <strong>if</strong> curr_end &gt; curr_chromosome_len:
                curr_end = curr_chromosome_len
            curr_chromosome_seq = fasta.fetch(reference=curr_chromosome,
                                              start=curr_start,
                                              end=curr_end)
            sequences.append(curr_chromosome_seq.upper())
    end_time_1 = time.time()

    # Step 2. Run
    start_time_2 = time.time()
    results = scripts.count_kmers_multithread_fx_hashmap_improved(sequences, k, num_processes)
    end_time_2 = time.time()

    # Step 3. Merge dictionaries into one
    start_time_3 = time.time()
    df_kmers = pd.DataFrame(results.items())
    df_kmers.columns = ['k_mer', 'count']
    df_kmers.sort_values(['count'], ascending=False, inplace=True)
    end_time_3 = time.time()
    <strong>return</strong> df_kmers, \
           end_time_1 - start_time_1, \
           end_time_2 - start_time_2, \
           end_time_3 - start_time_3, \
           end_time_3 - start_time_1
</code></pre><h2><strong>2. Updated Benchmark Test Results</strong></h2><p>The benchmark test configuration was kept the same as the <a href="https://pirl.unc.edu/blog/shaking-the-rust-off-python">original post</a> (9-mer counting of chromosome 1 in hg38 with 24 cores with sequences of 1 million nucleotides in length). The Rust implementation using map-reduce led to a 9.6x improvement from the pure Python equivalent (Figures 1 and 2). This was also a substantial improvement compared to the former Rust implementation that relied on a multithreading pool. Note that the benchmark tests were run again on a different node with less powerful cores, which is why you see a different range of durations compared to the original post. Nevertheless, the comparative speed improvement from Python to Rust is conserved from the previous test to the current test.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!y0z-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89b2a6f1-ff1e-4af6-8970-b64aa640f3e2_2500x1250.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!y0z-!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89b2a6f1-ff1e-4af6-8970-b64aa640f3e2_2500x1250.png 424w, /__u/substackcdn.com/image/fetch/$s_!y0z-!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89b2a6f1-ff1e-4af6-8970-b64aa640f3e2_2500x1250.png 848w, /__u/substackcdn.com/image/fetch/$s_!y0z-!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89b2a6f1-ff1e-4af6-8970-b64aa640f3e2_2500x1250.png 1272w, /__u/substackcdn.com/image/fetch/$s_!y0z-!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89b2a6f1-ff1e-4af6-8970-b64aa640f3e2_2500x1250.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!y0z-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89b2a6f1-ff1e-4af6-8970-b64aa640f3e2_2500x1250.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/89b2a6f1-ff1e-4af6-8970-b64aa640f3e2_2500x1250.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!y0z-!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89b2a6f1-ff1e-4af6-8970-b64aa640f3e2_2500x1250.png 424w, /__u/substackcdn.com/image/fetch/$s_!y0z-!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89b2a6f1-ff1e-4af6-8970-b64aa640f3e2_2500x1250.png 848w, /__u/substackcdn.com/image/fetch/$s_!y0z-!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89b2a6f1-ff1e-4af6-8970-b64aa640f3e2_2500x1250.png 1272w, /__u/substackcdn.com/image/fetch/$s_!y0z-!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89b2a6f1-ff1e-4af6-8970-b64aa640f3e2_2500x1250.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>Figure 1.</strong> Total execution time of different implementations for the task of 9-mer counting for hg38 chromosome 1. For each implementation, 20 iterations were run with each iteration using 24 cores. The dot in the middle of each bar represents the median total duration while the ends of the bar represent the minimum and the maximum duration time observed.</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Zl3q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb93ce648-60e2-43d0-a891-ad5004b47191_2500x1250.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Zl3q!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb93ce648-60e2-43d0-a891-ad5004b47191_2500x1250.png 424w, /__u/substackcdn.com/image/fetch/$s_!Zl3q!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb93ce648-60e2-43d0-a891-ad5004b47191_2500x1250.png 848w, /__u/substackcdn.com/image/fetch/$s_!Zl3q!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb93ce648-60e2-43d0-a891-ad5004b47191_2500x1250.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Zl3q!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb93ce648-60e2-43d0-a891-ad5004b47191_2500x1250.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Zl3q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb93ce648-60e2-43d0-a891-ad5004b47191_2500x1250.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b93ce648-60e2-43d0-a891-ad5004b47191_2500x1250.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!Zl3q!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb93ce648-60e2-43d0-a891-ad5004b47191_2500x1250.png 424w, /__u/substackcdn.com/image/fetch/$s_!Zl3q!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb93ce648-60e2-43d0-a891-ad5004b47191_2500x1250.png 848w, /__u/substackcdn.com/image/fetch/$s_!Zl3q!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb93ce648-60e2-43d0-a891-ad5004b47191_2500x1250.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Zl3q!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb93ce648-60e2-43d0-a891-ad5004b47191_2500x1250.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>Figure 2.</strong> Average execution times of each of the three steps observed in the same tests for Figure 1.</figcaption></figure></div><h2><strong>3. Conclusions</strong></h2><p>I have learned a great deal from receiving feedback from the much active scientific/bioinformatics community on Twitter at large. So thank you, Dr. Lazear and Dr. Patro, for your help and time. I would like to also thank my co-advisor and principal investigator, <a href="https://twitter.com/iskander">Dr. Alex Rubinsteyn</a>, for sharing <a href="https://twitter.com/iskander/status/1593756612405198848">the post on Twitter</a> in the first place. You were right, Chief!</p><p>The experience of writing a blog post about a topic that I am just beginning to learn and then tweeting it has inadvertently become a manifestation of <a href="https://meta.wikimedia.org/wiki/Cunningham%27s_Law#:~:text=Cunningham's%20Law%20states%20%22the%20best,the%20inventor%20of%20wiki%20software.">Cunningham&#8217;s Law</a>. I suspect that Alex knew about it all along. In any case, I have learned a great deal about using Rust and human behavior. I promise to use these newly acquired skill-sets sparingly and responsibly.</p>]]></content:encoded></item><item><title><![CDATA[Shaking the Rust Off Python]]></title><description><![CDATA[Performance comparison of nucleotide k-mer counting implementations in Python vs. Rust]]></description><link>https://pirlblog.substack.com/p/shaking-the-rust-off-python</link><guid isPermaLink="false">https://pirlblog.substack.com/p/shaking-the-rust-off-python</guid><dc:creator><![CDATA[Jin Seok (Andy) Lee]]></dc:creator><pubDate>Fri, 18 Nov 2022 15:51:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!1ubC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd777a6bb-377b-4c74-96a2-976d858269d2_2500x1250.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>TL;DR</strong></h2><p>Dynamic scripting languages such as Python and R are convenient for implementing bioinformatics algorithms. However, these languages incur a significant overhead on every operation, which makes processing read-level data in large quantities slow. One way to speed up a slow algorithm is to move the bottleneck out of Python into a more efficient compiled language such as Rust. In this post I explore nucleotide <em>k-mer</em> counting as an example algorithm and evaluate the performance improvement of a few different implementations. Ultimately, my fastest Rust+Python implementation is only 2.5x faster than a pure Python equivalent.</p><div><hr></div><h1><strong>1. Background and Motivation</strong></h1><p>In our lab, we often process hundreds of thousands, if not millions, of sequencing reads generated from a malignant tumor sample. These reads are footprints of the mutational landscape underlying the tumor and clinically actionable insights are grounded in understanding these footprints. To view the landscape, we usually piece together sequencing reads to solve a puzzle - a large puzzle in fact. The original picture we are after is typically composed of around 3 billions letters and we have millions of pieces to solve. This is where bioinformatics softwares come to our aid.</p><p>Many bread-and-butter bioinformatics softwares are written in &#8220;low-level&#8221; languages such as C and C++ to deliver fast computation times. These languages provide instructions more native to a computer machine&#8217;s hardwares compared to &#8220;high-level&#8221; languages such as Python. While low-level languages guarantee unparalleled computation times, the development process can prove to be slow and tedious, and the eventual codebase can become quite verbose. This makes the codebase hard to maintain and to deploy over iterations. This is why a versatile and succinct high-level language like Python remains one of the <a href="https://githut.info">most popularly used programming languages</a>. However, the sheer versatility and succinctness of Python are also sources of bottlenecks of its less-than-ideal execution time. For many clinical settings where speed is crucial to generate <a href="https://www.nejm.org/doi/full/10.1056/NEJMc2112090">timely clinical decisions</a>, Python quickly hits a practical limit. For example, <em>k-mer</em> counting is a common computation in bioinformatics that involves updating a hash table and this simple task written in <a href="https://towardsdatascience.com/how-fast-is-c-compared-to-python-978f18f474c7">C++ is 25 times faster than Python</a>.</p><p>About a decade ago, a new low-level programming language called <a href="https://www.rust-lang.org">Rust</a> was released. In recent years, we have seen an uptick in the number of bioinformatics tools developed in Rust. I have recently started learning Rust and have tried to wrap it in Python so that we can integrate the best of both worlds - the comprehensive suite of statistical and optimization libraries offered in Python and the swift computation time of Rust. This post recounts the story of my recent experience in attempting a number of different technical implementations wrapping Rust in Python and how I landed the one that I like (for now). I also share all the different implementations that I have tried in hopes of saving another bioinformatician&#8217;s (or developer&#8217;s) time.</p><p>To compare different implementations, I chose to work with the <em>k-mer</em> counting problem. For example, given the following 3 sequences &#8220;CATGATCCAA&#8221;, &#8220;AGGATAAGCC&#8221;, &#8220;GGATCACGAC&#8221;, we want to count the occurrence of all 3-mers in these sequences over sliding windows (e.g. "GAT&#8221; appears 3 times in the three sequences; &#8220;CATGATCCAA&#8221;, &#8220;AGGATAAGCC&#8221;, &#8220;GGATCACGAC&#8221;).</p><div><hr></div><h1><strong>2. Implementations</strong></h1><p>Each implementation is composed of three parts:</p><ol><li><p>Generation of tasks (chunks of sequences).</p></li><li><p><em>K-mer</em> counting by task workers.</p></li><li><p>Merging hash tables into one.</p></li></ol><p>For full implementations, please check out <a href="https://github.com/pirl-unc/blogs/tree/main/Shaking%20the%20Rust%20Off%20Python">here</a>.</p><h2><strong>2-1. Multiprocessing in Python (Baseline)</strong></h2><p>To establish the baseline, I first implemented <em>k-mer</em> counting in Python3 as a multi-processing program with the function <strong>worker_py</strong> defined as the task worker:</p><pre><code><code>count_kmers_python_multiprocess.py</code></code></pre><pre><code><strong>import</strong> multiprocessing
<strong>import</strong> pysam
<strong>import</strong> time
<strong>import</strong> pandas <strong>as</strong> pd
<strong>from</strong> functools <strong>import</strong> partial
<strong>from</strong> collections <strong>import</strong> Counter


<strong>def</strong> worker_py(sequence: str, k: int) -&gt; Counter:
    """
    Fetches k-mers in a given sequence.

    Parameters
    ----------
    sequence        :   Sequence.
    k               :   k-mer k.
    shared_list     :   Shared list.
    """
    counter = Counter()
    <strong>for</strong> i <strong>in</strong> range(0, len(sequence) - k + 1):
        counter[sequence[i:i+k]] += 1
    <strong>return</strong> counter


<strong>def</strong> count_kmers_python_multiprocess(fasta_file: str,
                                    num_processes: int,
                                    sequence_chunk: int,
                                    k: int,
                                    chromosomes: list) -&gt; pd.DataFrame:
    """
    Counts all possible k-mers in a FASTA file.

    Parameters
    ----------
    fasta_file      :   FASTA file.
    num_processes   :   Number of processes.
    sequence_chunk  :   Sequence chunk.
    k               :   k-mer k.
    chromosomes     :   Chromosomes to count.

    Returns
    -------
    df_kmers        :   DataFrame of k-mers with the following columns:
                        'k_mer', 'count'
    work_duration   :   Duration of multiprocessing compute
    """
    # Step 1. Create tasks
    fasta = pysam.FastaFile(fasta_file)
    sequences = []
    <strong>for</strong> chrom <strong>in</strong> chromosomes:
        chrom_len = fasta.get_reference_length(chrom)
        <strong>for</strong> i <strong>in</strong> range(0, chrom_len, sequence_chunk):
            curr_start = i
            curr_end = curr_start + sequence_chunk
            <strong>if</strong> curr_end &gt; chrom_len:
                curr_end = chrom_len
            curr_chromosome_seq = fasta.fetch(
                reference=chrom,
                start=curr_start,
                end=curr_end
            )
            sequences.append(curr_chromosome_seq.upper())

    # Step 2. Run
    pool = multiprocessing.Pool(num_processes)
    start_time = time.time()
    results = pool.map(partial(worker_py, k=k), sequences)
    end_time = time.time()

    # Step 3. Merge dictionaries into one
    outputs = results[0]
    <strong>for</strong> curr_result <strong>in</strong> results[1:]:
        outputs.update(curr_result)
    df_kmers = pd.DataFrame.from_dict(outputs.items())
    df_kmers.columns = ['k_mer', 'count']
    df_kmers.sort_values(['count'], ascending=False, inplace=True)
    <strong>return</strong> df_kmers, end_time - start_time
</code></pre><p>Terminal output with the following parameters:</p><ul><li><p><code>hg38.fa</code></p></li><li><p><code>6 processes</code></p></li><li><p><code>1,000,000 nucleotide chunks</code></p></li><li><p><code>9-mers (k = 9)</code></p></li><li><p><code>chr21</code></p></li></ul><pre><code>Python implementation of k-mer counting
k_mer        count
NNNNNNNNN  6620936
TTTTTTTTT    44007
AAAAAAAAA    41832
TGTGTGTGT    10454
ACACACACA    10170
Program took 14.662775 seconds in total
</code></pre><h2><strong>2-2. Rust Wrapped in Python</strong></h2><p>To wrap Rust in Python, I used the <a href="https://github.com/PyO3/maturin">maturin</a> package in Python. To start writing a Rust function, first initialize by executing the following in the terminal:</p><pre><code>maturin init
</code></pre><p>This generates a <strong>lib.rs</strong> file in <strong>src/ </strong>folder and a <strong>Cargo.toml</strong> file. We will be writing the Rust codes in the <strong>lib.rs</strong> file and specify any dependencies in the <strong>Cargo.toml</strong> file. To compile Rust code using maturin, run:</p><pre><code>maturin develop
</code></pre><p>Let&#8217;s add compiler optimization to the <strong>Cargo.toml</strong> file:</p><pre><code>[profile.dev]
opt-level = 3

[profile.release]
debug = 0
</code></pre><p>For more on maturin, refer to the <a href="https://www.maturin.rs">official maturin user guide</a>.</p><h3><strong>2-2-1. Python with Multi-threaded Rust (STL HashMap)</strong></h3><p>For starters, to take advantage of Rust&#8217;s native multi-threading capabilities, I first implemented a multi-threaded <em>k-mer</em> counting function:</p><pre><code><code>lib.rs</code></code></pre><pre><code>use pyo3::prelude::*;
use rayon::prelude::*;
use std::collections::HashMap;

#[pyfunction]
fn count_kmers_multithread_stl_hashmap(sequences: Vec&lt;String&gt;, k: usize, num_threads: usize) -&gt; Py&lt;PyAny&gt; {
    let pool = rayon::ThreadPoolBuilder::new()
    .num_threads(num_threads)
    .build()
    .unwrap();
    let (tx, rx) = std::sync::mpsc::channel();
    <strong>for</strong> seq <strong>in</strong> &amp;sequences {
        let tx = tx.clone();
        let seq = seq.to_owned();
        pool.spawn(move || {
            let mut hm : HashMap&lt;String, i32&gt; = HashMap::new();
            let end = seq.chars().count() - k + 1;
            <strong>for</strong> i <strong>in</strong> 0..end {
                *hm.entry(seq[i..i+k].to_owned()).or_insert(0) += 1;
            }
            tx.send(hm).unwrap();
        });
    }

    drop(tx); // close all senders
    let results: Vec&lt;HashMap&lt;String, i32&gt;&gt; = rx.into_iter().collect();

    // Merge HashMaps
    let mut hm : HashMap&lt;&amp;str, i32&gt; = HashMap::new();
    <strong>for</strong> curr_hm <strong>in</strong> &amp;results {
        <strong>for</strong> (key, value) <strong>in</strong> curr_hm.into_iter() {
            *hm.entry(&amp;key).or_insert(0) += value;
        }
    }

    <strong>return</strong> Python::with_gil(|py| {
        hm.to_object(py)
    });
}

#[pymodule]
fn scripts(_py: Python, m: &amp;PyModule) -&gt; PyResult&lt;()&gt; {
    m.add_function(wrap_pyfunction!(count_kmers_multithread_stl_hashmap, m)?)?;
    Ok(())
}
</code></pre><p>The above code makes the Rust function <strong>count_kmers_multithread_stl_hashmap</strong> available as part of a package (named <strong>script</strong> in my code).</p><p>Make sure to append the following line to <strong>Cargo.toml</strong> file under <strong>[dependencies]</strong>:</p><pre><code>rayon = "1.5.3"
</code></pre><pre><code><code>count_kmers_rust_multithread_stl_hashmap.py</code></code></pre><pre><code><strong>import</strong> pysam
<strong>import</strong> time
<strong>import</strong> pandas <strong>as</strong> pd
<strong>import</strong> scripts


<strong>def</strong> count_kmers_rust_multithread_stl_hashmap(fasta_file: str,
                                             num_processes: int,
                                             sequence_chunk: int,
                                             k: int,
                                             chromosomes: list) -&gt; pd.DataFrame:
    """
    Counts all possible k-mers in a FASTA file.

    Parameters
    ----------
    fasta_file      :   FASTA file.
    num_processes   :   Number of processes to multiprocess FASTA file.
    sequence_chunk  :   Sequence chunk.
    k               :   k-mer k.
    chromosomes     :   Chromosomes to count.

    Returns
    -------
    df_kmers        :   DataFrame of k-mers with the following columns:
                        'k_mer', 'count'
    work_duration   :   Duration of multiprocessing compute
    """
    # Step 1. Create tasks
    fasta = pysam.FastaFile(fasta_file)
    sequences = []
    <strong>for</strong> curr_chromosome <strong>in</strong> chromosomes:
        curr_chromosome_len = fasta.get_reference_length(curr_chromosome)
        <strong>for</strong> i <strong>in</strong> range(0, curr_chromosome_len, sequence_chunk):
            curr_start = i
            curr_end = curr_start + sequence_chunk
            <strong>if</strong> curr_end &gt; curr_chromosome_len:
                curr_end = curr_chromosome_len
            curr_chromosome_seq = fasta.fetch(reference=curr_chromosome,
                                              start=curr_start,
                                              end=curr_end)
            sequences.append(curr_chromosome_seq.upper())

    # Step 2. Run
    start_time = time.time()
    results = scripts.count_kmers_multithread_stl_hashmap(sequences, k, num_processes)
    end_time = time.time()

    # Step 3. Merge dictionaries into one
    df_kmers = pd.DataFrame(results.items())
    df_kmers.columns = ['k_mer', 'count']
    df_kmers.sort_values(['count'], ascending=False, inplace=True)
    <strong>return</strong> df_kmers, end_time - start_time
</code></pre><h3><strong>2-2-2. Python with Multi-threaded Rust (FX HashMap)</strong></h3><p>The above multi-threaded Rust implementation resulted in about 55% reduction (i.e. 2.2x improvement) in execution time from the Python implementation. As I looked to further improve the speed of the Rust code, I stumbled upon <a href="https://nnethercote.github.io/perf-book/hashing.html">this page</a> that explains how the HashMap included in the standard library (STL) of Rust implements cryptographically safe hashing. The natural move was to replace the STL HashMap with another HashMap that relies on a faster hashing function, such as <a href="https://github.com/rust-lang/rustc-hash">rustc-hash</a> (henceforth referred to as FX HashMap). So all of the HashMap declarations in the above Rust code was replaced with the following:</p><pre><code>let mut hm : FxHashMap&lt;String, i32&gt; = FxHashMap::default();
let results: Vec&lt;FxHashMap&lt;String, i32&gt;&gt; = rx.into_iter().collect();
let mut hm : FxHashMap&lt;&amp;str, i32&gt; = FxHashMap::default();
</code></pre><p>Make sure to append the following line to <strong>Cargo.toml</strong> file under <strong>[dependencies]</strong>:</p><pre><code>rustc-hash = "1.1.0"
</code></pre><p>Replacing the HashMap implementation from the STL function to the FX version indeed resulted in a noticeable improvement in speed (data not shown).</p><h3><strong>2-2-3. Python with Multi-processed Rust (STL or FX HashMap)</strong></h3><p>Then it occurred to me that using pointers in Rust might lead to another boost in speed. After tinkering around for some time, I realized that implementing a pointer-based access to a HashMap in a multi-threaded Rust program is not so straight forward and elegant. Instead, I opted to multiprocessing a Rust function but allowing pointer-based access and update to the HashMap. Shown below is the Rust code for the task worker function:</p><pre><code>#[pyfunction]
fn count_kmers_fx_hashmap_pointer(sequence: String, k: usize) -&gt; Py&lt;PyAny&gt; {
    let mut hm : FxHashMap&lt;&amp;str, i32&gt; = FxHashMap::default();
    let end = sequence.chars().count() - k + 1;
    <strong>for</strong> j <strong>in</strong> 0..end {
        *hm.entry(&amp;sequence[j..j+k]).or_insert(0) += 1;
    }
    <strong>return</strong> Python::with_gil(|py| {
        hm.to_object(py)
    });
}
</code></pre><p>Here is a simple update to the Python implementation to include the rust worker function:</p><pre><code>results = pool.map(partial(scripts.count_kmers_fx_hashmap_pointer, k=k), sequences)
</code></pre><div><hr></div><h1><strong>3. Benchmark Test Results</strong></h1><p>To systematically benchmark the various implementations, I set up a test to count all 9-mers in chromsome 1 of hg38. I ran the above implementations along with some other variations for comparison purposes. In short, of the 7 implementations, the multi-threaded Rust with FX HashMap resulted in the fastest compute time of 16.828 seconds on average. In contrast, Python took 42.321 seconds on average (Figure 1).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!1ubC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd777a6bb-377b-4c74-96a2-976d858269d2_2500x1250.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!1ubC!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd777a6bb-377b-4c74-96a2-976d858269d2_2500x1250.png 424w, /__u/substackcdn.com/image/fetch/$s_!1ubC!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd777a6bb-377b-4c74-96a2-976d858269d2_2500x1250.png 848w, /__u/substackcdn.com/image/fetch/$s_!1ubC!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd777a6bb-377b-4c74-96a2-976d858269d2_2500x1250.png 1272w, /__u/substackcdn.com/image/fetch/$s_!1ubC!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd777a6bb-377b-4c74-96a2-976d858269d2_2500x1250.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!1ubC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd777a6bb-377b-4c74-96a2-976d858269d2_2500x1250.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d777a6bb-377b-4c74-96a2-976d858269d2_2500x1250.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!1ubC!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd777a6bb-377b-4c74-96a2-976d858269d2_2500x1250.png 424w, /__u/substackcdn.com/image/fetch/$s_!1ubC!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd777a6bb-377b-4c74-96a2-976d858269d2_2500x1250.png 848w, /__u/substackcdn.com/image/fetch/$s_!1ubC!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd777a6bb-377b-4c74-96a2-976d858269d2_2500x1250.png 1272w, /__u/substackcdn.com/image/fetch/$s_!1ubC!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd777a6bb-377b-4c74-96a2-976d858269d2_2500x1250.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>Figure 1.</strong> Total execution time of different implementations for the task of 9-mer counting for hg38 chromosome 1. For each implementation, 20 iterations were run with each iteration using 24 cores. The dot in the middle of each bar represents the median total duration while the ends of the bar represent the minimum and the maximum duration time observed.</figcaption></figure></div><p>It should be noted that the two multi-threaded Rust implementations depend on Rust to merge the HashMaps into one. Computation of task workers (step 2) is a subset of all computations accounted for in the total duration. When we just capture the duration of task workers in multi-threaded and multi-processed implementations, we see there are relatively smaller improvements in speed (Figure 2). Based on the duration of task workers in either multi-threaded or multi-processed implementations, we see that HashMap merging (step 3) accounts for an overwhelming fraction of the time saved (Figure 2). In other words, the multi-threaded implementation comes ahead of the multi-processed implementation because of the heavy-lifting performed by Rust in merging HashMaps.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!De6h!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bb7fcb5-6bc5-4706-baa0-5ab52966b557_2500x1250.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!De6h!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bb7fcb5-6bc5-4706-baa0-5ab52966b557_2500x1250.png 424w, /__u/substackcdn.com/image/fetch/$s_!De6h!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bb7fcb5-6bc5-4706-baa0-5ab52966b557_2500x1250.png 848w, /__u/substackcdn.com/image/fetch/$s_!De6h!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bb7fcb5-6bc5-4706-baa0-5ab52966b557_2500x1250.png 1272w, /__u/substackcdn.com/image/fetch/$s_!De6h!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bb7fcb5-6bc5-4706-baa0-5ab52966b557_2500x1250.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!De6h!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bb7fcb5-6bc5-4706-baa0-5ab52966b557_2500x1250.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7bb7fcb5-6bc5-4706-baa0-5ab52966b557_2500x1250.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!De6h!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bb7fcb5-6bc5-4706-baa0-5ab52966b557_2500x1250.png 424w, /__u/substackcdn.com/image/fetch/$s_!De6h!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bb7fcb5-6bc5-4706-baa0-5ab52966b557_2500x1250.png 848w, /__u/substackcdn.com/image/fetch/$s_!De6h!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bb7fcb5-6bc5-4706-baa0-5ab52966b557_2500x1250.png 1272w, /__u/substackcdn.com/image/fetch/$s_!De6h!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7bb7fcb5-6bc5-4706-baa0-5ab52966b557_2500x1250.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>Figure 2.</strong> Average execution times of each of the three steps observed in the same tests for Figure 1.</figcaption></figure></div><h1><strong>4. Conclusions</strong></h1><p>In this post, we saw how to wrap Rust in Python. In conclusion, multi-threaded Rust (with FX HashMap) wrapped in Python yielded the fastest implementation with approximately 2.5x improvement in speed over the baseline Python implementation. In the tech world, people often talk about delivering a 10x improvement for a new technology to tip the scale and be widely adopted. Although the speed improvement is clear, I am not convinced that the additional overhead of keeping Rust codebase along with the Python codebase justifies for mere 2.5x improvement in speed. Stay tuned for more on this topic!</p><p>Special thanks to Dhuvi Karthikeyan for his invaluable feedback on my post and for suggesting the title of this blog post.</p>]]></content:encoded></item><item><title><![CDATA[Adventures in mRNA lipid nanoparticle formulation]]></title><description><![CDATA[Lipid nanoparticles (LNPs) encapsulating neoantigen-encoding mRNA hold promise for the development of more potent therapeutic cancer vaccines. This was our first attempt at their formulation.]]></description><link>https://pirlblog.substack.com/p/adventures-in-mrna-lipid-nanoparticle</link><guid isPermaLink="false">https://pirlblog.substack.com/p/adventures-in-mrna-lipid-nanoparticle</guid><dc:creator><![CDATA[Jessica Alley]]></dc:creator><pubDate>Wed, 02 Nov 2022 14:44:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!YaL7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f68c553-a0f8-4f32-b551-c03ffc4fefe4_2500x1406.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>An internet search of the term &#8220;nanoparticle&#8221; will yield diverse results and may lead down a rabbit hole of spherical diagrams with minimal discernible differences, so let&#8217;s begin there and climb out together. The specific nanoparticles our lab was interested in formulating contain mRNA along with four essential lipid components: an ionizable lipid, a helper lipid, cholesterol, and a polyethylene glycol (PEG) lipid. Perhaps the most important of these is the ionizable lipid which, as its name suggests, is positively charged at a low pH and neutral at physiological pH. When positively charged, this lipid plays a critical role in interacting with negatively charged mRNA to facilitate particle formation. Additionally, the ionizable lipid promotes entry into the cytoplasm by escaping from the acidic endosome, or the compartment within the cytoplasm where the particle ends up following cellular internalization.</p><p>On the flip side of this, the ionizable lipid&#8217;s neutral charge at physiological pH is also critical as it makes ionizable lipids less toxic than previously used, permanently charged cationic lipids. Cholesterol and the helper lipid stabilize and support the nanoparticles, while the PEG lipid prevents particles from aggregating. It&#8217;s important to note here that all of these components play additional roles <em>in vivo</em> that can affect where these particles go and how long they persist, so this is a rather simplified overview for the sake of brevity. (If you aren&#8217;t claustrophobic and want to go further down the rabbit hole, a nice detailed review can be found <a href="https://pubmed.ncbi.nlm.nih.gov/33478109/">here</a>.)</p><p>Besides the aforementioned lipids, our nanoparticles also contain <a href="https://pubmed.ncbi.nlm.nih.gov/29326426/">nucleoside-modified mRNA</a>, which has structural changes to render it less immunogenic. This may sound counterintuitive when the ultimate goal of administering these particles is to stimulate an immune response, but detection of foreign nucleic acids can trigger cellular changes that prematurely halt protein synthesis, preventing the desired outcome.</p><p>To formulate the LNPs, we used a benchtop microfluidic device to rapidly mix the lipid and mRNA solutions then dialyzed the mixture overnight, concentrated it, and sterile-filtered for use in cell cultures. Following formulation, we determined the mRNA concentration and encapsulation efficiency along with the particle size and polydispersity index (PDI). All batches produced had an average diameter of between 75 and 150 nm with a PDI of 0.300 or lower and an encapsulation efficiency of at least 95%.</p><p>At this point the reader is probably dying to know what these particles would be used for or, if you are like my cat, has fallen asleep. The purpose of the planned experiments was two-fold: demonstrate the ability of antigen presenting cells to take up the mRNA-containing particles and translate the protein, and confirm that antigen presenting cells treated with said particles could stimulate an antigen-specific T cell response. Specifically, we planned to treat dendritic cells, which are potent <a href="https://en.wikipedia.org/wiki/Antigen-presenting_cell#Professional_APCs">professional antigen presenting cells</a>, with LNPs containing equal amounts of luciferase- and ovalbumin-encoding mRNA. Protein synthesis would be determined by measuring luminescence following administration of the luciferase substrate, and T cell response would be derived from <a href="https://en.wikipedia.org/wiki/Carboxyfluorescein_succinimidyl_ester">CFSE</a> dilution of labeled <a href="https://pubmed.ncbi.nlm.nih.gov/10762410/">OT-1</a> cells in co-culture, indicating proliferation upon recognition of their cognate peptide, the ovalbumin epitope SIINFEKL.</p><p>Before diving into the results of this set of experiments, I should highlight some of the lessons learned from my first attempts to work with our LNPs <em>in vitro</em>. First, serum concentration matters. In an early experiment working with a cancer cell line, raising the final serum media concentration present in the wells during nanoparticle administration from five to ten percent, which is commonly used in cell culture, reduced luminescence seven-fold, nearly to the level of untreated cells.</p><p>Second, in our hands, it was difficult to work with spleen-derived dendritic cells. Besides the yield constraints (only ~0.5-2% of splenocytes are eluted as dendritic cells when using commercially available column-based negative selection kits), I was unable to convincingly transfect these cells. This was regardless of serum concentration, cell number, and the presence or absence of <a href="https://ashpublications.org/blood/article/119/15/3383/105565/Regulation-of-dendritic-cell-development-by-GM-CSF">GM-CSF</a>, and it was not due to decreased viability.</p><p>Fortunately, bone marrow-derived dendritic cells (BMDCs) provided an alternative antigen presenting cell type that was better suited for these proof-of-concept experiments. In addition to much greater yield per mouse (&gt; 20 million immature BMDCs on the fifth day of culture), BMDCs could be successfully transfected at various time points during differentiation and could be cryopreserved before or after differentiation and then transfected. Additionally, with our specific LNP formulation, serum-free RPMI worked better than PBS or Opti-MEM as diluent for administering treatments 1:1 to BMDCs in serum-containing media.</p><p>Finally, I noticed that as particles grew older, there was a corresponding decrease in luminescence. This could not be explained by changes in mRNA concentration or encapsulation efficiency over time or by the formation of large particle aggregates, which were absent when the LNPs were reassessed. However, an easy remedy to this predicament was to use the particles as soon as possible after formulation.</p><p>Post-troubleshooting, the experimental design to evaluate protein synthesis was as follows: Murine bone marrow was collected and cultured with GM-CSF in a low-binding six-well plate for five days to differentiate BMDCs. Cells were then plated in a 96-well plate (200,000 cells per well), rested overnight, and treated with LNPs ~12 hours later. Luminescence was measured 24 hours after adding the LNPs. Results, shown in <strong>Figure 1</strong>, demonstrated that the luciferase protein was present following treatment with any of the LNP doses tested. Though not directly measured, we can be fairly confident that the steps preceding translation also occurred: our LNPs were taken up by the BMDCs, then mRNA was released into the cytoplasm, where it was translated into protein. The next step was to determine whether or not these proteins were processed and presented adequately to stimulate a T cell response.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!YaL7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f68c553-a0f8-4f32-b551-c03ffc4fefe4_2500x1406.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!YaL7!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f68c553-a0f8-4f32-b551-c03ffc4fefe4_2500x1406.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!YaL7!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f68c553-a0f8-4f32-b551-c03ffc4fefe4_2500x1406.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!YaL7!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f68c553-a0f8-4f32-b551-c03ffc4fefe4_2500x1406.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!YaL7!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f68c553-a0f8-4f32-b551-c03ffc4fefe4_2500x1406.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!YaL7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f68c553-a0f8-4f32-b551-c03ffc4fefe4_2500x1406.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4f68c553-a0f8-4f32-b551-c03ffc4fefe4_2500x1406.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!YaL7!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f68c553-a0f8-4f32-b551-c03ffc4fefe4_2500x1406.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!YaL7!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f68c553-a0f8-4f32-b551-c03ffc4fefe4_2500x1406.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!YaL7!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f68c553-a0f8-4f32-b551-c03ffc4fefe4_2500x1406.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!YaL7!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f68c553-a0f8-4f32-b551-c03ffc4fefe4_2500x1406.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>Figure 1</strong> - Results of experiments testing the ability of bone marrow-derived dendritic cells (BMDCs) to synthesize luciferase following treatment with lipid nanoparticles containing luciferase- and ovalbumin-encoding mRNA. Each &#8220;sample&#8221; is a different BMDC donor mouse (n = 3). Samples were treated in triplicate (left) and triplicates were averaged for analysis (right). Results were analyzed by one-way ANOVA (p &lt; 0.0001) with significant (p &lt; 0.05) Tukey&#8217;s multiple comparisons p-values indicated. RLU, relative light unit.</figcaption></figure></div><p>To address this question, I proceeded to the portion of the project where the ovalbumin mRNA gets the spotlight. OT-1 cells, which are transgenic CD8+ T cells bearing receptors that recognize the SIINFEKL peptide (derived from the ovalbumin protein) when bound to the H-2Kb <a href="https://en.wikipedia.org/wiki/Major_histocompatibility_complex#MHC_class_I">MHC class I</a> molecule, were a useful immunological tool for these experiments. The design was such that OT-1 cells would be isolated from splenocytes, labeled with CFSE, and then cultured with LNP-pulsed BMDCs. Whether the T cells responded to antigen presentation by the BMDCs would be determined using flow cytometry, where a dilution of CFSE indicates proliferation. Similar to those above, these experiments also required some troubleshooting, mainly to determine an adequate number of each cell type (BMDCs and OT-1 cells) to include per well. Initial attempts revealed that 200,000 of each per well was too many and 50,000 BMDCs plus 75,000 OT-1 cells was not enough.</p><p>To incorporate these findings, the following experimental setup was used: Cryopreserved bone marrow was thawed and cultured with GM-CSF in a low-binding six-well plate for five days to differentiate BMDCs. These cells were then plated in a 96-well plate (100,000 cells per well), rested overnight, and treated with LNPs ~15 hours later. Six hours after adding the LNPs, cryopreserved isolated CD8+ OT-1 cells were thawed, labeled with CFSE, and added to the culture (110,000-126,000 cells per well). The co-culture incubated for three days, with half of the media replenished on the second day, and was then stained and acquired on a flow cytometer. <strong>Figure 2</strong> shows the flow cytometry gating strategy of a representative sample, and the results of two experiments (each using T cells from a different mouse) are below in <strong>Figure 3</strong>. These results demonstrate a dose-response relationship between mRNA LNP dose and T cell proliferation, wherein higher concentrations of mRNA led to greater proliferation, indicating that ovalbumin is not only being translated within the antigen presenting cells but is also being processed internally and presented to T cells on major histocompatibility complex molecules.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!_mkh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ed8d893-a32a-42e8-a962-b60b42e9da65_1642x585.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!_mkh!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ed8d893-a32a-42e8-a962-b60b42e9da65_1642x585.png 424w, /__u/substackcdn.com/image/fetch/$s_!_mkh!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ed8d893-a32a-42e8-a962-b60b42e9da65_1642x585.png 848w, /__u/substackcdn.com/image/fetch/$s_!_mkh!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ed8d893-a32a-42e8-a962-b60b42e9da65_1642x585.png 1272w, /__u/substackcdn.com/image/fetch/$s_!_mkh!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ed8d893-a32a-42e8-a962-b60b42e9da65_1642x585.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!_mkh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ed8d893-a32a-42e8-a962-b60b42e9da65_1642x585.png" width="1456" height="519" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8ed8d893-a32a-42e8-a962-b60b42e9da65_1642x585.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:519,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!_mkh!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ed8d893-a32a-42e8-a962-b60b42e9da65_1642x585.png 424w, /__u/substackcdn.com/image/fetch/$s_!_mkh!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ed8d893-a32a-42e8-a962-b60b42e9da65_1642x585.png 848w, /__u/substackcdn.com/image/fetch/$s_!_mkh!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ed8d893-a32a-42e8-a962-b60b42e9da65_1642x585.png 1272w, /__u/substackcdn.com/image/fetch/$s_!_mkh!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ed8d893-a32a-42e8-a962-b60b42e9da65_1642x585.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>Figure 2</strong> - Gating of flow cytometry samples. Alive and CD3e+ T cell gates were drawn based on fluorescence-minus-one controls.</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!xnD3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa88ff778-47e7-4aa9-bd0b-5ca2afae6282_1963x843.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!xnD3!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa88ff778-47e7-4aa9-bd0b-5ca2afae6282_1963x843.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!xnD3!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa88ff778-47e7-4aa9-bd0b-5ca2afae6282_1963x843.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!xnD3!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa88ff778-47e7-4aa9-bd0b-5ca2afae6282_1963x843.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!xnD3!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa88ff778-47e7-4aa9-bd0b-5ca2afae6282_1963x843.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!xnD3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa88ff778-47e7-4aa9-bd0b-5ca2afae6282_1963x843.jpeg" width="1456" height="625" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a88ff778-47e7-4aa9-bd0b-5ca2afae6282_1963x843.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:625,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!xnD3!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa88ff778-47e7-4aa9-bd0b-5ca2afae6282_1963x843.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!xnD3!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa88ff778-47e7-4aa9-bd0b-5ca2afae6282_1963x843.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!xnD3!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa88ff778-47e7-4aa9-bd0b-5ca2afae6282_1963x843.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!xnD3!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa88ff778-47e7-4aa9-bd0b-5ca2afae6282_1963x843.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>Figure 3</strong> - Results of experiments testing the ability of bone marrow-derived dendritic cells (BMDCs) to stimulate proliferation of OT-1 T cells following treatment with lipid nanoparticles (LNPs) containing luciferase- and ovalbumin-encoding mRNA. Each panel shows the T cell population defined as in <strong>Figure 2</strong> following culture with BMDCs from a different donor mouse (n = 3) treated as described (left).</figcaption></figure></div><p>This brings us to the end of this set of experiments, although work on this project is far from over. Stay tuned to the PIRL blog for future updates, which we anticipate will involve testing the efficacy of mRNA LNP vaccines <em>in vivo</em>.</p>]]></content:encoded></item><item><title><![CDATA[What does "immunogenicity" even mean?]]></title><description><![CDATA[Knowing whether a peptide can elicit a T-cell response is a critical element of vaccine design but defining and standardizing this idea of "immunogenicity" can be very subtle.]]></description><link>https://pirlblog.substack.com/p/what-does-immunogenicity-even-mean</link><guid isPermaLink="false">https://pirlblog.substack.com/p/what-does-immunogenicity-even-mean</guid><dc:creator><![CDATA[Dhuvi Karthikeyan]]></dc:creator><pubDate>Sat, 01 Oct 2022 20:01:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!avci!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F705cfe39-82f1-4345-af1c-b790c8ea1420_386x375.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Predicting T-cell <strong>immunogenicity</strong>, or the ability of peptides to elicit a T-cell response, is a critical element of vaccine design. This post looks at the nuance surrounding immunogenicity and how standardizing its quantification across contexts remains understudied. Here, I examine the motivations for formalizing in-context definitions for immunogenicity and propose a quantification method that is broadly applicable to a number of T-cell contexts, including peptide vaccine design.</p><div><hr></div><p><strong>Note: </strong>There are different types of immunogenicity depending on the type of immune response elicited such as humoral immunogenicity (B-cell) and cell-mediated immunogenicity (T-cell). For brevity, all further references of immunogenicity will be referring to cell-mediated immunogenicity, a concept I break down <a href="https://medium.com/@DhuviKarthikey1/market-sizing-the-immune-system-63a38f3c1e7e">here</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!avci!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F705cfe39-82f1-4345-af1c-b790c8ea1420_386x375.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!avci!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F705cfe39-82f1-4345-af1c-b790c8ea1420_386x375.png 424w, /__u/substackcdn.com/image/fetch/$s_!avci!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F705cfe39-82f1-4345-af1c-b790c8ea1420_386x375.png 848w, /__u/substackcdn.com/image/fetch/$s_!avci!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F705cfe39-82f1-4345-af1c-b790c8ea1420_386x375.png 1272w, /__u/substackcdn.com/image/fetch/$s_!avci!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F705cfe39-82f1-4345-af1c-b790c8ea1420_386x375.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!avci!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F705cfe39-82f1-4345-af1c-b790c8ea1420_386x375.png" width="386" height="375" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/705cfe39-82f1-4345-af1c-b790c8ea1420_386x375.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:375,&quot;width&quot;:386,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!avci!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F705cfe39-82f1-4345-af1c-b790c8ea1420_386x375.png 424w, /__u/substackcdn.com/image/fetch/$s_!avci!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F705cfe39-82f1-4345-af1c-b790c8ea1420_386x375.png 848w, /__u/substackcdn.com/image/fetch/$s_!avci!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F705cfe39-82f1-4345-af1c-b790c8ea1420_386x375.png 1272w, /__u/substackcdn.com/image/fetch/$s_!avci!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F705cfe39-82f1-4345-af1c-b790c8ea1420_386x375.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>MHC-I and MHC-II Presentation Pathways</em> (<a href="https://www.nature.com/articles/nri3339">source</a>)</figcaption></figure></div><h2>Background &amp; Motivations</h2><p>T-cell immune responses require the synergistic operation of a number of sub-cellular events by both the antigen presenting cell as well as the responding T-cell. Canonically, these events can broadly be categorized as falling within: <strong>antigen presentation</strong>, and <strong>TCR recognition</strong> (shown above). However, there is a third category of events which, for lack of a consensus term, I call <strong>promotion/attenuation</strong> that also plays a key part in determining immune response. This category encompasses the expanse of immune checkpoint + co-stimulatory interactions with surface receptors on T-cells to either promote or attenuate that cell&#8217;s effector function. Predicting immunogenicity requires accurately predicting all three events.</p><p>In a perfect world, with unlimited access to information, we could predict immunogenicity of a peptide in an individual by first looking at the different surface MHC molecules and predicting how stable the peptide will bind MHC and stay presented. Then we could look at the individual&#8217;s entire TCR repertoire and predict how many TCRs would react and bind the peptide-MHC (pMHC) conjugate. Last, we would need to check the activation/senescence cell states of the reactive TCRs and count how many clones will initiate effector function. Immunogenicity could thus be found as some weighted score involving the presentation, recognition, and activation propensities. In the real world however, we have nowhere near this level of data available, and must go about immunogenicity prediction in more roundabout ways.</p><div><hr></div><h3><strong>Current Landscape of Immunogenicity Prediction</strong></h3><p>Because data on attenuators and promotors vary on a clonotype level within an individual and across individuals (affected by prior/concurrent infections), along with other variables, much focus has been placed on first predicting presentation and recognition. Tools like <a href="https://pubmed.ncbi.nlm.nih.gov/28978689/">NetMHCpan</a> and <a href="https://www.sciencedirect.com/science/article/pii/S2405471220302398">MHCFlurry</a> have achieved high accuracy in predicting peptide presentation, whereas no tools have emerged that perform on a similar caliber at predicting TCR recognition. <a href="https://academic.oup.com/bib/article/23/3/bbac141/6573960?login=false">Buckley et al</a> benchmarked a number of immunogenicity predictors and reported that immunogenicity prediction (IP) of arbitrary peptides <strong>fails to outperform simple predictors of peptide presentation</strong>, indicating an apparent need to better predict TCR recognition. I suspect this is due in large part to the fact that training data used for IP is almost always binarized. Thus, to explicitly train models to learn and predict TCR recognition (which can vary wildly), perhaps a more meaningful metric of quantifying TCR recognition propensities needs to be used as training data.</p><h3><strong>Current Landscape of Available Immunogenicity Data</strong></h3><p>Immunogencity data as a whole is siloed by assay of origin. To measure the presentation of a specific peptide there MHC presentation assays. Common assays are for measuring T-cell response include: <a href="https://en.wikipedia.org/wiki/ELISA">ELISA</a>/<a href="https://en.wikipedia.org/wiki/ELISpot">ELISpot</a>, <a href="https://en.wikipedia.org/wiki/MHC_multimer">multimer</a>, intracellular stains, proliferation assays, and degranulation assays. These assays are optimal for answering various scientific questions. For example, to check for reactive TCRs: a multimer assay would tell if certain TCRs bind a specific multimer. However, to check if TCR recognition leads to an immune response these multimer+ cells would need to be assayed via intracellular stain or other functional assays. To perfectly check for the TCR recognition propensity of a pMHC, we&#8217;d need an exhaustive set of the entire TCR space and a mechanism to check what proportion of this set reacts with a given pMHC. However, because the available TCR space is ~10^15 and each TCR has the ability to bind multiple pMHCs, there is a need to collect assay data from many individuals, in hopes of sampling from the set of TCRs. The IEDB is a comprehensive database with such a dataset that looks at studies where the immunogenicity of specific pMHCs were tested across multiple individuals.</p><div><hr></div><h3>Defining TCR Recognition Propensity with IEDB</h3><p>From the perspective of PIRL, one of our goals is to create personalized cancer vaccines. So one of the reasons we work on IP is to be able to rank putative neoantigens such that the highest ranked peptides are those that selected for inclusion in a vaccine. In this exploration which is available <a href="https://github.com/pirl-unc/blogs/tree/main/Defining%20Immunogenicity">here</a> as an iPython notebook, I took a look at subset of the available IEDB data that was filtered on MHC-I data and was generated from multimer assay data. We specifically chose this assay as a high confidence assay where we could claim that there were reactive TCRs to the given multimer (pMHC). This reduces immunogenicity from presentation and recognition to just recognition because we condition on the event that the peptide has been presented by the MHC on the multimer. A snapshot of the dataset is shown below.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!JUHb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F961130f5-2ac0-4062-8576-8d4571387a76_999x549.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!JUHb!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F961130f5-2ac0-4062-8576-8d4571387a76_999x549.png 424w, /__u/substackcdn.com/image/fetch/$s_!JUHb!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F961130f5-2ac0-4062-8576-8d4571387a76_999x549.png 848w, /__u/substackcdn.com/image/fetch/$s_!JUHb!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F961130f5-2ac0-4062-8576-8d4571387a76_999x549.png 1272w, /__u/substackcdn.com/image/fetch/$s_!JUHb!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F961130f5-2ac0-4062-8576-8d4571387a76_999x549.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!JUHb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F961130f5-2ac0-4062-8576-8d4571387a76_999x549.png" width="999" height="549" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/961130f5-2ac0-4062-8576-8d4571387a76_999x549.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:549,&quot;width&quot;:999,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!JUHb!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F961130f5-2ac0-4062-8576-8d4571387a76_999x549.png 424w, /__u/substackcdn.com/image/fetch/$s_!JUHb!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F961130f5-2ac0-4062-8576-8d4571387a76_999x549.png 848w, /__u/substackcdn.com/image/fetch/$s_!JUHb!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F961130f5-2ac0-4062-8576-8d4571387a76_999x549.png 1272w, /__u/substackcdn.com/image/fetch/$s_!JUHb!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F961130f5-2ac0-4062-8576-8d4571387a76_999x549.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Sample of IEDB Multimer Assay Data (MHC-I)</figcaption></figure></div><p>When looking at the data from the IEDB, we run into the issue that for a given peptide MHC, there are a number of different studies reporting the immunogenicity of that pMHC. Each quantify the immunogenicity of the pMHC in slightly different ways, and in some instances, the studies do not agree with each other. Some include quantitative measurements, and some include qualitative measurements with labels spanning (Immunogenic, Immunogenic-strong, Immunogenic-weak, and Non-immunogenic). Thus, a standardized quantification of TCR recognition needs to be crafted that makes use of the variability of the multimers&#8217; ability to bind TCRs and be classified as positive staining. I decided to look at the number of subjects responded over the number of subjects tested as a standardized method of quantifying TCR recognition across a number of TCR repertoires. Like from the second thought experiment scenario, the idea was that when we look across various individuals, the pMHCs with a higher propensity for TCR recognition will stimulate a representative sample of TCRs with a higher frequency.</p><p>Once I chose this as my given metric, I needed to perform data imputation for the cases where the number of individuals tested was not given. In this case, I looked through a few of the papers that didn&#8217;t cite the number of individuals tested and found from those papers, that only one individual was tested. So I chose n_tested = 1 for those cases. Furthermore, in order to include some degree of uncertainty for the ratios where only a few number of individuals was tested I decided to use <a href="https://stats.stackexchange.com/questions/108797/in-naive-bayes-why-bother-with-laplace-smoothing-when-we-have-unknown-words-in">Laplace smoothing</a> to add two dummy individuals to the each case: responded as well as didn&#8217;t respond. This smoothing made it such that those pMHCs where a large number of individuals were tested and a majority either responded or didn&#8217;t respond, the change to the ratio would be minimal. However if only one individual was tested and either responded or didn&#8217;t respond the smoothing pulled the ratio down from 1.00 or up from 0.00.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!5_tQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfeb27b6-e483-4d3a-852b-a4a5fcc06a04_520x60.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!5_tQ!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfeb27b6-e483-4d3a-852b-a4a5fcc06a04_520x60.png 424w, /__u/substackcdn.com/image/fetch/$s_!5_tQ!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfeb27b6-e483-4d3a-852b-a4a5fcc06a04_520x60.png 848w, /__u/substackcdn.com/image/fetch/$s_!5_tQ!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfeb27b6-e483-4d3a-852b-a4a5fcc06a04_520x60.png 1272w, /__u/substackcdn.com/image/fetch/$s_!5_tQ!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfeb27b6-e483-4d3a-852b-a4a5fcc06a04_520x60.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!5_tQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfeb27b6-e483-4d3a-852b-a4a5fcc06a04_520x60.png" width="520" height="60" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cfeb27b6-e483-4d3a-852b-a4a5fcc06a04_520x60.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:60,&quot;width&quot;:520,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!5_tQ!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfeb27b6-e483-4d3a-852b-a4a5fcc06a04_520x60.png 424w, /__u/substackcdn.com/image/fetch/$s_!5_tQ!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfeb27b6-e483-4d3a-852b-a4a5fcc06a04_520x60.png 848w, /__u/substackcdn.com/image/fetch/$s_!5_tQ!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfeb27b6-e483-4d3a-852b-a4a5fcc06a04_520x60.png 1272w, /__u/substackcdn.com/image/fetch/$s_!5_tQ!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcfeb27b6-e483-4d3a-852b-a4a5fcc06a04_520x60.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Laplace Smoothing Scheme</figcaption></figure></div><p>From here I needed to collate various experiments together that looked at the same pMHC. There are a number of options of how to handle the variability among the results we get combining across experiments. We can treat them as one giant experiment and sum over all the total responded and total tested. However, I decided against this because each experiment was performed separately and I felt that batch effects may somehow confound this. I entertained drawing a sample of outcomes with sampling probabilities equal to the empirical distribution, bootstrapping, and even taking the geometric average. For a first pass approach, I ended up choosing a modified geometric mean that is weighted by the number of individuals tested (personal choice that behaved well with the example above and when class switched).</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!PtaI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc387db4-3c39-4000-9ff3-0ab2ae58c9be_336x94.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!PtaI!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc387db4-3c39-4000-9ff3-0ab2ae58c9be_336x94.png 424w, /__u/substackcdn.com/image/fetch/$s_!PtaI!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc387db4-3c39-4000-9ff3-0ab2ae58c9be_336x94.png 848w, /__u/substackcdn.com/image/fetch/$s_!PtaI!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc387db4-3c39-4000-9ff3-0ab2ae58c9be_336x94.png 1272w, /__u/substackcdn.com/image/fetch/$s_!PtaI!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc387db4-3c39-4000-9ff3-0ab2ae58c9be_336x94.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!PtaI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc387db4-3c39-4000-9ff3-0ab2ae58c9be_336x94.png" width="336" height="94" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dc387db4-3c39-4000-9ff3-0ab2ae58c9be_336x94.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:94,&quot;width&quot;:336,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!PtaI!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc387db4-3c39-4000-9ff3-0ab2ae58c9be_336x94.png 424w, /__u/substackcdn.com/image/fetch/$s_!PtaI!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc387db4-3c39-4000-9ff3-0ab2ae58c9be_336x94.png 848w, /__u/substackcdn.com/image/fetch/$s_!PtaI!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc387db4-3c39-4000-9ff3-0ab2ae58c9be_336x94.png 1272w, /__u/substackcdn.com/image/fetch/$s_!PtaI!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc387db4-3c39-4000-9ff3-0ab2ae58c9be_336x94.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Below we can see what went from a list of disparate metrics of measuring immunogenicity projected onto a standard axis with a biologically relevant meaning. In future work I will be comparing the performance of models trained on this dataset versus models trained on the binarized version of this dataset. This work is still in progress and I aim to also test out other imputation schemes as well as other methods of combining across experiments, but I do anticipate better performance on downstream predictors from this data. The results and pipeline have been made readily available for the community if anyone is working on IP and likewise thinks that there must be something better than binarized data to train on.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!HYzC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F436aa1d5-799d-4675-963c-1dcd11a82010_606x480.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!HYzC!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F436aa1d5-799d-4675-963c-1dcd11a82010_606x480.png 424w, /__u/substackcdn.com/image/fetch/$s_!HYzC!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F436aa1d5-799d-4675-963c-1dcd11a82010_606x480.png 848w, /__u/substackcdn.com/image/fetch/$s_!HYzC!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F436aa1d5-799d-4675-963c-1dcd11a82010_606x480.png 1272w, /__u/substackcdn.com/image/fetch/$s_!HYzC!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_webp, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F436aa1d5-799d-4675-963c-1dcd11a82010_606x480.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!HYzC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F436aa1d5-799d-4675-963c-1dcd11a82010_606x480.png" width="606" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/436aa1d5-799d-4675-963c-1dcd11a82010_606x480.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:606,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!HYzC!, /__u/pirlblog.substack.com/w_424, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F436aa1d5-799d-4675-963c-1dcd11a82010_606x480.png 424w, /__u/substackcdn.com/image/fetch/$s_!HYzC!, /__u/pirlblog.substack.com/w_848, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F436aa1d5-799d-4675-963c-1dcd11a82010_606x480.png 848w, /__u/substackcdn.com/image/fetch/$s_!HYzC!, /__u/pirlblog.substack.com/w_1272, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F436aa1d5-799d-4675-963c-1dcd11a82010_606x480.png 1272w, /__u/substackcdn.com/image/fetch/$s_!HYzC!, /__u/pirlblog.substack.com/w_1456, /__u/pirlblog.substack.com/c_limit, /__u/pirlblog.substack.com/f_auto, /__u/pirlblog.substack.com/q_auto:good, /__u/pirlblog.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F436aa1d5-799d-4675-963c-1dcd11a82010_606x480.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Snapshot of transformed data with new quantification of TCR recognition (y).</figcaption></figure></div>]]></content:encoded></item></channel></rss>