<style> #title { height: 100% !important; display: flex !important; flex-direction: column !important; justify-content: center !important; } </style> <section id="title" data-background="/images/presentations/bg.svg.png" data-transition-speed="slow"> # Making sense of genomic intervals Nathan Sheffield <div class="bullet"> <img src="/images/external/uva_dgs_logo.svg" height="85"> <img src="/images/logo/logo_databio_long.svg" height="65"> </div> <span style="font-size:0.6em"><a href="http://www.databio.org/slides">www.databio.org/slides</a></span> </section> --- <!-- .slide: data-background="/images/presentations/bg.svg.png" data-transition-speed="slow" --> ### Outline <style> .previewblock { float: left; width: 20px; height: 45px; margin: 0; border: none; white-space: nowrap; box-sizing: border-box; } .questionblock { float: left; width: 100%; margin: 5px 0; border: 1px solid rgba(255, 255, 255, .2); } </style> <div class="previewblock" style="width:20%">Background and motivation</div> <div class="previewblock" style="width:60%">Region embeddings</div> <div class="previewblock" style="width:20%">BEDbase</div> <div class="previewblock" style="width:20%">|</div> <div class="previewblock" style="width:60%">|</div> <div class="previewblock" style="width:20%">|</div> <br clear="all"> <div class="previewblock" style="width:20%; background:#883388">20%</div> <div class="previewblock" style="width:60%; background:#338888">60%</div> <div class="previewblock" style="width:20%; background:#338833">20%</div> <div class="previewblock" style="width:20%"></div> <div class="previewblock" style="width:60%"></div> <div class="previewblock" style="width:20%"></div> <br clear="all"> <div class="previewblock" style="width:20%"></div> <div class="previewblock" style="width:60%"></div> <div class="previewblock" style="width:20%"></div> <div class="questionblock" style="background:#222; color:#eee; font-size: 0.6em; margin-top: 35px">◁ Questions ▷</div> --- <img src="/_modules/bio-motivation-genomic-intervals/genomic-intervals.svg" width="100%"><br/> <span class="fragment">A universal language of computational genomics</span> --- ## There are many sources of genomic interval data  --- ## Genomic interval data is growing  --- <img src="/slides/2022-09-making-sense-of-genomic-intervals/self-organizing-map.svg" width="100%"> <br><span class="small bullet"><img src="/slides/2022-09-making-sense-of-genomic-intervals/paper.svg" height="25" class="bullet"><a href="https://dx.doi.org/10.1101/gr.152140.112">Sheffield et al. (2013). <i>Genome Research</i>.</a></span> --- ## Collections of similar genomic intervals can be very powerful --- <img src="/_modules/lola-intro/LOLA-logo-white.svg" width="275" style="padding-top:25px; padding-bottom:25px"> <br> ### Locus Overlap Analysis <div class="small"> <a href="http://code.databio.org/LOLA/">http://code.databio.org/LOLA/</a><br> </div> <span class="small bullet"><a href="https://doi.org/10.1093/bioinformatics/btv612"><img src="/_modules/lola-intro/paper.svg" height="25" class="bullet">Sheffield and Bock (2016). <i>Bioinformatics</i>.</a></span><br/> <span class="small bullet"><img src="/_modules/lola-intro/paper.svg" height="25" class="bullet"><a href="https://doi.org/10.1093/nar/gky464">Nagraj, Magee, and Sheffield (2018). <i>Nucleic Acids Research</i>.</a></span> --- <img src="/_modules/lola-intro/short-01-challenge.svg" /> --- <img src="/_modules/lola-intro/08-lola2.svg" /> --- <img src="/_modules/lola-intro/09-test.svg" /> --- ### LOLA requires comparing sets of intervals <img src="/slides/2022-09-making-sense-of-genomic-intervals/subject-query.svg"> <img src="/slides/2022-09-making-sense-of-genomic-intervals/geo-count-total.svg" width="500"> <br>Can we improve the efficiency to enable faster,<br>larger-scale analysis? --- ### Augmented Interval List (AIList) A novel data structure for efficiently computing overlaps across genomic interval data. <a href="http://ailist.databio.org/">http://ailist.databio.org/</a> <span class="small bullet"><img src="/images/icons/paper.svg" height="25" class="bullet"><a href="https://doi.org/10.1093/bioinformatics/btz407">Feng et al. (2020). <i>Bioinformatics</i>.</a></span> ### Integrated Genome Database (IGD) A high-performance search engine for large-scale genomic interval datasets. <a href="https://github.com/databio/IGD">https://github.com/databio/IGD</a> <span class="small bullet"><img src="/images/icons/paper.svg" height="25" class="bullet"><a href="https://doi.org/10.1093/bioinformatics/btaa1062">Feng and Sheffield (2021). <i>Bioinformatics</i>.</a></span> <div style="padding:12px; font-size: 16pt; display:inline-block;"> <span style="border: 0px solid grey; float:right; margin: 0px 4px; padding: 0px 4px"> <img src="/_modules/ailist-igd-intro/Feng.jpg" width="100" style="margin:0px;"> <br>Jianglin Feng </span> </div> --- ### Augment with the running maximum end value, `maxE` Provides a *local guarantee* of no containment. <img src="/_modules/ailist-igd-intro/ailist-maxE.svg"> --- ### Aumented Interval List works on contained lists <img src="/_modules/ailist-igd-intro/subject-query-containment.svg"> <img src="/_modules/ailist-igd-intro/binary-search-maxE.svg"> --- #### How does it scale with increasing size of subject? <img src="/_modules/ailist-igd-intro/ailist_fig4.svg"> --- ### Expanding the search space <img src="/_modules/ailist-igd-intro/subject-query-one-vs-one.svg"> <div class="fragment"> <img src="/_modules/ailist-igd-intro/subject-query-one-vs-many.svg"> </div> --- ### An integrated data structure <img src="/_modules/ailist-igd-intro/subject-query-one-vs-many-loop.svg"> <div class="fragment"> <img src="/_modules/ailist-igd-intro/subject-query-one-vs-many-integrate.svg"> </div> --- ### IGD uses linear binning - The genome is divided into equal-size bins - Database intervals are placed in any bins they overlap - Intervals are sorted by start coordinate within a bin <div class="fragment"> <img src="/_modules/ailist-igd-intro/igd_database.svg" height="400" style="background: white"> </div> --- ### Performance <img src="/_modules/ailist-igd-intro/igd_performance.svg" height="400" style="background: white"> --- ## But is counting overlaps really the right approach? --- <img src="/_modules/bio-motivation-region-embeddings/interval-similarity-overlap.svg"> What does it mean for two region sets to be similar?<br> What am I really looking for in a region set query? <div class="fragment">Overlaps makes some sense...but what about: <br> degree of overlap?</div> <div class="fragment">biological function of each region?</div> <div class="fragment">weighting of specific regions?</div> <div class="fragment">relationships among regions?</div> <div class="fragment">background context?</div> --- ### The bag-of-words model for text classification <img src="/_modules/bio-motivation-region-embeddings/bag-of-words.svg" width="100%"> <span class="fragment">What about a bag-of-intervals model for genomic intervals?</span> --- ### The bag-of-intervals model for genomic intervals <img src="/_modules/bio-motivation-region-embeddings/interval-universe.svg" width="680"> <ul class="fragment">Advantages <li>Vector representation of a region set</li> <li>Similarity metrics among vectors</li> <li>Lower space and time complexity than interval sets</li> </ul> --- ### Limitations of the bag of words vector approach <ul> <li>Sparsity</li> <li>Curse of dimensionality</li> <li>Space and time complexity are still an issue</li> <li>No concept of relationships among words</li> <code><pre style="color:#AAAAFF; text-align:center"> hotel = [0 0 0 0 0 0 0 1 0 0 0 0 0 0] motel = [0 0 0 0 0 0 0 0 0 0 0 0 1 0] </pre></code> </ul> --- <div> <h3>Region-set 2 Vec</h3> Embeddings of genomic region sets <br> in lower dimensions. <div class="small"> <a href="https://github.com/databio/regionset-embedding">https://github.com/databio/regionset-embedding</a><br> </div> </div> <span class="small bullet"><img src="/_modules/regionset2vec/paper.svg" height="25" class="bullet"><a href="https://doi.org/10.1093/bioinformatics/btab439">Gharavi et al. (2021). <i>Bioinformatics</i>.</a></span> --- ### Word embeddings <img src="/_modules/regionset2vec/word-vector-space-similar-words.jpg" width="680"> <div class="small">http://suriyadeepan.github.io</div> --- ### Word2vec model <img src="/_modules/regionset2vec/mikolov2013_fig1.png" width="680"> <br><span class="small bullet"><img src="/_modules/regionset2vec/paper.svg" height="25" class="bullet"><a href="https://arxiv.org/abs/1301.3781">Mikolov et al. (2013). <i>arXiv:1301.3781v3</i>.</a></span> --- ### Word context <img src="/_modules/regionset2vec/word-context.png" width="640" style="background:white"> <div class="well"> You shall know a word by the company it keeps. (Firth 1957)<br> Words that occur in similar contexts tend to have similar meanings. </div> <div class="small">Image credit: Shubham Agarwal</div> --- ### Genomic context <div class="well"> A genomic interval is more likely to appear in a BED file with other genomic intervals of a similar function. </div> --- <img src="/_modules/regionset2vec/complexity-scale.svg" width="1040"> --- ### Genomic Interval Embeddings <img src="/_modules/regionset2vec/method_detail_v3.svg" width="1040" style="background:white"> --- ### Evaluation We have created unsupervised 100-dimensional vector representations (embeddings) of region sets.<br> Do relationships among vectors reflect biology? <div class="fragment"> <img src="/_modules/regionset2vec/method_overview_v3.svg" width="1040" style="background:white"> </div> --- ## Evaluation 1: Classification performance <img src="/_modules/regionset2vec/evaluation-classification-result.svg" width="740"> --- ## Evaluation 1: Classification performance <img src="/_modules/regionset2vec/evaluation-classification-result-2.svg" width="740"> --- ### Evaluation 1: Classification performance <img src="/_modules/regionset2vec/umap_classification.svg" width="740" style="background:white"> <div class="fragment"> <img src="/_modules/regionset2vec/umap_classification2.svg" width="740" style="background:white"> </div> --- ### Conclusion <ul> <li>Regionset2vec adapts word2vec to learn genomic region embeddings</li> <li>Regionset2vec embeddings capture biological information</li> <li>NLP approaches can be adapted for applications in genomic interval analysis</li> </ul> --- ## Region embeddings are highly tunable <li>Tokenization</li> <li>Universe selection</li> <li>Learning rate</li> <li>Extent of training</li> <li>Context window size</li> <li>The model itself</li> <br><span class="fragment">How can we make the best embeddings?</span> <br><span class="fragment">How can we evaluate region embeddings?</span> --- ## Evaluation of genomic interval embeddings <div class="well"> Assumption:<br> Proximity in linear genome space <br>increases probability of similar function </div> <div class="col2"> Neighborhood preserving tests  </div> <div class="col2 fragment"> Results  </div> <div style="padding:12px; font-size: 16pt; position:absolute; top:-50px;right:-100px"> <span style="border: 0px solid grey; float:right; margin: 0px 4px; padding: 0px 4px"> <img src="/_modules/regionset2vec-extension/guangtao.jpg" width="100" style="margin:0px;"> <br>Guangtao Zheng </span> </div> --- ## Evaluation of genomic interval embeddings <div class="well"> Assumption:<br> Proximity in linear genome space <br>increases probability of similar function </div> <div class="col2"> Grouped average distance tests  </div> <div class="col2 fragment"> Results  </div> <div style="padding:12px; font-size: 16pt; position:absolute; top:-50px;right:-100px"> <span style="border: 0px solid grey; float:right; margin: 0px 4px; padding: 0px 4px"> <img src="/_modules/regionset2vec-extension/guangtao.jpg" width="100" style="margin:0px;"> <br>Guangtao Zheng </span> </div> --- ## Tokenization and universe selection <div style="padding:12px; font-size: 16pt; position:absolute; top:-50px;right:-100px"> <span style="border: 0px solid grey; float:right; margin: 0px 4px; padding: 0px 4px"> <img src="/_modules/regionset2vec-extension/Julia.jpg" width="100" style="margin:0px;"> <br>Julia Rymuza </span> </div>  --- <div style="padding:12px; font-size: 16pt; position:absolute; top:-50px;right:-100px"> <span style="border: 0px solid grey; float:right; margin: 0px 4px; padding: 0px 4px"> <img src="/_modules/regionset2vec-extension/Erfaneh.jpg" width="100" style="margin:0px;"> <br>Erfaneh Gharavi </span> </div> Joint representation learning <br> of genomic interval sets and metadata  <div class="fragment">  </div> ---  --- ## Neural networks are like pigs. ## If you want them to be useful, ## you have to feed them a lot. --- <style> .wrap { width: 1550px; height: 1000px; overflow: hidden; } iframe { width: 97% !important; height: 85% !important; -webkit-transform: scale(0.65); transform: scale(0.65); -webkit-transform-origin: 0 0; transform-origin: 0 0; } </style> <div> <h3>BEDbase</h3> A high-performance server and API <br> for genomic interval data. <br><span class="small bullet"><img src="/_modules/bedbase/web.svg" height="30" class="bullet"><a href="https://bedbase.org">bedbase.org</a></span> </div> --- <div> <img src="/_modules/bedbase/bedbase_logo.svg" width="275"> <br> A high-performance server and API <br> for genomic interval data. <div class="small"> <a href="http://bedbase.org">http://bedbase.org</a><br> </div> </div> <ul> <li>Data spans projects (*e.g.* all data on GEO; 40,000 accessions, 100,000+ BED files)</li> <li>Programmatic API for metadata, statistics, and data chunks</li> <li>Human browsing of statistical and biological attributes</li> <li>Aware of similarities among BED files</li> <li>Human-friendly search</li> <li>Shaped into 'non-redundant' sets for analysis</li> </ul> --- ### BEDbase goals - Human browsing of statistical and biological attributes - Human-friendly, *intelligent* search - Programmatic API for metadata, statistics, and data chunks - Integrative analytical results - Data spans projects (all data on GEO) --- ### BEDbase architecture <img src="/_modules/bedbase/architecture_v2.svg" width="1040" style="background:white"> --- <a href="https://doi.org/10.1038/s41597-022-01619-5"><img src="/_modules/bedbase/sheffield2022.png" style="background:white"></a> <br>BEDbase is a microservice for data interoperability,<br> not another cloud platform --- <ol> <li style="color:yellow">Web interface (front-end)</li> <li style="">Clients (front-end)</li> <li style="">API (back-end)</li> <li style="">Database and files (back-end/infrastructure)</li> <li style="">Processing pipelines (infrastructure)</li> <li style="">Data served (content)</li> </ol> --- ### Human browsing of BED file splash pages <span class="small"><a href="https://bedbase.org/bed/bd2578e70c0efe3674d0d39c782fe9e1">https://bedbase.org/bed/bd2578e70c0efe3674d0d39c782fe9e1</a></span> <div class="wrap"> <iframe src="https://bedbase.org/bed/bd2578e70c0efe3674d0d39c782fe9e1" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen ></iframe> </div> --- ### Reference genome compatibility <img src="/_modules/bedbase/ref_genome_scores_1.svg" height="530" style="background:white"> --- ### Reference genome compatibility <img src="/_modules/bedbase/ref_genome_scores.svg" height="530" style="background:white"> --- ### Reference genome compatibility <div class="col2"> <img src="/_modules/bedbase/ref_genome_scores.svg" height="400" style="background:white"> </div> <div class="col2"> <img src="/_modules/bedbase/bedbase-ref-genome-compat.png" height="530" style="background:white"> </div> --- ### BEDsets allow comparison of BED files <span class="small"><a href="https://bedbase.org/bedset/gse246900">https://bedbase.org/bedset/gse246900</a></span> <div class="wrap"> <iframe src="https://bedbase.org/bedset/gse246900" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen ></iframe> </div> --- ### Human-friendly search <span class="small">Co-embedded metadata and region sets: <a href="https://bedbase.org/search?q=brain">https://bedbase.org/search?q=brain</a></span> <div class="wrap"> <iframe src="https://bedbase.org/search?q=brain" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe> </div> --- ### Human-friendly search <img src="/_modules/bedbase/text_search_1.svg" height="530" style="background:white"> --- ### Human-friendly search <img src="/_modules/bedbase/text_search.svg" width="1040" style="background:white"> --- ### Search by BED file <span class="small">Co-embedded metadata and region sets: <a href="https://bedbase.org/search?view=b2b">https://bedbase.org/search?view=b2b</a></span> <div class="wrap"> <iframe src="https://bedbase.org/search?view=b2b" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe> </div> --- <ol> <li style="">Web interface (front-end)</li> <li style="color:yellow">Clients (front-end)</li> <li style="">API (back-end)</li> <li style="">Database and files (back-end/infrastructure)</li> <li style="">Processing pipelines (infrastructure)</li> <li style="">Data served (content)</li> </ol> --- # BEDbase R client <img src="/_modules/bedbase/bedbaser.png" width="100%"/> --- ``` library("bedbaser") bedbase <- BEDbase(tempdir()) bb_to_granges(bedbase, "ab446df9a043222067863cfd536ee8e0") ``` ``` GRanges object with 37 ranges and 5 metadata columns: seqnames ranges strand | name score [Rle] [IRanges] [Rle] | [character] [integer] [1] chr17 38083473-38083801 * | O-8A-H3K27ac_peak_11.. 21 [2] chr17 38108871-38110066 * | O-8A-H3K27ac_peak_11.. 25 [3] chr17 38137142-38137795 * | O-8A-H3K27ac_peak_11.. 33 [4] chr17 38210828-38211063 * | O-8A-H3K27ac_peak_11.. 17 [5] chr17 38218030-38220186 * | O-8A-H3K27ac_peak_11.. 19 ... ... ... ... . ... ... [33] chr17 38603620-38604355 * | O-8A-H3K27ac_peak_11.. 15 [34] chr17 38647047-38648053 * | O-8A-H3K27ac_peak_11.. 28 [35] chr17 38708445-38710424 * | O-8A-H3K27ac_peak_11.. 20 [36] chr17 38716283-38717201 * | O-8A-H3K27ac_peak_11.. 23 [37] chr17 38803702-38804538 * | O-8A-H3K27ac_peak_11.. 46 field8 field9 field10 [character] [character] [character] [1] 3.91024 4.82245 2.12195 [2] 4.44410 5.31600 2.51785 [3] 4.30183 6.25865 3.33754 [4] 3.94862 4.34253 1.75554 [5] 3.74929 4.57115 1.93712 ... ... ... ... [33] 3.80116 4.07741 1.55623 [34] 4.35182 5.72967 2.89524 [35] 3.88836 4.73101 2.06784 [36] 4.24210 5.08399 2.33889 [37] 5.09106 7.93609 4.68279 ------- ``` --- # BEDbase Python client <img src="/_modules/bedbase/bbclient.png" width="100%"/> --- <ol> <li style="">Web interface (front-end)</li> <li style="">Clients (front-end)</li> <li style="color:yellow">API (back-end)</li> <li style="">Database and files (back-end/infrastructure)</li> <li style="">Processing pipelines (infrastructure)</li> <li style="">Data served (content)</li> </ol> --- ## bedhost A FastAPI application following JAMstack philosophy.<br> <img src="/_modules/bedbase/jamstack.svg" width="100%"> <span class="fragment">JAMstack forces you to build a comprehensive API. </span> --- ### OpenAPI interface <span class="small"><a href="https://api.bedbase.org/v1/docs">https://api.bedbase.org/v1/docs</a></span> <div class="wrap"> <iframe src="https://api.bedbase.org/v1/docs" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen style="background: #FFFFFF;"></iframe> </div> --- ### BED info via API <span class="small"><a href="https://api.bedbase.org/v1/bed/bd2578e70c0efe3674d0d39c782fe9e1/metadata?full=true">https://api.bedbase.org/v1/bed/bd2578e70c0efe3674d0d39c782fe9e1/metadata?full=true</a></span> <div class="wrap"> <iframe src="https://api.bedbase.org/v1/bed/bd2578e70c0efe3674d0d39c782fe9e1/metadata?full=true" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen style="background: #FFFFFF;"></iframe> </div> --- <ol> <li style="">Web interface (front-end)</li> <li style="">Clients (front-end)</li> <li style="">API (back-end)</li> <li style="color:yellow">Database and files (back-end/infrastructure)</li> <li style="">Processing pipelines (infrastructure)</li> <li style="">Data served (content)</li> </ol> --- ## BEDbase data layer 1. BED file stored in Backblaze B2 (S3 compatible object store) - BED files n=21,438 (stats from 2025-05) - 346,071 total objects, 186.4 GB ($6/TB/month) 2. B2 interface is routed through cloudflare CDN (free egress!) 3. File metadata stored in a PostgreSQL database on AWS managed Relational Database Service ## → Minimal maintenance cost --- <ol> <li style="">Web interface (front-end)</li> <li style="">Clients (front-end)</li> <li style="">API (back-end)</li> <li style="">Database and files (back-end/infrastructure)</li> <li style="color:yellow">Processing pipelines (infrastructure)</li> <li style="">Data served (content)</li> </ol> --- - `bbconf`: bedbase configuration object, connection to database - `bedqc`: a pipeline for QC of BED files. - `bedmaker`: a pipeline to convert non-bed files into bed files - `bedstat`: a pipeline to calculate stats for a bed file - `bedbuncher`: a pipeline to create bedsets - `bedembed`: a pipeline to create bed file embeddings --- <img src="/_modules/genomicdistributions/genomic_distributions_dark.svg" width="275" style="padding-top:5px; padding-bottom:5px"> <div class="small"> Docs: <a href="http://code.databio.org/GenomicDistributions/">http://code.databio.org/GenomicDistributions/</a><br> Code: <a href="http://github.com/databio/GenomicDistributions/">http://github.com/databio/GenomicDistributions/</a><br> <div class="bullet"> <a href="https://bioconductor.org/packages/GenomicDistributions"><img src="/_modules/genomicdistributions/bioconductor_logo_grey.svg" height="22" style="padding-top:5px; padding-bottom:5px"> bioconductor.org/packages/GenomicDistributions</a><br> </div> </div> <span class="small bullet"><img src="/_modules/genomicdistributions/paper.svg" height="25" class="bullet"><a href="https://doi.org/10.1186/s12864-022-08467-y">Kupkova et al. (2022).</a> <i>BMC Genomics</i>.</span><br/> --- <img src="/_modules/genomicdistributions/genomicdistributions_summary.svg" width="100%"> --- <ol> <li style="">Web interface (front-end)</li> <li style="">Clients (front-end)</li> <li style="">API (back-end)</li> <li style="">Database and files (back-end/infrastructure)</li> <li style="">Processing pipelines (infrastructure)</li> <li style="color:yellow">Data served (content)</li> </ol> --- <div> <img src="/_modules/geofetch/geofetch_logo.svg" width="275"><br> Connects the Gene Expression Omnibus (GEO) <br> and Sequence Read Archive (SRA) <br> with PEP format<br> </div> <br><span class="small bullet"><img src="/_modules/geofetch/web.svg" height="25" class="bullet"><a href="https://geofetch.databio.org">geofetch.databio.org</a></span> --- ``` geofetch --filter="bed|bigBed|narrowPeak|broadPeak" ``` --- ### Conclusion <ul> <li>BEDbase provides BED data for humans and machines</li> <li>Output includes statistical and biological visualization</li> <li>Upcoming human-friendly search is powerful</li> <li>Programmatic access to data chunks improve interoperability</li> </ul> --- ## Take-home points - Analysis of genomic intervals is fruitful and interesting - NLP methods are the future of genomic interval analysis - BEDbase can become the 'one-stop-shop' for interval data - Neural networks are like pigs --- ## Acknowledgments <img src="/slides/2022-09-making-sense-of-genomic-intervals/2022-06-01.jpg" width="600"> <div class="small bullet"> Collaborators: Aidong Zhang, Don Brown<br> Funding: R01-HG012558; R35-GM128536 </div> --- <style> #acknowledgements { height: 100% !important; display: flex !important; flex-direction: column !important; justify-content: center !important; } </style> <section id="acknowledgements" data-background="/images/presentations/bg.svg.png"> # Thank You <br clear="all"/> <span class="small bullet"><img src="/images/external/github_bug_black.svg" height="20" class="bullet"><a href="http://github.com/nsheff">nsheff</a></span> · <span class="small bullet"><img src="/images/icons/web.svg" height="25" class="bullet"><a href="http://databio.org">databio.org</a></span> · <span class="small bullet"><img src="/images/icons/letter.svg" height="25" class="bullet"><a href="mailto:nsheffield@virginia.edu">nsheffield@virginia.edu</a></span> <div class="bullet" style="background-color:rgb(45,45,45,.65); border-radius: 25px; opacity:0.9"> <img src="/images/external/uva_dgs_logo.svg" height="65"> <img src="/images/logo/logo_databio_long.svg" height="45"> </div> </section>