diff --git a/doc/2023_09_18_presentation.qmd b/doc/2023_09_18_presentation.qmd new file mode 100644 index 0000000000000000000000000000000000000000..fca8e36d335815fdaf295efd806aaf28364fd209 --- /dev/null +++ b/doc/2023_09_18_presentation.qmd @@ -0,0 +1,375 @@ +--- +title: "Kmer diff" +author: "laurent modolo" +format: + revealjs: + transition: none + format: + highlight-style: monokai + theme: white + footer: "laurent.modolo@ens-lyon.fr" + slide-number: c/t + fontsize: 22pt +revealjs-plugins: + - pointer +--- + +## Background + +The Delattre team’s studies, *Mesorhabditis worms*, some species of which present +atypical reproduction mechanisms. + +In a previous paper: *Males as somatic investment in a parthenogenetic nematode* [DOI: 10.1126/science.aau0099](https://doi.org/10.1126/science.aau0099), +we characterized contigs of a *de novo* genome assembly of *M. belaris* as + + +:::: {.columns} +::: {.column width="40%"} +- <span style="color:blue;">Autosomal</span> chromosomes +- <span style="color:red;">X</span> chromosome +- <span style="color:green;">Y</span> chromosome +::: + +::: {.column width="60%"} +{width=350px} +::: + +:::: + +## Goal + +From raw sequencing data of male and female individuals, we want to identify $k$-mers corresponding to : + +- <span style="color:blue;">Autosomal</span> chromosomes +- <span style="color:red;">X</span> chromosome, if present +- <span style="color:green;">Y</span> chromosome, if present + +<div style="text-align: center">**We can study the chromosomal system without an assembly**</div> + +## Phylogeny + + + +## Kmer-diff + +A nextflow pipeline to analyze the $k$-mer content of fastq files + +1. preprocess the fastq files +2. count the $k$-mers of each file +3. merge the counts to get a table of male and female $k$-mers counts +3. test the sexual models +4. identify the <span style="color:blue;">A</span>,<span style="color:red;">X</span> and <span style="color:green;">Y</span> $k$-mers + +## Kmer-diff + + + +## Preprocessing + +**preprocess the fastq files** + +Important for the clustering analysis: + +- subsample to have the same number of reads between male and female + +Important for the $k$-mer counting + +- split the fastq files into manageable size files ($10ˆ6$ reads per files) + +## $k$-mer count + +[fastqkmer](https://github.com/angelovangel/fastkmers) + +``` +fastkmers -k 12 file.fastq > file.csv +``` + +Run a **sliding window** of size $12$ by step of $1$ along the reads counting all the occurrences of each $k$-mers + +We have the letters: $A,C,T,G$ and $N$ + +<div style="text-align: center">$244,140,625$ possible $k$-mers</div> + +We split the fastq files into $\sim$ $1400$ subfiles of $10^6$ reads. + +## Merging the $k$-mers + +$\sim$ $1400$ splits of $10^6$ reads $\rightarrow$ $1400$ csv files + +:::: {.columns} +::: {.column width="50%"} + +- large number of $k$-mers +- Unordered +- not the same $k$-mers a present in every files + +[mergekmer](https://gitbio.ens-lyon.fr/LBMC/Delattre/mergekmer) a small rust program that builds a **suffix tree** of the $k$-mer +::: + +::: {.column width="50%"} + + + +::: +:::: + +## Merging the $k$-mers + +[mergekmer](https://gitbio.ens-lyon.fr/LBMC/Delattre/mergekmer) a small rust program that build a **suffix tree** of the $k$-mer + +:::: {.columns} +::: {.column width="50%"} + +``` +merge fastkmers output + +Usage: mergekmer [OPTIONS] --output <OUTPUT> + +Options: + -c, --csv <CSV>... list of csv files + -o, --output <OUTPUT> merged csv file + -c, --collate collate csv file + -h, --help Print help + -V, --version Print version +``` + +Each leaf of the tree contains the number of $k$-mers + +The tree traversal is easy to compute with a recursive function + +**we can merge the counts of a given sex for each specie** + +::: +::: {.column width="50%"} + +::: +:::: + +## Merging the $k$-mers + +:::: {.columns} +::: {.column width="50%"} + +``` +merge fastkmers output + +Usage: mergekmer [OPTIONS] --output <OUTPUT> + +Options: + -c, --csv <CSV>... list of csv files + -o, --output <OUTPUT> merged csv file + -c, --collate collate csv file + -h, --help Print help + -V, --version Print version +``` + +In the `--collate` version each leave contains a list of the count of the $k$-mers in the female or the male of a specie. + +**we can fuse the counts of the male and female for each specie** + + +::: +::: {.column width="50%"} + +::: +:::: + +## Test the sexual model + +**We have the following possible models** + + +:::: {.columns} +::: {.column width="33%"} + +- <span style="color:red;">X</span><span style="color:green;">Y</span> system + + + +::: +::: {.column width="33%"} + +- <span style="color:red;">X</span>O system + + +::: +::: {.column width="33%"} + +- OO system + + + +::: +:::: + +## Test the sexual model + +:::: {.columns} +::: {.column width="33%"} + +- <span style="color:red;">X</span><span style="color:green;">Y</span> system + + + +::: +::: {.column width="33%"} + +- <span style="color:red;">X</span>O system + + +::: +::: {.column width="33%"} + +- OO system + + + +::: +:::: + +- A cluster with mean male $=$ mean female +- A cluster above the diagonal +- A cluster below the diagonal + + +## Test the sexual model + +:::: {.columns} +::: {.column width="25%"} + +**data** + + + +::: +::: {.column width="25%"} + +**XY model** + + + +::: +::: {.column width="25%"} + +**XO model** + + +::: +::: {.column width="25%"} + +**OO model** + + + +::: +:::: +:::: {.columns} +::: {.column width="50%"} + + +Bayesian information criterion (BIC) + + + +::: +::: {.column width="50%"} + +Loglikelihood + + + +::: +:::: + + +## identify the <span style="color:blue;">A</span>,<span style="color:red;">X</span> and <span style="color:green;">Y</span> $k$-mers + +:::: {.columns} +::: {.column width="50%"} + + + +::: +::: {.column width="50%"} + +- Can be used to compare model +- Not sensitive enough +- Cannot be used to classify individual $k$-mers + +::: +:::: + +## identify the <span style="color:blue;">A</span>,<span style="color:red;">X</span> and <span style="color:green;">Y</span> $k$-mers + + +:::: {.columns} +::: {.column width="75%"} + + +::: +::: {.column width="25%"} + +- Can choose the prior for each cluster (mean and shape) +- Can choose the prior for the proportion between <span style="color:blue;">A</span>,<span style="color:red;">X</span> and <span style="color:green;">Y</span> +- Can choose the weight of each prior compared to the data + +::: +:::: + +## identify the <span style="color:blue;">A</span>,<span style="color:red;">X</span> and <span style="color:green;">Y</span> $k$-mers + + +:::: {.columns} +::: {.column width="75%"} + + +::: +::: {.column width="25%"} + +- Can choose the prior for each cluster (mean and shape) +- Can choose the prior for the proportion between <span style="color:blue;">A</span>,<span style="color:red;">X</span> and <span style="color:green;">Y</span> +- Can choose the weight of each prior compared to the data + +::: +:::: + +## identify the <span style="color:blue;">A</span>,<span style="color:red;">X</span> and <span style="color:green;">Y</span> $k$-mers + +:::: {.columns} +::: {.column width="75%"} + + +::: +::: {.column width="25%"} + +- Can choose the prior for each cluster (mean and shape) +- Can choose the prior for the proportion between <span style="color:blue;">A</span>,<span style="color:red;">X</span> and <span style="color:green;">Y</span> +- Can choose the weight of each prior compared to the data + +::: +:::: + +## Count problem + +:::: {.columns} +::: {.column width="75%"} + + +::: +::: {.column width="25%"} + +- The coverage is not the same between the male and the female + +::: +:::: + +## Kmer-diff + +A nextflow pipeline to analyze the $k$-mer content of fastq files + +1. preprocess the fastq files + - **subsample to have the same number of reads between male and female** +2. count the $k$-mers of each file +3. merge the counts to get a table of male and female $k$-mers counts +3. test the sexual models +4. identify the <span style="color:blue;">A</span>,<span style="color:red;">X</span> and <span style="color:green;">Y</span> $k$-mers \ No newline at end of file diff --git a/doc/_extensions/quarto-ext/pointer/_extension.yml b/doc/_extensions/quarto-ext/pointer/_extension.yml new file mode 100644 index 0000000000000000000000000000000000000000..13b9df4b0b1a0081699570c307a344f9bf3928cf --- /dev/null +++ b/doc/_extensions/quarto-ext/pointer/_extension.yml @@ -0,0 +1,15 @@ +title: Pointer +author: Posit Software, PBC +version: 0.1.0 +quarto-required: ">=1.2.198" +contributes: + revealjs-plugins: + - name: RevealPointer + script: pointer.js + stylesheet: pointer.css + config: + pointer: + key: "q" + color: "red" + pointerSize: 16 + alwaysVisible: false diff --git a/doc/_extensions/quarto-ext/pointer/pointer.css b/doc/_extensions/quarto-ext/pointer/pointer.css new file mode 100644 index 0000000000000000000000000000000000000000..bd55511d3e8818ab73df95647480bb862b04ca63 --- /dev/null +++ b/doc/_extensions/quarto-ext/pointer/pointer.css @@ -0,0 +1 @@ +.cursor-dot,.cursor-dot-outline{pointer-events:none;position:absolute;top:0;left:0;border-radius:50%;opacity:0;transform:translate(-50%,-50%);transition:opacity 0.3s ease-in-out,transform 0.3s ease-in-out;}.cursor-dot{width:12px;height:12px;background-color:red;z-index:99;}.no-cursor{cursor:none;}.no-cursor a,.no-cursor div,.no-cursor span{cursor:none;} diff --git a/doc/_extensions/quarto-ext/pointer/pointer.js b/doc/_extensions/quarto-ext/pointer/pointer.js new file mode 100644 index 0000000000000000000000000000000000000000..381a85777816d5ceceb90e386fc8133bde32a601 --- /dev/null +++ b/doc/_extensions/quarto-ext/pointer/pointer.js @@ -0,0 +1 @@ +var RevealPointer=function(){"use strict";var e={backspace:8,tab:9,enter:13,shift:16,ctrl:17,alt:18,pausebreak:19,capslock:20,esc:27,space:32,pageup:33,pagedown:34,end:35,home:36,leftarrow:37,uparrow:38,rightarrow:39,downarrow:40,insert:45,delete:46,0:48,1:49,2:50,3:51,4:52,5:53,6:54,7:55,8:56,9:57,a:65,b:66,c:67,d:68,e:69,f:70,g:71,h:72,i:73,j:74,k:75,l:76,m:77,n:78,o:79,p:80,q:81,r:82,s:83,t:84,u:85,v:86,w:87,x:88,y:89,z:90,leftwindowkey:91,rightwindowkey:92,selectkey:93,numpad0:96,numpad1:97,numpad2:98,numpad3:99,numpad4:100,numpad5:101,numpad6:102,numpad7:103,numpad8:104,numpad9:105,multiply:106,add:107,subtract:109,decimalpoint:110,divide:111,f1:112,f2:113,f3:114,f4:115,f5:116,f6:117,f7:118,f8:119,f9:120,f10:121,f11:122,f12:123,numlock:144,scrolllock:145,semicolon:186,equalsign:187,comma:188,dash:189,period:190,forwardslash:191,graveaccent:192,openbracket:219,backslash:220,closebracket:221,singlequote:222};return function(){var t={},o=!1,a=null,n={x:0,y:0,isVisible:!1},i={x:0,y:0,scale:1};function l(o){var a;null==(t=o.pointer||{}).key?t.key="q":t.key=t.key.toLowerCase(),null!=t.pointerSize&&"number"==typeof t.pointerSize||(t.pointerSize=12),null!=t.tailLength&&"number"==typeof t.tailLength||(t.tailLength=10),null!=t.color&&"string"==typeof t.color||(t.color="red"),null!=t.alwaysVisible&&"boolean"==typeof t.alwaysVisible||(t.alwaysVisible=!1),t.keyCode=(a=t.key,e[a])}function s(){a.style.top="".concat((n.y-i.y)/i.scale,"px"),a.style.left="".concat((n.x-i.x)/i.scale,"px"),n.isVisible?a.style.opacity="0.8":a.style.opacity="0",1!==i.scale?(a.style.width="".concat(t.pointerSize/i.scale,"px"),a.style.height="".concat(t.pointerSize/i.scale,"px")):(a.style.width="".concat(t.pointerSize,"px"),a.style.height="".concat(t.pointerSize,"px"))}function c(e){n.x=e.pageX,n.y=e.pageY;var t=document.body.style.transform;""!==t?(i.x=Number.parseInt(/translate\((.*)px,/gm.exec(t)[1]),i.y=Number.parseInt(/px,\s(.*)px\)/gm.exec(t)[1]),i.scale=Number.parseFloat(/scale\((.)\)/gm.exec(t)[1])):(i.x=0,i.y=0,i.scale=1),requestAnimationFrame(s)}function r(){(o=!o)?(document.addEventListener("mousemove",c),document.body.classList.add("no-cursor"),n.isVisible=!0):(document.removeEventListener("mousemove",c),document.body.classList.remove("no-cursor"),n.isVisible=!1,requestAnimationFrame(s))}return{id:"pointer",init:function(e){var o;l(e.getConfig()),t.alwaysVisible?r():e.addKeyBinding({keyCode:t.keyCode,key:t.key},(function(){r()})),(o=document.createElement("div")).className="cursor-dot",o.style.width="".concat(t.pointerSize,"px"),o.style.height="".concat(t.pointerSize,"px"),o.style.backgroundColor=t.color,t.alwaysVisible&&(o.style.opacity="0.8"),document.body.appendChild(o),a=o}}}}(); diff --git a/doc/img/clustering_OO_bayse_OO.png b/doc/img/clustering_OO_bayse_OO.png new file mode 100644 index 0000000000000000000000000000000000000000..55ec85f09aacf8ffe81e2226536c501939835a71 Binary files /dev/null and b/doc/img/clustering_OO_bayse_OO.png differ diff --git a/doc/img/clustering_OO_naive.png b/doc/img/clustering_OO_naive.png new file mode 100644 index 0000000000000000000000000000000000000000..720c9024571565dcc22935e221f26551e046413e Binary files /dev/null and b/doc/img/clustering_OO_naive.png differ diff --git a/doc/img/clustering_XO_bayse_XO.png b/doc/img/clustering_XO_bayse_XO.png new file mode 100644 index 0000000000000000000000000000000000000000..da2aa6cfa3c4089088b5939cf8b108843f2a8f3c Binary files /dev/null and b/doc/img/clustering_XO_bayse_XO.png differ diff --git a/doc/img/clustering_XO_naive.png b/doc/img/clustering_XO_naive.png new file mode 100644 index 0000000000000000000000000000000000000000..1a04f87caca43d2b00134384d19bbc28f353eb02 Binary files /dev/null and b/doc/img/clustering_XO_naive.png differ diff --git a/doc/img/clustering_XY_bayse_XO.png b/doc/img/clustering_XY_bayse_XO.png new file mode 100644 index 0000000000000000000000000000000000000000..0102deca2178eb48e9f9babc2711208ef590a193 Binary files /dev/null and b/doc/img/clustering_XY_bayse_XO.png differ diff --git a/doc/img/clustering_XY_bayse_XY.png b/doc/img/clustering_XY_bayse_XY.png new file mode 100644 index 0000000000000000000000000000000000000000..8fe0a85651259dfb6f2b929b6371f53d05c65aae Binary files /dev/null and b/doc/img/clustering_XY_bayse_XY.png differ diff --git a/doc/img/clustering_XY_naive.png b/doc/img/clustering_XY_naive.png new file mode 100644 index 0000000000000000000000000000000000000000..30bb11bd9fdb5ef03b990afbf480bf8c5b212637 Binary files /dev/null and b/doc/img/clustering_XY_naive.png differ diff --git a/doc/img/clustering_XY_naive_BIC.png b/doc/img/clustering_XY_naive_BIC.png new file mode 100644 index 0000000000000000000000000000000000000000..3ecaa07dc28b764eb9f8bb8890baa36935c02bba Binary files /dev/null and b/doc/img/clustering_XY_naive_BIC.png differ diff --git a/doc/img/clustering_XY_naive_OO.png b/doc/img/clustering_XY_naive_OO.png new file mode 100644 index 0000000000000000000000000000000000000000..1f2e003fe9523d1beb8ba01e2f2e3629d4b42aea Binary files /dev/null and b/doc/img/clustering_XY_naive_OO.png differ diff --git a/doc/img/clustering_XY_naive_XO.png b/doc/img/clustering_XY_naive_XO.png new file mode 100644 index 0000000000000000000000000000000000000000..096c3ad02907159fc7ca5b9f117f3dca0b1b196e Binary files /dev/null and b/doc/img/clustering_XY_naive_XO.png differ diff --git a/doc/img/clustering_XY_naive_XY.png b/doc/img/clustering_XY_naive_XY.png new file mode 100644 index 0000000000000000000000000000000000000000..ef8d14093a1edacd56dd4630b3241200465c7efb Binary files /dev/null and b/doc/img/clustering_XY_naive_XY.png differ diff --git a/doc/img/clustering_XY_naive_loglik.png b/doc/img/clustering_XY_naive_loglik.png new file mode 100644 index 0000000000000000000000000000000000000000..358e591e59272d34e1b543c981f00a5393899a71 Binary files /dev/null and b/doc/img/clustering_XY_naive_loglik.png differ diff --git a/doc/img/count_problem.png b/doc/img/count_problem.png new file mode 100644 index 0000000000000000000000000000000000000000..a269a8ced29c2045b43d50233c3ed81b4359472c Binary files /dev/null and b/doc/img/count_problem.png differ diff --git a/doc/img/flowchart.png b/doc/img/flowchart.png new file mode 100644 index 0000000000000000000000000000000000000000..6c9a8e9912f67f6ad5b930a7cfceeebcdd1481ba Binary files /dev/null and b/doc/img/flowchart.png differ diff --git a/doc/img/model_OO.png b/doc/img/model_OO.png new file mode 100644 index 0000000000000000000000000000000000000000..0239dfaaed4340dfedd02fc6d1ff345bcf74e841 Binary files /dev/null and b/doc/img/model_OO.png differ diff --git a/doc/img/model_XO.png b/doc/img/model_XO.png new file mode 100644 index 0000000000000000000000000000000000000000..3c9010c2dece79612407804c33c10c172edfdc25 Binary files /dev/null and b/doc/img/model_XO.png differ diff --git a/doc/img/model_XY.png b/doc/img/model_XY.png new file mode 100644 index 0000000000000000000000000000000000000000..e11c4fc6f3a452835586fad6051209c4538efe42 Binary files /dev/null and b/doc/img/model_XY.png differ diff --git a/doc/img/science_figure.png b/doc/img/science_figure.png new file mode 100644 index 0000000000000000000000000000000000000000..e62357cbce554275ee161f5ca60eb1bd47a16b2f Binary files /dev/null and b/doc/img/science_figure.png differ diff --git a/doc/img/sufixtree.svg b/doc/img/sufixtree.svg new file mode 100644 index 0000000000000000000000000000000000000000..bb37640fc58997234f9e10d241231dd1d18ebffa --- /dev/null +++ b/doc/img/sufixtree.svg @@ -0,0 +1,452 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + width="210mm" + height="297mm" + viewBox="0 0 210 297" + version="1.1" + id="svg1" + sodipodi:docname="sufixtree.svg" + inkscape:version="1.3 (0e150ed, 2023-07-21)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <sodipodi:namedview + id="namedview1" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:showpageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" + inkscape:document-units="mm" + inkscape:zoom="0.92737795" + inkscape:cx="397.35687" + inkscape:cy="561.25984" + inkscape:window-width="1392" + inkscape:window-height="1212" + inkscape:window-x="1821" + inkscape:window-y="25" + inkscape:window-maximized="0" + inkscape:current-layer="layer1" /> + <defs + id="defs1"> + <rect + x="288.98682" + y="416.22728" + width="354.76367" + height="348.29381" + id="rect13" /> + </defs> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1"> + <g + id="g4"> + <path + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="path1" + sodipodi:type="arc" + sodipodi:cx="95.148415" + sodipodi:cy="32.239197" + sodipodi:rx="8" + sodipodi:ry="8" + sodipodi:start="0.14645616" + sodipodi:end="0.12159971" + sodipodi:open="true" + sodipodi:arc-type="arc" + d="m 103.06277,33.406662 a 8,8 0 0 1 -9.032618,6.753992 8,8 0 0 1 -6.809991,-8.990473 8,8 0 0 1 8.947982,-6.865728 8,8 0 0 1 6.921197,8.905146" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" + x="71.168518" + y="51.919418" + id="text1"><tspan + sodipodi:role="line" + id="tspan1" + style="font-size:14.1111px;stroke-width:0.264583" + x="71.168518" + y="51.919418"><tspan + style="fill:#ff0000" + id="tspan8">A</tspan>CTGN</tspan></text> + <rect + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="rect1" + width="53.922192" + height="12.553314" + x="68.757927" + y="40.512966" /> + </g> + <g + id="g3"> + <path + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="path1-1" + sodipodi:type="arc" + sodipodi:cx="71.902306" + sodipodi:cy="71.669632" + sodipodi:rx="8" + sodipodi:ry="8" + sodipodi:start="0.14645616" + sodipodi:end="0.12159971" + sodipodi:open="true" + sodipodi:arc-type="arc" + d="m 79.816661,72.837097 a 8,8 0 0 1 -9.032618,6.753992 8,8 0 0 1 -6.809991,-8.990473 8,8 0 0 1 8.947982,-6.865727 8,8 0 0 1 6.921198,8.905145" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" + x="47.922413" + y="91.349846" + id="text1-3"><tspan + sodipodi:role="line" + id="tspan1-8" + style="font-size:14.1111px;stroke-width:0.264583" + x="47.922413" + y="91.349846"><tspan + style="fill:#ff0000" + id="tspan9">A</tspan>CTGN</tspan></text> + <rect + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="rect1-4" + width="53.922192" + height="12.553314" + x="45.511829" + y="79.943398" /> + </g> + <g + id="g2"> + <path + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="path1-6" + sodipodi:type="arc" + sodipodi:cx="41.672695" + sodipodi:cy="120.75927" + sodipodi:rx="8" + sodipodi:ry="8" + sodipodi:start="0.14645616" + sodipodi:end="0.12159971" + sodipodi:open="true" + sodipodi:arc-type="arc" + d="m 49.587051,121.92673 a 8,8 0 0 1 -9.032618,6.754 8,8 0 0 1 -6.809991,-8.99048 8,8 0 0 1 8.947982,-6.86572 8,8 0 0 1 6.921198,8.90514" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" + x="17.692799" + y="140.4395" + id="text1-0"><tspan + sodipodi:role="line" + id="tspan1-3" + style="font-size:14.1111px;stroke-width:0.264583" + x="17.692799" + y="140.4395"><tspan + style="fill:#ff0000" + id="tspan10">A</tspan>CTGN</tspan></text> + <rect + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="rect1-2" + width="53.922192" + height="12.553314" + x="15.282207" + y="129.03305" /> + </g> + <g + id="g1"> + <path + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="path1-6-1" + sodipodi:type="arc" + sodipodi:cx="113.27558" + sodipodi:cy="121.1898" + sodipodi:rx="8" + sodipodi:ry="8" + sodipodi:start="0.14645616" + sodipodi:end="0.12159971" + sodipodi:open="true" + sodipodi:arc-type="arc" + d="m 121.18994,122.35726 a 8,8 0 0 1 -9.03262,6.75399 8,8 0 0 1 -6.80999,-8.99047 8,8 0 0 1 8.94798,-6.86573 8,8 0 0 1 6.9212,8.90515" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" + x="89.295685" + y="140.87004" + id="text1-0-3"><tspan + sodipodi:role="line" + id="tspan1-3-7" + style="font-size:14.1111px;stroke-width:0.264583" + x="89.295685" + y="140.87004">A<tspan + style="fill:#ff0000" + id="tspan12">C</tspan>TGN</tspan></text> + <rect + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="rect1-2-8" + width="53.922192" + height="12.553314" + x="86.885094" + y="129.46358" /> + </g> + <g + id="g16"> + <g + id="g2-2" + transform="translate(61.679819,-0.13385004)"> + <path + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="path1-6-1-9" + sodipodi:type="arc" + sodipodi:cx="113.27558" + sodipodi:cy="121.1898" + sodipodi:rx="8" + sodipodi:ry="8" + sodipodi:start="0.14645616" + sodipodi:end="0.12159971" + sodipodi:open="true" + sodipodi:arc-type="arc" + d="m 121.18994,122.35726 a 8,8 0 0 1 -9.03262,6.75399 8,8 0 0 1 -6.80999,-8.99047 8,8 0 0 1 8.94798,-6.86573 8,8 0 0 1 6.9212,8.90515" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" + x="89.295685" + y="140.87004" + id="text1-0-3-8"><tspan + sodipodi:role="line" + id="tspan1-3-7-2" + style="font-size:14.1111px;stroke-width:0.264583" + x="89.295685" + y="140.87004">A<tspan + style="fill:#ff0000" + id="tspan12-0">C</tspan>TGN</tspan></text> + <rect + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="rect1-2-8-7" + width="53.922192" + height="12.553314" + x="86.885094" + y="129.46358" /> + </g> + </g> + <g + id="g2-3" + transform="translate(61.974842,49.252287)"> + <path + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="path1-6-1-0" + sodipodi:type="arc" + sodipodi:cx="113.27558" + sodipodi:cy="121.1898" + sodipodi:rx="8" + sodipodi:ry="8" + sodipodi:start="0.14645616" + sodipodi:end="0.12159971" + sodipodi:open="true" + sodipodi:arc-type="arc" + d="m 121.18994,122.35726 a 8,8 0 0 1 -9.03262,6.75399 8,8 0 0 1 -6.80999,-8.99047 8,8 0 0 1 8.94798,-6.86573 8,8 0 0 1 6.9212,8.90515" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" + x="89.295685" + y="140.87004" + id="text1-0-3-6"><tspan + sodipodi:role="line" + id="tspan1-3-7-22" + style="font-size:14.1111px;stroke-width:0.264583" + x="89.295685" + y="140.87004">A<tspan + style="fill:#ff0000" + id="tspan12-5">C</tspan>TGN</tspan></text> + <rect + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="rect1-2-8-22" + width="53.922192" + height="12.553314" + x="86.885094" + y="129.46358" /> + </g> + <g + id="g15" + transform="translate(57.030635,-48.78693)"> + <path + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="path1-6-1-10" + sodipodi:type="arc" + sodipodi:cx="113.27558" + sodipodi:cy="121.1898" + sodipodi:rx="8" + sodipodi:ry="8" + sodipodi:start="0.14645616" + sodipodi:end="0.12159971" + sodipodi:open="true" + sodipodi:arc-type="arc" + d="m 121.18994,122.35726 a 8,8 0 0 1 -9.03262,6.75399 8,8 0 0 1 -6.80999,-8.99047 8,8 0 0 1 8.94798,-6.86573 8,8 0 0 1 6.9212,8.90515" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" + x="89.295685" + y="140.87004" + id="text1-0-3-1"><tspan + sodipodi:role="line" + id="tspan1-3-7-8" + style="font-size:14.1111px;stroke-width:0.264583" + x="89.295685" + y="140.87004">A<tspan + style="fill:#2b0000" + id="tspan12-7">C</tspan>T<tspan + style="fill:#ff0000" + id="tspan15">G</tspan>N</tspan></text> + <rect + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="rect1-2-8-6" + width="53.922192" + height="12.553314" + x="86.885094" + y="129.46358" /> + </g> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 122.68012,50.852211 40.33761,18.252704" + id="path15" + inkscape:connector-type="polyline" + inkscape:connector-curvature="0" + inkscape:connection-start="#g4" + inkscape:connection-end="#path1-6-1-10" /> + <g + id="g2-8" + transform="translate(1.4347664,47.180175)"> + <path + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="path1-6-1-8" + sodipodi:type="arc" + sodipodi:cx="113.27558" + sodipodi:cy="121.1898" + sodipodi:rx="8" + sodipodi:ry="8" + sodipodi:start="0.14645616" + sodipodi:end="0.12159971" + sodipodi:open="true" + sodipodi:arc-type="arc" + d="m 121.18994,122.35726 a 8,8 0 0 1 -9.03262,6.75399 8,8 0 0 1 -6.80999,-8.99047 8,8 0 0 1 8.94798,-6.86573 8,8 0 0 1 6.9212,8.90515" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" + x="89.295685" + y="140.87004" + id="text1-0-3-3"><tspan + sodipodi:role="line" + id="tspan1-3-7-5" + style="font-size:14.1111px;stroke-width:0.264583" + x="89.295685" + y="140.87004">A<tspan + style="fill:#ff0000" + id="tspan13">C</tspan>TGN</tspan></text> + <rect + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="rect1-2-8-2" + width="53.922192" + height="12.553314" + x="86.885094" + y="129.46358" /> + </g> + <g + id="g2-84" + transform="translate(-72.484278,47.033675)"> + <path + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="path1-6-1-1" + sodipodi:type="arc" + sodipodi:cx="113.27558" + sodipodi:cy="121.1898" + sodipodi:rx="8" + sodipodi:ry="8" + sodipodi:start="0.14645616" + sodipodi:end="0.12159971" + sodipodi:open="true" + sodipodi:arc-type="arc" + d="m 121.18994,122.35726 a 8,8 0 0 1 -9.03262,6.75399 8,8 0 0 1 -6.80999,-8.99047 8,8 0 0 1 8.94798,-6.86573 8,8 0 0 1 6.9212,8.90515" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" + x="89.295685" + y="140.87004" + id="text1-0-3-7"><tspan + sodipodi:role="line" + id="tspan1-3-7-1" + style="font-size:14.1111px;stroke-width:0.264583" + x="89.295685" + y="140.87004"><tspan + style="fill:#ff0000" + id="tspan11">A</tspan>CTGN</tspan></text> + <rect + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="rect1-2-8-8" + width="53.922192" + height="12.553314" + x="86.885094" + y="129.46358" /> + </g> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 87.221337,53.06628 -8.50064,14.418935" + id="path4" + inkscape:connector-type="polyline" + inkscape:connector-curvature="0" + inkscape:connection-start="#g4" + inkscape:connection-end="#g3" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 63.596769,92.496712 48.627283,116.80554" + id="path5" + inkscape:connector-type="polyline" + inkscape:connector-curvature="0" + inkscape:connection-start="#g3" + inkscape:connection-end="#g2" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 84.51551,92.496712 21.38437,25.595218" + id="path6" + inkscape:connector-type="polyline" + inkscape:connector-curvature="0" + inkscape:connection-start="#g3" + inkscape:connection-end="#g1" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 41.975642,141.58636 -0.346901,18.68113" + id="path7" + inkscape:connector-type="polyline" + inkscape:connector-curvature="0" + inkscape:connection-start="#g2" + inkscape:connection-end="#g2-84" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 114.28452,142.01689 0.55816,18.35423" + id="path8" + inkscape:connector-type="polyline" + inkscape:connector-curvature="0" + inkscape:connection-start="#g1" + inkscape:connection-end="#g2-8" /> + <text + xml:space="preserve" + transform="scale(0.26458333)" + id="text13" + style="fill:black;fill-opacity:1;line-height:1.25;stroke:none;font-family:sans-serif;font-style:normal;font-weight:normal;font-size:40px;white-space:pre;shape-inside:url(#rect13)" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 175.73502,162.45692 -0.12291,-20.57388" + id="path17" + inkscape:connector-type="polyline" + inkscape:connector-curvature="0" + inkscape:connection-start="#g2-3" + inkscape:connection-end="#g16" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 172.25419,93.229961 1.8984,19.866499" + id="path18" + inkscape:connector-type="polyline" + inkscape:connector-curvature="0" + inkscape:connection-start="#g15" + inkscape:connection-end="#g16" /> + </g> +</svg> diff --git a/doc/img/sufixtree_a.png b/doc/img/sufixtree_a.png new file mode 100644 index 0000000000000000000000000000000000000000..f8d913c5b59ff411626fcc09517f66fca5c38cdd Binary files /dev/null and b/doc/img/sufixtree_a.png differ diff --git a/doc/img/sufixtree_a.svg b/doc/img/sufixtree_a.svg new file mode 100644 index 0000000000000000000000000000000000000000..47fc04751b733e8edeed2ac8d34b74853d34922c --- /dev/null +++ b/doc/img/sufixtree_a.svg @@ -0,0 +1,477 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + width="188.91048mm" + height="172.12462mm" + viewBox="0 0 188.91048 172.12462" + version="1.1" + id="svg1" + sodipodi:docname="sufixtree_a.svg" + inkscape:version="1.3 (0e150ed, 2023-07-21)" + inkscape:export-filename="sufixtree_a.png" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <sodipodi:namedview + id="namedview1" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:showpageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" + inkscape:document-units="mm" + inkscape:zoom="0.92737795" + inkscape:cx="343.98057" + inkscape:cy="487.93483" + inkscape:window-width="1392" + inkscape:window-height="1184" + inkscape:window-x="1821" + inkscape:window-y="25" + inkscape:window-maximized="0" + inkscape:current-layer="layer1" /> + <defs + id="defs1"> + <rect + x="288.98682" + y="416.22729" + width="354.76367" + height="348.29382" + id="rect13" /> + </defs> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-14.136232,-19.40915)"> + <g + id="g4"> + <path + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="path1" + sodipodi:type="arc" + sodipodi:cx="95.148415" + sodipodi:cy="32.239197" + sodipodi:rx="8" + sodipodi:ry="8" + sodipodi:start="0.14645616" + sodipodi:end="0.12159971" + sodipodi:open="true" + sodipodi:arc-type="arc" + d="m 103.06277,33.406662 a 8,8 0 0 1 -9.032618,6.753992 8,8 0 0 1 -6.809991,-8.990473 8,8 0 0 1 8.947982,-6.865728 8,8 0 0 1 6.921197,8.905146" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" + x="71.168518" + y="51.919418" + id="text1"><tspan + sodipodi:role="line" + id="tspan1" + style="font-size:14.1111px;stroke-width:0.264583" + x="71.168518" + y="51.919418"><tspan + style="fill:#ff0000" + id="tspan8">A</tspan>CTGN</tspan></text> + <rect + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="rect1" + width="53.922192" + height="12.553314" + x="68.757927" + y="40.512966" /> + </g> + <g + id="g3"> + <path + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="path1-1" + sodipodi:type="arc" + sodipodi:cx="71.902306" + sodipodi:cy="71.669632" + sodipodi:rx="8" + sodipodi:ry="8" + sodipodi:start="0.14645616" + sodipodi:end="0.12159971" + sodipodi:open="true" + sodipodi:arc-type="arc" + d="m 79.816661,72.837097 a 8,8 0 0 1 -9.032618,6.753992 8,8 0 0 1 -6.809991,-8.990473 8,8 0 0 1 8.947982,-6.865727 8,8 0 0 1 6.921198,8.905145" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" + x="47.922413" + y="91.349846" + id="text1-3"><tspan + sodipodi:role="line" + id="tspan1-8" + style="font-size:14.1111px;stroke-width:0.264583" + x="47.922413" + y="91.349846"><tspan + style="fill:#ff0000" + id="tspan9">A</tspan>CTGN</tspan></text> + <rect + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="rect1-4" + width="53.922192" + height="12.553314" + x="45.511829" + y="79.943398" /> + </g> + <g + id="g2"> + <path + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="path1-6" + sodipodi:type="arc" + sodipodi:cx="41.672695" + sodipodi:cy="120.75927" + sodipodi:rx="8" + sodipodi:ry="8" + sodipodi:start="0.14645616" + sodipodi:end="0.12159971" + sodipodi:open="true" + sodipodi:arc-type="arc" + d="m 49.587051,121.92673 a 8,8 0 0 1 -9.032618,6.754 8,8 0 0 1 -6.809991,-8.99048 8,8 0 0 1 8.947982,-6.86572 8,8 0 0 1 6.921198,8.90514" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" + x="17.692799" + y="140.4395" + id="text1-0"><tspan + sodipodi:role="line" + id="tspan1-3" + style="font-size:14.1111px;stroke-width:0.264583" + x="17.692799" + y="140.4395"><tspan + style="fill:#ff0000" + id="tspan10">A</tspan>CTGN</tspan></text> + <rect + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="rect1-2" + width="53.922192" + height="12.553314" + x="15.282207" + y="129.03305" /> + </g> + <g + id="g1"> + <path + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="path1-6-1" + sodipodi:type="arc" + sodipodi:cx="113.27558" + sodipodi:cy="121.1898" + sodipodi:rx="8" + sodipodi:ry="8" + sodipodi:start="0.14645616" + sodipodi:end="0.12159971" + sodipodi:open="true" + sodipodi:arc-type="arc" + d="m 121.18994,122.35726 a 8,8 0 0 1 -9.03262,6.75399 8,8 0 0 1 -6.80999,-8.99047 8,8 0 0 1 8.94798,-6.86573 8,8 0 0 1 6.9212,8.90515" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" + x="89.295685" + y="140.87004" + id="text1-0-3"><tspan + sodipodi:role="line" + id="tspan1-3-7" + style="font-size:14.1111px;stroke-width:0.264583" + x="89.295685" + y="140.87004">A<tspan + style="fill:#ff0000" + id="tspan12">C</tspan>TGN</tspan></text> + <rect + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="rect1-2-8" + width="53.922192" + height="12.553314" + x="86.885094" + y="129.46358" /> + </g> + <g + id="g16"> + <g + id="g2-2" + transform="translate(61.679819,-0.13385004)"> + <path + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="path1-6-1-9" + sodipodi:type="arc" + sodipodi:cx="113.27558" + sodipodi:cy="121.1898" + sodipodi:rx="8" + sodipodi:ry="8" + sodipodi:start="0.14645616" + sodipodi:end="0.12159971" + sodipodi:open="true" + sodipodi:arc-type="arc" + d="m 121.18994,122.35726 a 8,8 0 0 1 -9.03262,6.75399 8,8 0 0 1 -6.80999,-8.99047 8,8 0 0 1 8.94798,-6.86573 8,8 0 0 1 6.9212,8.90515" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" + x="89.295685" + y="140.87004" + id="text1-0-3-8"><tspan + sodipodi:role="line" + id="tspan1-3-7-2" + style="font-size:14.1111px;stroke-width:0.264583" + x="89.295685" + y="140.87004">A<tspan + style="fill:#ff0000" + id="tspan12-0">C</tspan>TGN</tspan></text> + <rect + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="rect1-2-8-7" + width="53.922192" + height="12.553314" + x="86.885094" + y="129.46358" /> + </g> + </g> + <g + id="g2-3" + transform="translate(61.974842,49.252287)"> + <path + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="path1-6-1-0" + sodipodi:type="arc" + sodipodi:cx="113.27558" + sodipodi:cy="121.1898" + sodipodi:rx="8" + sodipodi:ry="8" + sodipodi:start="0.14645616" + sodipodi:end="0.12159971" + sodipodi:open="true" + sodipodi:arc-type="arc" + d="m 121.18994,122.35726 a 8,8 0 0 1 -9.03262,6.75399 8,8 0 0 1 -6.80999,-8.99047 8,8 0 0 1 8.94798,-6.86573 8,8 0 0 1 6.9212,8.90515" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" + x="89.295685" + y="140.87004" + id="text1-0-3-6"><tspan + sodipodi:role="line" + id="tspan1-3-7-22" + style="font-size:14.1111px;stroke-width:0.264583" + x="89.295685" + y="140.87004">A<tspan + style="fill:#ff0000" + id="tspan12-5">C</tspan>TGN</tspan></text> + <rect + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="rect1-2-8-22" + width="53.922192" + height="12.553314" + x="86.885094" + y="129.46358" /> + </g> + <g + id="g15" + transform="translate(57.030635,-48.78693)"> + <path + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="path1-6-1-10" + sodipodi:type="arc" + sodipodi:cx="113.27558" + sodipodi:cy="121.1898" + sodipodi:rx="8" + sodipodi:ry="8" + sodipodi:start="0.14645616" + sodipodi:end="0.12159971" + sodipodi:open="true" + sodipodi:arc-type="arc" + d="m 121.18994,122.35726 a 8,8 0 0 1 -9.03262,6.75399 8,8 0 0 1 -6.80999,-8.99047 8,8 0 0 1 8.94798,-6.86573 8,8 0 0 1 6.9212,8.90515" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" + x="89.295685" + y="140.87004" + id="text1-0-3-1"><tspan + sodipodi:role="line" + id="tspan1-3-7-8" + style="font-size:14.1111px;stroke-width:0.264583" + x="89.295685" + y="140.87004">A<tspan + style="fill:#2b0000" + id="tspan12-7">C</tspan>T<tspan + style="fill:#ff0000" + id="tspan15">G</tspan>N</tspan></text> + <rect + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="rect1-2-8-6" + width="53.922192" + height="12.553314" + x="86.885094" + y="129.46358" /> + </g> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 122.68012,50.852211 40.33761,18.252704" + id="path15" + inkscape:connector-type="polyline" + inkscape:connector-curvature="0" + inkscape:connection-start="#g4" + inkscape:connection-end="#path1-6-1-10" /> + <g + id="g2-8" + transform="translate(1.4347664,47.180175)"> + <path + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="path1-6-1-8" + sodipodi:type="arc" + sodipodi:cx="113.27558" + sodipodi:cy="121.1898" + sodipodi:rx="8" + sodipodi:ry="8" + sodipodi:start="0.14645616" + sodipodi:end="0.12159971" + sodipodi:open="true" + sodipodi:arc-type="arc" + d="m 121.18994,122.35726 a 8,8 0 0 1 -9.03262,6.75399 8,8 0 0 1 -6.80999,-8.99047 8,8 0 0 1 8.94798,-6.86573 8,8 0 0 1 6.9212,8.90515" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" + x="89.295685" + y="140.87004" + id="text1-0-3-3"><tspan + sodipodi:role="line" + id="tspan1-3-7-5" + style="font-size:14.1111px;stroke-width:0.264583" + x="89.295685" + y="140.87004">A<tspan + style="fill:#ff0000" + id="tspan13">C</tspan>TGN</tspan></text> + <rect + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="rect1-2-8-2" + width="53.922192" + height="12.553314" + x="86.885094" + y="129.46358" /> + </g> + <g + id="g2-84" + transform="translate(-72.484278,47.033675)"> + <path + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="path1-6-1-1" + sodipodi:type="arc" + sodipodi:cx="113.27558" + sodipodi:cy="121.1898" + sodipodi:rx="8" + sodipodi:ry="8" + sodipodi:start="0.14645616" + sodipodi:end="0.12159971" + sodipodi:open="true" + sodipodi:arc-type="arc" + d="m 121.18994,122.35726 a 8,8 0 0 1 -9.03262,6.75399 8,8 0 0 1 -6.80999,-8.99047 8,8 0 0 1 8.94798,-6.86573 8,8 0 0 1 6.9212,8.90515" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" + x="89.295685" + y="140.87004" + id="text1-0-3-7"><tspan + sodipodi:role="line" + id="tspan1-3-7-1" + style="font-size:14.1111px;stroke-width:0.264583" + x="89.295685" + y="140.87004"><tspan + style="fill:#ff0000" + id="tspan11">A</tspan>CTGN</tspan></text> + <rect + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="rect1-2-8-8" + width="53.922192" + height="12.553314" + x="86.885094" + y="129.46358" /> + </g> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 87.221337,53.06628 -8.50064,14.418935" + id="path4" + inkscape:connector-type="polyline" + inkscape:connector-curvature="0" + inkscape:connection-start="#g4" + inkscape:connection-end="#g3" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 63.596769,92.496712 48.627283,116.80554" + id="path5" + inkscape:connector-type="polyline" + inkscape:connector-curvature="0" + inkscape:connection-start="#g3" + inkscape:connection-end="#g2" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 84.51551,92.496712 21.38437,25.595218" + id="path6" + inkscape:connector-type="polyline" + inkscape:connector-curvature="0" + inkscape:connection-start="#g3" + inkscape:connection-end="#g1" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 41.975642,141.58636 -0.346901,18.68113" + id="path7" + inkscape:connector-type="polyline" + inkscape:connector-curvature="0" + inkscape:connection-start="#g2" + inkscape:connection-end="#g2-84" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 114.28452,142.01689 0.55816,18.35423" + id="path8" + inkscape:connector-type="polyline" + inkscape:connector-curvature="0" + inkscape:connection-start="#g1" + inkscape:connection-end="#g2-8" /> + <text + xml:space="preserve" + transform="scale(0.26458333)" + id="text13" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;white-space:pre;shape-inside:url(#rect13);display:inline;fill:#000000;fill-opacity:1;stroke:none" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 175.73502,162.45692 -0.12291,-20.57388" + id="path17" + inkscape:connector-type="polyline" + inkscape:connector-curvature="0" + inkscape:connection-start="#g2-3" + inkscape:connection-end="#g16" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 172.25419,93.229961 1.8984,19.866499" + id="path18" + inkscape:connector-type="polyline" + inkscape:connector-curvature="0" + inkscape:connection-start="#g15" + inkscape:connection-end="#g16" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" + x="167.18732" + y="27.103746" + id="text18"><tspan + sodipodi:role="line" + id="tspan18" + style="stroke-width:0.264583" + x="167.18732" + y="27.103746">AAAA</tspan><tspan + sodipodi:role="line" + style="stroke-width:0.264583" + x="167.18732" + y="40.33287" + id="tspan19">AACC</tspan><tspan + sodipodi:role="line" + style="stroke-width:0.264583" + x="167.18732" + y="53.561996" + id="tspan20">AGCC</tspan></text> + </g> +</svg> diff --git a/doc/img/sufixtree_b.png b/doc/img/sufixtree_b.png new file mode 100644 index 0000000000000000000000000000000000000000..11f5f0da594c3cbfcb6fe15b654ddaee8435bfa4 Binary files /dev/null and b/doc/img/sufixtree_b.png differ diff --git a/doc/img/sufixtree_b.svg b/doc/img/sufixtree_b.svg new file mode 100644 index 0000000000000000000000000000000000000000..401f6400a3cc3125f1ce6b3c528df4fd9874954a --- /dev/null +++ b/doc/img/sufixtree_b.svg @@ -0,0 +1,510 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + width="188.91048mm" + height="172.12462mm" + viewBox="0 0 188.91048 172.12462" + version="1.1" + id="svg1" + sodipodi:docname="sufixtree_b.svg" + inkscape:version="1.3 (0e150ed, 2023-07-21)" + inkscape:export-filename="sufixtree_b.png" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <sodipodi:namedview + id="namedview1" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:showpageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" + inkscape:document-units="mm" + inkscape:zoom="0.92737795" + inkscape:cx="343.98057" + inkscape:cy="487.93483" + inkscape:window-width="1392" + inkscape:window-height="1184" + inkscape:window-x="1821" + inkscape:window-y="25" + inkscape:window-maximized="0" + inkscape:current-layer="layer1" /> + <defs + id="defs1"> + <rect + x="288.98682" + y="416.22729" + width="354.76367" + height="348.29382" + id="rect13" /> + </defs> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-14.136232,-19.40915)"> + <g + id="g4"> + <path + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="path1" + sodipodi:type="arc" + sodipodi:cx="95.148415" + sodipodi:cy="32.239197" + sodipodi:rx="8" + sodipodi:ry="8" + sodipodi:start="0.14645616" + sodipodi:end="0.12159971" + sodipodi:open="true" + sodipodi:arc-type="arc" + d="m 103.06277,33.406662 a 8,8 0 0 1 -9.032618,6.753992 8,8 0 0 1 -6.809991,-8.990473 8,8 0 0 1 8.947982,-6.865728 8,8 0 0 1 6.921197,8.905146" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" + x="71.168518" + y="51.919418" + id="text1"><tspan + sodipodi:role="line" + id="tspan1" + style="font-size:14.1111px;stroke-width:0.264583" + x="71.168518" + y="51.919418"><tspan + style="fill:#ff0000" + id="tspan8">A</tspan>CTGN</tspan></text> + <rect + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="rect1" + width="53.922192" + height="12.553314" + x="68.757927" + y="40.512966" /> + </g> + <g + id="g3"> + <path + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="path1-1" + sodipodi:type="arc" + sodipodi:cx="71.902306" + sodipodi:cy="71.669632" + sodipodi:rx="8" + sodipodi:ry="8" + sodipodi:start="0.14645616" + sodipodi:end="0.12159971" + sodipodi:open="true" + sodipodi:arc-type="arc" + d="m 79.816661,72.837097 a 8,8 0 0 1 -9.032618,6.753992 8,8 0 0 1 -6.809991,-8.990473 8,8 0 0 1 8.947982,-6.865727 8,8 0 0 1 6.921198,8.905145" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" + x="47.922413" + y="91.349846" + id="text1-3"><tspan + sodipodi:role="line" + id="tspan1-8" + style="font-size:14.1111px;stroke-width:0.264583" + x="47.922413" + y="91.349846"><tspan + style="fill:#ff0000" + id="tspan9">A</tspan>CTGN</tspan></text> + <rect + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="rect1-4" + width="53.922192" + height="12.553314" + x="45.511829" + y="79.943398" /> + </g> + <g + id="g2"> + <path + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="path1-6" + sodipodi:type="arc" + sodipodi:cx="41.672695" + sodipodi:cy="120.75927" + sodipodi:rx="8" + sodipodi:ry="8" + sodipodi:start="0.14645616" + sodipodi:end="0.12159971" + sodipodi:open="true" + sodipodi:arc-type="arc" + d="m 49.587051,121.92673 a 8,8 0 0 1 -9.032618,6.754 8,8 0 0 1 -6.809991,-8.99048 8,8 0 0 1 8.947982,-6.86572 8,8 0 0 1 6.921198,8.90514" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" + x="17.692799" + y="140.4395" + id="text1-0"><tspan + sodipodi:role="line" + id="tspan1-3" + style="font-size:14.1111px;stroke-width:0.264583" + x="17.692799" + y="140.4395"><tspan + style="fill:#ff0000" + id="tspan10">A</tspan>CTGN</tspan></text> + <rect + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="rect1-2" + width="53.922192" + height="12.553314" + x="15.282207" + y="129.03305" /> + </g> + <g + id="g1"> + <path + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="path1-6-1" + sodipodi:type="arc" + sodipodi:cx="113.27558" + sodipodi:cy="121.1898" + sodipodi:rx="8" + sodipodi:ry="8" + sodipodi:start="0.14645616" + sodipodi:end="0.12159971" + sodipodi:open="true" + sodipodi:arc-type="arc" + d="m 121.18994,122.35726 a 8,8 0 0 1 -9.03262,6.75399 8,8 0 0 1 -6.80999,-8.99047 8,8 0 0 1 8.94798,-6.86573 8,8 0 0 1 6.9212,8.90515" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" + x="89.295685" + y="140.87004" + id="text1-0-3"><tspan + sodipodi:role="line" + id="tspan1-3-7" + style="font-size:14.1111px;stroke-width:0.264583" + x="89.295685" + y="140.87004">A<tspan + style="fill:#ff0000" + id="tspan12">C</tspan>TGN</tspan></text> + <rect + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="rect1-2-8" + width="53.922192" + height="12.553314" + x="86.885094" + y="129.46358" /> + </g> + <g + id="g16"> + <g + id="g2-2" + transform="translate(61.679819,-0.13385004)"> + <path + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="path1-6-1-9" + sodipodi:type="arc" + sodipodi:cx="113.27558" + sodipodi:cy="121.1898" + sodipodi:rx="8" + sodipodi:ry="8" + sodipodi:start="0.14645616" + sodipodi:end="0.12159971" + sodipodi:open="true" + sodipodi:arc-type="arc" + d="m 121.18994,122.35726 a 8,8 0 0 1 -9.03262,6.75399 8,8 0 0 1 -6.80999,-8.99047 8,8 0 0 1 8.94798,-6.86573 8,8 0 0 1 6.9212,8.90515" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" + x="89.295685" + y="140.87004" + id="text1-0-3-8"><tspan + sodipodi:role="line" + id="tspan1-3-7-2" + style="font-size:14.1111px;stroke-width:0.264583" + x="89.295685" + y="140.87004">A<tspan + style="fill:#ff0000" + id="tspan12-0">C</tspan>TGN</tspan></text> + <rect + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="rect1-2-8-7" + width="53.922192" + height="12.553314" + x="86.885094" + y="129.46358" /> + </g> + </g> + <g + id="g2-3" + transform="translate(61.974842,49.252287)"> + <path + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="path1-6-1-0" + sodipodi:type="arc" + sodipodi:cx="113.27558" + sodipodi:cy="121.1898" + sodipodi:rx="8" + sodipodi:ry="8" + sodipodi:start="0.14645616" + sodipodi:end="0.12159971" + sodipodi:open="true" + sodipodi:arc-type="arc" + d="m 121.18994,122.35726 a 8,8 0 0 1 -9.03262,6.75399 8,8 0 0 1 -6.80999,-8.99047 8,8 0 0 1 8.94798,-6.86573 8,8 0 0 1 6.9212,8.90515" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" + x="89.295685" + y="140.87004" + id="text1-0-3-6"><tspan + sodipodi:role="line" + id="tspan1-3-7-22" + style="font-size:14.1111px;stroke-width:0.264583" + x="89.295685" + y="140.87004">A<tspan + style="fill:#ff0000" + id="tspan12-5">C</tspan>TGN</tspan></text> + <rect + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="rect1-2-8-22" + width="53.922192" + height="12.553314" + x="86.885094" + y="129.46358" /> + </g> + <g + id="g15" + transform="translate(57.030635,-48.78693)"> + <path + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="path1-6-1-10" + sodipodi:type="arc" + sodipodi:cx="113.27558" + sodipodi:cy="121.1898" + sodipodi:rx="8" + sodipodi:ry="8" + sodipodi:start="0.14645616" + sodipodi:end="0.12159971" + sodipodi:open="true" + sodipodi:arc-type="arc" + d="m 121.18994,122.35726 a 8,8 0 0 1 -9.03262,6.75399 8,8 0 0 1 -6.80999,-8.99047 8,8 0 0 1 8.94798,-6.86573 8,8 0 0 1 6.9212,8.90515" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" + x="89.295685" + y="140.87004" + id="text1-0-3-1"><tspan + sodipodi:role="line" + id="tspan1-3-7-8" + style="font-size:14.1111px;stroke-width:0.264583" + x="89.295685" + y="140.87004">A<tspan + style="fill:#2b0000" + id="tspan12-7">C</tspan>T<tspan + style="fill:#ff0000" + id="tspan15">G</tspan>N</tspan></text> + <rect + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="rect1-2-8-6" + width="53.922192" + height="12.553314" + x="86.885094" + y="129.46358" /> + </g> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 122.68012,50.852211 40.33761,18.252704" + id="path15" + inkscape:connector-type="polyline" + inkscape:connector-curvature="0" + inkscape:connection-start="#g4" + inkscape:connection-end="#path1-6-1-10" /> + <g + id="g2-8" + transform="translate(1.4347664,47.180175)"> + <path + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="path1-6-1-8" + sodipodi:type="arc" + sodipodi:cx="113.27558" + sodipodi:cy="121.1898" + sodipodi:rx="8" + sodipodi:ry="8" + sodipodi:start="0.14645616" + sodipodi:end="0.12159971" + sodipodi:open="true" + sodipodi:arc-type="arc" + d="m 121.18994,122.35726 a 8,8 0 0 1 -9.03262,6.75399 8,8 0 0 1 -6.80999,-8.99047 8,8 0 0 1 8.94798,-6.86573 8,8 0 0 1 6.9212,8.90515" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" + x="89.295685" + y="140.87004" + id="text1-0-3-3"><tspan + sodipodi:role="line" + id="tspan1-3-7-5" + style="font-size:14.1111px;stroke-width:0.264583" + x="89.295685" + y="140.87004">A<tspan + style="fill:#ff0000" + id="tspan13">C</tspan>TGN</tspan></text> + <rect + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="rect1-2-8-2" + width="53.922192" + height="12.553314" + x="86.885094" + y="129.46358" /> + </g> + <g + id="g2-84" + transform="translate(-72.484278,47.033675)"> + <path + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="path1-6-1-1" + sodipodi:type="arc" + sodipodi:cx="113.27558" + sodipodi:cy="121.1898" + sodipodi:rx="8" + sodipodi:ry="8" + sodipodi:start="0.14645616" + sodipodi:end="0.12159971" + sodipodi:open="true" + sodipodi:arc-type="arc" + d="m 121.18994,122.35726 a 8,8 0 0 1 -9.03262,6.75399 8,8 0 0 1 -6.80999,-8.99047 8,8 0 0 1 8.94798,-6.86573 8,8 0 0 1 6.9212,8.90515" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" + x="89.295685" + y="140.87004" + id="text1-0-3-7"><tspan + sodipodi:role="line" + id="tspan1-3-7-1" + style="font-size:14.1111px;stroke-width:0.264583" + x="89.295685" + y="140.87004"><tspan + style="fill:#ff0000" + id="tspan11">A</tspan>CTGN</tspan></text> + <rect + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="rect1-2-8-8" + width="53.922192" + height="12.553314" + x="86.885094" + y="129.46358" /> + </g> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 87.221337,53.06628 -8.50064,14.418935" + id="path4" + inkscape:connector-type="polyline" + inkscape:connector-curvature="0" + inkscape:connection-start="#g4" + inkscape:connection-end="#g3" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 63.596769,92.496712 48.627283,116.80554" + id="path5" + inkscape:connector-type="polyline" + inkscape:connector-curvature="0" + inkscape:connection-start="#g3" + inkscape:connection-end="#g2" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 84.51551,92.496712 21.38437,25.595218" + id="path6" + inkscape:connector-type="polyline" + inkscape:connector-curvature="0" + inkscape:connection-start="#g3" + inkscape:connection-end="#g1" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 41.975642,141.58636 -0.346901,18.68113" + id="path7" + inkscape:connector-type="polyline" + inkscape:connector-curvature="0" + inkscape:connection-start="#g2" + inkscape:connection-end="#g2-84" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 114.28452,142.01689 0.55816,18.35423" + id="path8" + inkscape:connector-type="polyline" + inkscape:connector-curvature="0" + inkscape:connection-start="#g1" + inkscape:connection-end="#g2-8" /> + <text + xml:space="preserve" + transform="scale(0.26458333)" + id="text13" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;white-space:pre;shape-inside:url(#rect13);display:inline;fill:#000000;fill-opacity:1;stroke:none" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 175.73502,162.45692 -0.12291,-20.57388" + id="path17" + inkscape:connector-type="polyline" + inkscape:connector-curvature="0" + inkscape:connection-start="#g2-3" + inkscape:connection-end="#g16" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 172.25419,93.229961 1.8984,19.866499" + id="path18" + inkscape:connector-type="polyline" + inkscape:connector-curvature="0" + inkscape:connection-start="#g15" + inkscape:connection-end="#g16" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" + x="167.18732" + y="27.103746" + id="text18"><tspan + sodipodi:role="line" + id="tspan18" + style="stroke-width:0.264583" + x="167.18732" + y="27.103746">AAAA</tspan><tspan + sodipodi:role="line" + style="stroke-width:0.264583" + x="167.18732" + y="40.33287" + id="tspan19">AACC</tspan><tspan + sodipodi:role="line" + style="stroke-width:0.264583" + x="167.18732" + y="53.561996" + id="tspan20">AGCC</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" + x="37.816349" + y="172.33134" + id="text21"><tspan + sodipodi:role="line" + id="tspan21" + style="stroke-width:0.264583" + x="37.816349" + y="172.33134">3</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" + x="109.99791" + y="172.04605" + id="text22"><tspan + sodipodi:role="line" + id="tspan22" + style="stroke-width:0.264583" + x="109.99791" + y="172.04605">1e5</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" + x="172.76447" + y="174.32846" + id="text23"><tspan + sodipodi:role="line" + id="tspan23" + style="stroke-width:0.264583" + x="172.76447" + y="174.32846">5</tspan></text> + </g> +</svg> diff --git a/doc/img/sufixtree_c.png b/doc/img/sufixtree_c.png new file mode 100644 index 0000000000000000000000000000000000000000..7962dda2baa21df3cc91feb7f6e031ecf1a22739 Binary files /dev/null and b/doc/img/sufixtree_c.png differ diff --git a/doc/img/sufixtree_c.svg b/doc/img/sufixtree_c.svg new file mode 100644 index 0000000000000000000000000000000000000000..867d42e72cb52646d4927469676d91dc42a9f8a9 --- /dev/null +++ b/doc/img/sufixtree_c.svg @@ -0,0 +1,373 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + width="188.91048mm" + height="172.12462mm" + viewBox="0 0 188.91048 172.12462" + version="1.1" + id="svg1" + sodipodi:docname="sufixtree_c.svg" + inkscape:version="1.3 (0e150ed, 2023-07-21)" + inkscape:export-filename="sufixtree_c.png" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <sodipodi:namedview + id="namedview1" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:showpageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" + inkscape:document-units="mm" + inkscape:zoom="0.92737795" + inkscape:cx="315.40539" + inkscape:cy="481.46498" + inkscape:window-width="1392" + inkscape:window-height="1212" + inkscape:window-x="1821" + inkscape:window-y="25" + inkscape:window-maximized="0" + inkscape:current-layer="layer1" /> + <defs + id="defs1"> + <rect + x="288.98682" + y="416.22729" + width="354.76367" + height="348.29382" + id="rect13" /> + </defs> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-14.136232,-19.40915)"> + <g + id="g4"> + <path + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="path1" + sodipodi:type="arc" + sodipodi:cx="95.148415" + sodipodi:cy="32.239197" + sodipodi:rx="8" + sodipodi:ry="8" + sodipodi:start="0.14645616" + sodipodi:end="0.12159971" + sodipodi:open="true" + sodipodi:arc-type="arc" + d="m 103.06277,33.406662 a 8,8 0 0 1 -9.032618,6.753992 8,8 0 0 1 -6.809991,-8.990473 8,8 0 0 1 8.947982,-6.865728 8,8 0 0 1 6.921197,8.905146" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" + x="71.168518" + y="51.919418" + id="text1"><tspan + sodipodi:role="line" + id="tspan1" + style="font-size:14.1111px;stroke-width:0.264583" + x="71.168518" + y="51.919418"><tspan + style="fill:#ff0000" + id="tspan8">A</tspan>CTGN</tspan></text> + <rect + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="rect1" + width="53.922192" + height="12.553314" + x="68.757927" + y="40.512966" /> + </g> + <g + id="g3"> + <path + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="path1-1" + sodipodi:type="arc" + sodipodi:cx="71.902306" + sodipodi:cy="71.669632" + sodipodi:rx="8" + sodipodi:ry="8" + sodipodi:start="0.14645616" + sodipodi:end="0.12159971" + sodipodi:open="true" + sodipodi:arc-type="arc" + d="m 79.816661,72.837097 a 8,8 0 0 1 -9.032618,6.753992 8,8 0 0 1 -6.809991,-8.990473 8,8 0 0 1 8.947982,-6.865727 8,8 0 0 1 6.921198,8.905145" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" + x="47.922413" + y="91.349846" + id="text1-3"><tspan + sodipodi:role="line" + id="tspan1-8" + style="font-size:14.1111px;stroke-width:0.264583" + x="47.922413" + y="91.349846"><tspan + style="fill:#ff0000" + id="tspan9">A</tspan>CTGN</tspan></text> + <rect + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="rect1-4" + width="53.922192" + height="12.553314" + x="45.511829" + y="79.943398" /> + </g> + <g + id="g2"> + <path + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="path1-6" + sodipodi:type="arc" + sodipodi:cx="41.672695" + sodipodi:cy="120.75927" + sodipodi:rx="8" + sodipodi:ry="8" + sodipodi:start="0.14645616" + sodipodi:end="0.12159971" + sodipodi:open="true" + sodipodi:arc-type="arc" + d="m 49.587051,121.92673 a 8,8 0 0 1 -9.032618,6.754 8,8 0 0 1 -6.809991,-8.99048 8,8 0 0 1 8.947982,-6.86572 8,8 0 0 1 6.921198,8.90514" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" + x="17.692799" + y="140.4395" + id="text1-0"><tspan + sodipodi:role="line" + id="tspan1-3" + style="font-size:14.1111px;stroke-width:0.264583" + x="17.692799" + y="140.4395"><tspan + style="fill:#ff0000" + id="tspan10">A</tspan>CTGN</tspan></text> + <rect + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="rect1-2" + width="53.922192" + height="12.553314" + x="15.282207" + y="129.03305" /> + </g> + <g + id="g1"> + <path + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="path1-6-1" + sodipodi:type="arc" + sodipodi:cx="113.27558" + sodipodi:cy="121.1898" + sodipodi:rx="8" + sodipodi:ry="8" + sodipodi:start="0.14645616" + sodipodi:end="0.12159971" + sodipodi:open="true" + sodipodi:arc-type="arc" + d="m 121.18994,122.35726 a 8,8 0 0 1 -9.03262,6.75399 8,8 0 0 1 -6.80999,-8.99047 8,8 0 0 1 8.94798,-6.86573 8,8 0 0 1 6.9212,8.90515" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" + x="89.295685" + y="140.87004" + id="text1-0-3"><tspan + sodipodi:role="line" + id="tspan1-3-7" + style="font-size:14.1111px;stroke-width:0.264583" + x="89.295685" + y="140.87004">A<tspan + style="fill:#ff0000" + id="tspan12">C</tspan>TGN</tspan></text> + <rect + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="rect1-2-8" + width="53.922192" + height="12.553314" + x="86.885094" + y="129.46358" /> + </g> + <g + id="g2-8" + transform="translate(1.4347664,47.180175)"> + <path + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="path1-6-1-8" + sodipodi:type="arc" + sodipodi:cx="113.27558" + sodipodi:cy="121.1898" + sodipodi:rx="8" + sodipodi:ry="8" + sodipodi:start="0.14645616" + sodipodi:end="0.12159971" + sodipodi:open="true" + sodipodi:arc-type="arc" + d="m 121.18994,122.35726 a 8,8 0 0 1 -9.03262,6.75399 8,8 0 0 1 -6.80999,-8.99047 8,8 0 0 1 8.94798,-6.86573 8,8 0 0 1 6.9212,8.90515" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" + x="89.295685" + y="140.87004" + id="text1-0-3-3"><tspan + sodipodi:role="line" + id="tspan1-3-7-5" + style="font-size:14.1111px;stroke-width:0.264583" + x="89.295685" + y="140.87004">A<tspan + style="fill:#ff0000" + id="tspan13">C</tspan>TGN</tspan></text> + <rect + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="rect1-2-8-2" + width="53.922192" + height="12.553314" + x="86.885094" + y="129.46358" /> + </g> + <g + id="g2-84" + transform="translate(-72.484278,47.033675)"> + <path + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="path1-6-1-1" + sodipodi:type="arc" + sodipodi:cx="113.27558" + sodipodi:cy="121.1898" + sodipodi:rx="8" + sodipodi:ry="8" + sodipodi:start="0.14645616" + sodipodi:end="0.12159971" + sodipodi:open="true" + sodipodi:arc-type="arc" + d="m 121.18994,122.35726 a 8,8 0 0 1 -9.03262,6.75399 8,8 0 0 1 -6.80999,-8.99047 8,8 0 0 1 8.94798,-6.86573 8,8 0 0 1 6.9212,8.90515" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:14.1111px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" + x="89.295685" + y="140.87004" + id="text1-0-3-7"><tspan + sodipodi:role="line" + id="tspan1-3-7-1" + style="font-size:14.1111px;stroke-width:0.264583" + x="89.295685" + y="140.87004"><tspan + style="fill:#ff0000" + id="tspan11">A</tspan>CTGN</tspan></text> + <rect + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="rect1-2-8-8" + width="53.922192" + height="12.553314" + x="86.885094" + y="129.46358" /> + </g> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 87.221337,53.06628 -8.50064,14.418935" + id="path4" + inkscape:connector-type="polyline" + inkscape:connector-curvature="0" + inkscape:connection-start="#g4" + inkscape:connection-end="#g3" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 63.596769,92.496712 48.627283,116.80554" + id="path5" + inkscape:connector-type="polyline" + inkscape:connector-curvature="0" + inkscape:connection-start="#g3" + inkscape:connection-end="#g2" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 84.51551,92.496712 21.38437,25.595218" + id="path6" + inkscape:connector-type="polyline" + inkscape:connector-curvature="0" + inkscape:connection-start="#g3" + inkscape:connection-end="#g1" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 41.975642,141.58636 -0.346901,18.68113" + id="path7" + inkscape:connector-type="polyline" + inkscape:connector-curvature="0" + inkscape:connection-start="#g2" + inkscape:connection-end="#g2-84" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 114.28452,142.01689 0.55816,18.35423" + id="path8" + inkscape:connector-type="polyline" + inkscape:connector-curvature="0" + inkscape:connection-start="#g1" + inkscape:connection-end="#g2-8" /> + <text + xml:space="preserve" + transform="scale(0.26458333)" + id="text13" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;white-space:pre;shape-inside:url(#rect13);display:inline;fill:#000000;fill-opacity:1;stroke:none" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" + x="167.18732" + y="27.103746" + id="text18"><tspan + sodipodi:role="line" + id="tspan18" + style="stroke-width:0.264583" + x="167.18732" + y="27.103746">AAAA</tspan><tspan + sodipodi:role="line" + style="stroke-width:0.264583" + x="167.18732" + y="40.33287" + id="tspan19">AACC</tspan><tspan + sodipodi:role="line" + style="stroke-width:0.264583" + x="167.18732" + y="53.561996" + id="tspan20">AGCC</tspan></text> + <rect + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="rect23" + width="44.792511" + height="12.553313" + x="48.943146" + y="161.48984" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:8.81944px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" + x="50.024837" + y="170.76692" + id="text21"><tspan + sodipodi:role="line" + id="tspan21" + style="font-size:8.81944px;stroke-width:0.264583" + x="50.024837" + y="170.76692">3, 0,..., 5</tspan></text> + <rect + style="fill:none;stroke:#000000;stroke-width:0.529167;stroke-opacity:1" + id="rect23-7" + width="56.204609" + height="12.553314" + x="124.51826" + y="162.15982" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:8.81944px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583" + x="125.59996" + y="171.4369" + id="text21-5"><tspan + sodipodi:role="line" + id="tspan21-0" + style="font-size:8.81944px;stroke-width:0.264583" + x="125.59996" + y="171.4369">4, 5,..., 1e5</tspan></text> + </g> +</svg> diff --git a/doc/presentation.html b/doc/presentation.html new file mode 100644 index 0000000000000000000000000000000000000000..2d3a0de27de638e3691d08ebf9c38f9aa38de3ee --- /dev/null +++ b/doc/presentation.html @@ -0,0 +1,991 @@ +<!DOCTYPE html> +<html lang="en"><head> +<script src="presentation_files/libs/clipboard/clipboard.min.js"></script> +<script src="presentation_files/libs/quarto-html/tabby.min.js"></script> +<script src="presentation_files/libs/quarto-html/popper.min.js"></script> +<script src="presentation_files/libs/quarto-html/tippy.umd.min.js"></script> +<link href="presentation_files/libs/quarto-html/tippy.css" rel="stylesheet"> +<link href="presentation_files/libs/quarto-html/light-border.css" rel="stylesheet"> +<link href="presentation_files/libs/quarto-html/quarto-html.min.css" rel="stylesheet" data-mode="light"> +<link href="presentation_files/libs/quarto-html/quarto-syntax-highlighting.css" rel="stylesheet" id="quarto-text-highlighting-styles"><meta charset="utf-8"> + <meta name="generator" content="quarto-1.3.450"> + + <meta name="author" content="laurent modolo"> + <title>Kmer diff</title> + <meta name="apple-mobile-web-app-capable" content="yes"> + <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"> + <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui"> + <link rel="stylesheet" href="presentation_files/libs/revealjs/dist/reset.css"> + <link rel="stylesheet" href="presentation_files/libs/revealjs/dist/reveal.css"> + <style> + code{white-space: pre-wrap;} + span.smallcaps{font-variant: small-caps;} + div.columns{display: flex; gap: min(4vw, 1.5em);} + div.column{flex: auto; overflow-x: auto;} + div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;} + ul.task-list{list-style: none;} + ul.task-list li input[type="checkbox"] { + width: 0.8em; + margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */ + vertical-align: middle; + } + </style> + <link rel="stylesheet" href="presentation_files/libs/revealjs/dist/theme/quarto.css"> + <link href="presentation_files/libs/revealjs/plugin/quarto-line-highlight/line-highlight.css" rel="stylesheet"> + <link href="presentation_files/libs/revealjs/plugin/reveal-menu/menu.css" rel="stylesheet"> + <link href="presentation_files/libs/revealjs/plugin/reveal-menu/quarto-menu.css" rel="stylesheet"> + <link href="presentation_files/libs/revealjs/plugin/reveal-pointer/pointer.css" rel="stylesheet"> + <link href="presentation_files/libs/revealjs/plugin/quarto-support/footer.css" rel="stylesheet"> + <style type="text/css"> + + .callout { + margin-top: 1em; + margin-bottom: 1em; + border-radius: .25rem; + } + + .callout.callout-style-simple { + padding: 0em 0.5em; + border-left: solid #acacac .3rem; + border-right: solid 1px silver; + border-top: solid 1px silver; + border-bottom: solid 1px silver; + display: flex; + } + + .callout.callout-style-default { + border-left: solid #acacac .3rem; + border-right: solid 1px silver; + border-top: solid 1px silver; + border-bottom: solid 1px silver; + } + + .callout .callout-body-container { + flex-grow: 1; + } + + .callout.callout-style-simple .callout-body { + font-size: 1rem; + font-weight: 400; + } + + .callout.callout-style-default .callout-body { + font-size: 0.9rem; + font-weight: 400; + } + + .callout.callout-titled.callout-style-simple .callout-body { + margin-top: 0.2em; + } + + .callout:not(.callout-titled) .callout-body { + display: flex; + } + + .callout:not(.no-icon).callout-titled.callout-style-simple .callout-content { + padding-left: 1.6em; + } + + .callout.callout-titled .callout-header { + padding-top: 0.2em; + margin-bottom: -0.2em; + } + + .callout.callout-titled .callout-title p { + margin-top: 0.5em; + margin-bottom: 0.5em; + } + + .callout.callout-titled.callout-style-simple .callout-content p { + margin-top: 0; + } + + .callout.callout-titled.callout-style-default .callout-content p { + margin-top: 0.7em; + } + + .callout.callout-style-simple div.callout-title { + border-bottom: none; + font-size: .9rem; + font-weight: 600; + opacity: 75%; + } + + .callout.callout-style-default div.callout-title { + border-bottom: none; + font-weight: 600; + opacity: 85%; + font-size: 0.9rem; + padding-left: 0.5em; + padding-right: 0.5em; + } + + .callout.callout-style-default div.callout-content { + padding-left: 0.5em; + padding-right: 0.5em; + } + + .callout.callout-style-simple .callout-icon::before { + height: 1rem; + width: 1rem; + display: inline-block; + content: ""; + background-repeat: no-repeat; + background-size: 1rem 1rem; + } + + .callout.callout-style-default .callout-icon::before { + height: 0.9rem; + width: 0.9rem; + display: inline-block; + content: ""; + background-repeat: no-repeat; + background-size: 0.9rem 0.9rem; + } + + .callout-title { + display: flex + } + + .callout-icon::before { + margin-top: 1rem; + padding-right: .5rem; + } + + .callout.no-icon::before { + display: none !important; + } + + .callout.callout-titled .callout-body > .callout-content > :last-child { + margin-bottom: 0.5rem; + } + + .callout.callout-titled .callout-icon::before { + margin-top: .5rem; + padding-right: .5rem; + } + + .callout:not(.callout-titled) .callout-icon::before { + margin-top: 1rem; + padding-right: .5rem; + } + + /* Callout Types */ + + div.callout-note { + border-left-color: #4582ec !important; + } + + div.callout-note .callout-icon::before { + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAIKADAAQAAAABAAAAIAAAAACshmLzAAAEU0lEQVRYCcVXTWhcVRQ+586kSUMMxkyaElstCto2SIhitS5Ek8xUKV2poatCcVHtUlFQk8mbaaziwpWgglJwVaquitBOfhQXFlqlzSJpFSpIYyXNjBNiTCck7x2/8/LeNDOZxDuEkgOXe++553zfefee+/OYLOXFk3+1LLrRdiO81yNqZ6K9cG0P3MeFaMIQjXssE8Z1JzLO9ls20MBZX7oG8w9GxB0goaPrW5aNMp1yOZIa7Wv6o2ykpLtmAPs/vrG14Z+6d4jpbSKuhdcSyq9wGMPXjonwmESXrriLzFGOdDBLB8Y6MNYBu0dRokSygMA/mrun8MGFN3behm6VVAwg4WR3i6FvYK1T7MHo9BK7ydH+1uurECoouk5MPRyVSBrBHMYwVobG2aOXM07sWrn5qgB60rc6mcwIDJtQrnrEr44kmy+UO9r0u9O5/YbkS9juQckLed3DyW2XV/qWBBB3ptvI8EUY3I9p/67OW+g967TNr3Sotn3IuVlfMLVnsBwH4fsnebJvyGm5GeIUA3jljERmrv49SizPYuq+z7c2H/jlGC+Ghhupn/hcapqmcudB9jwJ/3jvnvu6vu5lVzF1fXyZuZZ7U8nRmVzytvT+H3kilYvH09mLWrQdwFSsFEsxFVs5fK7A0g8gMZjbif4ACpKbjv7gNGaD8bUrlk8x+KRflttr22JEMRUbTUwwDQScyzPgedQHZT0xnx7ujw2jfVfExwYHwOsDTjLdJ2ebmeQIlJ7neo41s/DrsL3kl+W2lWvAga0tR3zueGr6GL78M3ifH0rGXrBC2aAR8uYcIA5gwV8zIE8onoh8u0Fca/ciF7j1uOzEnqcIm59sEXoGc0+z6+H45V1CvAvHcD7THztu669cnp+L0okAeIc6zjbM/24LgGM1gZk7jnRu1aQWoU9sfUOuhrmtaPIO3YY1KLLWZaEO5TKUbMY5zx8W9UJ6elpLwKXbsaZ4EFl7B4bMtDv0iRipKoDQT2sNQI9b1utXFdYisi+wzZ/ri/1m7QfDgEuvgUUEIJPq3DhX/5DWNqIXDOweC2wvIR90Oq3lDpdMIgD2r0dXvGdsEW5H6x6HLRJYU7C69VefO1x8Gde1ZFSJLfWS1jbCnhtOPxmpfv2LXOA2Xk2tvnwKKPFuZ/oRmwBwqRQDcKNeVQkYcOjtWVBuM/JuYw5b6isojIkYxyYAFn5K7ZBF10fea52y8QltAg6jnMqNHFBmGkQ1j+U43HMi2xMar1Nv0zGsf1s8nUsmUtPOOrbFIR8bHFDMB5zL13Gmr/kGlCkUzedTzzmzsaJXhYawnA3UmARpiYj5ooJZiUoxFRtK3X6pgNPv+IZVPcnwbOl6f+aBaO1CNvPW9n9LmCp01nuSaTRF2YxHqZ8DYQT6WsXT+RD6eUztwYLZ8rM+rcPxamv1VQzFUkzFXvkiVrySGQgJNvXHJAxiU3/NwiC03rSf05VBaPtu/Z7/B8Yn/w7eguloAAAAAElFTkSuQmCC'); + } + + div.callout-note.callout-style-default .callout-title { + background-color: #dae6fb + } + + div.callout-important { + border-left-color: #d9534f !important; + } + + div.callout-important .callout-icon::before { + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAIKADAAQAAAABAAAAIAAAAACshmLzAAAEKklEQVRYCcVXTWhcVRS+575MJym48A+hSRFr00ySRQhURRfd2HYjk2SSTokuBCkU2o0LoSKKraKIBTcuFCoidGFD08nkBzdREbpQ1EDNIv8qSGMFUboImMSZd4/f9zJv8ibJMC8xJQfO3HPPPef7zrvvvnvviIkpC9nsw0UttFunbUhpFzFtarSd6WJkStVMw5xyVqYTvkwfzuf/5FgtkVoB0729j1rjXwThS7Vio+Mo6DNnvLfahoZ+i/o32lULuJ3NNiz7q6+pyAUkJaFF6JwaM2lUJlV0MlnQn5aTRbEu0SEqHUa0A4AdiGuB1kFXRfVyg5d87+Dg4DL6m2TLAub60ilj7A1Ec4odSAc8X95sHh7+ZRPCFo6Fnp7HfU/fBng/hi10CjCnWnJjsxvDNxWw0NfV6Rv5GgP3I3jGWXumdTD/3cbEOP2ZbOZp69yniG3FQ9z1jD7bnBu9Fc2tKGC2q+uAJOQHBDRiZX1x36o7fWBs7J9ownbtO+n0/qWkvW7UPIfc37WgT6ZGR++EOJyeQDSb9UB+DZ1G6DdLDzyS+b/kBCYGsYgJbSQHuThGKRcw5xdeQf8YdNHsc6ePXrlSYMBuSIAFTGAtQo+VuALo4BX83N190NWZWbynBjhOHsmNfFWLeL6v+ynsA58zDvvAC8j5PkbOcXCMg2PZFk3q8MjI7WAG/Dp9AwP7jdGBOOQkAvlFUB+irtm16I1Zw9YBcpGTGXYmk3kQIC/Cds55l+iMI3jqhjAuaoe+am2Jw5GT3Nbz3CkE12NavmzN5+erJW7046n/CH1RO/RVa8lBLozXk9uqykkGAyRXLWlLv5jyp4RFsG5vGVzpDLnIjTWgnRy2Rr+tDKvRc7Y8AyZq10jj8DqXdnIRNtFZb+t/ZRtXcDiVnzpqx8mPcDWxgARUqx0W1QB9MeUZiNrV4qP+Ehc+BpNgATsTX8ozYKL2NtFYAHc84fG7ndxUPr+AR/iQSns7uSUufAymwDOb2+NjK27lEFocm/EE2WpyIy/Hi66MWuMKJn8RvxIcj87IM5Vh9663ziW36kR0HNenXuxmfaD8JC7tfKbrhFr7LiZCrMjrzTeGx+PmkosrkNzW94ObzwocJ7A1HokLolY+AvkTiD/q1H0cN48c5EL8Crkttsa/AXQVDmutfyku0E7jShx49XqV3MFK8IryDhYVbj7Sj2P2eBxwcXoe8T8idsKKPRcnZw1b+slFTubwUwhktrfnAt7J++jwQtLZcm3sr9LQrjRzz6cfMv9aLvgmnAGvpoaGLxM4mAEaLV7iAzQ3oU0IvD5x9ix3yF2RAAuYAOO2f7PEFWCXZ4C9Pb2UsgDeVnFSpbFK7/IWu7TPTvBqzbGdCHOJQSxiEjt6IyZmxQyEJHv6xyQsYk//moVFsN2zP6fRImjfq7/n/wFDguUQFNEwugAAAABJRU5ErkJggg=='); + } + + div.callout-important.callout-style-default .callout-title { + background-color: #f7dddc + } + + div.callout-warning { + border-left-color: #f0ad4e !important; + } + + div.callout-warning .callout-icon::before { + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAIKADAAQAAAABAAAAIAAAAACshmLzAAAETklEQVRYCeVWW2gcVRg+58yaTUnizqbipZeX4uWhBEniBaoUX1Ioze52t7sRq6APio9V9MEaoWlVsFasRq0gltaAPuxms8lu0gcviE/FFOstVbSIxgcv6SU7EZqmdc7v9+9mJtNks51NTUH84ed889/PP+cmxP+d5FIbMJmNbpREu4WUkiTtCicKny0l1pIKmBzovF2S+hIJHX8iEu3hZJ5lNZGqyRrGSIQpq15AzF28jgpeY6yk6GVdrfFqdrD6Iw+QlB8g0YS2g7dyQmXM/IDhBhT0UCiRf59lfqmmDvzRt6kByV/m4JjtzuaujMUM2c5Z2d6JdKrRb3K2q6mA+oYVz8JnDdKPmmNthzkAk/lN63sYPgevrguc72aZX/L9C6x09GYyxBgCX4NlvyGUHOKELlm5rXeR1kchuChJt4SSwyddZRXgvwMGvYo4QSlk3/zkHD8UHxwVJA6zjZZqP8v8kK8OWLnIZtLyCAJagYC4rTGW/9Pqj92N/c+LUaAj27movwbi19tk/whRCIE7Q9vyI6yvRpftAKVTdUjOW40X3h5OXsKCdmFcx0xlLJoSuQngnrJe7Kcjm4OMq9FlC7CMmScQANuNvjfP3PjGXDBaUQmbp296S5L4DrpbrHN1T87ZVEZVCzg1FF0Ft+dKrlLukI+/c9ENo+TvlTDbYFvuKPtQ9+l052rXrgKoWkDAFnvh0wTOmYn8R5f4k/jN/fZiCM1tQx9jQQ4ANhqG4hiL0qIFTGViG9DKB7GYzgubnpofgYRwO+DFjh0Zin2m4b/97EDkXkc+f6xYAPX0KK2I/7fUQuwzuwo/L3AkcjugPNixC8cHf0FyPjWlItmLxWw4Ou9YsQCr5fijMGoD/zpdRy95HRysyXA74MWOnscpO4j2y3HAVisw85hX5+AFBRSHt4ShfLFkIMXTqyKFc46xdzQM6XbAi702a7sy04J0+feReMFKp5q9esYLCqAZYw/k14E/xcLLsFElaornTuJB0svMuJINy8xkIYuL+xPAlWRceH6+HX7THJ0djLUom46zREu7tTkxwmf/FdOZ/sh6Q8qvEAiHpm4PJ4a/doJe0gH1t+aHRgCzOvBvJedEK5OFE5jpm4AGP2a8Dxe3gGJ/pAutug9Gp6he92CsSsWBaEcxGx0FHytmIpuqGkOpldqNYQK8cSoXvd+xLxXADw0kf6UkJNFtdo5MOgaLjiQOQHcn+A6h5NuL2s0qsC2LOM75PcF3yr5STuBSAcGG+meA14K/CI21HcS4LBT6tv0QAh8Dr5l93AhZzG5ZJ4VxAqdZUEl9z7WJ4aN+svMvwHHL21UKTd1mqvChH7/Za5xzXBBKrUcB0TQ+Ulgkfbi/H/YT5EptrGzsEK7tR1B7ln9BBwckYfMiuSqklSznIuoIIOM42MQO+QnduCoFCI0bpkzjCjddHPN/F+2Yu+sd9bKNpVwHhbS3LluK/0zgfwD0xYI5dXuzlQAAAABJRU5ErkJggg=='); + } + + div.callout-warning.callout-style-default .callout-title { + background-color: #fcefdc + } + + div.callout-tip { + border-left-color: #02b875 !important; + } + + div.callout-tip .callout-icon::before { + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAIKADAAQAAAABAAAAIAAAAACshmLzAAADr0lEQVRYCe1XTWgTQRj9ZjZV8a9SPIkKgj8I1bMHsUWrqYLVg4Ue6v9BwZOxSYsIerFao7UiUryIqJcqgtpimhbBXoSCVxUFe9CTiogUrUp2Pt+3aUI2u5vdNh4dmMzOzHvvezuz8xNFM0mjnbXaNu1MvFWRXkXEyE6aYOYJpdW4IXuA4r0fo8qqSMDBU0v1HJUgVieAXxzCsdE/YJTdFcVIZQNMyhruOMJKXYFoLfIfIvVIMWdsrd+Rpd86ZmyzzjJmLStqRn0v8lzkb4rVIXvnpScOJuAn2ACC65FkPzEdEy4TPWRLJ2h7z4cArXzzaOdKlbOvKKX25Wl00jSnrwVxAg3o4dRxhO13RBSdNvH0xSARv3adTXbBdTf64IWO2vH0LT+cv4GR1DJt+DUItaQogeBX/chhbTBxEiZ6gftlDNXTrvT7co4ub5A6gp9HIcHvzTa46OS5fBeP87Qm0fQkr4FsYgVQ7Qg+ZayaDg9jhg1GkWj8RG6lkeSacrrHgDaxdoBiZPg+NXV/KifMuB6//JmYH4CntVEHy/keA6x4h4CU5oFy8GzrBS18cLJMXcljAKB6INjWsRcuZBWVaS3GDrqB7rdapVIeA+isQ57Eev9eCqzqOa81CY05VLd6SamW2wA2H3SiTbnbSxmzfp7WtKZkqy4mdyAlGx7ennghYf8voqp9cLSgKdqNfa6RdRsAAkPwRuJZNbpByn+RrJi1RXTwdi8RQF6ymDwGMAtZ6TVE+4uoKh+MYkcLsT0Hk8eAienbiGdjJHZTpmNjlbFJNKDVAp2fJlYju6IreQxQ08UJDNYdoLSl6AadO+fFuCQqVMB1NJwPm69T04Wv5WhfcWyfXQB+wXRs1pt+nCknRa0LVzSA/2B+a9+zQJadb7IyyV24YAxKp2Jqs3emZTuNnKxsah+uabKbMk7CbTgJx/zIgQYErIeTKRQ9yD9wxVof5YolPHqaWo7TD6tJlh7jQnK5z2n3+fGdggIOx2kaa2YI9QWarc5Ce1ipNWMKeSG4DysFF52KBmTNMmn5HqCFkwy34rDg05gDwgH3bBi+sgFhN/e8QvRn8kbamCOhgrZ9GJhFDgfcMHzFb6BAtjKpFhzTjwv1KCVuxHvCbsSiEz4CANnj84cwHdFXAbAOJ4LTSAawGWFn5tDhLMYz6nWeU2wJfIhmIJBefcd/A5FWQWGgrWzyORZ3Q6HuV+Jf0Bj+BTX69fm1zWgK7By1YTXchFDORywnfQ7GpzOo6S+qECrsx2ifVQAAAABJRU5ErkJggg=='); + } + + div.callout-tip.callout-style-default .callout-title { + background-color: #ccf1e3 + } + + div.callout-caution { + border-left-color: #fd7e14 !important; + } + + div.callout-caution .callout-icon::before { + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAIKADAAQAAAABAAAAIAAAAACshmLzAAACV0lEQVRYCdVWzWoUQRCuqp2ICBLJXgITZL1EfQDBW/bkzUMUD7klD+ATSHBEfAIfQO+iXsWDxJsHL96EHAwhgzlkg8nBg25XWb0zIb0zs9muYYWkoKeru+vn664fBqElyZNuyh167NXJ8Ut8McjbmEraKHkd7uAnAFku+VWdb3reSmRV8PKSLfZ0Gjn3a6Xlcq9YGb6tADjn+lUfTXtVmaZ1KwBIvFI11rRXlWlatwIAAv2asaa9mlB9wwygiDX26qaw1yYPzFXg2N1GgG0FMF8Oj+VIx7E/03lHx8UhvYyNZLN7BwSPgekXXLribw7w5/c8EF+DBK5idvDVYtEEwMeYefjjLAdEyQ3M9nfOkgnPTEkYU+sxMq0BxNR6jExrAI31H1rzvLEfRIdgcv1XEdj6QTQAS2wtstEALLG1yEZ3QhH6oDX7ExBSFEkFINXH98NTrme5IOaaA7kIfiu2L8A3qhH9zRbukdCqdsA98TdElyeMe5BI8Rs2xHRIsoTSSVFfCFCWGPn9XHb4cdobRIWABNf0add9jakDjQJpJ1bTXOJXnnRXHRf+dNL1ZV1MBRCXhMbaHqGI1JkKIL7+i8uffuP6wVQAzO7+qVEbF6NbS0LJureYcWXUUhH66nLR5rYmva+2tjRFtojkM2aD76HEGAD3tPtKM309FJg5j/K682ywcWJ3PASCcycH/22u+Bh7Aa0ehM2Fu4z0SAE81HF9RkB21c5bEn4Dzw+/qNOyXr3DCTQDMBOdhi4nAgiFDGCinIa2owCEChUwD8qzd03PG+qdW/4fDzjUMcE1ZpIAAAAASUVORK5CYII='); + } + + div.callout-caution.callout-style-default .callout-title { + background-color: #ffe5d0 + } + + </style> + <style type="text/css"> + .reveal div.sourceCode { + margin: 0; + overflow: auto; + } + .reveal div.hanging-indent { + margin-left: 1em; + text-indent: -1em; + } + .reveal .slide:not(.center) { + height: 100%; + } + .reveal .slide.scrollable { + overflow-y: auto; + } + .reveal .footnotes { + height: 100%; + overflow-y: auto; + } + .reveal .slide .absolute { + position: absolute; + display: block; + } + .reveal .footnotes ol { + counter-reset: ol; + list-style-type: none; + margin-left: 0; + } + .reveal .footnotes ol li:before { + counter-increment: ol; + content: counter(ol) ". "; + } + .reveal .footnotes ol li > p:first-child { + display: inline-block; + } + .reveal .slide ul, + .reveal .slide ol { + margin-bottom: 0.5em; + } + .reveal .slide ul li, + .reveal .slide ol li { + margin-top: 0.4em; + margin-bottom: 0.2em; + } + .reveal .slide ul[role="tablist"] li { + margin-bottom: 0; + } + .reveal .slide ul li > *:first-child, + .reveal .slide ol li > *:first-child { + margin-block-start: 0; + } + .reveal .slide ul li > *:last-child, + .reveal .slide ol li > *:last-child { + margin-block-end: 0; + } + .reveal .slide .columns:nth-child(3) { + margin-block-start: 0.8em; + } + .reveal blockquote { + box-shadow: none; + } + .reveal .tippy-content>* { + margin-top: 0.2em; + margin-bottom: 0.7em; + } + .reveal .tippy-content>*:last-child { + margin-bottom: 0.2em; + } + .reveal .slide > img.stretch.quarto-figure-center, + .reveal .slide > img.r-stretch.quarto-figure-center { + display: block; + margin-left: auto; + margin-right: auto; + } + .reveal .slide > img.stretch.quarto-figure-left, + .reveal .slide > img.r-stretch.quarto-figure-left { + display: block; + margin-left: 0; + margin-right: auto; + } + .reveal .slide > img.stretch.quarto-figure-right, + .reveal .slide > img.r-stretch.quarto-figure-right { + display: block; + margin-left: auto; + margin-right: 0; + } + </style> +</head> +<body class="quarto-light"> + <div class="reveal"> + <div class="slides"> + +<section id="title-slide" class="quarto-title-block center"> + <h1 class="title">Kmer diff</h1> + +<div class="quarto-title-authors"> +<div class="quarto-title-author"> +<div class="quarto-title-author-name"> +laurent modolo +</div> +</div> +</div> + +</section> +<section id="background" class="slide level2"> +<h2>Background</h2> +<p>The Delattre teams studies, <em>Mesorhabditis worms</em>, some species of which present atypical reproduction mechanisms.</p> +<p>In a previous paper: <em>Males as somatic investment in a parthenogenetic nematode</em> <a href="https://doi.org/10.1126/science.aau0099">DOI: 10.1126/science.aau0099</a>, we caracterized contigs of a <em>de novo</em> genome assembly of <em>M. belaris</em> as</p> +<div class="columns"> +<div class="column" style="width:40%;"> +<ul> +<li><span style="color:blue;">Autosomal</span> chromosomes</li> +<li><span style="color:red;">X</span> chromosome</li> +<li><span style="color:green;">Y</span> chromosome</li> +</ul> +</div><div class="column" style="width:60%;"> +<p><img data-src="./img/science_figure.png" width="350"></p> +</div> +</div> +</section> +<section id="goal" class="slide level2"> +<h2>Goal</h2> +<p>From raw sequencing data of male and female individuals, we want to identify <span class="math inline">\(k\)</span>-mers corresponding to :</p> +<ul> +<li><span style="color:blue;">Autosomal</span> chromosomes</li> +<li><span style="color:red;">X</span> chromosome, if present</li> +<li><span style="color:green;">Y</span> chromosome, if present</li> +</ul> +<div style="text-align: center"> +<strong>We can study the chromosomal system without an assembly</strong> +</div> +</section> +<section id="phylogeny" class="slide level2"> +<h2>Phylogeny</h2> + +<img data-src="./img/phylogeny.png" class="r-stretch"></section> +<section id="kmer-diff" class="slide level2"> +<h2>Kmer-diff</h2> +<p>A nextflow pipeline to analyse the <span class="math inline">\(k\)</span>-mer content of fastq files</p> +<ol type="1"> +<li>preprocess the fastq files</li> +<li>count the <span class="math inline">\(k\)</span>-mers of each file</li> +<li>merge the counts to get a table of male and female <span class="math inline">\(k\)</span>-mers counts</li> +<li>test the sexual models</li> +<li>identify the <span style="color:blue;">A</span>,<span style="color:red;">X</span> and <span style="color:green;">Y</span> <span class="math inline">\(k\)</span>-mers</li> +</ol> +</section> +<section id="kmer-diff-1" class="slide level2"> +<h2>Kmer-diff</h2> + +<img data-src="./img/flowchart.png" class="r-stretch"></section> +<section id="preprocessing" class="slide level2"> +<h2>Preprocessing</h2> +<p><strong>preprocess the fastq files</strong></p> +<p>Important for the clustering analysis:</p> +<ul> +<li>subsample to have the same number of reads between male and female</li> +</ul> +<p>Important for the <span class="math inline">\(k\)</span>-mer counting</p> +<ul> +<li>split the fastq files into managable size files (<span class="math inline">\(10ˆ6\)</span> reads per files)</li> +</ul> +</section> +<section id="k-mer-count" class="slide level2"> +<h2><span class="math inline">\(k\)</span>-mer count</h2> +<p><a href="https://github.com/angelovangel/fastkmers">fastqkmer</a></p> +<pre><code>fastkmers -k 12 file.fastq > file.csv</code></pre> +<p>Run a <strong>sliding windows</strong> of size <span class="math inline">\(12\)</span> by step of <span class="math inline">\(1\)</span> along the reads counting all the occurrences of each <span class="math inline">\(k\)</span>-mers</p> +<p>We have the letters: <span class="math inline">\(A,C,T,G\)</span> and <span class="math inline">\(N\)</span></p> +<div style="text-align: center"> +<span class="math inline">\(244,140,625\)</span> possible <span class="math inline">\(k\)</span>-mers +</div> +<p>We split the fastq files into <span class="math inline">\(\sim\)</span> <span class="math inline">\(1400\)</span> subfiles of <span class="math inline">\(10^6\)</span> reads.</p> +</section> +<section id="merging-the-k-mers" class="slide level2"> +<h2>Merging the <span class="math inline">\(k\)</span>-mers</h2> +<p><span class="math inline">\(\sim\)</span> <span class="math inline">\(1400\)</span> splits of <span class="math inline">\(10^6\)</span> reads <span class="math inline">\(\rightarrow\)</span> <span class="math inline">\(1400\)</span> csv files</p> +<div class="columns"> +<div class="column" style="width:50%;"> +<ul> +<li>large number of <span class="math inline">\(k\)</span>-mers</li> +<li>Unordered</li> +<li>not the same <span class="math inline">\(k\)</span>-mers a present in every files</li> +</ul> +<p><a href="https://gitbio.ens-lyon.fr/LBMC/Delattre/mergekmer">mergekmer</a> a small rust programme that build a <strong>sufix-tree</strong> of the <span class="math inline">\(k\)</span>-mer</p> +</div><div class="column" style="width:50%;"> +<p><img data-src="./img/sufixtree_a.png"></p> +</div> +</div> +</section> +<section id="merging-the-k-mers-1" class="slide level2"> +<h2>Merging the <span class="math inline">\(k\)</span>-mers</h2> +<p><a href="https://gitbio.ens-lyon.fr/LBMC/Delattre/mergekmer">mergekmer</a> a small rust programme that build a <strong>sufix-tree</strong> of the <span class="math inline">\(k\)</span>-mer</p> +<div class="columns"> +<div class="column" style="width:50%;"> +<pre><code>merge fastkmers output + +Usage: mergekmer [OPTIONS] --output <OUTPUT> + +Options: + -c, --csv <CSV>... list of csv files + -o, --output <OUTPUT> merged csv file + -c, --collate collate csv file + -h, --help Print help + -V, --version Print version</code></pre> +<p>Each leafs of the tree contains the number of <span class="math inline">\(k\)</span>-mers</p> +<p>The tree traversal is easy to compute with a recursive function</p> +<p><strong>we can merge the counts of a given sex for each specie</strong></p> +</div><div class="column" style="width:50%;"> +<p><img data-src="./img/sufixtree_b.png"></p> +</div> +</div> +</section> +<section id="merging-the-k-mers-2" class="slide level2"> +<h2>Merging the <span class="math inline">\(k\)</span>-mers</h2> +<div class="columns"> +<div class="column" style="width:50%;"> +<pre><code>merge fastkmers output + +Usage: mergekmer [OPTIONS] --output <OUTPUT> + +Options: + -c, --csv <CSV>... list of csv files + -o, --output <OUTPUT> merged csv file + -c, --collate collate csv file + -h, --help Print help + -V, --version Print version</code></pre> +<p>In the <code>--collate</code> version earch leave contain a list of the count of the <span class="math inline">\(k\)</span>-mers in the female or male of a specie</p> +<p><strong>we can fuse the counts of the male and female for each specie</strong></p> +</div><div class="column" style="width:50%;"> +<p><img data-src="./img/sufixtree_c.png"></p> +</div> +</div> +</section> +<section id="test-the-sexual-model" class="slide level2"> +<h2>Test the sexual model</h2> +<p><strong>We have the following possible models</strong></p> +<div class="columns"> +<div class="column" style="width:33%;"> +<ul> +<li><span style="color:red;">X</span><span style="color:green;">Y</span> system</li> +</ul> +<p><img data-src="./img/model_XY.png"></p> +</div><div class="column" style="width:33%;"> +<ul> +<li><span style="color:red;">X</span>O system</li> +</ul> +<p><img data-src="./img/model_XO.png"></p> +</div><div class="column" style="width:33%;"> +<ul> +<li>OO system</li> +</ul> +<p><img data-src="./img/model_OO.png"></p> +</div> +</div> +</section> +<section id="test-the-sexual-model-1" class="slide level2"> +<h2>Test the sexual model</h2> +<div class="columns"> +<div class="column" style="width:33%;"> +<ul> +<li><span style="color:red;">X</span><span style="color:green;">Y</span> system</li> +</ul> +<p><img data-src="./img/clustering_XY_naive.png"></p> +</div><div class="column" style="width:33%;"> +<ul> +<li><span style="color:red;">X</span>O system</li> +</ul> +<p><img data-src="./img/clustering_XO_naive.png"></p> +</div><div class="column" style="width:33%;"> +<ul> +<li>OO system</li> +</ul> +<p><img data-src="./img/clustering_OO_naive.png"></p> +</div> +</div> +<ul> +<li>A cluster with mean male <span class="math inline">\(=\)</span> mean female</li> +<li>A cluster above the diagonale</li> +<li>A cluster below the diagonale</li> +</ul> +</section> +<section id="test-the-sexual-model-2" class="slide level2"> +<h2>Test the sexual model</h2> +<div class="columns"> +<div class="column" style="width:25%;"> +<p><strong>data</strong></p> +<p><img data-src="./img/model_XY.png"></p> +</div><div class="column" style="width:25%;"> +<p><strong>XY model</strong></p> +<p><img data-src="./img/clustering_XY_naive_XY.png"></p> +</div><div class="column" style="width:25%;"> +<p><strong>XO model</strong></p> +<p><img data-src="./img/clustering_XY_naive_XO.png"></p> +</div><div class="column" style="width:25%;"> +<p><strong>OO model</strong></p> +<p><img data-src="./img/clustering_XY_naive_OO.png"></p> +</div> +</div> +<div class="columns"> +<div class="column" style="width:50%;"> +<p>Bayesian information criterion (BIC)</p> +<p><img data-src="./img/clustering_XY_naive_BIC.png"></p> +</div><div class="column" style="width:50%;"> +<p>Loglikelihood</p> +<p><img data-src="./img/clustering_XY_naive_loglik.png"></p> +</div> +</div> +</section> +<section id="identify-the-ax-and-y-k-mers" class="slide level2"> +<h2>identify the <span style="color:blue;">A</span>,<span style="color:red;">X</span> and <span style="color:green;">Y</span> <span class="math inline">\(k\)</span>-mers</h2> +<div class="columns"> +<div class="column" style="width:50%;"> +<p><img data-src="./img/clustering_XY_naive_XY.png"></p> +</div><div class="column" style="width:50%;"> +<ul> +<li>Can be used to compare model</li> +<li>Not sensitive enough</li> +<li>Cannot be used to classify individual <span class="math inline">\(k\)</span>-mers</li> +</ul> +</div> +</div> +</section> +<section id="identify-the-ax-and-y-k-mers-1" class="slide level2"> +<h2>identify the <span style="color:blue;">A</span>,<span style="color:red;">X</span> and <span style="color:green;">Y</span> <span class="math inline">\(k\)</span>-mers</h2> +<div class="columns"> +<div class="column" style="width:75%;"> +<p><img data-src="./img/clustering_XY_bayse_XY.png"></p> +</div><div class="column" style="width:25%;"> +<ul> +<li>Can choose the prior for each cluster (mean and shape)</li> +<li>Can choose the prior for the proportion between <span style="color:blue;">A</span>,<span style="color:red;">X</span> and <span style="color:green;">Y</span></li> +<li>Can choose the weight of each prior compared to the data</li> +</ul> +</div> +</div> +</section> +<section id="identify-the-ax-and-y-k-mers-2" class="slide level2"> +<h2>identify the <span style="color:blue;">A</span>,<span style="color:red;">X</span> and <span style="color:green;">Y</span> <span class="math inline">\(k\)</span>-mers</h2> +<div class="columns"> +<div class="column" style="width:75%;"> +<p><img data-src="./img/clustering_XY_bayse_XO.png"></p> +</div><div class="column" style="width:25%;"> +<ul> +<li>Can choose the prior for each cluster (mean and shape)</li> +<li>Can choose the prior for the proportion between <span style="color:blue;">A</span>,<span style="color:red;">X</span> and <span style="color:green;">Y</span></li> +<li>Can choose the weight of each prior compared to the data</li> +</ul> +</div> +</div> +</section> +<section id="identify-the-ax-and-y-k-mers-3" class="slide level2"> +<h2>identify the <span style="color:blue;">A</span>,<span style="color:red;">X</span> and <span style="color:green;">Y</span> <span class="math inline">\(k\)</span>-mers</h2> +<div class="columns"> +<div class="column" style="width:75%;"> +<p><img data-src="./img/clustering_XO_bayse_XO.png"></p> +</div><div class="column" style="width:25%;"> +<ul> +<li>Can choose the prior for each cluster (mean and shape)</li> +<li>Can choose the prior for the proportion between <span style="color:blue;">A</span>,<span style="color:red;">X</span> and <span style="color:green;">Y</span></li> +<li>Can choose the weight of each prior compared to the data</li> +</ul> +</div> +</div> +</section> +<section id="count-problem" class="slide level2"> +<h2>Count problem</h2> +<div class="columns"> +<div class="column" style="width:75%;"> +<p><img data-src="./img/count_problem.png"></p> +</div><div class="column" style="width:25%;"> +<ul> +<li>The coverage is not the same between the male and the female</li> +</ul> +</div> +</div> +</section> +<section id="kmer-diff-2" class="slide level2"> +<h2>Kmer-diff</h2> +<p>A nextflow pipeline to analyse the <span class="math inline">\(k\)</span>-mer content of fastq files</p> +<ol type="1"> +<li>preprocess the fastq files +<ul> +<li><strong>subsample to have the same number of reads between male and female</strong></li> +</ul></li> +<li>count the <span class="math inline">\(k\)</span>-mers of each file</li> +<li>merge the counts to get a table of male and female <span class="math inline">\(k\)</span>-mers counts</li> +<li>test the sexual models</li> +<li>identify the <span style="color:blue;">A</span>,<span style="color:red;">X</span> and <span style="color:green;">Y</span> <span class="math inline">\(k\)</span>-mers</li> +</ol> +<div class="footer footer-default"> +<p>laurent.modolo@ens-lyon.fr</p> +</div> +</section> + </div> + </div> + + <script>window.backupDefine = window.define; window.define = undefined;</script> + <script src="presentation_files/libs/revealjs/dist/reveal.js"></script> + <!-- reveal.js plugins --> + <script src="presentation_files/libs/revealjs/plugin/quarto-line-highlight/line-highlight.js"></script> + <script src="presentation_files/libs/revealjs/plugin/pdf-export/pdfexport.js"></script> + <script src="presentation_files/libs/revealjs/plugin/reveal-menu/menu.js"></script> + <script src="presentation_files/libs/revealjs/plugin/reveal-menu/quarto-menu.js"></script> + <script src="presentation_files/libs/revealjs/plugin/reveal-pointer/pointer.js"></script> + <script src="presentation_files/libs/revealjs/plugin/quarto-support/support.js"></script> + + + <script src="presentation_files/libs/revealjs/plugin/notes/notes.js"></script> + <script src="presentation_files/libs/revealjs/plugin/search/search.js"></script> + <script src="presentation_files/libs/revealjs/plugin/zoom/zoom.js"></script> + <script src="presentation_files/libs/revealjs/plugin/math/math.js"></script> + <script>window.define = window.backupDefine; window.backupDefine = undefined;</script> + + <script> + + // Full list of configuration options available at: + // https://revealjs.com/config/ + Reveal.initialize({ +'controlsAuto': true, +'previewLinksAuto': false, +'smaller': false, +'pdfSeparateFragments': false, +'autoAnimateEasing': "ease", +'autoAnimateDuration': 1, +'autoAnimateUnmatched': true, +'menu': {"side":"left","useTextContentForMissingTitles":true,"markers":false,"loadIcons":false,"custom":[{"title":"Tools","icon":"<i class=\"fas fa-gear\"></i>","content":"<ul class=\"slide-menu-items\">\n<li class=\"slide-tool-item active\" data-item=\"0\"><a href=\"#\" onclick=\"RevealMenuToolHandlers.fullscreen(event)\"><kbd>f</kbd> Fullscreen</a></li>\n<li class=\"slide-tool-item\" data-item=\"1\"><a href=\"#\" onclick=\"RevealMenuToolHandlers.speakerMode(event)\"><kbd>s</kbd> Speaker View</a></li>\n<li class=\"slide-tool-item\" data-item=\"2\"><a href=\"#\" onclick=\"RevealMenuToolHandlers.overview(event)\"><kbd>o</kbd> Slide Overview</a></li>\n<li class=\"slide-tool-item\" data-item=\"3\"><a href=\"#\" onclick=\"RevealMenuToolHandlers.togglePdfExport(event)\"><kbd>e</kbd> PDF Export Mode</a></li>\n<li class=\"slide-tool-item\" data-item=\"4\"><a href=\"#\" onclick=\"RevealMenuToolHandlers.keyboardHelp(event)\"><kbd>?</kbd> Keyboard Help</a></li>\n</ul>"}],"openButton":true}, +'pointer': {"key":"q","color":"red","pointerSize":16,"alwaysVisible":false}, +'smaller': false, + + // Display controls in the bottom right corner + controls: false, + + // Help the user learn the controls by providing hints, for example by + // bouncing the down arrow when they first encounter a vertical slide + controlsTutorial: false, + + // Determines where controls appear, "edges" or "bottom-right" + controlsLayout: 'edges', + + // Visibility rule for backwards navigation arrows; "faded", "hidden" + // or "visible" + controlsBackArrows: 'faded', + + // Display a presentation progress bar + progress: true, + + // Display the page number of the current slide + slideNumber: 'c/t', + + // 'all', 'print', or 'speaker' + showSlideNumber: 'all', + + // Add the current slide number to the URL hash so that reloading the + // page/copying the URL will return you to the same slide + hash: true, + + // Start with 1 for the hash rather than 0 + hashOneBasedIndex: false, + + // Flags if we should monitor the hash and change slides accordingly + respondToHashChanges: true, + + // Push each slide change to the browser history + history: true, + + // Enable keyboard shortcuts for navigation + keyboard: true, + + // Enable the slide overview mode + overview: true, + + // Disables the default reveal.js slide layout (scaling and centering) + // so that you can use custom CSS layout + disableLayout: false, + + // Vertical centering of slides + center: false, + + // Enables touch navigation on devices with touch input + touch: true, + + // Loop the presentation + loop: false, + + // Change the presentation direction to be RTL + rtl: false, + + // see https://revealjs.com/vertical-slides/#navigation-mode + navigationMode: 'linear', + + // Randomizes the order of slides each time the presentation loads + shuffle: false, + + // Turns fragments on and off globally + fragments: true, + + // Flags whether to include the current fragment in the URL, + // so that reloading brings you to the same fragment position + fragmentInURL: false, + + // Flags if the presentation is running in an embedded mode, + // i.e. contained within a limited portion of the screen + embedded: false, + + // Flags if we should show a help overlay when the questionmark + // key is pressed + help: true, + + // Flags if it should be possible to pause the presentation (blackout) + pause: true, + + // Flags if speaker notes should be visible to all viewers + showNotes: false, + + // Global override for autoplaying embedded media (null/true/false) + autoPlayMedia: null, + + // Global override for preloading lazy-loaded iframes (null/true/false) + preloadIframes: null, + + // Number of milliseconds between automatically proceeding to the + // next slide, disabled when set to 0, this value can be overwritten + // by using a data-autoslide attribute on your slides + autoSlide: 0, + + // Stop auto-sliding after user input + autoSlideStoppable: true, + + // Use this method for navigation when auto-sliding + autoSlideMethod: null, + + // Specify the average time in seconds that you think you will spend + // presenting each slide. This is used to show a pacing timer in the + // speaker view + defaultTiming: null, + + // Enable slide navigation via mouse wheel + mouseWheel: false, + + // The display mode that will be used to show slides + display: 'block', + + // Hide cursor if inactive + hideInactiveCursor: true, + + // Time before the cursor is hidden (in ms) + hideCursorTime: 5000, + + // Opens links in an iframe preview overlay + previewLinks: false, + + // Transition style (none/fade/slide/convex/concave/zoom) + transition: 'none', + + // Transition speed (default/fast/slow) + transitionSpeed: 'default', + + // Transition style for full page slide backgrounds + // (none/fade/slide/convex/concave/zoom) + backgroundTransition: 'none', + + // Number of slides away from the current that are visible + viewDistance: 3, + + // Number of slides away from the current that are visible on mobile + // devices. It is advisable to set this to a lower number than + // viewDistance in order to save resources. + mobileViewDistance: 2, + + // The "normal" size of the presentation, aspect ratio will be preserved + // when the presentation is scaled to fit different resolutions. Can be + // specified using percentage units. + width: 1050, + + height: 700, + + // Factor of the display size that should remain empty around the content + margin: 0.1, + + math: { + mathjax: 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js', + config: 'TeX-AMS_HTML-full', + tex2jax: { + inlineMath: [['\\(','\\)']], + displayMath: [['\\[','\\]']], + balanceBraces: true, + processEscapes: false, + processRefs: true, + processEnvironments: true, + preview: 'TeX', + skipTags: ['script','noscript','style','textarea','pre','code'], + ignoreClass: 'tex2jax_ignore', + processClass: 'tex2jax_process' + }, + }, + + // reveal.js plugins + plugins: [QuartoLineHighlight, PdfExport, RevealMenu, RevealPointer, QuartoSupport, + + RevealMath, + RevealNotes, + RevealSearch, + RevealZoom + ] + }); + </script> + <script id="quarto-html-after-body" type="application/javascript"> + window.document.addEventListener("DOMContentLoaded", function (event) { + const toggleBodyColorMode = (bsSheetEl) => { + const mode = bsSheetEl.getAttribute("data-mode"); + const bodyEl = window.document.querySelector("body"); + if (mode === "dark") { + bodyEl.classList.add("quarto-dark"); + bodyEl.classList.remove("quarto-light"); + } else { + bodyEl.classList.add("quarto-light"); + bodyEl.classList.remove("quarto-dark"); + } + } + const toggleBodyColorPrimary = () => { + const bsSheetEl = window.document.querySelector("link#quarto-bootstrap"); + if (bsSheetEl) { + toggleBodyColorMode(bsSheetEl); + } + } + toggleBodyColorPrimary(); + const tabsets = window.document.querySelectorAll(".panel-tabset-tabby") + tabsets.forEach(function(tabset) { + const tabby = new Tabby('#' + tabset.id); + }); + const isCodeAnnotation = (el) => { + for (const clz of el.classList) { + if (clz.startsWith('code-annotation-')) { + return true; + } + } + return false; + } + const clipboard = new window.ClipboardJS('.code-copy-button', { + text: function(trigger) { + const codeEl = trigger.previousElementSibling.cloneNode(true); + for (const childEl of codeEl.children) { + if (isCodeAnnotation(childEl)) { + childEl.remove(); + } + } + return codeEl.innerText; + } + }); + clipboard.on('success', function(e) { + // button target + const button = e.trigger; + // don't keep focus + button.blur(); + // flash "checked" + button.classList.add('code-copy-button-checked'); + var currentTitle = button.getAttribute("title"); + button.setAttribute("title", "Copied!"); + let tooltip; + if (window.bootstrap) { + button.setAttribute("data-bs-toggle", "tooltip"); + button.setAttribute("data-bs-placement", "left"); + button.setAttribute("data-bs-title", "Copied!"); + tooltip = new bootstrap.Tooltip(button, + { trigger: "manual", + customClass: "code-copy-button-tooltip", + offset: [0, -8]}); + tooltip.show(); + } + setTimeout(function() { + if (tooltip) { + tooltip.hide(); + button.removeAttribute("data-bs-title"); + button.removeAttribute("data-bs-toggle"); + button.removeAttribute("data-bs-placement"); + } + button.setAttribute("title", currentTitle); + button.classList.remove('code-copy-button-checked'); + }, 1000); + // clear code selection + e.clearSelection(); + }); + function tippyHover(el, contentFn) { + const config = { + allowHTML: true, + content: contentFn, + maxWidth: 500, + delay: 100, + arrow: false, + appendTo: function(el) { + return el.closest('section.slide') || el.parentElement; + }, + interactive: true, + interactiveBorder: 10, + theme: 'light-border', + placement: 'bottom-start' + }; + config['offset'] = [0,0]; + config['maxWidth'] = 700; + window.tippy(el, config); + } + const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]'); + for (var i=0; i<noterefs.length; i++) { + const ref = noterefs[i]; + tippyHover(ref, function() { + // use id or data attribute instead here + let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href'); + try { href = new URL(href).hash; } catch {} + const id = href.replace(/^#\/?/, ""); + const note = window.document.getElementById(id); + return note.innerHTML; + }); + } + const findCites = (el) => { + const parentEl = el.parentElement; + if (parentEl) { + const cites = parentEl.dataset.cites; + if (cites) { + return { + el, + cites: cites.split(' ') + }; + } else { + return findCites(el.parentElement) + } + } else { + return undefined; + } + }; + var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]'); + for (var i=0; i<bibliorefs.length; i++) { + const ref = bibliorefs[i]; + const citeInfo = findCites(ref); + if (citeInfo) { + tippyHover(citeInfo.el, function() { + var popup = window.document.createElement('div'); + citeInfo.cites.forEach(function(cite) { + var citeDiv = window.document.createElement('div'); + citeDiv.classList.add('hanging-indent'); + citeDiv.classList.add('csl-entry'); + var biblioDiv = window.document.getElementById('ref-' + cite); + if (biblioDiv) { + citeDiv.innerHTML = biblioDiv.innerHTML; + } + popup.appendChild(citeDiv); + }); + return popup.innerHTML; + }); + } + } + }); + </script> + + +</body></html> \ No newline at end of file