<p>GRIDSS's author had posted <a href="https://github.com/PapenfussLab/gridss/blob/7b1fedfed32af9e03ed5c6863d368a821a4c699f/example/simple-event-annotation.R#L9" rel="nofollow noreferrer">his own solution on Github</a>. The code is:</p>

<pre><code>simpleEventType &lt;- function(gr) {
    return(ifelse(seqnames(gr) != seqnames(partner(gr)), "ITX", # inter-chromosomosal
           ifelse(gr<span class="math-container">$insLen &gt;= abs(gr$</span>svLen) * 0.7, "INS",
           ifelse(strand(gr) == strand(partner(gr)), "INV",
           ifelse(xor(start(gr) &lt; start(partner(gr)), strand(gr) == "-"), "DEL", "DUP")))))
}
</code></pre>

CC BY-SA 4.0
2019-02-27T15:46:37.340Z
Can you please elaborate on this answer? What's gr? Looks like R, which library should I use for this?
Wouter De Coster
CC BY-SA 4.0
2018-07-19T05:01:35.280Z
2019-03-28T05:43:55.263Z
2019-03-28T05:43:55.263Z
SmallChess
<p>In VCF 4.2, a structural variant (SV) can be described with the <code>BND</code> keyword in <code>SVTYPE</code>. For example, the following example is an insertion (from <a href="https://samtools.github.io/hts-specs/VCFv4.2.pdf" rel="nofollow noreferrer">https://samtools.github.io/hts-specs/VCFv4.2.pdf</a>):</p>

<pre><code>#CHROM    POS ID REF ALT                      QUAL FILTER INFO
2 321682  bnd V  T   ]13 : 123456]AGTNNNNNCAT 6    PASS   SVTYPE=BND;MATEID=bnd U
13 123456 bnd U  C   CAGTNNNNNCA[2 : 321682[  6    PASS   SVTYPE=BND;MATEID=bnd V
</code></pre>

<p>The keyword can be used to describe any SV event.</p>

<p>I would like to work out how to find out if an event is an insertion, deletion, duplication, inversion, etc. The algorithm/program will tell me the example above is an insertion.</p>

<p>I'm not able to find a tool that can do the conversion for me.</p>

<p><strong>PS:</strong> The program I'm using is GRIDSS. This program would only generate <code>BND</code> in the SVTYPE field. It's not strictly a bug (BND can be used for any SV arrangement), but it's annoying in analysis.</p>

CC BY-SA 4.0
2018-07-16T12:58:45.520Z
how about 'just' using the `INFO/SVTYPE`attribute ?
Pierre
CC BY-SA 4.0
2018-07-16T12:59:03.823Z
@Pierre SVTYPE is BND.
SmallChess
CC BY-SA 4.0
2018-07-16T12:59:49.523Z
@Pierre Some SV programs such as GRIDSS only output BND to the SVTYPE. Otherwise, I would not be here asking.
SmallChess
CC BY-SA 4.0
2018-07-16T13:01:36.420Z
from the VCF spec: `INFO=<ID=SVTYPE,Number=1,Type=String,Description="Type of structural variant">
Value should be one of DEL, INS, DUP, INV, CNV, BND.`. So BND (break end) is NOT an INDEL, and NOT an insertion.
Pierre
CC BY-SA 4.0
2018-07-16T13:02:19.723Z
@Pierre My above example took from the specification.
SmallChess
CC BY-SA 4.0
2018-07-16T13:02:20.937Z
"Some SV programs such as GRIDSS only output BND to the SVTYPE" oh, I see
Pierre
CC BY-SA 4.0
2018-07-16T13:56:53.763Z
May I suggest you simply not use GRIDSS and instead use a tool that produces valid output?
terdon
CC BY-SA 4.0
2018-07-16T13:57:32.447Z
@terdon What do you mean? GRIDSS is a published SV program. BND is a valid VCF output?
SmallChess
CC BY-SA 4.0
2018-07-16T13:58:40.870Z
If it uses `BND` to indicate an insertion, then it is not following the VCF specs since the `SVTYPE` for insertions should be `INS` and `BND` should only be used for break ends.
terdon
CC BY-SA 4.0
2024-10-14T02:31:40.200Z
https://github.com/PapenfussLab/gridss/pull/618 Just use the commands and scripts provided
Sunny wy
<vcf><genome><variation><structural-variation>
Simplest way to work out structural variant type?
# Simplest way to work out structural variant type?

(Asked by: username_0 on 2018-07-16)

In VCF 4.2, a structural variant (SV) can be described with the BND keyword in SVTYPE. For example, the following example is an insertion (from https://samtools.github.io/hts-specs/VCFv4.2.pdf):
#CHROM    POS ID REF ALT                      QUAL FILTER INFO
2 321682  bnd V  T   ]13 : 123456]AGTNNNNNCAT 6    PASS   SVTYPE=BND;MATEID=bnd U
13 123456 bnd U  C   CAGTNNNNNCA[2 : 321682[  6    PASS   SVTYPE=BND;MATEID=bnd V

The keyword can be used to describe any SV event.
I would like to work out how to find out if an event is an insertion, deletion, duplication, inversion, etc. The algorithm/program will tell me the example above is an insertion.
I'm not able to find a tool that can do the conversion for me.
PS: The program I'm using is GRIDSS. This program would only generate BND in the SVTYPE field. It's not strictly a bug (BND can be used for any SV arrangement), but it's annoying in analysis.

**Tags:** vcf, genome, variation, structural-variation
> **Comments:**
> **username_1**: how about 'just' using the `INFO/SVTYPE`attribute ?  
> **username_0**: @Pierre SVTYPE is BND.  
> **username_0**: @Pierre Some SV programs such as GRIDSS only output BND to the SVTYPE. Otherwise, I would not be here asking.  
> **username_1**: from the VCF spec: `INFO=<ID=SVTYPE,Number=1,Type=String,Description="Type of structural variant"> Value should be one of DEL, INS, DUP, INV, CNV, BND.`. So BND (break end) is NOT an INDEL, and NOT an insertion.  
> **username_0**: @Pierre My above example took from the specification.  
> **username_1**: "Some SV programs such as GRIDSS only output BND to the SVTYPE" oh, I see  
> **username_2**: May I suggest you simply not use GRIDSS and instead use a tool that produces valid output?  
> **username_0**: @terdon What do you mean? GRIDSS is a published SV program. BND is a valid VCF output?  
> **username_2**: If it uses `BND` to indicate an insertion, then it is not following the VCF specs since the `SVTYPE` for insertions should be `INS` and `BND` should only be used for break ends.  
> **username_3**: https://github.com/PapenfussLab/gridss/pull/618 Just use the commands and scripts provided  

---

## 1 answers

### Answer by username_0 on 2018-07-19. Score: 3 | Accepted answer

GRIDSS's author had posted his own solution on Github. The code is:
simpleEventType <- function(gr) {
    return(ifelse(seqnames(gr) != seqnames(partner(gr)), "ITX", # inter-chromosomosal
           ifelse(gr$insLen >= abs(gr$svLen) * 0.7, "INS",
           ifelse(strand(gr) == strand(partner(gr)), "INV",
           ifelse(xor(start(gr) < start(partner(gr)), strand(gr) == "-"), "DEL", "DUP")))))
}

> **Comments:**
> **username_4**: Can you please elaborate on this answer? What's gr? Looks like R, which library should I use for this?  

---

