WEBVTT
Kind: captions
Language: en

00:00:00.960 --> 00:00:07.020
Awesome, yeah, thank you for the introduction.&nbsp;
Hopefully, folks can see my screen. Yeah,&nbsp;&nbsp;

00:00:07.020 --> 00:00:11.220
so hey everyone. As mentioned, my name is Niema&nbsp;
Moshiri. I’m an Assistant Teaching Professor in&nbsp;&nbsp;

00:00:11.220 --> 00:00:16.560
the Computer Science and Engineering department&nbsp;
at UC San Diego. My talk is going to be focused on&nbsp;&nbsp;

00:00:17.100 --> 00:00:23.700
some methods that my lab developed using the NSF&nbsp;
funding for speeding up viral genomic analysis.&nbsp;&nbsp;

00:00:24.540 --> 00:00:28.980
Specifically, today's talk is just going to&nbsp;
focus on how we've enabled massively scalable&nbsp;&nbsp;

00:00:28.980 --> 00:00:34.080
reference guided multiple sequence alignment&nbsp;
of complete viral genomes. We actually have&nbsp;&nbsp;

00:00:34.080 --> 00:00:39.360
done multiple other accelerations as well that&nbsp;
I just didn't have time to talk about today.&nbsp;&nbsp;

00:00:39.360 --> 00:00:43.440
I'll end with a link to my website if folks&nbsp;
are curious about how else you could speed&nbsp;&nbsp;

00:00:43.440 --> 00:00:49.320
up other aspects of this type of analysis.
So let's let's get started. Just to give a&nbsp;&nbsp;

00:00:49.320 --> 00:00:54.360
little bit of context - here's a framework for&nbsp;
a standard viral phylogenetics workflow. And,&nbsp;&nbsp;

00:00:54.360 --> 00:00:57.840
you know, before I even talk about this, viral&nbsp;
phylogenetics is very important to be able to&nbsp;&nbsp;

00:00:57.840 --> 00:01:04.980
study how is the virus mutating over time. How is&nbsp;
it, kind of, branching off? How are the different&nbsp;&nbsp;

00:01:04.980 --> 00:01:09.900
samples that we collect all over the world&nbsp;
related? There's a ton of uses in the world&nbsp;&nbsp;

00:01:09.900 --> 00:01:14.220
of viral molecular epidemiology that are out of&nbsp;
the scope of this talk, but generally, having&nbsp;&nbsp;

00:01:14.220 --> 00:01:19.920
a phylogeny inferred from viral genomes is very&nbsp;
useful to have. Typically the workflow starts like&nbsp;&nbsp;

00:01:19.920 --> 00:01:24.900
this where you start with a bunch of unaligned&nbsp;
viral genome sequences, which I'm showing over&nbsp;&nbsp;

00:01:24.900 --> 00:01:30.840
here. The first step is usually multiple sequence&nbsp;
alignment where you try to kind of place these&nbsp;&nbsp;

00:01:30.840 --> 00:01:35.760
gaps in the different kind of positions of&nbsp;
each of the sequences to get them to line up&nbsp;&nbsp;

00:01:35.760 --> 00:01:41.940
better. This gives you some notion of sequence&nbsp;
homology after you do this. Then, given the&nbsp;&nbsp;

00:01:41.940 --> 00:01:47.160
multiple sequence alignment, we can then perform&nbsp;
phylogenetic inference to try to infer an unrooted&nbsp;&nbsp;

00:01:47.160 --> 00:01:53.760
evolutionary relationship between these sequences.&nbsp;
Then, typically after that, we do what's called&nbsp;&nbsp;

00:01:53.760 --> 00:01:59.640
rooting to determine what is the most likely&nbsp;
common ancestor of all of the sequences. That&nbsp;&nbsp;

00:01:59.640 --> 00:02:04.440
kind of then tells us what was the forward in&nbsp;
time evolutionary history of these sequences.&nbsp;&nbsp;

00:02:05.100 --> 00:02:09.720
Then, maybe you'll do some additional downstream&nbsp;
analyzes. Maybe you do transmission clustering.&nbsp;&nbsp;

00:02:10.560 --> 00:02:14.820
There's there's a lot of other analyzes that you&nbsp;
can do on the phylogeny and on the sequences.&nbsp;&nbsp;

00:02:15.960 --> 00:02:19.740
But this is kind of the the building blocks&nbsp;
of how you do all these other analyzes.&nbsp;&nbsp;

00:02:20.940 --> 00:02:26.520
So typically these steps over here are the&nbsp;
key computational bottlenecks. The multiple&nbsp;&nbsp;

00:02:26.520 --> 00:02:31.320
sequence alignment and then the phylogenetic&nbsp;
inference. In today's talk, I won't be talking&nbsp;&nbsp;

00:02:31.320 --> 00:02:35.340
about phylogenetic inference I'm just going to&nbsp;
be zooming in on multiple sequence alignment.&nbsp;

00:02:37.020 --> 00:02:40.500
So, some context - multiple sequence&nbsp;
alignment this is what's called an&nbsp;&nbsp;

00:02:40.500 --> 00:02:46.200
NP-Complete computational problem. What that&nbsp;
means - there's a very technical computer&nbsp;&nbsp;

00:02:46.200 --> 00:02:51.840
science term - but basically what this means&nbsp;
is there's no polynomial time exact solution.&nbsp;&nbsp;

00:02:51.840 --> 00:02:56.820
Basically it gave me a bunch of sequences&nbsp;
and asked me to come up with the optimal&nbsp;&nbsp;

00:02:56.820 --> 00:03:01.440
multiple sequence alignment. There is no way to&nbsp;
do this in polynomial time. It's very very slow.&nbsp;&nbsp;

00:03:03.000 --> 00:03:09.540
Heuristics have been developed to provide optim-&nbsp;
to provide approximate solutions. For example,&nbsp;&nbsp;

00:03:09.540 --> 00:03:13.440
you might have heard of ClustalOmega, MUSCLE,&nbsp;
and MAFFT. These are some kind of standard tools&nbsp;&nbsp;

00:03:13.440 --> 00:03:18.540
that are used in the space. However, even these&nbsp;
heuristics - they generally scale quadratically&nbsp;&nbsp;

00:03:18.540 --> 00:03:24.480
with respect to the number of sequences.&nbsp;
For context, the GISAID database, which is&nbsp;&nbsp;

00:03:24.480 --> 00:03:30.900
the database where most folks are storing their&nbsp;
full SARS-CoV-2 genomes, this database is growing&nbsp;&nbsp;

00:03:30.900 --> 00:03:38.400
extremely rapidly and as of today we have over 15&nbsp;
million SARS-CoV-2 sequences available from all&nbsp;&nbsp;

00:03:38.400 --> 00:03:43.680
over the world. The next epidemic is going to&nbsp;
be more and kind of sequencing genomes in real&nbsp;&nbsp;

00:03:43.680 --> 00:03:48.660
time. This is going to be a tool that hopefully we&nbsp;
continue to use in in the viral epidemics to come.&nbsp;&nbsp;

00:03:49.620 --> 00:03:56.280
We can expect this to be even more significant&nbsp;
of a big data problem. Currently with these tools&nbsp;&nbsp;

00:03:56.280 --> 00:04:01.140
like ClustalOmega, MAFFT, and MUSCLE, we're&nbsp;
looking at runtimes of decades to centuries,&nbsp;&nbsp;

00:04:01.140 --> 00:04:06.360
which, you know, for obvious reasons, if we're&nbsp;
trying to do real-time molecular analysis,&nbsp;&nbsp;

00:04:07.080 --> 00:04:13.260
decades or centuries is just a little bit too&nbsp;
slow. So how can we speed this up? Well, it turns&nbsp;&nbsp;

00:04:13.260 --> 00:04:17.880
out that the problem is actually a little bit&nbsp;
easier than what we're trying to solve. Multiple&nbsp;&nbsp;

00:04:17.880 --> 00:04:24.180
sequence alignment, in general, is kind of&nbsp;
assuming no homology of the sequences whatsoever.&nbsp;&nbsp;

00:04:24.180 --> 00:04:30.480
This is the time it takes to align completely&nbsp;
arbitrary sequences. But SARS-CoV-2 and with&nbsp;&nbsp;

00:04:30.480 --> 00:04:37.740
viruses in general we have a much simpler problem,&nbsp;
right? We have a lot of sequence homology. Even if&nbsp;&nbsp;

00:04:37.740 --> 00:04:44.460
the virus is mutating, you know, significantly&nbsp;
across the world, every single viral sequence&nbsp;&nbsp;

00:04:44.460 --> 00:04:49.560
that we obtain is going to be almost identical to&nbsp;
the reference gene. It's not going to be exactly&nbsp;&nbsp;

00:04:49.560 --> 00:04:54.660
identical, but it's going to be almost identical.&nbsp;
So we actually are facing a much simpler&nbsp;&nbsp;

00:04:54.660 --> 00:05:01.560
computational problem which is multiple sequence&nbsp;
alignment of highly similar sequences. So how can&nbsp;&nbsp;

00:05:01.560 --> 00:05:07.260
we use that feature to speed up this analysis?
We can do what's called an align-to-reference&nbsp;&nbsp;

00:05:07.260 --> 00:05:11.580
approach. So instead of just trying to align&nbsp;
everything with each other all at once, what&nbsp;&nbsp;

00:05:11.580 --> 00:05:17.040
we could do is individual pair-wise alignments&nbsp;
against a reference unit. So in this figure,&nbsp;&nbsp;

00:05:17.880 --> 00:05:23.040
the thicker green bar at the top represents the&nbsp;
reference to our scope 2 genome, and each of these&nbsp;&nbsp;

00:05:23.040 --> 00:05:28.920
other colored genomes represents a sequence&nbsp;
that I collect from the real world. I want to&nbsp;&nbsp;

00:05:28.920 --> 00:05:36.180
align each of these to the reference genome. What&nbsp;
I could do is just one by one by one by one I can&nbsp;&nbsp;

00:05:36.180 --> 00:05:42.840
independently align each of these genome sequences&nbsp;
against the reference genome, which I could do&nbsp;&nbsp;

00:05:42.840 --> 00:05:48.540
each of these fairly quickly and I can do massive&nbsp;
parallelization because each of these pairwise&nbsp;&nbsp;

00:05:48.540 --> 00:05:53.580
alignments to the reference can be done completely&nbsp;
independently. I can parallelize however many&nbsp;&nbsp;

00:05:53.580 --> 00:05:59.280
cores my computer has, I can throw that many at&nbsp;
this problem. Then, once I've competed all those&nbsp;&nbsp;

00:05:59.280 --> 00:06:04.740
pairwise lines to the reference, I could use&nbsp;
the wrap wrench genome - I can kind of use its&nbsp;&nbsp;

00:06:04.740 --> 00:06:10.800
anchors, its positions as anchors to create the&nbsp;
columns of my multiple sequence line. For example,&nbsp;&nbsp;

00:06:10.800 --> 00:06:16.320
maybe I'll start with the first position of the&nbsp;
reference genome and I'll see, okay, well, in&nbsp;&nbsp;

00:06:16.320 --> 00:06:21.660
the red sequence this is the letter that aligned&nbsp;
to that position. In the orange sequence, this&nbsp;&nbsp;

00:06:21.660 --> 00:06:25.560
is the letter. In the pink sequence, this is the&nbsp;
letter. In the blue sequence, this is the letter.&nbsp;&nbsp;

00:06:25.560 --> 00:06:30.360
And I can kind of merge all of those letters into&nbsp;
one column of my multiple sequence alignment.&nbsp;&nbsp;

00:06:31.200 --> 00:06:34.380
And I could do the same thing for the&nbsp;
second position of my reference genome,&nbsp;&nbsp;

00:06:34.380 --> 00:06:39.180
the same thing for the third position, fourth&nbsp;
position, all the way across. And kind of position&nbsp;&nbsp;

00:06:39.180 --> 00:06:47.340
by position by position I can build my multiple&nbsp;
sequence alignment. This idea, this is really&nbsp;&nbsp;

00:06:47.340 --> 00:06:53.400
good because it is massively parallelizable and&nbsp;
it scales linearly with the number of sequences&nbsp;&nbsp;

00:06:53.400 --> 00:06:59.460
rather than quadratically. So it has much better&nbsp;
scalability as well. Do we have to implement this&nbsp;&nbsp;

00:06:59.460 --> 00:07:03.960
approach from scratch? We actually don't.
It turns out that if you kind of step back&nbsp;&nbsp;

00:07:03.960 --> 00:07:10.680
and think about this problem, this is really&nbsp;
equivalent, in a sense, to the long read mapping&nbsp;&nbsp;

00:07:10.680 --> 00:07:15.900
problem. Let's just kind of step back and rethink&nbsp;
what is the problem that we're tackling. Our&nbsp;&nbsp;

00:07:15.900 --> 00:07:21.180
input is a reference genome and a bunch of long&nbsp;
sequences that are very similar to the reference&nbsp;&nbsp;

00:07:21.180 --> 00:07:26.220
genome. Our output is an alignment of each of&nbsp;
those sequences against the reference genome.&nbsp;&nbsp;

00:07:26.220 --> 00:07:33.420
This is exactly the same computational problem as&nbsp;
mapping long reads. Instead of having to reinvent&nbsp;&nbsp;

00:07:33.420 --> 00:07:37.740
the wheel, we could just kind of build off of&nbsp;
all of these really advanced techniques that&nbsp;&nbsp;

00:07:37.740 --> 00:07:43.980
folks have built to solve the long read mapping&nbsp;
problem and just kind of apply it to this context.&nbsp;

00:07:45.600 --> 00:07:51.960
To that aim, I developed a tool called ViralMSA&nbsp;
and what it does is it just wraps around existing&nbsp;&nbsp;

00:07:51.960 --> 00:07:56.460
long read mappers to perform this reference-guided&nbsp;
multiple sequence alignment. It kind of treats&nbsp;&nbsp;

00:07:56.460 --> 00:08:01.920
each of those genomes that I've collected as&nbsp;
long reads and it treats the reference genome&nbsp;&nbsp;

00:08:01.920 --> 00:08:08.040
as a reference genome. It just calls that read&nbsp;
mapper - I wrap against a few different read&nbsp;&nbsp;

00:08:08.040 --> 00:08:14.100
mappers just to demonstrate flexibility - but I&nbsp;
mainly suggest people use Minimap2 for both speed&nbsp;&nbsp;

00:08:14.100 --> 00:08:19.260
and accuracy. Then, given those read mapping&nbsp;
results, I can then - or given the mapping&nbsp;&nbsp;

00:08:19.260 --> 00:08:22.860
results - I can then just kind of compile&nbsp;
them into a single multiple sequence line.&nbsp;

00:08:25.320 --> 00:08:31.680
So all you have to do to run ViralMSA is you just&nbsp;
give ViralMSA a reference genome and a bunch of&nbsp;&nbsp;

00:08:31.680 --> 00:08:36.360
sequences to align. It'll automatically&nbsp;
handle indexing the reference genome,&nbsp;&nbsp;

00:08:36.960 --> 00:08:41.160
maybe if you give it an accessory number it'll&nbsp;
handle downloading and indexing the reference&nbsp;&nbsp;

00:08:41.160 --> 00:08:45.720
genome. It'll handle all of the pre-processing&nbsp;
and all the downstream stuff and it'll just&nbsp;&nbsp;

00:08:45.720 --> 00:08:50.580
output - it'll call the read mapper, it'll merge&nbsp;
the results into the multiple SQL alignment,&nbsp;&nbsp;

00:08:50.580 --> 00:08:55.440
and it'll just output a single standard file&nbsp;
that is your multiple sequence alignment.&nbsp;

00:08:57.300 --> 00:09:02.340
How does it do against existing tools? We we&nbsp;
did a benchmark experiment where we compared&nbsp;&nbsp;

00:09:02.340 --> 00:09:09.960
the runtime of ViralMSA wrapping around Minimap&nbsp;
2 compared against Virulign, which is an existing&nbsp;&nbsp;

00:09:09.960 --> 00:09:14.820
align to reference approach but that just kind&nbsp;
of implements its own from scratch aligned to&nbsp;&nbsp;

00:09:14.820 --> 00:09:20.940
reference. We also compared against MAFFT which is&nbsp;
typically considered one of the most commonly used&nbsp;&nbsp;

00:09:20.940 --> 00:09:25.860
multiple sequence segment tools. In this plot, on&nbsp;
the horizontal axis I have number of sequences.&nbsp;&nbsp;

00:09:25.860 --> 00:09:30.900
On the vertical axis I have total execution&nbsp;
time in seconds. This was done on complete&nbsp;&nbsp;

00:09:30.900 --> 00:09:36.660
SARS-CoV-2 genome sequences, so genome length&nbsp;
roughly 29,000. As we can see, the blue line,&nbsp;&nbsp;

00:09:36.660 --> 00:09:43.560
which is ViralMSA, is orders of magnitude faster&nbsp;
than the existing tools. Compared to VIRULIGN,&nbsp;&nbsp;

00:09:43.560 --> 00:09:50.580
which is also scaling linearly, we're getting&nbsp;
- and by the way, this this plot is a log scale&nbsp;&nbsp;

00:09:50.580 --> 00:09:57.600
plot - so compared to VIRULIGN, we're roughly&nbsp;
like a thousand times faster-ish. And with MAFFT,&nbsp;&nbsp;

00:09:57.600 --> 00:10:01.860
we're not quite as much faster, but you can&nbsp;
see that because MAFFT scales quadratically,&nbsp;&nbsp;

00:10:01.860 --> 00:10:08.160
our speed up with respect to MAFFT is actually&nbsp;
increasing as time progresses. Even at just a&nbsp;&nbsp;

00:10:08.160 --> 00:10:13.320
thousand sequences. we hit roughly a thousand&nbsp;
times faster and that gap kind of increases.&nbsp;

00:10:14.820 --> 00:10:19.080
Now, you might be wondering, okay, well, fast is&nbsp;
good but what's the point if it doesn't give me&nbsp;&nbsp;

00:10:19.080 --> 00:10:25.380
good alignments? We also compared the accuracy.&nbsp;
What we did was we took the multiple sequence&nbsp;&nbsp;

00:10:25.380 --> 00:10:30.480
alignment computed by MAFFT, took the multiple&nbsp;
sequence alignment computed by ViralMSA on a bunch&nbsp;&nbsp;

00:10:30.480 --> 00:10:40.500
of hand-curated alignments from HIV, Ebola, and&nbsp;
I'm blanking on the third virus, but basically we&nbsp;&nbsp;

00:10:40.500 --> 00:10:44.400
took viruses that we had curated alignments from&nbsp;
the Los Alamo- oh actually, no - this plot is from&nbsp;&nbsp;

00:10:44.400 --> 00:10:50.340
just HIV-1. From the Los Alamos National Lab we&nbsp;
took their curated multiple sequence alignments&nbsp;&nbsp;

00:10:50.340 --> 00:10:54.720
and we use that as ground truth. Then we saw&nbsp;
how does mapped in ViralMSA compare against&nbsp;&nbsp;

00:10:54.720 --> 00:11:01.980
the ground truth curated multiple sequence&nbsp;
alignment. If we compute pairwise distances of&nbsp;&nbsp;

00:11:01.980 --> 00:11:07.260
the sequences that we get in our alignment, and&nbsp;
then we do a mantle test for accuracy - we find&nbsp;&nbsp;

00:11:07.260 --> 00:11:12.840
the correlation between our pairwise distances,&nbsp;
and the pairwise is calculated directly from the&nbsp;&nbsp;

00:11:12.840 --> 00:11:19.080
true multiple sequence alignment, we see that&nbsp;
the correlation is negligibly different. Here,&nbsp;&nbsp;

00:11:19.620 --> 00:11:24.300
you know, we get a correlation coefficient&nbsp;
like 0.994 for viral MSA compared to 0.997&nbsp;&nbsp;

00:11:25.140 --> 00:11:31.080
for pairwise distance calculation. Actually,&nbsp;
when we calculated phylogenies, the phylogenies&nbsp;&nbsp;

00:11:31.080 --> 00:11:36.120
inferred using the ViralMSA multiple sequence&nbsp;
elements are actually slightly higher topological&nbsp;&nbsp;

00:11:36.120 --> 00:11:41.820
accuracy than those estimated from MAFFT. So,&nbsp;
negligibly so, but still what we're showing is&nbsp;&nbsp;

00:11:41.820 --> 00:11:46.800
that these are kind of essentially equivalent in&nbsp;
terms of accuracy for all intents and purposes.&nbsp;

00:11:48.720 --> 00:11:53.220
The conclusion - ViralMSA is a tool that enables&nbsp;
rapid multiple sequence alignment of ultra large&nbsp;&nbsp;

00:11:53.220 --> 00:11:57.720
viral datasets. It's open source, you&nbsp;
can find it on GitHub, and you know,&nbsp;&nbsp;

00:11:57.720 --> 00:12:04.080
please consider using it in your viral analyzes.
And acknowledgments - I want to thank Heng Li,&nbsp;&nbsp;

00:12:04.080 --> 00:12:09.480
he's the developer of Minimap2 and it's really&nbsp;
his expertise in developing Minimap2 that enables&nbsp;&nbsp;

00:12:09.480 --> 00:12:13.680
ViralMSA's speed and performance. I want to&nbsp;
thank the NSF for the grant that supports this&nbsp;&nbsp;

00:12:13.680 --> 00:12:18.780
project. And the the research was also supported&nbsp;
using Google Cloud platform research credits.&nbsp;

00:12:19.980 --> 00:12:23.880
So I’ll save time for any questions&nbsp;
or I'm happy to end it here.

